From cfb5b78e0bb79ee510b3fa38502e2d865c489532 Mon Sep 17 00:00:00 2001 From: Alvaro Vega Date: Wed, 4 Sep 2013 18:01:36 +0200 Subject: [PATCH] TIDorbJ 6.5.0 into github --- AUTHORS | 16 + BUGS | 2 + BUILT | 21 + COPYING | 390 +++ CREDITS | 299 ++ ChangeLog | 198 ++ INSTALL | 188 ++ OMG_SPEC | 4 + VERSION | 1 + bin/.svn/all-wcprops | 41 + bin/.svn/entries | 232 ++ bin/.svn/prop-base/printIOR.bat.svn-base | 9 + bin/.svn/prop-base/printIOR.sh.svn-base | 9 + bin/.svn/prop-base/setup_TIDorbJ.bat.svn-base | 9 + bin/.svn/prop-base/setup_TIDorbJ.sh.svn-base | 9 + bin/.svn/prop-base/tidorbj.bat.svn-base | 9 + bin/.svn/prop-base/tidorbj.sh.svn-base | 9 + bin/.svn/text-base/printIOR.bat.svn-base | 9 + bin/.svn/text-base/printIOR.sh.svn-base | 18 + bin/.svn/text-base/setup_TIDorbJ.bat.svn-base | 30 + bin/.svn/text-base/setup_TIDorbJ.sh.svn-base | 31 + bin/.svn/text-base/tidorbj.bat.svn-base | 20 + bin/.svn/text-base/tidorbj.sh.svn-base | 6 + bin/.svn/tmp/setup_TIDorbJ.sh.tmp | 35 + bin/.svn/tmp/tempfile.2.tmp | 31 + bin/.svn/tmp/tempfile.tmp | 31 + bin/printIOR.bat | 9 + bin/printIOR.sh | 18 + bin/setup_TIDorbJ.bat | 30 + bin/setup_TIDorbJ.sh | 31 + bin/setup_TIDorbJ.sh~ | 31 + bin/tidorbj.bat | 20 + bin/tidorbj.sh | 6 + build.xml | 171 ++ build/.cvsignore | 1 + build/.svn/all-wcprops | 29 + build/.svn/dir-prop-base | 5 + build/.svn/entries | 164 ++ build/.svn/prop-base/.cvsignore.svn-base | 9 + build/.svn/prop-base/build.bat.svn-base | 9 + build/.svn/prop-base/build.sh.svn-base | 9 + build/.svn/text-base/.cvsignore.svn-base | 1 + build/.svn/text-base/Makefile.gcj.svn-base | 97 + build/.svn/text-base/build.bat.svn-base | 19 + build/.svn/text-base/build.sh.svn-base | 60 + build/Makefile.gcj | 97 + build/build.bat | 19 + build/build.sh | 60 + dist/AUTHORS | 16 + dist/BUGS | 2 + dist/BUILT | 21 + dist/COPYING | 390 +++ dist/ChangeLog | 198 ++ dist/INSTALL | 188 ++ dist/OMG_SPEC | 4 + dist/VERSION | 1 + dist/bin/printIOR.bat | 9 + dist/bin/printIOR.sh | 18 + dist/bin/setup_TIDorbJ.bat | 30 + dist/bin/setup_TIDorbJ.sh | 31 + dist/bin/tidorbj.bat | 20 + dist/bin/tidorbj.sh | 6 + dist/idl/BiDirPolicy.idl | 23 + dist/idl/CSI.idl | 180 ++ dist/idl/CSIIOP.idl | 116 + dist/idl/Compression.idl | 185 ++ dist/idl/CosNaming.idl | 108 + dist/idl/Dynamic.idl | 19 + dist/idl/DynamicAny.idl | 290 ++ dist/idl/GIOP.idl | 200 ++ dist/idl/IIOP.idl | 37 + dist/idl/IOP.idl | 134 + dist/idl/Messaging.idl | 171 ++ dist/idl/SSLIOP.idl | 20 + dist/idl/Security.idl | 329 +++ dist/idl/SecurityLevel1.idl | 18 + dist/idl/SecurityLevel2.idl | 196 ++ dist/idl/SecurityLevel3.idl | 2041 +++++++++++++ dist/idl/SendingContext.idl | 35 + dist/idl/TimeBase.idl | 42 + dist/idl/ZIOP.idl | 123 + dist/lib/tidorbj.jar | Bin 0 -> 1598012 bytes doc/.cvsignore | 1 + doc/.svn/all-wcprops | 11 + doc/.svn/dir-prop-base | 5 + doc/.svn/entries | 62 + doc/.svn/prop-base/.cvsignore.svn-base | 9 + doc/.svn/text-base/.cvsignore.svn-base | 1 + idl/.svn/all-wcprops | 17 + idl/.svn/entries | 135 + idl/.svn/prop-base/build.xml.svn-base | 9 + idl/.svn/prop-base/properties.xml.svn-base | 9 + idl/.svn/text-base/build.xml.svn-base | 111 + idl/.svn/text-base/properties.xml.svn-base | 73 + .../BIDIRECTIONAL_POLICY_TYPE.class | Bin 0 -> 146 bytes .../.class/org/omg/BiDirPolicy/BOTH.class | Bin 0 -> 125 bytes .../omg/BiDirPolicy/BidirectionalPolicy.class | Bin 0 -> 244 bytes .../BidirectionalPolicyHelper.class | Bin 0 -> 2322 bytes .../BidirectionalPolicyHolder.class | Bin 0 -> 862 bytes .../BidirectionalPolicyOperations.class | Bin 0 -> 161 bytes .../BiDirPolicy/BidirectionalPolicyPOA.class | Bin 0 -> 2473 bytes .../BidirectionalPolicyPOATie.class | Bin 0 -> 1052 bytes .../BidirectionalPolicyValueHelper.class | Bin 0 -> 1787 bytes .../.class/org/omg/BiDirPolicy/NORMAL.class | Bin 0 -> 127 bytes .../_BidirectionalPolicyStub.class | Bin 0 -> 1916 bytes idl/BiDirPolicy/.cvsignore | 2 + .../BIDIRECTIONAL_POLICY_TYPE.java | 12 + .../.java/org/omg/BiDirPolicy/BOTH.java | 12 + .../omg/BiDirPolicy/BidirectionalPolicy.java | 16 + .../BidirectionalPolicyHelper.java | 76 + .../BidirectionalPolicyHolder.java | 33 + .../BidirectionalPolicyOperations.java | 16 + .../BiDirPolicy/BidirectionalPolicyPOA.java | 81 + .../BidirectionalPolicyPOATie.java | 51 + .../BidirectionalPolicyValueHelper.java | 57 + .../.java/org/omg/BiDirPolicy/NORMAL.java | 12 + .../BiDirPolicy/_BidirectionalPolicyStub.java | 78 + idl/BiDirPolicy/.svn/all-wcprops | 23 + idl/BiDirPolicy/.svn/dir-prop-base | 6 + idl/BiDirPolicy/.svn/entries | 130 + .../.svn/prop-base/.cvsignore.svn-base | 9 + .../.svn/prop-base/BiDirPolicy.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../.svn/text-base/BiDirPolicy.idl.svn-base | 23 + .../.svn/text-base/build.xml.svn-base | 79 + idl/BiDirPolicy/BiDirPolicy.idl | 23 + idl/BiDirPolicy/build.xml | 79 + .../org/omg/Compression/BufferHelper.class | Bin 0 -> 1506 bytes .../org/omg/Compression/COMPRESSORID_7X.class | Bin 0 -> 136 bytes .../omg/Compression/COMPRESSORID_BZIP2.class | Bin 0 -> 139 bytes .../omg/Compression/COMPRESSORID_GZIP.class | Bin 0 -> 138 bytes .../omg/Compression/COMPRESSORID_LZMA.class | Bin 0 -> 138 bytes .../omg/Compression/COMPRESSORID_LZOP.class | Bin 0 -> 138 bytes .../omg/Compression/COMPRESSORID_NONE.class | Bin 0 -> 138 bytes .../omg/Compression/COMPRESSORID_PKZIP.class | Bin 0 -> 139 bytes .../omg/Compression/COMPRESSORID_RZIP.class | Bin 0 -> 138 bytes .../omg/Compression/COMPRESSORID_XAR.class | Bin 0 -> 137 bytes .../omg/Compression/COMPRESSORID_ZLIB.class | Bin 0 -> 138 bytes .../Compression/CompressionException.class | Bin 0 -> 679 bytes .../CompressionExceptionHelper.class | Bin 0 -> 2625 bytes .../CompressionExceptionHolder.class | Bin 0 -> 868 bytes .../Compression/CompressionLevelHelper.class | Bin 0 -> 1763 bytes .../omg/Compression/CompressionManager.class | Bin 0 -> 222 bytes .../CompressionManagerHelper.class | Bin 0 -> 2021 bytes .../CompressionManagerHolder.class | Bin 0 -> 856 bytes .../CompressionManagerLocalBase.class | Bin 0 -> 474 bytes .../CompressionManagerLocalTie.class | Bin 0 -> 1127 bytes .../CompressionManagerOperations.class | Bin 0 -> 556 bytes .../Compression/CompressionRatioHelper.class | Bin 0 -> 1760 bytes .../org/omg/Compression/Compressor.class | Bin 0 -> 206 bytes .../omg/Compression/CompressorFactory.class | Bin 0 -> 220 bytes .../Compression/CompressorFactoryHelper.class | Bin 0 -> 2011 bytes .../Compression/CompressorFactoryHolder.class | Bin 0 -> 850 bytes .../CompressorFactoryLocalBase.class | Bin 0 -> 471 bytes .../CompressorFactoryLocalTie.class | Bin 0 -> 640 bytes .../CompressorFactoryOperations.class | Bin 0 -> 192 bytes .../CompressorFactorySeqHelper.class | Bin 0 -> 2336 bytes .../CompressorFactorySeqHolder.class | Bin 0 -> 911 bytes .../omg/Compression/CompressorHelper.class | Bin 0 -> 1941 bytes .../omg/Compression/CompressorHolder.class | Bin 0 -> 808 bytes .../omg/Compression/CompressorIdHelper.class | Bin 0 -> 1751 bytes .../omg/Compression/CompressorIdLevel.class | Bin 0 -> 317 bytes .../Compression/CompressorIdLevelHelper.class | Bin 0 -> 2323 bytes .../Compression/CompressorIdLevelHolder.class | Bin 0 -> 850 bytes .../CompressorIdLevelListHelper.class | Bin 0 -> 2340 bytes .../CompressorIdLevelListHolder.class | Bin 0 -> 913 bytes .../omg/Compression/CompressorLocalBase.class | Bin 0 -> 450 bytes .../omg/Compression/CompressorLocalTie.class | Bin 0 -> 1058 bytes .../Compression/CompressorOperations.class | Bin 0 -> 452 bytes .../FactoryAlreadyRegistered.class | Bin 0 -> 481 bytes .../FactoryAlreadyRegisteredHelper.class | Bin 0 -> 2205 bytes .../FactoryAlreadyRegisteredHolder.class | Bin 0 -> 892 bytes .../omg/Compression/UnknownCompressorId.class | Bin 0 -> 471 bytes .../UnknownCompressorIdHelper.class | Bin 0 -> 2150 bytes .../UnknownCompressorIdHolder.class | Bin 0 -> 862 bytes .../ZIOP/COMPRESSION_ENABLING_POLICY_ID.class | Bin 0 -> 144 bytes .../COMPRESSION_LOW_VALUE_POLICY_ID.class | Bin 0 -> 145 bytes .../COMPRESSION_MIN_RATIO_POLICY_ID.class | Bin 0 -> 145 bytes .../COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.class | Bin 0 -> 148 bytes .../.class/org/omg/ZIOP/CompressedData.class | Bin 0 -> 345 bytes .../org/omg/ZIOP/CompressedDataHelper.class | Bin 0 -> 2515 bytes .../org/omg/ZIOP/CompressedDataHolder.class | Bin 0 -> 790 bytes .../omg/ZIOP/CompressionEnablingPolicy.class | Bin 0 -> 250 bytes .../CompressionEnablingPolicyHelper.class | Bin 0 -> 2028 bytes .../CompressionEnablingPolicyHolder.class | Bin 0 -> 856 bytes .../CompressionEnablingPolicyLocalBase.class | Bin 0 -> 513 bytes .../CompressionEnablingPolicyLocalTie.class | Bin 0 -> 752 bytes .../CompressionEnablingPolicyOperations.class | Bin 0 -> 174 bytes ...CompressionEnablingPolicyValueHelper.class | Bin 0 -> 1796 bytes .../omg/ZIOP/CompressionLowValuePolicy.class | Bin 0 -> 250 bytes .../CompressionLowValuePolicyHelper.class | Bin 0 -> 2023 bytes .../CompressionLowValuePolicyHolder.class | Bin 0 -> 856 bytes .../CompressionLowValuePolicyLocalBase.class | Bin 0 -> 508 bytes .../CompressionLowValuePolicyLocalTie.class | Bin 0 -> 736 bytes .../CompressionLowValuePolicyOperations.class | Bin 0 -> 164 bytes ...CompressionLowValuePolicyValueHelper.class | Bin 0 -> 1781 bytes .../omg/ZIOP/CompressionMinRatioPolicy.class | Bin 0 -> 250 bytes .../CompressionMinRatioPolicyHelper.class | Bin 0 -> 2023 bytes .../CompressionMinRatioPolicyHolder.class | Bin 0 -> 856 bytes .../CompressionMinRatioPolicyLocalBase.class | Bin 0 -> 508 bytes .../CompressionMinRatioPolicyLocalTie.class | Bin 0 -> 738 bytes .../CompressionMinRatioPolicyOperations.class | Bin 0 -> 160 bytes ...CompressionMinRatioPolicyValueHelper.class | Bin 0 -> 1783 bytes .../ZIOP/CompressorIdLevelListPolicy.class | Bin 0 -> 254 bytes .../CompressorIdLevelListPolicyHelper.class | Bin 0 -> 2043 bytes .../CompressorIdLevelListPolicyHolder.class | Bin 0 -> 868 bytes ...CompressorIdLevelListPolicyLocalBase.class | Bin 0 -> 514 bytes .../CompressorIdLevelListPolicyLocalTie.class | Bin 0 -> 798 bytes ...ompressorIdLevelListPolicyOperations.class | Bin 0 -> 210 bytes .../org/omg/Compression/BufferHelper.java | 57 + .../org/omg/Compression/COMPRESSORID_7X.java | 12 + .../omg/Compression/COMPRESSORID_BZIP2.java | 12 + .../omg/Compression/COMPRESSORID_GZIP.java | 12 + .../omg/Compression/COMPRESSORID_LZMA.java | 12 + .../omg/Compression/COMPRESSORID_LZOP.java | 12 + .../omg/Compression/COMPRESSORID_NONE.java | 12 + .../omg/Compression/COMPRESSORID_PKZIP.java | 12 + .../omg/Compression/COMPRESSORID_RZIP.java | 12 + .../org/omg/Compression/COMPRESSORID_XAR.java | 12 + .../omg/Compression/COMPRESSORID_ZLIB.java | 12 + .../omg/Compression/CompressionException.java | 34 + .../CompressionExceptionHelper.java | 65 + .../CompressionExceptionHolder.java | 33 + .../Compression/CompressionLevelHelper.java | 57 + .../omg/Compression/CompressionManager.java | 15 + .../Compression/CompressionManagerHelper.java | 70 + .../Compression/CompressionManagerHolder.java | 33 + .../CompressionManagerLocalBase.java | 20 + .../CompressionManagerLocalTie.java | 58 + .../CompressionManagerOperations.java | 27 + .../Compression/CompressionRatioHelper.java | 57 + .../.java/org/omg/Compression/Compressor.java | 15 + .../omg/Compression/CompressorFactory.java | 15 + .../Compression/CompressorFactoryHelper.java | 70 + .../Compression/CompressorFactoryHolder.java | 33 + .../CompressorFactoryLocalBase.java | 20 + .../CompressorFactoryLocalTie.java | 34 + .../CompressorFactoryOperations.java | 17 + .../CompressorFactorySeqHelper.java | 64 + .../CompressorFactorySeqHolder.java | 34 + .../org/omg/Compression/CompressorHelper.java | 70 + .../org/omg/Compression/CompressorHolder.java | 33 + .../omg/Compression/CompressorIdHelper.java | 57 + .../omg/Compression/CompressorIdLevel.java | 24 + .../Compression/CompressorIdLevelHelper.java | 61 + .../Compression/CompressorIdLevelHolder.java | 33 + .../CompressorIdLevelListHelper.java | 64 + .../CompressorIdLevelListHolder.java | 34 + .../omg/Compression/CompressorLocalBase.java | 20 + .../omg/Compression/CompressorLocalTie.java | 60 + .../omg/Compression/CompressorOperations.java | 29 + .../Compression/FactoryAlreadyRegistered.java | 23 + .../FactoryAlreadyRegisteredHelper.java | 59 + .../FactoryAlreadyRegisteredHolder.java | 33 + .../omg/Compression/UnknownCompressorId.java | 23 + .../UnknownCompressorIdHelper.java | 59 + .../UnknownCompressorIdHolder.java | 33 + .../ZIOP/COMPRESSION_ENABLING_POLICY_ID.java | 12 + .../ZIOP/COMPRESSION_LOW_VALUE_POLICY_ID.java | 12 + .../ZIOP/COMPRESSION_MIN_RATIO_POLICY_ID.java | 12 + .../COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.java | 12 + .../.java/org/omg/ZIOP/CompressedData.java | 26 + .../org/omg/ZIOP/CompressedDataHelper.java | 64 + .../org/omg/ZIOP/CompressedDataHolder.java | 33 + .../omg/ZIOP/CompressionEnablingPolicy.java | 16 + .../ZIOP/CompressionEnablingPolicyHelper.java | 70 + .../ZIOP/CompressionEnablingPolicyHolder.java | 33 + .../CompressionEnablingPolicyLocalBase.java | 21 + .../CompressionEnablingPolicyLocalTie.java | 43 + .../CompressionEnablingPolicyOperations.java | 16 + .../CompressionEnablingPolicyValueHelper.java | 57 + .../omg/ZIOP/CompressionLowValuePolicy.java | 16 + .../ZIOP/CompressionLowValuePolicyHelper.java | 70 + .../ZIOP/CompressionLowValuePolicyHolder.java | 33 + .../CompressionLowValuePolicyLocalBase.java | 21 + .../CompressionLowValuePolicyLocalTie.java | 43 + .../CompressionLowValuePolicyOperations.java | 16 + .../CompressionLowValuePolicyValueHelper.java | 57 + .../omg/ZIOP/CompressionMinRatioPolicy.java | 16 + .../ZIOP/CompressionMinRatioPolicyHelper.java | 70 + .../ZIOP/CompressionMinRatioPolicyHolder.java | 33 + .../CompressionMinRatioPolicyLocalBase.java | 21 + .../CompressionMinRatioPolicyLocalTie.java | 43 + .../CompressionMinRatioPolicyOperations.java | 16 + .../CompressionMinRatioPolicyValueHelper.java | 57 + .../omg/ZIOP/CompressorIdLevelListPolicy.java | 16 + .../CompressorIdLevelListPolicyHelper.java | 70 + .../CompressorIdLevelListPolicyHolder.java | 33 + .../CompressorIdLevelListPolicyLocalBase.java | 21 + .../CompressorIdLevelListPolicyLocalTie.java | 43 + ...CompressorIdLevelListPolicyOperations.java | 16 + idl/Compression/.svn/all-wcprops | 23 + idl/Compression/.svn/dir-prop-base | 7 + idl/Compression/.svn/entries | 130 + .../.svn/text-base/Compression.idl.svn-base | 185 ++ .../.svn/text-base/ZIOP.idl.svn-base | 123 + .../.svn/text-base/build.xml.svn-base | 91 + idl/Compression/Compression.idl | 185 ++ idl/Compression/ZIOP.idl | 123 + idl/Compression/build.xml | 91 + .../.class/org/omg/CosNaming/Binding.class | Bin 0 -> 429 bytes .../org/omg/CosNaming/BindingHelper.class | Bin 0 -> 2372 bytes .../org/omg/CosNaming/BindingHolder.class | Bin 0 -> 778 bytes .../org/omg/CosNaming/BindingIterator.class | Bin 0 -> 204 bytes .../omg/CosNaming/BindingIteratorHelper.class | Bin 0 -> 2258 bytes .../omg/CosNaming/BindingIteratorHolder.class | Bin 0 -> 826 bytes .../CosNaming/BindingIteratorOperations.class | Bin 0 -> 238 bytes .../omg/CosNaming/BindingIteratorPOA.class | Bin 0 -> 3165 bytes .../omg/CosNaming/BindingIteratorPOATie.class | Bin 0 -> 963 bytes .../org/omg/CosNaming/BindingListHelper.class | Bin 0 -> 2174 bytes .../org/omg/CosNaming/BindingListHolder.class | Bin 0 -> 829 bytes .../org/omg/CosNaming/BindingType.class | Bin 0 -> 802 bytes .../org/omg/CosNaming/BindingTypeHelper.class | Bin 0 -> 1939 bytes .../org/omg/CosNaming/BindingTypeHolder.class | Bin 0 -> 802 bytes .../org/omg/CosNaming/IstringHelper.class | Bin 0 -> 1829 bytes .../org/omg/CosNaming/NameComponent.class | Bin 0 -> 356 bytes .../omg/CosNaming/NameComponentHelper.class | Bin 0 -> 2258 bytes .../omg/CosNaming/NameComponentHolder.class | Bin 0 -> 814 bytes .../.class/org/omg/CosNaming/NameHelper.class | Bin 0 -> 2206 bytes .../.class/org/omg/CosNaming/NameHolder.class | Bin 0 -> 845 bytes .../org/omg/CosNaming/NamingContext.class | Bin 0 -> 200 bytes .../org/omg/CosNaming/NamingContextExt.class | Bin 0 -> 245 bytes .../CosNaming/NamingContextExtHelper.class | Bin 0 -> 2269 bytes .../CosNaming/NamingContextExtHolder.class | Bin 0 -> 832 bytes .../NamingContextExtOperations.class | Bin 0 -> 728 bytes .../omg/CosNaming/NamingContextExtPOA.class | Bin 0 -> 8441 bytes .../CosNaming/NamingContextExtPOATie.class | Bin 0 -> 2752 bytes .../AddressHelper.class | Bin 0 -> 1870 bytes .../InvalidAddress.class | Bin 0 -> 505 bytes .../InvalidAddressHelper.class | Bin 0 -> 2308 bytes .../InvalidAddressHolder.class | Bin 0 -> 964 bytes .../StringNameHelper.class | Bin 0 -> 1879 bytes .../URLStringHelper.class | Bin 0 -> 1876 bytes .../omg/CosNaming/NamingContextHelper.class | Bin 0 -> 2236 bytes .../omg/CosNaming/NamingContextHolder.class | Bin 0 -> 814 bytes .../CosNaming/NamingContextOperations.class | Bin 0 -> 1131 bytes .../org/omg/CosNaming/NamingContextPOA.class | Bin 0 -> 6820 bytes .../omg/CosNaming/NamingContextPOATie.class | Bin 0 -> 2121 bytes .../NamingContextPackage/AlreadyBound.class | Bin 0 -> 495 bytes .../AlreadyBoundHelper.class | Bin 0 -> 2256 bytes .../AlreadyBoundHolder.class | Bin 0 -> 934 bytes .../NamingContextPackage/CannotProceed.class | Bin 0 -> 845 bytes .../CannotProceedHelper.class | Bin 0 -> 2966 bytes .../CannotProceedHolder.class | Bin 0 -> 940 bytes .../NamingContextPackage/InvalidName.class | Bin 0 -> 493 bytes .../InvalidNameHelper.class | Bin 0 -> 2245 bytes .../InvalidNameHolder.class | Bin 0 -> 928 bytes .../NamingContextPackage/NotEmpty.class | Bin 0 -> 487 bytes .../NamingContextPackage/NotEmptyHelper.class | Bin 0 -> 2212 bytes .../NamingContextPackage/NotEmptyHolder.class | Bin 0 -> 910 bytes .../NamingContextPackage/NotFound.class | Bin 0 -> 901 bytes .../NamingContextPackage/NotFoundHelper.class | Bin 0 -> 2999 bytes .../NamingContextPackage/NotFoundHolder.class | Bin 0 -> 910 bytes .../NamingContextPackage/NotFoundReason.class | Bin 0 -> 972 bytes .../NotFoundReasonHelper.class | Bin 0 -> 2228 bytes .../NotFoundReasonHolder.class | Bin 0 -> 946 bytes .../omg/CosNaming/_BindingIteratorStub.class | Bin 0 -> 2308 bytes .../omg/CosNaming/_NamingContextExtStub.class | Bin 0 -> 8368 bytes .../omg/CosNaming/_NamingContextStub.class | Bin 0 -> 6624 bytes idl/CosNaming/.cvsignore | 2 + .../.java/org/omg/CosNaming/Binding.java | 24 + .../org/omg/CosNaming/BindingHelper.java | 61 + .../org/omg/CosNaming/BindingHolder.java | 33 + .../org/omg/CosNaming/BindingIterator.java | 15 + .../omg/CosNaming/BindingIteratorHelper.java | 76 + .../omg/CosNaming/BindingIteratorHolder.java | 33 + .../CosNaming/BindingIteratorOperations.java | 19 + .../org/omg/CosNaming/BindingIteratorPOA.java | 85 + .../omg/CosNaming/BindingIteratorPOATie.java | 49 + .../org/omg/CosNaming/BindingListHelper.java | 64 + .../org/omg/CosNaming/BindingListHolder.java | 34 + .../.java/org/omg/CosNaming/BindingType.java | 33 + .../org/omg/CosNaming/BindingTypeHelper.java | 57 + .../org/omg/CosNaming/BindingTypeHolder.java | 33 + .../org/omg/CosNaming/IstringHelper.java | 57 + .../org/omg/CosNaming/NameComponent.java | 26 + .../omg/CosNaming/NameComponentHelper.java | 61 + .../omg/CosNaming/NameComponentHolder.java | 33 + .../.java/org/omg/CosNaming/NameHelper.java | 64 + .../.java/org/omg/CosNaming/NameHolder.java | 34 + .../org/omg/CosNaming/NamingContext.java | 15 + .../org/omg/CosNaming/NamingContextExt.java | 16 + .../omg/CosNaming/NamingContextExtHelper.java | 76 + .../omg/CosNaming/NamingContextExtHolder.java | 33 + .../CosNaming/NamingContextExtOperations.java | 26 + .../omg/CosNaming/NamingContextExtPOA.java | 410 +++ .../omg/CosNaming/NamingContextExtPOATie.java | 134 + .../AddressHelper.java | 57 + .../InvalidAddress.java | 23 + .../InvalidAddressHelper.java | 59 + .../InvalidAddressHolder.java | 33 + .../StringNameHelper.java | 57 + .../URLStringHelper.java | 57 + .../omg/CosNaming/NamingContextHelper.java | 76 + .../omg/CosNaming/NamingContextHolder.java | 33 + .../CosNaming/NamingContextOperations.java | 41 + .../org/omg/CosNaming/NamingContextPOA.java | 308 ++ .../omg/CosNaming/NamingContextPOATie.java | 103 + .../NamingContextPackage/AlreadyBound.java | 23 + .../AlreadyBoundHelper.java | 59 + .../AlreadyBoundHolder.java | 33 + .../NamingContextPackage/CannotProceed.java | 34 + .../CannotProceedHelper.java | 65 + .../CannotProceedHolder.java | 33 + .../NamingContextPackage/InvalidName.java | 23 + .../InvalidNameHelper.java | 59 + .../InvalidNameHolder.java | 33 + .../NamingContextPackage/NotEmpty.java | 23 + .../NamingContextPackage/NotEmptyHelper.java | 59 + .../NamingContextPackage/NotEmptyHolder.java | 33 + .../NamingContextPackage/NotFound.java | 34 + .../NamingContextPackage/NotFoundHelper.java | 65 + .../NamingContextPackage/NotFoundHolder.java | 33 + .../NamingContextPackage/NotFoundReason.java | 36 + .../NotFoundReasonHelper.java | 58 + .../NotFoundReasonHolder.java | 33 + .../omg/CosNaming/_BindingIteratorStub.java | 77 + .../omg/CosNaming/_NamingContextExtStub.java | 426 +++ .../org/omg/CosNaming/_NamingContextStub.java | 310 ++ idl/CosNaming/.svn/all-wcprops | 23 + idl/CosNaming/.svn/dir-prop-base | 6 + idl/CosNaming/.svn/entries | 130 + .../.svn/prop-base/.cvsignore.svn-base | 9 + .../.svn/prop-base/CosNaming.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../.svn/text-base/CosNaming.idl.svn-base | 108 + .../.svn/text-base/build.xml.svn-base | 81 + idl/CosNaming/CosNaming.idl | 108 + idl/CosNaming/build.xml | 81 + .../org/omg/DynamicAny/AnySeqHelper.class | Bin 0 -> 2121 bytes .../org/omg/DynamicAny/AnySeqHolder.class | Bin 0 -> 781 bytes .../.class/org/omg/DynamicAny/DynAny.class | Bin 0 -> 196 bytes .../org/omg/DynamicAny/DynAnyFactory.class | Bin 0 -> 210 bytes .../omg/DynamicAny/DynAnyFactoryHelper.class | Bin 0 -> 1962 bytes .../omg/DynamicAny/DynAnyFactoryHolder.class | Bin 0 -> 820 bytes .../DynamicAny/DynAnyFactoryLocalBase.class | Bin 0 -> 456 bytes .../DynamicAny/DynAnyFactoryLocalTie.class | Bin 0 -> 789 bytes .../DynamicAny/DynAnyFactoryOperations.class | Bin 0 -> 365 bytes .../InconsistentTypeCode.class | Bin 0 -> 513 bytes .../InconsistentTypeCodeHelper.class | Bin 0 -> 2354 bytes .../InconsistentTypeCodeHolder.class | Bin 0 -> 988 bytes .../org/omg/DynamicAny/DynAnyHelper.class | Bin 0 -> 1892 bytes .../org/omg/DynamicAny/DynAnyHolder.class | Bin 0 -> 778 bytes .../org/omg/DynamicAny/DynAnyLocalBase.class | Bin 0 -> 435 bytes .../org/omg/DynamicAny/DynAnyLocalTie.class | Bin 0 -> 6626 bytes .../org/omg/DynamicAny/DynAnyOperations.class | Bin 0 -> 3397 bytes .../DynAnyPackage/InvalidValue.class | Bin 0 -> 483 bytes .../DynAnyPackage/InvalidValueHelper.class | Bin 0 -> 2196 bytes .../DynAnyPackage/InvalidValueHolder.class | Bin 0 -> 898 bytes .../DynAnyPackage/TypeMismatch.class | Bin 0 -> 483 bytes .../DynAnyPackage/TypeMismatchHelper.class | Bin 0 -> 2196 bytes .../DynAnyPackage/TypeMismatchHolder.class | Bin 0 -> 898 bytes .../org/omg/DynamicAny/DynAnySeqHelper.class | Bin 0 -> 2169 bytes .../org/omg/DynamicAny/DynAnySeqHolder.class | Bin 0 -> 827 bytes .../.class/org/omg/DynamicAny/DynArray.class | Bin 0 -> 233 bytes .../org/omg/DynamicAny/DynArrayHelper.class | Bin 0 -> 1912 bytes .../org/omg/DynamicAny/DynArrayHolder.class | Bin 0 -> 790 bytes .../omg/DynamicAny/DynArrayLocalBase.class | Bin 0 -> 485 bytes .../org/omg/DynamicAny/DynArrayLocalTie.class | Bin 0 -> 7048 bytes .../omg/DynamicAny/DynArrayOperations.class | Bin 0 -> 503 bytes .../.class/org/omg/DynamicAny/DynEnum.class | Bin 0 -> 231 bytes .../org/omg/DynamicAny/DynEnumHelper.class | Bin 0 -> 1902 bytes .../org/omg/DynamicAny/DynEnumHolder.class | Bin 0 -> 784 bytes .../org/omg/DynamicAny/DynEnumLocalBase.class | Bin 0 -> 482 bytes .../org/omg/DynamicAny/DynEnumLocalTie.class | Bin 0 -> 6900 bytes .../omg/DynamicAny/DynEnumOperations.class | Bin 0 -> 369 bytes .../.class/org/omg/DynamicAny/DynFixed.class | Bin 0 -> 233 bytes .../org/omg/DynamicAny/DynFixedHelper.class | Bin 0 -> 1912 bytes .../org/omg/DynamicAny/DynFixedHolder.class | Bin 0 -> 790 bytes .../omg/DynamicAny/DynFixedLocalBase.class | Bin 0 -> 485 bytes .../org/omg/DynamicAny/DynFixedLocalTie.class | Bin 0 -> 6791 bytes .../omg/DynamicAny/DynFixedOperations.class | Bin 0 -> 346 bytes .../org/omg/DynamicAny/DynSequence.class | Bin 0 -> 239 bytes .../omg/DynamicAny/DynSequenceHelper.class | Bin 0 -> 1942 bytes .../omg/DynamicAny/DynSequenceHolder.class | Bin 0 -> 808 bytes .../omg/DynamicAny/DynSequenceLocalBase.class | Bin 0 -> 494 bytes .../omg/DynamicAny/DynSequenceLocalTie.class | Bin 0 -> 7195 bytes .../DynamicAny/DynSequenceOperations.class | Bin 0 -> 571 bytes .../.class/org/omg/DynamicAny/DynStruct.class | Bin 0 -> 235 bytes .../org/omg/DynamicAny/DynStructHelper.class | Bin 0 -> 1922 bytes .../org/omg/DynamicAny/DynStructHolder.class | Bin 0 -> 796 bytes .../omg/DynamicAny/DynStructLocalBase.class | Bin 0 -> 488 bytes .../omg/DynamicAny/DynStructLocalTie.class | Bin 0 -> 7283 bytes .../omg/DynamicAny/DynStructOperations.class | Bin 0 -> 680 bytes .../.class/org/omg/DynamicAny/DynUnion.class | Bin 0 -> 233 bytes .../org/omg/DynamicAny/DynUnionHelper.class | Bin 0 -> 1912 bytes .../org/omg/DynamicAny/DynUnionHolder.class | Bin 0 -> 790 bytes .../omg/DynamicAny/DynUnionLocalBase.class | Bin 0 -> 485 bytes .../org/omg/DynamicAny/DynUnionLocalTie.class | Bin 0 -> 7311 bytes .../omg/DynamicAny/DynUnionOperations.class | Bin 0 -> 677 bytes .../.class/org/omg/DynamicAny/DynValue.class | Bin 0 -> 241 bytes .../org/omg/DynamicAny/DynValueCommon.class | Bin 0 -> 245 bytes .../omg/DynamicAny/DynValueCommonHelper.class | Bin 0 -> 1972 bytes .../omg/DynamicAny/DynValueCommonHolder.class | Bin 0 -> 826 bytes .../DynamicAny/DynValueCommonLocalBase.class | Bin 0 -> 503 bytes .../DynamicAny/DynValueCommonLocalTie.class | Bin 0 -> 6851 bytes .../DynamicAny/DynValueCommonOperations.class | Bin 0 -> 213 bytes .../org/omg/DynamicAny/DynValueHelper.class | Bin 0 -> 1912 bytes .../org/omg/DynamicAny/DynValueHolder.class | Bin 0 -> 790 bytes .../omg/DynamicAny/DynValueLocalBase.class | Bin 0 -> 537 bytes .../org/omg/DynamicAny/DynValueLocalTie.class | Bin 0 -> 7454 bytes .../omg/DynamicAny/DynValueOperations.class | Bin 0 -> 687 bytes .../org/omg/DynamicAny/FieldNameHelper.class | Bin 0 -> 1837 bytes .../org/omg/DynamicAny/NameDynAnyPair.class | Bin 0 -> 392 bytes .../omg/DynamicAny/NameDynAnyPairHelper.class | Bin 0 -> 2501 bytes .../omg/DynamicAny/NameDynAnyPairHolder.class | Bin 0 -> 826 bytes .../DynamicAny/NameDynAnyPairSeqHelper.class | Bin 0 -> 2281 bytes .../DynamicAny/NameDynAnyPairSeqHolder.class | Bin 0 -> 883 bytes .../org/omg/DynamicAny/NameValuePair.class | Bin 0 -> 375 bytes .../omg/DynamicAny/NameValuePairHelper.class | Bin 0 -> 2394 bytes .../omg/DynamicAny/NameValuePairHolder.class | Bin 0 -> 820 bytes .../DynamicAny/NameValuePairSeqHelper.class | Bin 0 -> 2267 bytes .../DynamicAny/NameValuePairSeqHolder.class | Bin 0 -> 876 bytes idl/DynamicAny/.cvsignore | 2 + .../org/omg/DynamicAny/AnySeqHelper.java | 64 + .../org/omg/DynamicAny/AnySeqHolder.java | 34 + .../.java/org/omg/DynamicAny/DynAny.java | 15 + .../org/omg/DynamicAny/DynAnyFactory.java | 15 + .../omg/DynamicAny/DynAnyFactoryHelper.java | 70 + .../omg/DynamicAny/DynAnyFactoryHolder.java | 33 + .../DynamicAny/DynAnyFactoryLocalBase.java | 20 + .../omg/DynamicAny/DynAnyFactoryLocalTie.java | 38 + .../DynamicAny/DynAnyFactoryOperations.java | 19 + .../InconsistentTypeCode.java | 23 + .../InconsistentTypeCodeHelper.java | 59 + .../InconsistentTypeCodeHolder.java | 33 + .../org/omg/DynamicAny/DynAnyHelper.java | 70 + .../org/omg/DynamicAny/DynAnyHolder.java | 33 + .../org/omg/DynamicAny/DynAnyLocalBase.java | 20 + .../org/omg/DynamicAny/DynAnyLocalTie.java | 507 ++++ .../org/omg/DynamicAny/DynAnyOperations.java | 232 ++ .../DynAnyPackage/InvalidValue.java | 23 + .../DynAnyPackage/InvalidValueHelper.java | 59 + .../DynAnyPackage/InvalidValueHolder.java | 33 + .../DynAnyPackage/TypeMismatch.java | 23 + .../DynAnyPackage/TypeMismatchHelper.java | 59 + .../DynAnyPackage/TypeMismatchHolder.java | 33 + .../org/omg/DynamicAny/DynAnySeqHelper.java | 64 + .../org/omg/DynamicAny/DynAnySeqHolder.java | 34 + .../.java/org/omg/DynamicAny/DynArray.java | 16 + .../org/omg/DynamicAny/DynArrayHelper.java | 70 + .../org/omg/DynamicAny/DynArrayHolder.java | 33 + .../org/omg/DynamicAny/DynArrayLocalBase.java | 21 + .../org/omg/DynamicAny/DynArrayLocalTie.java | 532 ++++ .../omg/DynamicAny/DynArrayOperations.java | 24 + .../.java/org/omg/DynamicAny/DynEnum.java | 16 + .../org/omg/DynamicAny/DynEnumHelper.java | 70 + .../org/omg/DynamicAny/DynEnumHolder.java | 33 + .../org/omg/DynamicAny/DynEnumLocalBase.java | 21 + .../org/omg/DynamicAny/DynEnumLocalTie.java | 532 ++++ .../org/omg/DynamicAny/DynEnumOperations.java | 24 + .../.java/org/omg/DynamicAny/DynFixed.java | 16 + .../org/omg/DynamicAny/DynFixedHelper.java | 70 + .../org/omg/DynamicAny/DynFixedHolder.java | 33 + .../org/omg/DynamicAny/DynFixedLocalBase.java | 21 + .../org/omg/DynamicAny/DynFixedLocalTie.java | 520 ++++ .../omg/DynamicAny/DynFixedOperations.java | 19 + .../.java/org/omg/DynamicAny/DynSequence.java | 16 + .../org/omg/DynamicAny/DynSequenceHelper.java | 70 + .../org/omg/DynamicAny/DynSequenceHolder.java | 33 + .../omg/DynamicAny/DynSequenceLocalBase.java | 21 + .../omg/DynamicAny/DynSequenceLocalTie.java | 544 ++++ .../omg/DynamicAny/DynSequenceOperations.java | 29 + .../.java/org/omg/DynamicAny/DynStruct.java | 16 + .../org/omg/DynamicAny/DynStructHelper.java | 70 + .../org/omg/DynamicAny/DynStructHolder.java | 33 + .../omg/DynamicAny/DynStructLocalBase.java | 21 + .../org/omg/DynamicAny/DynStructLocalTie.java | 544 ++++ .../omg/DynamicAny/DynStructOperations.java | 30 + .../.java/org/omg/DynamicAny/DynUnion.java | 16 + .../org/omg/DynamicAny/DynUnionHelper.java | 70 + .../org/omg/DynamicAny/DynUnionHolder.java | 33 + .../org/omg/DynamicAny/DynUnionLocalBase.java | 21 + .../org/omg/DynamicAny/DynUnionLocalTie.java | 560 ++++ .../omg/DynamicAny/DynUnionOperations.java | 38 + .../.java/org/omg/DynamicAny/DynValue.java | 16 + .../org/omg/DynamicAny/DynValueCommon.java | 16 + .../omg/DynamicAny/DynValueCommonHelper.java | 70 + .../omg/DynamicAny/DynValueCommonHolder.java | 33 + .../DynamicAny/DynValueCommonLocalBase.java | 21 + .../DynamicAny/DynValueCommonLocalTie.java | 523 ++++ .../DynamicAny/DynValueCommonOperations.java | 20 + .../org/omg/DynamicAny/DynValueHelper.java | 70 + .../org/omg/DynamicAny/DynValueHolder.java | 33 + .../org/omg/DynamicAny/DynValueLocalBase.java | 22 + .../org/omg/DynamicAny/DynValueLocalTie.java | 560 ++++ .../omg/DynamicAny/DynValueOperations.java | 30 + .../org/omg/DynamicAny/FieldNameHelper.java | 57 + .../org/omg/DynamicAny/NameDynAnyPair.java | 25 + .../omg/DynamicAny/NameDynAnyPairHelper.java | 61 + .../omg/DynamicAny/NameDynAnyPairHolder.java | 33 + .../DynamicAny/NameDynAnyPairSeqHelper.java | 64 + .../DynamicAny/NameDynAnyPairSeqHolder.java | 34 + .../org/omg/DynamicAny/NameValuePair.java | 25 + .../omg/DynamicAny/NameValuePairHelper.java | 61 + .../omg/DynamicAny/NameValuePairHolder.java | 33 + .../DynamicAny/NameValuePairSeqHelper.java | 64 + .../DynamicAny/NameValuePairSeqHolder.java | 34 + idl/DynamicAny/.svn/all-wcprops | 23 + idl/DynamicAny/.svn/dir-prop-base | 6 + idl/DynamicAny/.svn/entries | 130 + .../.svn/prop-base/.cvsignore.svn-base | 9 + .../.svn/prop-base/DynamicAny.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../.svn/text-base/DynamicAny.idl.svn-base | 290 ++ .../.svn/text-base/build.xml.svn-base | 80 + idl/DynamicAny/DynamicAny.idl | 290 ++ idl/DynamicAny/build.xml | 80 + .../org/omg/Dynamic/ContextListHelper.class | Bin 0 -> 1617 bytes .../org/omg/Dynamic/ExceptionListHelper.class | Bin 0 -> 2194 bytes .../org/omg/Dynamic/ExceptionListHolder.class | Bin 0 -> 814 bytes .../.class/org/omg/Dynamic/Parameter.class | Bin 0 -> 383 bytes .../org/omg/Dynamic/ParameterHelper.class | Bin 0 -> 2459 bytes .../org/omg/Dynamic/ParameterHolder.class | Bin 0 -> 778 bytes .../org/omg/Dynamic/ParameterListHelper.class | Bin 0 -> 2176 bytes .../org/omg/Dynamic/ParameterListHolder.class | Bin 0 -> 829 bytes .../omg/Dynamic/RequestContextHelper.class | Bin 0 -> 1626 bytes .../omg/Messaging/INVOCATION_POLICIES.class | Bin 0 -> 138 bytes .../omg/Messaging/MAX_HOPS_POLICY_TYPE.class | Bin 0 -> 139 bytes .../Messaging/MarshaledExceptionHelper.class | Bin 0 -> 1528 bytes .../org/omg/Messaging/MaxHopsPolicy.class | Bin 0 -> 236 bytes .../omg/Messaging/MaxHopsPolicyHelper.class | Bin 0 -> 1943 bytes .../omg/Messaging/MaxHopsPolicyHolder.class | Bin 0 -> 814 bytes .../Messaging/MaxHopsPolicyLocalBase.class | Bin 0 -> 482 bytes .../omg/Messaging/MaxHopsPolicyLocalTie.class | Bin 0 -> 699 bytes .../Messaging/MaxHopsPolicyOperations.class | Bin 0 -> 156 bytes .../.class/org/omg/Messaging/NO_REBIND.class | Bin 0 -> 128 bytes .../org/omg/Messaging/NO_RECONNECT.class | Bin 0 -> 131 bytes .../.class/org/omg/Messaging/ORDER_ANY.class | Bin 0 -> 128 bytes .../org/omg/Messaging/ORDER_DEADLINE.class | Bin 0 -> 133 bytes .../org/omg/Messaging/ORDER_PRIORITY.class | Bin 0 -> 133 bytes .../org/omg/Messaging/ORDER_TEMPORAL.class | Bin 0 -> 133 bytes .../org/omg/Messaging/OrderingHelper.class | Bin 0 -> 1735 bytes .../org/omg/Messaging/PolicyValue.class | Bin 0 -> 296 bytes .../org/omg/Messaging/PolicyValueHelper.class | Bin 0 -> 2475 bytes .../org/omg/Messaging/PolicyValueHolder.class | Bin 0 -> 802 bytes .../omg/Messaging/PolicyValueSeqHelper.class | Bin 0 -> 2216 bytes .../omg/Messaging/PolicyValueSeqHolder.class | Bin 0 -> 855 bytes .../org/omg/Messaging/PriorityHelper.class | Bin 0 -> 1732 bytes .../org/omg/Messaging/PriorityRange.class | Bin 0 -> 287 bytes .../omg/Messaging/PriorityRangeHelper.class | Bin 0 -> 2232 bytes .../omg/Messaging/PriorityRangeHolder.class | Bin 0 -> 814 bytes .../Messaging/QUEUE_ORDER_POLICY_TYPE.class | Bin 0 -> 142 bytes .../org/omg/Messaging/QueueOrderPolicy.class | Bin 0 -> 242 bytes .../Messaging/QueueOrderPolicyHelper.class | Bin 0 -> 1973 bytes .../Messaging/QueueOrderPolicyHolder.class | Bin 0 -> 832 bytes .../Messaging/QueueOrderPolicyLocalBase.class | Bin 0 -> 491 bytes .../Messaging/QueueOrderPolicyLocalTie.class | Bin 0 -> 723 bytes .../QueueOrderPolicyOperations.class | Bin 0 -> 165 bytes .../omg/Messaging/REBIND_POLICY_TYPE.class | Bin 0 -> 137 bytes .../RELATIVE_REQ_TIMEOUT_POLICY_TYPE.class | Bin 0 -> 151 bytes .../RELATIVE_RT_TIMEOUT_POLICY_TYPE.class | Bin 0 -> 150 bytes .../REPLY_END_TIME_POLICY_TYPE.class | Bin 0 -> 145 bytes .../REPLY_PRIORITY_POLICY_TYPE.class | Bin 0 -> 145 bytes .../REPLY_START_TIME_POLICY_TYPE.class | Bin 0 -> 147 bytes .../REQUEST_END_TIME_POLICY_TYPE.class | Bin 0 -> 147 bytes .../REQUEST_PRIORITY_POLICY_TYPE.class | Bin 0 -> 147 bytes .../REQUEST_START_TIME_POLICY_TYPE.class | Bin 0 -> 149 bytes .../org/omg/Messaging/ROUTE_FORWARD.class | Bin 0 -> 132 bytes .../.class/org/omg/Messaging/ROUTE_NONE.class | Bin 0 -> 129 bytes .../Messaging/ROUTE_STORE_AND_FORWARD.class | Bin 0 -> 142 bytes .../omg/Messaging/ROUTING_POLICY_TYPE.class | Bin 0 -> 138 bytes .../org/omg/Messaging/RebindModeHelper.class | Bin 0 -> 1738 bytes .../org/omg/Messaging/RebindPolicy.class | Bin 0 -> 234 bytes .../omg/Messaging/RebindPolicyHelper.class | Bin 0 -> 1943 bytes .../omg/Messaging/RebindPolicyHolder.class | Bin 0 -> 808 bytes .../omg/Messaging/RebindPolicyLocalBase.class | Bin 0 -> 489 bytes .../omg/Messaging/RebindPolicyLocalTie.class | Bin 0 -> 696 bytes .../Messaging/RebindPolicyOperations.class | Bin 0 -> 158 bytes .../RelativeRequestTimeoutPolicy.class | Bin 0 -> 266 bytes .../RelativeRequestTimeoutPolicyHelper.class | Bin 0 -> 2093 bytes .../RelativeRequestTimeoutPolicyHolder.class | Bin 0 -> 904 bytes ...elativeRequestTimeoutPolicyLocalBase.class | Bin 0 -> 527 bytes ...RelativeRequestTimeoutPolicyLocalTie.class | Bin 0 -> 796 bytes ...lativeRequestTimeoutPolicyOperations.class | Bin 0 -> 178 bytes .../RelativeRoundtripTimeoutPolicy.class | Bin 0 -> 270 bytes ...RelativeRoundtripTimeoutPolicyHelper.class | Bin 0 -> 2113 bytes ...RelativeRoundtripTimeoutPolicyHolder.class | Bin 0 -> 916 bytes ...ativeRoundtripTimeoutPolicyLocalBase.class | Bin 0 -> 533 bytes ...lativeRoundtripTimeoutPolicyLocalTie.class | Bin 0 -> 808 bytes ...tiveRoundtripTimeoutPolicyOperations.class | Bin 0 -> 180 bytes .../omg/Messaging/ReplyEndTimePolicy.class | Bin 0 -> 246 bytes .../Messaging/ReplyEndTimePolicyHelper.class | Bin 0 -> 1993 bytes .../Messaging/ReplyEndTimePolicyHolder.class | Bin 0 -> 844 bytes .../ReplyEndTimePolicyLocalBase.class | Bin 0 -> 497 bytes .../ReplyEndTimePolicyLocalTie.class | Bin 0 -> 751 bytes .../ReplyEndTimePolicyOperations.class | Bin 0 -> 183 bytes .../org/omg/Messaging/ReplyHandler.class | Bin 0 -> 198 bytes .../omg/Messaging/ReplyHandlerHelper.class | Bin 0 -> 2215 bytes .../omg/Messaging/ReplyHandlerHolder.class | Bin 0 -> 808 bytes .../Messaging/ReplyHandlerOperations.class | Bin 0 -> 92 bytes .../org/omg/Messaging/ReplyHandlerPOA.class | Bin 0 -> 1410 bytes .../omg/Messaging/ReplyHandlerPOATie.class | Bin 0 -> 678 bytes .../omg/Messaging/ReplyPriorityPolicy.class | Bin 0 -> 240 bytes .../Messaging/ReplyPriorityPolicyHelper.class | Bin 0 -> 2302 bytes .../Messaging/ReplyPriorityPolicyHolder.class | Bin 0 -> 850 bytes .../ReplyPriorityPolicyOperations.class | Bin 0 -> 200 bytes .../Messaging/ReplyPriorityPolicyPOA.class | Bin 0 -> 2587 bytes .../Messaging/ReplyPriorityPolicyPOATie.class | Bin 0 -> 1079 bytes .../omg/Messaging/ReplyStartTimePolicy.class | Bin 0 -> 250 bytes .../ReplyStartTimePolicyHelper.class | Bin 0 -> 2023 bytes .../ReplyStartTimePolicyHolder.class | Bin 0 -> 856 bytes .../ReplyStartTimePolicyLocalBase.class | Bin 0 -> 513 bytes .../ReplyStartTimePolicyLocalTie.class | Bin 0 -> 765 bytes .../ReplyStartTimePolicyOperations.class | Bin 0 -> 187 bytes .../omg/Messaging/RequestEndTimePolicy.class | Bin 0 -> 250 bytes .../RequestEndTimePolicyHelper.class | Bin 0 -> 2023 bytes .../RequestEndTimePolicyHolder.class | Bin 0 -> 856 bytes .../RequestEndTimePolicyLocalBase.class | Bin 0 -> 513 bytes .../RequestEndTimePolicyLocalTie.class | Bin 0 -> 763 bytes .../RequestEndTimePolicyOperations.class | Bin 0 -> 185 bytes .../omg/Messaging/RequestPriorityPolicy.class | Bin 0 -> 252 bytes .../RequestPriorityPolicyHelper.class | Bin 0 -> 2033 bytes .../RequestPriorityPolicyHolder.class | Bin 0 -> 862 bytes .../RequestPriorityPolicyLocalBase.class | Bin 0 -> 516 bytes .../RequestPriorityPolicyLocalTie.class | Bin 0 -> 785 bytes .../RequestPriorityPolicyOperations.class | Bin 0 -> 202 bytes .../Messaging/RequestStartTimePolicy.class | Bin 0 -> 254 bytes .../RequestStartTimePolicyHelper.class | Bin 0 -> 2043 bytes .../RequestStartTimePolicyHolder.class | Bin 0 -> 868 bytes .../RequestStartTimePolicyLocalBase.class | Bin 0 -> 519 bytes .../RequestStartTimePolicyLocalTie.class | Bin 0 -> 777 bytes .../RequestStartTimePolicyOperations.class | Bin 0 -> 189 bytes .../org/omg/Messaging/RoutingPolicy.class | Bin 0 -> 236 bytes .../omg/Messaging/RoutingPolicyHelper.class | Bin 0 -> 1943 bytes .../omg/Messaging/RoutingPolicyHolder.class | Bin 0 -> 814 bytes .../Messaging/RoutingPolicyLocalBase.class | Bin 0 -> 482 bytes .../omg/Messaging/RoutingPolicyLocalTie.class | Bin 0 -> 739 bytes .../Messaging/RoutingPolicyOperations.class | Bin 0 -> 196 bytes .../org/omg/Messaging/RoutingTypeHelper.class | Bin 0 -> 1741 bytes .../org/omg/Messaging/RoutingTypeRange.class | Bin 0 -> 290 bytes .../Messaging/RoutingTypeRangeHelper.class | Bin 0 -> 2255 bytes .../Messaging/RoutingTypeRangeHolder.class | Bin 0 -> 832 bytes .../.class/org/omg/Messaging/SYNC_NONE.class | Bin 0 -> 128 bytes .../Messaging/SYNC_SCOPE_POLICY_TYPE.class | Bin 0 -> 141 bytes .../org/omg/Messaging/SYNC_WITH_SERVER.class | Bin 0 -> 135 bytes .../org/omg/Messaging/SYNC_WITH_TARGET.class | Bin 0 -> 135 bytes .../omg/Messaging/SYNC_WITH_TRANSPORT.class | Bin 0 -> 138 bytes .../org/omg/Messaging/SyncScopeHelper.class | Bin 0 -> 1735 bytes .../org/omg/Messaging/SyncScopePolicy.class | Bin 0 -> 240 bytes .../omg/Messaging/SyncScopePolicyHelper.class | Bin 0 -> 1973 bytes .../omg/Messaging/SyncScopePolicyHolder.class | Bin 0 -> 826 bytes .../Messaging/SyncScopePolicyLocalBase.class | Bin 0 -> 498 bytes .../Messaging/SyncScopePolicyLocalTie.class | Bin 0 -> 718 bytes .../Messaging/SyncScopePolicyOperations.class | Bin 0 -> 165 bytes .../org/omg/Messaging/TAG_POLICIES.class | Bin 0 -> 131 bytes .../org/omg/Messaging/TRANSPARENT.class | Bin 0 -> 130 bytes .../org/omg/Messaging/_ExceptionHolder.class | Bin 0 -> 1348 bytes .../Messaging/_ExceptionHolderHelper.class | Bin 0 -> 2417 bytes .../Messaging/_ExceptionHolderHolder.class | Bin 0 -> 832 bytes .../org/omg/Messaging/_ReplyHandlerStub.class | Bin 0 -> 420 bytes .../Messaging/_ReplyPriorityPolicyStub.class | Bin 0 -> 2020 bytes idl/Messaging/.cvsignore | 2 + .../org/omg/Dynamic/ContextListHelper.java | 57 + .../org/omg/Dynamic/ExceptionListHelper.java | 64 + .../org/omg/Dynamic/ExceptionListHolder.java | 34 + .../.java/org/omg/Dynamic/Parameter.java | 24 + .../org/omg/Dynamic/ParameterHelper.java | 61 + .../org/omg/Dynamic/ParameterHolder.java | 33 + .../org/omg/Dynamic/ParameterListHelper.java | 64 + .../org/omg/Dynamic/ParameterListHolder.java | 34 + .../org/omg/Dynamic/RequestContextHelper.java | 57 + .../omg/Messaging/INVOCATION_POLICIES.java | 12 + .../omg/Messaging/MAX_HOPS_POLICY_TYPE.java | 12 + .../Messaging/MarshaledExceptionHelper.java | 57 + .../org/omg/Messaging/MaxHopsPolicy.java | 16 + .../omg/Messaging/MaxHopsPolicyHelper.java | 70 + .../omg/Messaging/MaxHopsPolicyHolder.java | 33 + .../omg/Messaging/MaxHopsPolicyLocalBase.java | 21 + .../omg/Messaging/MaxHopsPolicyLocalTie.java | 43 + .../Messaging/MaxHopsPolicyOperations.java | 16 + .../.java/org/omg/Messaging/NO_REBIND.java | 12 + .../.java/org/omg/Messaging/NO_RECONNECT.java | 12 + .../.java/org/omg/Messaging/ORDER_ANY.java | 12 + .../org/omg/Messaging/ORDER_DEADLINE.java | 12 + .../org/omg/Messaging/ORDER_PRIORITY.java | 12 + .../org/omg/Messaging/ORDER_TEMPORAL.java | 12 + .../org/omg/Messaging/OrderingHelper.java | 57 + .../.java/org/omg/Messaging/PolicyValue.java | 24 + .../org/omg/Messaging/PolicyValueHelper.java | 68 + .../org/omg/Messaging/PolicyValueHolder.java | 33 + .../omg/Messaging/PolicyValueSeqHelper.java | 64 + .../omg/Messaging/PolicyValueSeqHolder.java | 34 + .../org/omg/Messaging/PriorityHelper.java | 57 + .../org/omg/Messaging/PriorityRange.java | 24 + .../omg/Messaging/PriorityRangeHelper.java | 61 + .../omg/Messaging/PriorityRangeHolder.java | 33 + .../Messaging/QUEUE_ORDER_POLICY_TYPE.java | 12 + .../org/omg/Messaging/QueueOrderPolicy.java | 16 + .../omg/Messaging/QueueOrderPolicyHelper.java | 70 + .../omg/Messaging/QueueOrderPolicyHolder.java | 33 + .../Messaging/QueueOrderPolicyLocalBase.java | 21 + .../Messaging/QueueOrderPolicyLocalTie.java | 43 + .../Messaging/QueueOrderPolicyOperations.java | 16 + .../org/omg/Messaging/REBIND_POLICY_TYPE.java | 12 + .../RELATIVE_REQ_TIMEOUT_POLICY_TYPE.java | 12 + .../RELATIVE_RT_TIMEOUT_POLICY_TYPE.java | 12 + .../Messaging/REPLY_END_TIME_POLICY_TYPE.java | 12 + .../Messaging/REPLY_PRIORITY_POLICY_TYPE.java | 12 + .../REPLY_START_TIME_POLICY_TYPE.java | 12 + .../REQUEST_END_TIME_POLICY_TYPE.java | 12 + .../REQUEST_PRIORITY_POLICY_TYPE.java | 12 + .../REQUEST_START_TIME_POLICY_TYPE.java | 12 + .../org/omg/Messaging/ROUTE_FORWARD.java | 12 + .../.java/org/omg/Messaging/ROUTE_NONE.java | 12 + .../Messaging/ROUTE_STORE_AND_FORWARD.java | 12 + .../omg/Messaging/ROUTING_POLICY_TYPE.java | 12 + .../org/omg/Messaging/RebindModeHelper.java | 57 + .../.java/org/omg/Messaging/RebindPolicy.java | 16 + .../org/omg/Messaging/RebindPolicyHelper.java | 70 + .../org/omg/Messaging/RebindPolicyHolder.java | 33 + .../omg/Messaging/RebindPolicyLocalBase.java | 21 + .../omg/Messaging/RebindPolicyLocalTie.java | 43 + .../omg/Messaging/RebindPolicyOperations.java | 16 + .../RelativeRequestTimeoutPolicy.java | 16 + .../RelativeRequestTimeoutPolicyHelper.java | 70 + .../RelativeRequestTimeoutPolicyHolder.java | 33 + ...RelativeRequestTimeoutPolicyLocalBase.java | 21 + .../RelativeRequestTimeoutPolicyLocalTie.java | 43 + ...elativeRequestTimeoutPolicyOperations.java | 16 + .../RelativeRoundtripTimeoutPolicy.java | 16 + .../RelativeRoundtripTimeoutPolicyHelper.java | 70 + .../RelativeRoundtripTimeoutPolicyHolder.java | 33 + ...lativeRoundtripTimeoutPolicyLocalBase.java | 21 + ...elativeRoundtripTimeoutPolicyLocalTie.java | 43 + ...ativeRoundtripTimeoutPolicyOperations.java | 16 + .../org/omg/Messaging/ReplyEndTimePolicy.java | 16 + .../Messaging/ReplyEndTimePolicyHelper.java | 70 + .../Messaging/ReplyEndTimePolicyHolder.java | 33 + .../ReplyEndTimePolicyLocalBase.java | 21 + .../Messaging/ReplyEndTimePolicyLocalTie.java | 43 + .../ReplyEndTimePolicyOperations.java | 16 + .../.java/org/omg/Messaging/ReplyHandler.java | 15 + .../org/omg/Messaging/ReplyHandlerHelper.java | 76 + .../org/omg/Messaging/ReplyHandlerHolder.java | 33 + .../omg/Messaging/ReplyHandlerOperations.java | 13 + .../org/omg/Messaging/ReplyHandlerPOA.java | 43 + .../org/omg/Messaging/ReplyHandlerPOATie.java | 31 + .../omg/Messaging/ReplyPriorityPolicy.java | 16 + .../Messaging/ReplyPriorityPolicyHelper.java | 76 + .../Messaging/ReplyPriorityPolicyHolder.java | 33 + .../ReplyPriorityPolicyOperations.java | 16 + .../omg/Messaging/ReplyPriorityPolicyPOA.java | 81 + .../Messaging/ReplyPriorityPolicyPOATie.java | 51 + .../omg/Messaging/ReplyStartTimePolicy.java | 16 + .../Messaging/ReplyStartTimePolicyHelper.java | 70 + .../Messaging/ReplyStartTimePolicyHolder.java | 33 + .../ReplyStartTimePolicyLocalBase.java | 21 + .../ReplyStartTimePolicyLocalTie.java | 43 + .../ReplyStartTimePolicyOperations.java | 16 + .../omg/Messaging/RequestEndTimePolicy.java | 16 + .../Messaging/RequestEndTimePolicyHelper.java | 70 + .../Messaging/RequestEndTimePolicyHolder.java | 33 + .../RequestEndTimePolicyLocalBase.java | 21 + .../RequestEndTimePolicyLocalTie.java | 43 + .../RequestEndTimePolicyOperations.java | 16 + .../omg/Messaging/RequestPriorityPolicy.java | 16 + .../RequestPriorityPolicyHelper.java | 70 + .../RequestPriorityPolicyHolder.java | 33 + .../RequestPriorityPolicyLocalBase.java | 21 + .../RequestPriorityPolicyLocalTie.java | 43 + .../RequestPriorityPolicyOperations.java | 16 + .../omg/Messaging/RequestStartTimePolicy.java | 16 + .../RequestStartTimePolicyHelper.java | 70 + .../RequestStartTimePolicyHolder.java | 33 + .../RequestStartTimePolicyLocalBase.java | 21 + .../RequestStartTimePolicyLocalTie.java | 43 + .../RequestStartTimePolicyOperations.java | 16 + .../org/omg/Messaging/RoutingPolicy.java | 16 + .../omg/Messaging/RoutingPolicyHelper.java | 70 + .../omg/Messaging/RoutingPolicyHolder.java | 33 + .../omg/Messaging/RoutingPolicyLocalBase.java | 21 + .../omg/Messaging/RoutingPolicyLocalTie.java | 43 + .../Messaging/RoutingPolicyOperations.java | 16 + .../org/omg/Messaging/RoutingTypeHelper.java | 57 + .../org/omg/Messaging/RoutingTypeRange.java | 24 + .../omg/Messaging/RoutingTypeRangeHelper.java | 61 + .../omg/Messaging/RoutingTypeRangeHolder.java | 33 + .../.java/org/omg/Messaging/SYNC_NONE.java | 12 + .../omg/Messaging/SYNC_SCOPE_POLICY_TYPE.java | 12 + .../org/omg/Messaging/SYNC_WITH_SERVER.java | 12 + .../org/omg/Messaging/SYNC_WITH_TARGET.java | 12 + .../omg/Messaging/SYNC_WITH_TRANSPORT.java | 12 + .../org/omg/Messaging/SyncScopeHelper.java | 57 + .../org/omg/Messaging/SyncScopePolicy.java | 16 + .../omg/Messaging/SyncScopePolicyHelper.java | 70 + .../omg/Messaging/SyncScopePolicyHolder.java | 33 + .../Messaging/SyncScopePolicyLocalBase.java | 21 + .../Messaging/SyncScopePolicyLocalTie.java | 43 + .../Messaging/SyncScopePolicyOperations.java | 16 + .../.java/org/omg/Messaging/TAG_POLICIES.java | 12 + .../.java/org/omg/Messaging/TRANSPARENT.java | 12 + .../org/omg/Messaging/_ExceptionHolder.java | 49 + .../omg/Messaging/_ExceptionHolderHelper.java | 62 + .../omg/Messaging/_ExceptionHolderHolder.java | 33 + .../org/omg/Messaging/_ReplyHandlerStub.java | 22 + .../Messaging/_ReplyPriorityPolicyStub.java | 78 + idl/Messaging/.svn/all-wcprops | 29 + idl/Messaging/.svn/dir-prop-base | 6 + idl/Messaging/.svn/entries | 176 ++ .../.svn/prop-base/.cvsignore.svn-base | 9 + .../.svn/prop-base/Dynamic.idl.svn-base | 9 + .../.svn/prop-base/Messaging.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../.svn/text-base/Dynamic.idl.svn-base | 19 + .../.svn/text-base/Messaging.idl.svn-base | 171 ++ .../.svn/text-base/build.xml.svn-base | 95 + idl/Messaging/Dynamic.idl | 19 + idl/Messaging/Messaging.idl | 171 ++ idl/Messaging/build.xml | 95 + idl/Messaging/extra/.svn/all-wcprops | 5 + idl/Messaging/extra/.svn/entries | 31 + idl/Messaging/extra/org/.svn/all-wcprops | 5 + idl/Messaging/extra/org/.svn/entries | 31 + idl/Messaging/extra/org/omg/.svn/all-wcprops | 5 + idl/Messaging/extra/org/omg/.svn/entries | 31 + .../extra/org/omg/Messaging/.svn/all-wcprops | 11 + .../extra/org/omg/Messaging/.svn/entries | 62 + .../text-base/_ExceptionHolder.java.svn-base | 49 + .../org/omg/Messaging/_ExceptionHolder.java | 49 + .../org/omg/CSI/AuthorizationElement.class | Bin 0 -> 307 bytes .../AuthorizationElementContentsHelper.class | Bin 0 -> 2049 bytes .../AuthorizationElementContentsHolder.class | Bin 0 -> 715 bytes .../omg/CSI/AuthorizationElementHelper.class | Bin 0 -> 2431 bytes .../omg/CSI/AuthorizationElementHolder.class | Bin 0 -> 820 bytes .../CSI/AuthorizationElementTypeHelper.class | Bin 0 -> 1766 bytes .../omg/CSI/AuthorizationTokenHelper.class | Bin 0 -> 2254 bytes .../omg/CSI/AuthorizationTokenHolder.class | Bin 0 -> 866 bytes .../omg/CSI/CompleteEstablishContext.class | Bin 0 -> 376 bytes .../CSI/CompleteEstablishContextHelper.class | Bin 0 -> 2645 bytes .../CSI/CompleteEstablishContextHolder.class | Bin 0 -> 844 bytes .../.class/org/omg/CSI/ContextError.class | Bin 0 -> 392 bytes .../org/omg/CSI/ContextErrorHelper.class | Bin 0 -> 2558 bytes .../org/omg/CSI/ContextErrorHolder.class | Bin 0 -> 772 bytes .../.class/org/omg/CSI/ContextIdHelper.class | Bin 0 -> 1734 bytes .../.class/org/omg/CSI/EstablishContext.class | Bin 0 -> 545 bytes .../org/omg/CSI/EstablishContextHelper.class | Bin 0 -> 3022 bytes .../org/omg/CSI/EstablishContextHolder.class | Bin 0 -> 796 bytes .../.class/org/omg/CSI/GSSTokenHelper.class | Bin 0 -> 1969 bytes .../.class/org/omg/CSI/GSSTokenHolder.class | Bin 0 -> 675 bytes .../org/omg/CSI/GSS_NT_Export_Name_OID.class | Bin 0 -> 170 bytes .../omg/CSI/GSS_NT_ExportedNameHelper.class | Bin 0 -> 2013 bytes .../omg/CSI/GSS_NT_ExportedNameHolder.class | Bin 0 -> 697 bytes .../CSI/GSS_NT_ExportedNameListHelper.class | Bin 0 -> 1987 bytes .../CSI/GSS_NT_ExportedNameListHolder.class | Bin 0 -> 718 bytes .../omg/CSI/GSS_NT_Scoped_Username_OID.class | Bin 0 -> 175 bytes .../.class/org/omg/CSI/ITTAbsent.class | Bin 0 -> 122 bytes .../.class/org/omg/CSI/ITTAnonymous.class | Bin 0 -> 125 bytes .../org/omg/CSI/ITTDistinguishedName.class | Bin 0 -> 133 bytes .../.class/org/omg/CSI/ITTPrincipalName.class | Bin 0 -> 129 bytes .../.class/org/omg/CSI/ITTX509CertChain.class | Bin 0 -> 129 bytes .../org/omg/CSI/IdentityExtensionHelper.class | Bin 0 -> 2005 bytes .../org/omg/CSI/IdentityExtensionHolder.class | Bin 0 -> 693 bytes .../.class/org/omg/CSI/IdentityToken.class | Bin 0 -> 1279 bytes .../org/omg/CSI/IdentityTokenHelper.class | Bin 0 -> 3414 bytes .../org/omg/CSI/IdentityTokenHolder.class | Bin 0 -> 778 bytes .../org/omg/CSI/IdentityTokenTypeHelper.class | Bin 0 -> 1745 bytes .../.class/org/omg/CSI/KRB5MechOID.class | Bin 0 -> 166 bytes .../omg/CSI/MTCompleteEstablishContext.class | Bin 0 -> 139 bytes .../.class/org/omg/CSI/MTContextError.class | Bin 0 -> 127 bytes .../org/omg/CSI/MTEstablishContext.class | Bin 0 -> 131 bytes .../org/omg/CSI/MTMessageInContext.class | Bin 0 -> 131 bytes .../.class/org/omg/CSI/MessageInContext.class | Bin 0 -> 314 bytes .../org/omg/CSI/MessageInContextHelper.class | Bin 0 -> 2334 bytes .../org/omg/CSI/MessageInContextHolder.class | Bin 0 -> 796 bytes .../.class/org/omg/CSI/MsgTypeHelper.class | Bin 0 -> 1717 bytes .../.class/org/omg/CSI/OIDHelper.class | Bin 0 -> 1949 bytes .../.class/org/omg/CSI/OIDHolder.class | Bin 0 -> 665 bytes .../.class/org/omg/CSI/OIDListHelper.class | Bin 0 -> 1907 bytes .../.class/org/omg/CSI/OIDListHolder.class | Bin 0 -> 686 bytes .../.class/org/omg/CSI/OMGVMCID.class | Bin 0 -> 121 bytes .../.class/org/omg/CSI/SASContextBody.class | Bin 0 -> 1512 bytes .../org/omg/CSI/SASContextBodyHelper.class | Bin 0 -> 3927 bytes .../org/omg/CSI/SASContextBodyHolder.class | Bin 0 -> 784 bytes .../.class/org/omg/CSI/StringOIDHelper.class | Bin 0 -> 1823 bytes .../.class/org/omg/CSI/UTF8StringHelper.class | Bin 0 -> 1977 bytes .../.class/org/omg/CSI/UTF8StringHolder.class | Bin 0 -> 679 bytes .../omg/CSI/X501DistinguishedNameHelper.class | Bin 0 -> 2021 bytes .../omg/CSI/X501DistinguishedNameHolder.class | Bin 0 -> 701 bytes .../org/omg/CSI/X509AttributeCertChain.class | Bin 0 -> 135 bytes .../omg/CSI/X509CertificateChainHelper.class | Bin 0 -> 2017 bytes .../omg/CSI/X509CertificateChainHolder.class | Bin 0 -> 699 bytes .../.class/org/omg/CSIIOP/AS_ContextSec.class | Bin 0 -> 407 bytes .../org/omg/CSIIOP/AS_ContextSecHelper.class | Bin 0 -> 2570 bytes .../org/omg/CSIIOP/AS_ContextSecHolder.class | Bin 0 -> 796 bytes .../omg/CSIIOP/AssociationOptionsHelper.class | Bin 0 -> 1759 bytes .../org/omg/CSIIOP/CompositeDelegation.class | Bin 0 -> 135 bytes .../org/omg/CSIIOP/CompoundSecMech.class | Bin 0 -> 581 bytes .../omg/CSIIOP/CompoundSecMechHelper.class | Bin 0 -> 3102 bytes .../omg/CSIIOP/CompoundSecMechHolder.class | Bin 0 -> 808 bytes .../org/omg/CSIIOP/CompoundSecMechList.class | Bin 0 -> 374 bytes .../CSIIOP/CompoundSecMechListHelper.class | Bin 0 -> 2548 bytes .../CSIIOP/CompoundSecMechListHolder.class | Bin 0 -> 832 bytes .../CSIIOP/CompoundSecMechanismsHelper.class | Bin 0 -> 2255 bytes .../CSIIOP/CompoundSecMechanismsHolder.class | Bin 0 -> 868 bytes .../org/omg/CSIIOP/Confidentiality.class | Bin 0 -> 131 bytes .../org/omg/CSIIOP/DelegationByClient.class | Bin 0 -> 134 bytes .../org/omg/CSIIOP/DetectMisordering.class | Bin 0 -> 133 bytes .../.class/org/omg/CSIIOP/DetectReplay.class | Bin 0 -> 128 bytes .../omg/CSIIOP/EstablishTrustInClient.class | Bin 0 -> 138 bytes .../omg/CSIIOP/EstablishTrustInTarget.class | Bin 0 -> 138 bytes .../org/omg/CSIIOP/IdentityAssertion.class | Bin 0 -> 133 bytes .../.class/org/omg/CSIIOP/Integrity.class | Bin 0 -> 125 bytes .../.class/org/omg/CSIIOP/NoDelegation.class | Bin 0 -> 128 bytes .../.class/org/omg/CSIIOP/NoProtection.class | Bin 0 -> 128 bytes .../org/omg/CSIIOP/SAS_ContextSec.class | Bin 0 -> 554 bytes .../org/omg/CSIIOP/SAS_ContextSecHelper.class | Bin 0 -> 2981 bytes .../org/omg/CSIIOP/SAS_ContextSecHolder.class | Bin 0 -> 802 bytes .../org/omg/CSIIOP/SCS_GSSExportedName.class | Bin 0 -> 135 bytes .../org/omg/CSIIOP/SCS_GeneralNames.class | Bin 0 -> 132 bytes .../org/omg/CSIIOP/SECIOP_SEC_TRANS.class | Bin 0 -> 499 bytes .../omg/CSIIOP/SECIOP_SEC_TRANSHelper.class | Bin 0 -> 2903 bytes .../omg/CSIIOP/SECIOP_SEC_TRANSHolder.class | Bin 0 -> 814 bytes .../org/omg/CSIIOP/ServiceConfiguration.class | Bin 0 -> 301 bytes .../CSIIOP/ServiceConfigurationHelper.class | Bin 0 -> 2446 bytes .../CSIIOP/ServiceConfigurationHolder.class | Bin 0 -> 838 bytes .../ServiceConfigurationListHelper.class | Bin 0 -> 2317 bytes .../ServiceConfigurationListHolder.class | Bin 0 -> 899 bytes .../ServiceConfigurationSyntaxHelper.class | Bin 0 -> 1778 bytes .../CSIIOP/ServiceSpecificNameHelper.class | Bin 0 -> 2022 bytes .../CSIIOP/ServiceSpecificNameHolder.class | Bin 0 -> 703 bytes .../org/omg/CSIIOP/SimpleDelegation.class | Bin 0 -> 132 bytes .../org/omg/CSIIOP/TAG_SECIOP_SEC_TRANS.class | Bin 0 -> 136 bytes .../org/omg/CSIIOP/TAG_TLS_SEC_TRANS.class | Bin 0 -> 133 bytes .../.class/org/omg/CSIIOP/TLS_SEC_TRANS.class | Bin 0 -> 414 bytes .../org/omg/CSIIOP/TLS_SEC_TRANSHelper.class | Bin 0 -> 2552 bytes .../org/omg/CSIIOP/TLS_SEC_TRANSHolder.class | Bin 0 -> 796 bytes .../org/omg/CSIIOP/TransportAddress.class | Bin 0 -> 344 bytes .../omg/CSIIOP/TransportAddressHelper.class | Bin 0 -> 2361 bytes .../omg/CSIIOP/TransportAddressHolder.class | Bin 0 -> 814 bytes .../CSIIOP/TransportAddressListHelper.class | Bin 0 -> 2261 bytes .../CSIIOP/TransportAddressListHolder.class | Bin 0 -> 871 bytes idl/Security/.class/org/omg/SSLIOP/SSL.class | Bin 0 -> 329 bytes .../.class/org/omg/SSLIOP/SSLHelper.class | Bin 0 -> 2177 bytes .../.class/org/omg/SSLIOP/SSLHolder.class | Bin 0 -> 736 bytes .../org/omg/SSLIOP/TAG_SSL_SEC_TRANS.class | Bin 0 -> 133 bytes .../.class/org/omg/Security/AccessId.class | Bin 0 -> 126 bytes .../org/omg/Security/AccountingId.class | Bin 0 -> 130 bytes .../Security/AssociationOptionsHelper.class | Bin 0 -> 1763 bytes .../org/omg/Security/AssociationStatus.class | Bin 0 -> 941 bytes .../Security/AssociationStatusHelper.class | Bin 0 -> 2042 bytes .../Security/AssociationStatusHolder.class | Bin 0 -> 832 bytes .../omg/Security/AttributeListHelper.class | Bin 0 -> 2219 bytes .../omg/Security/AttributeListHolder.class | Bin 0 -> 851 bytes .../org/omg/Security/AttributeSet.class | Bin 0 -> 130 bytes .../org/omg/Security/AttributeType.class | Bin 0 -> 382 bytes .../omg/Security/AttributeTypeHelper.class | Bin 0 -> 2507 bytes .../omg/Security/AttributeTypeHolder.class | Bin 0 -> 808 bytes .../Security/AttributeTypeListHelper.class | Bin 0 -> 2245 bytes .../Security/AttributeTypeListHolder.class | Bin 0 -> 864 bytes .../.class/org/omg/Security/AuditAll.class | Bin 0 -> 126 bytes .../org/omg/Security/AuditAuthorization.class | Bin 0 -> 136 bytes .../omg/Security/AuditChannelIdHelper.class | Bin 0 -> 1746 bytes .../org/omg/Security/AuditCombinator.class | Bin 0 -> 839 bytes .../omg/Security/AuditCombinatorHelper.class | Bin 0 -> 1990 bytes .../omg/Security/AuditCombinatorHolder.class | Bin 0 -> 820 bytes .../org/omg/Security/AuditEventType.class | Bin 0 -> 375 bytes .../omg/Security/AuditEventTypeHelper.class | Bin 0 -> 2513 bytes .../omg/Security/AuditEventTypeHolder.class | Bin 0 -> 814 bytes .../Security/AuditEventTypeListHelper.class | Bin 0 -> 2259 bytes .../Security/AuditEventTypeListHolder.class | Bin 0 -> 871 bytes .../.class/org/omg/Security/AuditId.class | Bin 0 -> 125 bytes .../org/omg/Security/AuditInvocation.class | Bin 0 -> 133 bytes .../omg/Security/AuditNonRepudiation.class | Bin 0 -> 137 bytes .../omg/Security/AuditObjectCreation.class | Bin 0 -> 137 bytes .../omg/Security/AuditObjectDestruction.class | Bin 0 -> 140 bytes .../org/omg/Security/AuditPolicyChange.class | Bin 0 -> 135 bytes .../org/omg/Security/AuditPrincipalAuth.class | Bin 0 -> 136 bytes .../org/omg/Security/AuditSecEnvChange.class | Bin 0 -> 135 bytes .../org/omg/Security/AuditSessionAuth.class | Bin 0 -> 134 bytes .../Security/AuthenticationMethodHelper.class | Bin 0 -> 1764 bytes .../AuthenticationMethodListHelper.class | Bin 0 -> 1995 bytes .../AuthenticationMethodListHolder.class | Bin 0 -> 717 bytes .../omg/Security/AuthenticationStatus.class | Bin 0 -> 1038 bytes .../Security/AuthenticationStatusHelper.class | Bin 0 -> 2100 bytes .../Security/AuthenticationStatusHolder.class | Bin 0 -> 850 bytes .../.class/org/omg/Security/Capability.class | Bin 0 -> 128 bytes .../org/omg/Security/ChannelBindings.class | Bin 0 -> 457 bytes .../omg/Security/ChannelBindingsHelper.class | Bin 0 -> 2917 bytes .../omg/Security/ChannelBindingsHolder.class | Bin 0 -> 820 bytes .../.class/org/omg/Security/Clearance.class | Bin 0 -> 127 bytes .../CommonInteroperabilityLevel0.class | Bin 0 -> 146 bytes .../CommonInteroperabilityLevel1.class | Bin 0 -> 146 bytes .../CommonInteroperabilityLevel2.class | Bin 0 -> 146 bytes .../omg/Security/CommunicationDirection.class | Bin 0 -> 968 bytes .../CommunicationDirectionHelper.class | Bin 0 -> 2108 bytes .../CommunicationDirectionHolder.class | Bin 0 -> 862 bytes .../omg/Security/CompositeDelegation.class | Bin 0 -> 137 bytes .../org/omg/Security/Confidentiality.class | Bin 0 -> 133 bytes .../Security/DCESecureInteroperability.class | Bin 0 -> 143 bytes .../org/omg/Security/DayOfTheWeek.class | Bin 0 -> 1199 bytes .../org/omg/Security/DayOfTheWeekHelper.class | Bin 0 -> 2032 bytes .../org/omg/Security/DayOfTheWeekHolder.class | Bin 0 -> 802 bytes .../.class/org/omg/Security/DayOfWeek.class | Bin 0 -> 127 bytes .../omg/Security/DelegationDirective.class | Bin 0 -> 829 bytes .../Security/DelegationDirectiveHelper.class | Bin 0 -> 2027 bytes .../Security/DelegationDirectiveHolder.class | Bin 0 -> 844 bytes .../org/omg/Security/DelegationMode.class | Bin 0 -> 994 bytes .../omg/Security/DelegationModeHelper.class | Bin 0 -> 2037 bytes .../omg/Security/DelegationModeHolder.class | Bin 0 -> 814 bytes .../org/omg/Security/DelegationState.class | Bin 0 -> 827 bytes .../omg/Security/DelegationStateHelper.class | Bin 0 -> 1984 bytes .../omg/Security/DelegationStateHolder.class | Bin 0 -> 820 bytes .../org/omg/Security/DetectMisordering.class | Bin 0 -> 135 bytes .../org/omg/Security/DetectReplay.class | Bin 0 -> 130 bytes .../org/omg/Security/EstablishTrust.class | Bin 0 -> 311 bytes .../omg/Security/EstablishTrustHelper.class | Bin 0 -> 2263 bytes .../omg/Security/EstablishTrustHolder.class | Bin 0 -> 814 bytes .../omg/Security/EstablishTrustInClient.class | Bin 0 -> 140 bytes .../omg/Security/EstablishTrustInTarget.class | Bin 0 -> 140 bytes .../org/omg/Security/EventTypeHelper.class | Bin 0 -> 1736 bytes .../org/omg/Security/ExtensibleFamily.class | Bin 0 -> 303 bytes .../omg/Security/ExtensibleFamilyHelper.class | Bin 0 -> 2272 bytes .../omg/Security/ExtensibleFamilyHolder.class | Bin 0 -> 826 bytes .../.class/org/omg/Security/GroupId.class | Bin 0 -> 125 bytes .../.class/org/omg/Security/Initiator.class | Bin 0 -> 127 bytes .../.class/org/omg/Security/Integrity.class | Bin 0 -> 127 bytes .../org/omg/Security/InterfaceName.class | Bin 0 -> 131 bytes .../org/omg/Security/IntervalTHelper.class | Bin 0 -> 1673 bytes .../Security/InvocationCredentialsType.class | Bin 0 -> 991 bytes .../InvocationCredentialsTypeHelper.class | Bin 0 -> 2151 bytes .../InvocationCredentialsTypeHolder.class | Bin 0 -> 880 bytes .../org/omg/Security/MechandOptions.class | Bin 0 -> 362 bytes .../omg/Security/MechandOptionsHelper.class | Bin 0 -> 2377 bytes .../omg/Security/MechandOptionsHolder.class | Bin 0 -> 814 bytes .../Security/MechandOptionsListHelper.class | Bin 0 -> 2259 bytes .../Security/MechandOptionsListHolder.class | Bin 0 -> 871 bytes .../omg/Security/MechanismTypeHelper.class | Bin 0 -> 1845 bytes .../Security/MechanismTypeListHelper.class | Bin 0 -> 2119 bytes .../Security/MechanismTypeListHolder.class | Bin 0 -> 794 bytes .../org/omg/Security/NoDelegation.class | Bin 0 -> 130 bytes .../org/omg/Security/NoProtection.class | Bin 0 -> 130 bytes .../org/omg/Security/NonRepudiation.class | Bin 0 -> 132 bytes .../org/omg/Security/NonRepudiationId.class | Bin 0 -> 134 bytes .../.class/org/omg/Security/OIDHelper.class | Bin 0 -> 1964 bytes .../.class/org/omg/Security/OIDHolder.class | Bin 0 -> 675 bytes .../org/omg/Security/OIDListHelper.class | Bin 0 -> 1927 bytes .../org/omg/Security/OIDListHolder.class | Bin 0 -> 696 bytes .../.class/org/omg/Security/ObjectRef.class | Bin 0 -> 127 bytes .../org/omg/Security/OpaqueBuffer.class | Bin 0 -> 332 bytes .../org/omg/Security/OpaqueBufferHelper.class | Bin 0 -> 2431 bytes .../org/omg/Security/OpaqueBufferHolder.class | Bin 0 -> 802 bytes .../org/omg/Security/OpaqueHelper.class | Bin 0 -> 1976 bytes .../org/omg/Security/OpaqueHolder.class | Bin 0 -> 681 bytes .../.class/org/omg/Security/Operation.class | Bin 0 -> 127 bytes .../omg/Security/OptionsDirectionPair.class | Bin 0 -> 387 bytes .../Security/OptionsDirectionPairHelper.class | Bin 0 -> 2597 bytes .../Security/OptionsDirectionPairHolder.class | Bin 0 -> 850 bytes .../OptionsDirectionPairListHelper.class | Bin 0 -> 2343 bytes .../OptionsDirectionPairListHolder.class | Bin 0 -> 913 bytes .../org/omg/Security/PrimaryGroupId.class | Bin 0 -> 132 bytes .../.class/org/omg/Security/QOP.class | Bin 0 -> 1047 bytes .../.class/org/omg/Security/QOPHelper.class | Bin 0 -> 1926 bytes .../.class/org/omg/Security/QOPHolder.class | Bin 0 -> 748 bytes .../org/omg/Security/ReplaceORBServices.class | Bin 0 -> 136 bytes .../Security/ReplaceSecurityServices.class | Bin 0 -> 141 bytes .../org/omg/Security/RequiresSupports.class | Bin 0 -> 828 bytes .../omg/Security/RequiresSupportsHelper.class | Bin 0 -> 1995 bytes .../omg/Security/RequiresSupportsHolder.class | Bin 0 -> 826 bytes .../.class/org/omg/Security/Right.class | Bin 0 -> 412 bytes .../.class/org/omg/Security/RightHelper.class | Bin 0 -> 2442 bytes .../.class/org/omg/Security/RightHolder.class | Bin 0 -> 760 bytes .../org/omg/Security/RightsCombinator.class | Bin 0 -> 830 bytes .../omg/Security/RightsCombinatorHelper.class | Bin 0 -> 1996 bytes .../omg/Security/RightsCombinatorHolder.class | Bin 0 -> 826 bytes .../org/omg/Security/RightsListHelper.class | Bin 0 -> 2137 bytes .../org/omg/Security/RightsListHolder.class | Bin 0 -> 810 bytes .../.class/org/omg/Security/Role.class | Bin 0 -> 122 bytes .../omg/Security/SecApplicationAccess.class | Bin 0 -> 138 bytes .../omg/Security/SecApplicationAudit.class | Bin 0 -> 137 bytes .../org/omg/Security/SecAttribute.class | Bin 0 -> 412 bytes .../org/omg/Security/SecAttributeHelper.class | Bin 0 -> 2428 bytes .../org/omg/Security/SecAttributeHolder.class | Bin 0 -> 802 bytes .../Security/SecClientInvocationAccess.class | Bin 0 -> 143 bytes .../Security/SecClientInvocationAudit.class | Bin 0 -> 142 bytes .../Security/SecClientSecureInvocation.class | Bin 0 -> 143 bytes .../org/omg/Security/SecDelegation.class | Bin 0 -> 131 bytes .../SecDelegationDirectivePolicy.class | Bin 0 -> 146 bytes .../Security/SecEstablishTrustPolicy.class | Bin 0 -> 141 bytes .../org/omg/Security/SecFeaturePolicy.class | Bin 0 -> 134 bytes .../SecInvocationCredentialsPolicy.class | Bin 0 -> 148 bytes .../omg/Security/SecMechanismsPolicy.class | Bin 0 -> 137 bytes .../org/omg/Security/SecNonRepudiation.class | Bin 0 -> 135 bytes .../org/omg/Security/SecQOPPolicy.class | Bin 0 -> 130 bytes .../Security/SecTargetInvocationAccess.class | Bin 0 -> 143 bytes .../Security/SecTargetInvocationAudit.class | Bin 0 -> 142 bytes .../Security/SecTargetSecureInvocation.class | Bin 0 -> 143 bytes .../org/omg/Security/SecurityAttribute.class | Bin 0 -> 135 bytes .../SecurityAttributeTypeHelper.class | Bin 0 -> 1767 bytes .../omg/Security/SecurityContextState.class | Bin 0 -> 1419 bytes .../Security/SecurityContextStateHelper.class | Bin 0 -> 2226 bytes .../Security/SecurityContextStateHolder.class | Bin 0 -> 850 bytes .../omg/Security/SecurityContextType.class | Bin 0 -> 889 bytes .../Security/SecurityContextTypeHelper.class | Bin 0 -> 2057 bytes .../Security/SecurityContextTypeHolder.class | Bin 0 -> 844 bytes .../org/omg/Security/SecurityFeature.class | Bin 0 -> 1808 bytes .../omg/Security/SecurityFeatureHelper.class | Bin 0 -> 2284 bytes .../omg/Security/SecurityFeatureHolder.class | Bin 0 -> 820 bytes .../org/omg/Security/SecurityLevel1.class | Bin 0 -> 132 bytes .../org/omg/Security/SecurityLevel2.class | Bin 0 -> 132 bytes .../omg/Security/SecurityMechanismType.class | Bin 0 -> 139 bytes .../org/omg/Security/SecurityNameHelper.class | Bin 0 -> 1842 bytes .../Security/SecurityORBServiceReady.class | Bin 0 -> 141 bytes .../omg/Security/SecurityServiceReady.class | Bin 0 -> 138 bytes .../org/omg/Security/SelectorTypeHelper.class | Bin 0 -> 1740 bytes .../org/omg/Security/SelectorValue.class | Bin 0 -> 333 bytes .../omg/Security/SelectorValueHelper.class | Bin 0 -> 2354 bytes .../omg/Security/SelectorValueHolder.class | Bin 0 -> 808 bytes .../Security/SelectorValueListHelper.class | Bin 0 -> 2245 bytes .../Security/SelectorValueListHolder.class | Bin 0 -> 864 bytes .../org/omg/Security/SimpleDelegation.class | Bin 0 -> 134 bytes .../StandardSecureInteroperability.class | Bin 0 -> 148 bytes .../org/omg/Security/SuccessFailure.class | Bin 0 -> 132 bytes .../.class/org/omg/Security/Time.class | Bin 0 -> 122 bytes .../.class/org/omg/Security/TimeTHelper.class | Bin 0 -> 1732 bytes .../.class/org/omg/Security/UtcTHelper.class | Bin 0 -> 1618 bytes .../.class/org/omg/Security/_Public.class | Bin 0 -> 125 bytes .../org/omg/SecurityLevel1/Current.class | Bin 0 -> 235 bytes .../omg/SecurityLevel1/CurrentHelper.class | Bin 0 -> 1938 bytes .../omg/SecurityLevel1/CurrentHolder.class | Bin 0 -> 808 bytes .../omg/SecurityLevel1/CurrentLocalBase.class | Bin 0 -> 490 bytes .../omg/SecurityLevel1/CurrentLocalTie.class | Bin 0 -> 562 bytes .../SecurityLevel1/CurrentOperations.class | Bin 0 -> 226 bytes .../omg/SecurityLevel2/AccessDecision.class | Bin 0 -> 220 bytes .../SecurityLevel2/AccessDecisionHelper.class | Bin 0 -> 2008 bytes .../SecurityLevel2/AccessDecisionHolder.class | Bin 0 -> 850 bytes .../AccessDecisionLocalBase.class | Bin 0 -> 471 bytes .../AccessDecisionLocalTie.class | Bin 0 -> 639 bytes .../AccessDecisionOperations.class | Bin 0 -> 225 bytes .../org/omg/SecurityLevel2/AuditChannel.class | Bin 0 -> 216 bytes .../SecurityLevel2/AuditChannelHelper.class | Bin 0 -> 1988 bytes .../SecurityLevel2/AuditChannelHolder.class | Bin 0 -> 838 bytes .../AuditChannelLocalBase.class | Bin 0 -> 465 bytes .../SecurityLevel2/AuditChannelLocalTie.class | Bin 0 -> 747 bytes .../AuditChannelOperations.class | Bin 0 -> 303 bytes .../omg/SecurityLevel2/AuditDecision.class | Bin 0 -> 218 bytes .../SecurityLevel2/AuditDecisionHelper.class | Bin 0 -> 1998 bytes .../SecurityLevel2/AuditDecisionHolder.class | Bin 0 -> 844 bytes .../AuditDecisionLocalBase.class | Bin 0 -> 468 bytes .../AuditDecisionLocalTie.class | Bin 0 -> 703 bytes .../AuditDecisionOperations.class | Bin 0 -> 259 bytes .../org/omg/SecurityLevel2/Credentials.class | Bin 0 -> 214 bytes .../SecurityLevel2/CredentialsHelper.class | Bin 0 -> 1978 bytes .../SecurityLevel2/CredentialsHolder.class | Bin 0 -> 832 bytes .../CredentialsListHelper.class | Bin 0 -> 2295 bytes .../CredentialsListHolder.class | Bin 0 -> 892 bytes .../SecurityLevel2/CredentialsLocalBase.class | Bin 0 -> 462 bytes .../SecurityLevel2/CredentialsLocalTie.class | Bin 0 -> 2017 bytes .../CredentialsOperations.class | Bin 0 -> 972 bytes .../org/omg/SecurityLevel2/Current.class | Bin 0 -> 244 bytes .../omg/SecurityLevel2/CurrentHelper.class | Bin 0 -> 1938 bytes .../omg/SecurityLevel2/CurrentHolder.class | Bin 0 -> 808 bytes .../omg/SecurityLevel2/CurrentLocalBase.class | Bin 0 -> 539 bytes .../omg/SecurityLevel2/CurrentLocalTie.class | Bin 0 -> 680 bytes .../SecurityLevel2/CurrentOperations.class | Bin 0 -> 220 bytes .../DelegationDirectivePolicy.class | Bin 0 -> 270 bytes .../DelegationDirectivePolicyHelper.class | Bin 0 -> 2118 bytes .../DelegationDirectivePolicyHolder.class | Bin 0 -> 916 bytes .../DelegationDirectivePolicyLocalBase.class | Bin 0 -> 543 bytes .../DelegationDirectivePolicyLocalTie.class | Bin 0 -> 850 bytes .../DelegationDirectivePolicyOperations.class | Bin 0 -> 222 bytes .../SecurityLevel2/EstablishTrustPolicy.class | Bin 0 -> 260 bytes .../EstablishTrustPolicyHelper.class | Bin 0 -> 2068 bytes .../EstablishTrustPolicyHolder.class | Bin 0 -> 886 bytes .../EstablishTrustPolicyLocalBase.class | Bin 0 -> 528 bytes .../EstablishTrustPolicyLocalTie.class | Bin 0 -> 800 bytes .../EstablishTrustPolicyOperations.class | Bin 0 -> 197 bytes .../InvocationCredentialsPolicy.class | Bin 0 -> 274 bytes .../InvocationCredentialsPolicyHelper.class | Bin 0 -> 2138 bytes .../InvocationCredentialsPolicyHolder.class | Bin 0 -> 928 bytes ...InvocationCredentialsPolicyLocalBase.class | Bin 0 -> 549 bytes .../InvocationCredentialsPolicyLocalTie.class | Bin 0 -> 846 bytes ...nvocationCredentialsPolicyOperations.class | Bin 0 -> 208 bytes .../omg/SecurityLevel2/MechanismPolicy.class | Bin 0 -> 250 bytes .../MechanismPolicyHelper.class | Bin 0 -> 2018 bytes .../MechanismPolicyHolder.class | Bin 0 -> 856 bytes .../MechanismPolicyLocalBase.class | Bin 0 -> 513 bytes .../MechanismPolicyLocalTie.class | Bin 0 -> 761 bytes .../MechanismPolicyOperations.class | Bin 0 -> 183 bytes .../PrincipalAuthenticator.class | Bin 0 -> 236 bytes .../PrincipalAuthenticatorHelper.class | Bin 0 -> 2088 bytes .../PrincipalAuthenticatorHolder.class | Bin 0 -> 898 bytes .../PrincipalAuthenticatorLocalBase.class | Bin 0 -> 495 bytes .../PrincipalAuthenticatorLocalTie.class | Bin 0 -> 1145 bytes .../PrincipalAuthenticatorOperations.class | Bin 0 -> 601 bytes .../org/omg/SecurityLevel2/QOPPolicy.class | Bin 0 -> 238 bytes .../omg/SecurityLevel2/QOPPolicyHelper.class | Bin 0 -> 1958 bytes .../omg/SecurityLevel2/QOPPolicyHolder.class | Bin 0 -> 820 bytes .../SecurityLevel2/QOPPolicyLocalBase.class | Bin 0 -> 495 bytes .../SecurityLevel2/QOPPolicyLocalTie.class | Bin 0 -> 721 bytes .../SecurityLevel2/QOPPolicyOperations.class | Bin 0 -> 173 bytes .../SecurityLevel2/ReceivedCredentials.class | Bin 0 -> 272 bytes .../ReceivedCredentialsHelper.class | Bin 0 -> 2058 bytes .../ReceivedCredentialsHolder.class | Bin 0 -> 880 bytes .../ReceivedCredentialsLocalBase.class | Bin 0 -> 539 bytes .../ReceivedCredentialsLocalTie.class | Bin 0 -> 2414 bytes .../ReceivedCredentialsOperations.class | Bin 0 -> 400 bytes .../omg/SecurityLevel2/RequiredRights.class | Bin 0 -> 212 bytes .../SecurityLevel2/RequiredRightsHelper.class | Bin 0 -> 2297 bytes .../SecurityLevel2/RequiredRightsHolder.class | Bin 0 -> 850 bytes .../RequiredRightsOperations.class | Bin 0 -> 401 bytes .../SecurityLevel2/RequiredRightsPOA.class | Bin 0 -> 3696 bytes .../SecurityLevel2/RequiredRightsPOATie.class | Bin 0 -> 1127 bytes .../omg/SecurityLevel2/SecurityManager.class | Bin 0 -> 222 bytes .../SecurityManagerHelper.class | Bin 0 -> 2018 bytes .../SecurityManagerHolder.class | Bin 0 -> 856 bytes .../SecurityManagerLocalBase.class | Bin 0 -> 474 bytes .../SecurityManagerLocalTie.class | Bin 0 -> 1495 bytes .../SecurityManagerOperations.class | Bin 0 -> 774 bytes .../SecurityLevel2/TargetCredentials.class | Bin 0 -> 268 bytes .../TargetCredentialsHelper.class | Bin 0 -> 2038 bytes .../TargetCredentialsHolder.class | Bin 0 -> 868 bytes .../TargetCredentialsLocalBase.class | Bin 0 -> 533 bytes .../TargetCredentialsLocalTie.class | Bin 0 -> 2197 bytes .../TargetCredentialsOperations.class | Bin 0 -> 269 bytes .../SecurityLevel2/_RequiredRightsStub.class | Bin 0 -> 2543 bytes .../org/omg/CSI/AuthorizationElement.java | 24 + .../AuthorizationElementContentsHelper.java | 64 + .../AuthorizationElementContentsHolder.java | 34 + .../omg/CSI/AuthorizationElementHelper.java | 61 + .../omg/CSI/AuthorizationElementHolder.java | 33 + .../CSI/AuthorizationElementTypeHelper.java | 57 + .../org/omg/CSI/AuthorizationTokenHelper.java | 64 + .../org/omg/CSI/AuthorizationTokenHolder.java | 34 + .../org/omg/CSI/CompleteEstablishContext.java | 26 + .../CSI/CompleteEstablishContextHelper.java | 64 + .../CSI/CompleteEstablishContextHolder.java | 33 + .../.java/org/omg/CSI/ContextError.java | 28 + .../.java/org/omg/CSI/ContextErrorHelper.java | 67 + .../.java/org/omg/CSI/ContextErrorHolder.java | 33 + .../.java/org/omg/CSI/ContextIdHelper.java | 57 + .../.java/org/omg/CSI/EstablishContext.java | 28 + .../org/omg/CSI/EstablishContextHelper.java | 67 + .../org/omg/CSI/EstablishContextHolder.java | 33 + .../.java/org/omg/CSI/GSSTokenHelper.java | 64 + .../.java/org/omg/CSI/GSSTokenHolder.java | 34 + .../org/omg/CSI/GSS_NT_Export_Name_OID.java | 12 + .../omg/CSI/GSS_NT_ExportedNameHelper.java | 64 + .../omg/CSI/GSS_NT_ExportedNameHolder.java | 34 + .../CSI/GSS_NT_ExportedNameListHelper.java | 64 + .../CSI/GSS_NT_ExportedNameListHolder.java | 34 + .../omg/CSI/GSS_NT_Scoped_Username_OID.java | 12 + idl/Security/.java/org/omg/CSI/ITTAbsent.java | 12 + .../.java/org/omg/CSI/ITTAnonymous.java | 12 + .../org/omg/CSI/ITTDistinguishedName.java | 12 + .../.java/org/omg/CSI/ITTPrincipalName.java | 12 + .../.java/org/omg/CSI/ITTX509CertChain.java | 12 + .../org/omg/CSI/IdentityExtensionHelper.java | 64 + .../org/omg/CSI/IdentityExtensionHolder.java | 34 + .../.java/org/omg/CSI/IdentityToken.java | 105 + .../org/omg/CSI/IdentityTokenHelper.java | 141 + .../org/omg/CSI/IdentityTokenHolder.java | 33 + .../org/omg/CSI/IdentityTokenTypeHelper.java | 57 + .../.java/org/omg/CSI/KRB5MechOID.java | 12 + .../omg/CSI/MTCompleteEstablishContext.java | 12 + .../.java/org/omg/CSI/MTContextError.java | 12 + .../.java/org/omg/CSI/MTEstablishContext.java | 12 + .../.java/org/omg/CSI/MTMessageInContext.java | 12 + .../.java/org/omg/CSI/MessageInContext.java | 24 + .../org/omg/CSI/MessageInContextHelper.java | 61 + .../org/omg/CSI/MessageInContextHolder.java | 33 + .../.java/org/omg/CSI/MsgTypeHelper.java | 57 + idl/Security/.java/org/omg/CSI/OIDHelper.java | 64 + idl/Security/.java/org/omg/CSI/OIDHolder.java | 34 + .../.java/org/omg/CSI/OIDListHelper.java | 64 + .../.java/org/omg/CSI/OIDListHolder.java | 34 + idl/Security/.java/org/omg/CSI/OMGVMCID.java | 12 + .../.java/org/omg/CSI/SASContextBody.java | 96 + .../org/omg/CSI/SASContextBodyHelper.java | 124 + .../org/omg/CSI/SASContextBodyHolder.java | 33 + .../.java/org/omg/CSI/StringOIDHelper.java | 57 + .../.java/org/omg/CSI/UTF8StringHelper.java | 64 + .../.java/org/omg/CSI/UTF8StringHolder.java | 34 + .../omg/CSI/X501DistinguishedNameHelper.java | 64 + .../omg/CSI/X501DistinguishedNameHolder.java | 34 + .../org/omg/CSI/X509AttributeCertChain.java | 12 + .../omg/CSI/X509CertificateChainHelper.java | 64 + .../omg/CSI/X509CertificateChainHolder.java | 34 + .../.java/org/omg/CSIIOP/AS_ContextSec.java | 28 + .../org/omg/CSIIOP/AS_ContextSecHelper.java | 67 + .../org/omg/CSIIOP/AS_ContextSecHolder.java | 33 + .../omg/CSIIOP/AssociationOptionsHelper.java | 57 + .../org/omg/CSIIOP/CompositeDelegation.java | 12 + .../.java/org/omg/CSIIOP/CompoundSecMech.java | 28 + .../org/omg/CSIIOP/CompoundSecMechHelper.java | 67 + .../org/omg/CSIIOP/CompoundSecMechHolder.java | 33 + .../org/omg/CSIIOP/CompoundSecMechList.java | 24 + .../omg/CSIIOP/CompoundSecMechListHelper.java | 61 + .../omg/CSIIOP/CompoundSecMechListHolder.java | 33 + .../CSIIOP/CompoundSecMechanismsHelper.java | 64 + .../CSIIOP/CompoundSecMechanismsHolder.java | 34 + .../.java/org/omg/CSIIOP/Confidentiality.java | 12 + .../org/omg/CSIIOP/DelegationByClient.java | 12 + .../org/omg/CSIIOP/DetectMisordering.java | 12 + .../.java/org/omg/CSIIOP/DetectReplay.java | 12 + .../omg/CSIIOP/EstablishTrustInClient.java | 12 + .../omg/CSIIOP/EstablishTrustInTarget.java | 12 + .../org/omg/CSIIOP/IdentityAssertion.java | 12 + .../.java/org/omg/CSIIOP/Integrity.java | 12 + .../.java/org/omg/CSIIOP/NoDelegation.java | 12 + .../.java/org/omg/CSIIOP/NoProtection.java | 12 + .../.java/org/omg/CSIIOP/SAS_ContextSec.java | 30 + .../org/omg/CSIIOP/SAS_ContextSecHelper.java | 70 + .../org/omg/CSIIOP/SAS_ContextSecHolder.java | 33 + .../org/omg/CSIIOP/SCS_GSSExportedName.java | 12 + .../org/omg/CSIIOP/SCS_GeneralNames.java | 12 + .../org/omg/CSIIOP/SECIOP_SEC_TRANS.java | 30 + .../omg/CSIIOP/SECIOP_SEC_TRANSHelper.java | 70 + .../omg/CSIIOP/SECIOP_SEC_TRANSHolder.java | 33 + .../org/omg/CSIIOP/ServiceConfiguration.java | 24 + .../CSIIOP/ServiceConfigurationHelper.java | 61 + .../CSIIOP/ServiceConfigurationHolder.java | 33 + .../ServiceConfigurationListHelper.java | 64 + .../ServiceConfigurationListHolder.java | 34 + .../ServiceConfigurationSyntaxHelper.java | 57 + .../omg/CSIIOP/ServiceSpecificNameHelper.java | 64 + .../omg/CSIIOP/ServiceSpecificNameHolder.java | 34 + .../org/omg/CSIIOP/SimpleDelegation.java | 12 + .../org/omg/CSIIOP/TAG_SECIOP_SEC_TRANS.java | 12 + .../org/omg/CSIIOP/TAG_TLS_SEC_TRANS.java | 12 + .../.java/org/omg/CSIIOP/TLS_SEC_TRANS.java | 26 + .../org/omg/CSIIOP/TLS_SEC_TRANSHelper.java | 64 + .../org/omg/CSIIOP/TLS_SEC_TRANSHolder.java | 33 + .../org/omg/CSIIOP/TransportAddress.java | 25 + .../omg/CSIIOP/TransportAddressHelper.java | 61 + .../omg/CSIIOP/TransportAddressHolder.java | 33 + .../CSIIOP/TransportAddressListHelper.java | 64 + .../CSIIOP/TransportAddressListHolder.java | 34 + idl/Security/.java/org/omg/SSLIOP/SSL.java | 26 + .../.java/org/omg/SSLIOP/SSLHelper.java | 64 + .../.java/org/omg/SSLIOP/SSLHolder.java | 33 + .../org/omg/SSLIOP/TAG_SSL_SEC_TRANS.java | 12 + .../.java/org/omg/Security/AccessId.java | 12 + .../.java/org/omg/Security/AccountingId.java | 12 + .../Security/AssociationOptionsHelper.java | 57 + .../org/omg/Security/AssociationStatus.java | 36 + .../omg/Security/AssociationStatusHelper.java | 58 + .../omg/Security/AssociationStatusHolder.java | 33 + .../org/omg/Security/AttributeListHelper.java | 64 + .../org/omg/Security/AttributeListHolder.java | 34 + .../.java/org/omg/Security/AttributeSet.java | 12 + .../.java/org/omg/Security/AttributeType.java | 24 + .../org/omg/Security/AttributeTypeHelper.java | 61 + .../org/omg/Security/AttributeTypeHolder.java | 33 + .../omg/Security/AttributeTypeListHelper.java | 64 + .../omg/Security/AttributeTypeListHolder.java | 34 + .../.java/org/omg/Security/AuditAll.java | 12 + .../org/omg/Security/AuditAuthorization.java | 12 + .../omg/Security/AuditChannelIdHelper.java | 57 + .../org/omg/Security/AuditCombinator.java | 33 + .../omg/Security/AuditCombinatorHelper.java | 57 + .../omg/Security/AuditCombinatorHolder.java | 33 + .../org/omg/Security/AuditEventType.java | 24 + .../omg/Security/AuditEventTypeHelper.java | 61 + .../omg/Security/AuditEventTypeHolder.java | 33 + .../Security/AuditEventTypeListHelper.java | 64 + .../Security/AuditEventTypeListHolder.java | 34 + .../.java/org/omg/Security/AuditId.java | 12 + .../org/omg/Security/AuditInvocation.java | 12 + .../org/omg/Security/AuditNonRepudiation.java | 12 + .../org/omg/Security/AuditObjectCreation.java | 12 + .../omg/Security/AuditObjectDestruction.java | 12 + .../org/omg/Security/AuditPolicyChange.java | 12 + .../org/omg/Security/AuditPrincipalAuth.java | 12 + .../org/omg/Security/AuditSecEnvChange.java | 12 + .../org/omg/Security/AuditSessionAuth.java | 12 + .../Security/AuthenticationMethodHelper.java | 57 + .../AuthenticationMethodListHelper.java | 64 + .../AuthenticationMethodListHolder.java | 34 + .../omg/Security/AuthenticationStatus.java | 39 + .../Security/AuthenticationStatusHelper.java | 59 + .../Security/AuthenticationStatusHolder.java | 33 + .../.java/org/omg/Security/Capability.java | 12 + .../org/omg/Security/ChannelBindings.java | 30 + .../omg/Security/ChannelBindingsHelper.java | 91 + .../omg/Security/ChannelBindingsHolder.java | 33 + .../.java/org/omg/Security/Clearance.java | 12 + .../CommonInteroperabilityLevel0.java | 12 + .../CommonInteroperabilityLevel1.java | 12 + .../CommonInteroperabilityLevel2.java | 12 + .../omg/Security/CommunicationDirection.java | 36 + .../CommunicationDirectionHelper.java | 58 + .../CommunicationDirectionHolder.java | 33 + .../org/omg/Security/CompositeDelegation.java | 12 + .../org/omg/Security/Confidentiality.java | 12 + .../Security/DCESecureInteroperability.java | 12 + .../.java/org/omg/Security/DayOfTheWeek.java | 48 + .../org/omg/Security/DayOfTheWeekHelper.java | 62 + .../org/omg/Security/DayOfTheWeekHolder.java | 33 + .../.java/org/omg/Security/DayOfWeek.java | 12 + .../org/omg/Security/DelegationDirective.java | 33 + .../Security/DelegationDirectiveHelper.java | 57 + .../Security/DelegationDirectiveHolder.java | 33 + .../org/omg/Security/DelegationMode.java | 36 + .../omg/Security/DelegationModeHelper.java | 58 + .../omg/Security/DelegationModeHolder.java | 33 + .../org/omg/Security/DelegationState.java | 33 + .../omg/Security/DelegationStateHelper.java | 57 + .../omg/Security/DelegationStateHolder.java | 33 + .../org/omg/Security/DetectMisordering.java | 12 + .../.java/org/omg/Security/DetectReplay.java | 12 + .../org/omg/Security/EstablishTrust.java | 24 + .../omg/Security/EstablishTrustHelper.java | 61 + .../omg/Security/EstablishTrustHolder.java | 33 + .../omg/Security/EstablishTrustInClient.java | 12 + .../omg/Security/EstablishTrustInTarget.java | 12 + .../org/omg/Security/EventTypeHelper.java | 57 + .../org/omg/Security/ExtensibleFamily.java | 24 + .../omg/Security/ExtensibleFamilyHelper.java | 61 + .../omg/Security/ExtensibleFamilyHolder.java | 33 + .../.java/org/omg/Security/GroupId.java | 12 + .../.java/org/omg/Security/Initiator.java | 12 + .../.java/org/omg/Security/Integrity.java | 12 + .../.java/org/omg/Security/InterfaceName.java | 12 + .../org/omg/Security/IntervalTHelper.java | 57 + .../Security/InvocationCredentialsType.java | 36 + .../InvocationCredentialsTypeHelper.java | 58 + .../InvocationCredentialsTypeHolder.java | 33 + .../org/omg/Security/MechandOptions.java | 25 + .../omg/Security/MechandOptionsHelper.java | 61 + .../omg/Security/MechandOptionsHolder.java | 33 + .../Security/MechandOptionsListHelper.java | 64 + .../Security/MechandOptionsListHolder.java | 34 + .../org/omg/Security/MechanismTypeHelper.java | 57 + .../omg/Security/MechanismTypeListHelper.java | 64 + .../omg/Security/MechanismTypeListHolder.java | 34 + .../.java/org/omg/Security/NoDelegation.java | 12 + .../.java/org/omg/Security/NoProtection.java | 12 + .../org/omg/Security/NonRepudiation.java | 12 + .../org/omg/Security/NonRepudiationId.java | 12 + .../.java/org/omg/Security/OIDHelper.java | 64 + .../.java/org/omg/Security/OIDHolder.java | 34 + .../.java/org/omg/Security/OIDListHelper.java | 64 + .../.java/org/omg/Security/OIDListHolder.java | 34 + .../.java/org/omg/Security/ObjectRef.java | 12 + .../.java/org/omg/Security/OpaqueBuffer.java | 26 + .../org/omg/Security/OpaqueBufferHelper.java | 64 + .../org/omg/Security/OpaqueBufferHolder.java | 33 + .../.java/org/omg/Security/OpaqueHelper.java | 64 + .../.java/org/omg/Security/OpaqueHolder.java | 34 + .../.java/org/omg/Security/Operation.java | 12 + .../omg/Security/OptionsDirectionPair.java | 24 + .../Security/OptionsDirectionPairHelper.java | 61 + .../Security/OptionsDirectionPairHolder.java | 33 + .../OptionsDirectionPairListHelper.java | 64 + .../OptionsDirectionPairListHolder.java | 34 + .../org/omg/Security/PrimaryGroupId.java | 12 + idl/Security/.java/org/omg/Security/QOP.java | 39 + .../.java/org/omg/Security/QOPHelper.java | 59 + .../.java/org/omg/Security/QOPHolder.java | 33 + .../org/omg/Security/ReplaceORBServices.java | 12 + .../omg/Security/ReplaceSecurityServices.java | 12 + .../org/omg/Security/RequiresSupports.java | 33 + .../omg/Security/RequiresSupportsHelper.java | 57 + .../omg/Security/RequiresSupportsHolder.java | 33 + .../.java/org/omg/Security/Right.java | 25 + .../.java/org/omg/Security/RightHelper.java | 61 + .../.java/org/omg/Security/RightHolder.java | 33 + .../org/omg/Security/RightsCombinator.java | 33 + .../omg/Security/RightsCombinatorHelper.java | 57 + .../omg/Security/RightsCombinatorHolder.java | 33 + .../org/omg/Security/RightsListHelper.java | 64 + .../org/omg/Security/RightsListHolder.java | 34 + idl/Security/.java/org/omg/Security/Role.java | 12 + .../omg/Security/SecApplicationAccess.java | 12 + .../org/omg/Security/SecApplicationAudit.java | 12 + .../.java/org/omg/Security/SecAttribute.java | 26 + .../org/omg/Security/SecAttributeHelper.java | 64 + .../org/omg/Security/SecAttributeHolder.java | 33 + .../Security/SecClientInvocationAccess.java | 12 + .../Security/SecClientInvocationAudit.java | 12 + .../Security/SecClientSecureInvocation.java | 12 + .../.java/org/omg/Security/SecDelegation.java | 12 + .../SecDelegationDirectivePolicy.java | 12 + .../omg/Security/SecEstablishTrustPolicy.java | 12 + .../org/omg/Security/SecFeaturePolicy.java | 12 + .../SecInvocationCredentialsPolicy.java | 12 + .../org/omg/Security/SecMechanismsPolicy.java | 12 + .../org/omg/Security/SecNonRepudiation.java | 12 + .../.java/org/omg/Security/SecQOPPolicy.java | 12 + .../Security/SecTargetInvocationAccess.java | 12 + .../Security/SecTargetInvocationAudit.java | 12 + .../Security/SecTargetSecureInvocation.java | 12 + .../org/omg/Security/SecurityAttribute.java | 12 + .../Security/SecurityAttributeTypeHelper.java | 57 + .../omg/Security/SecurityContextState.java | 48 + .../Security/SecurityContextStateHelper.java | 62 + .../Security/SecurityContextStateHolder.java | 33 + .../org/omg/Security/SecurityContextType.java | 33 + .../Security/SecurityContextTypeHelper.java | 57 + .../Security/SecurityContextTypeHolder.java | 33 + .../org/omg/Security/SecurityFeature.java | 60 + .../omg/Security/SecurityFeatureHelper.java | 66 + .../omg/Security/SecurityFeatureHolder.java | 33 + .../org/omg/Security/SecurityLevel1.java | 12 + .../org/omg/Security/SecurityLevel2.java | 12 + .../omg/Security/SecurityMechanismType.java | 12 + .../org/omg/Security/SecurityNameHelper.java | 57 + .../omg/Security/SecurityORBServiceReady.java | 12 + .../omg/Security/SecurityServiceReady.java | 12 + .../org/omg/Security/SelectorTypeHelper.java | 57 + .../.java/org/omg/Security/SelectorValue.java | 24 + .../org/omg/Security/SelectorValueHelper.java | 61 + .../org/omg/Security/SelectorValueHolder.java | 33 + .../omg/Security/SelectorValueListHelper.java | 64 + .../omg/Security/SelectorValueListHolder.java | 34 + .../org/omg/Security/SimpleDelegation.java | 12 + .../StandardSecureInteroperability.java | 12 + .../org/omg/Security/SuccessFailure.java | 12 + idl/Security/.java/org/omg/Security/Time.java | 12 + .../.java/org/omg/Security/TimeTHelper.java | 57 + .../.java/org/omg/Security/UtcTHelper.java | 57 + .../.java/org/omg/Security/_Public.java | 12 + .../.java/org/omg/SecurityLevel1/Current.java | 16 + .../org/omg/SecurityLevel1/CurrentHelper.java | 70 + .../org/omg/SecurityLevel1/CurrentHolder.java | 33 + .../omg/SecurityLevel1/CurrentLocalBase.java | 21 + .../omg/SecurityLevel1/CurrentLocalTie.java | 31 + .../omg/SecurityLevel1/CurrentOperations.java | 16 + .../omg/SecurityLevel2/AccessDecision.java | 15 + .../SecurityLevel2/AccessDecisionHelper.java | 70 + .../SecurityLevel2/AccessDecisionHolder.java | 33 + .../AccessDecisionLocalBase.java | 20 + .../AccessDecisionLocalTie.java | 33 + .../AccessDecisionOperations.java | 15 + .../org/omg/SecurityLevel2/AuditChannel.java | 15 + .../SecurityLevel2/AuditChannelHelper.java | 70 + .../SecurityLevel2/AuditChannelHolder.java | 33 + .../SecurityLevel2/AuditChannelLocalBase.java | 20 + .../SecurityLevel2/AuditChannelLocalTie.java | 38 + .../AuditChannelOperations.java | 17 + .../org/omg/SecurityLevel2/AuditDecision.java | 15 + .../SecurityLevel2/AuditDecisionHelper.java | 70 + .../SecurityLevel2/AuditDecisionHolder.java | 33 + .../AuditDecisionLocalBase.java | 20 + .../SecurityLevel2/AuditDecisionLocalTie.java | 35 + .../AuditDecisionOperations.java | 17 + .../org/omg/SecurityLevel2/Credentials.java | 15 + .../omg/SecurityLevel2/CredentialsHelper.java | 70 + .../omg/SecurityLevel2/CredentialsHolder.java | 33 + .../SecurityLevel2/CredentialsListHelper.java | 64 + .../SecurityLevel2/CredentialsListHolder.java | 34 + .../SecurityLevel2/CredentialsLocalBase.java | 20 + .../SecurityLevel2/CredentialsLocalTie.java | 110 + .../SecurityLevel2/CredentialsOperations.java | 49 + .../.java/org/omg/SecurityLevel2/Current.java | 16 + .../org/omg/SecurityLevel2/CurrentHelper.java | 70 + .../org/omg/SecurityLevel2/CurrentHolder.java | 33 + .../omg/SecurityLevel2/CurrentLocalBase.java | 22 + .../omg/SecurityLevel2/CurrentLocalTie.java | 36 + .../omg/SecurityLevel2/CurrentOperations.java | 16 + .../DelegationDirectivePolicy.java | 16 + .../DelegationDirectivePolicyHelper.java | 70 + .../DelegationDirectivePolicyHolder.java | 33 + .../DelegationDirectivePolicyLocalBase.java | 21 + .../DelegationDirectivePolicyLocalTie.java | 43 + .../DelegationDirectivePolicyOperations.java | 16 + .../SecurityLevel2/EstablishTrustPolicy.java | 16 + .../EstablishTrustPolicyHelper.java | 70 + .../EstablishTrustPolicyHolder.java | 33 + .../EstablishTrustPolicyLocalBase.java | 21 + .../EstablishTrustPolicyLocalTie.java | 43 + .../EstablishTrustPolicyOperations.java | 16 + .../InvocationCredentialsPolicy.java | 16 + .../InvocationCredentialsPolicyHelper.java | 70 + .../InvocationCredentialsPolicyHolder.java | 33 + .../InvocationCredentialsPolicyLocalBase.java | 21 + .../InvocationCredentialsPolicyLocalTie.java | 43 + ...InvocationCredentialsPolicyOperations.java | 16 + .../omg/SecurityLevel2/MechanismPolicy.java | 16 + .../SecurityLevel2/MechanismPolicyHelper.java | 70 + .../SecurityLevel2/MechanismPolicyHolder.java | 33 + .../MechanismPolicyLocalBase.java | 21 + .../MechanismPolicyLocalTie.java | 43 + .../MechanismPolicyOperations.java | 16 + .../PrincipalAuthenticator.java | 15 + .../PrincipalAuthenticatorHelper.java | 70 + .../PrincipalAuthenticatorHolder.java | 33 + .../PrincipalAuthenticatorLocalBase.java | 20 + .../PrincipalAuthenticatorLocalTie.java | 52 + .../PrincipalAuthenticatorOperations.java | 19 + .../org/omg/SecurityLevel2/QOPPolicy.java | 16 + .../omg/SecurityLevel2/QOPPolicyHelper.java | 70 + .../omg/SecurityLevel2/QOPPolicyHolder.java | 33 + .../SecurityLevel2/QOPPolicyLocalBase.java | 21 + .../omg/SecurityLevel2/QOPPolicyLocalTie.java | 43 + .../SecurityLevel2/QOPPolicyOperations.java | 16 + .../SecurityLevel2/ReceivedCredentials.java | 16 + .../ReceivedCredentialsHelper.java | 70 + .../ReceivedCredentialsHolder.java | 33 + .../ReceivedCredentialsLocalBase.java | 21 + .../ReceivedCredentialsLocalTie.java | 127 + .../ReceivedCredentialsOperations.java | 22 + .../omg/SecurityLevel2/RequiredRights.java | 15 + .../SecurityLevel2/RequiredRightsHelper.java | 76 + .../SecurityLevel2/RequiredRightsHolder.java | 33 + .../RequiredRightsOperations.java | 17 + .../omg/SecurityLevel2/RequiredRightsPOA.java | 102 + .../SecurityLevel2/RequiredRightsPOATie.java | 50 + .../omg/SecurityLevel2/SecurityManager.java | 15 + .../SecurityLevel2/SecurityManagerHelper.java | 70 + .../SecurityLevel2/SecurityManagerHolder.java | 33 + .../SecurityManagerLocalBase.java | 20 + .../SecurityManagerLocalTie.java | 66 + .../SecurityManagerOperations.java | 31 + .../omg/SecurityLevel2/TargetCredentials.java | 16 + .../TargetCredentialsHelper.java | 70 + .../TargetCredentialsHolder.java | 33 + .../TargetCredentialsLocalBase.java | 21 + .../TargetCredentialsLocalTie.java | 119 + .../TargetCredentialsOperations.java | 18 + .../SecurityLevel2/_RequiredRightsStub.java | 68 + idl/Security/.svn/all-wcprops | 53 + idl/Security/.svn/entries | 300 ++ idl/Security/.svn/text-base/CSI.idl.svn-base | 180 ++ .../.svn/text-base/CSIIOP.idl.svn-base | 116 + .../.svn/text-base/SSLIOP.idl.svn-base | 20 + .../.svn/text-base/Security.idl.svn-base | 329 +++ .../text-base/SecurityLevel1.idl.svn-base | 18 + .../text-base/SecurityLevel2.idl.svn-base | 196 ++ .../text-base/SecurityLevel3.idl.svn-base | 2041 +++++++++++++ .../.svn/text-base/build.xml.svn-base | 114 + idl/Security/CSI.idl | 180 ++ idl/Security/CSIIOP.idl | 116 + idl/Security/SSLIOP.idl | 20 + idl/Security/Security.idl | 329 +++ idl/Security/SecurityLevel1.idl | 18 + idl/Security/SecurityLevel2.idl | 196 ++ idl/Security/SecurityLevel3.idl | 2041 +++++++++++++ idl/Security/build.xml | 114 + .../org/omg/SendingContext/CodeBase.class | Bin 0 -> 238 bytes .../omg/SendingContext/CodeBaseHelper.class | Bin 0 -> 2231 bytes .../omg/SendingContext/CodeBaseHolder.class | Bin 0 -> 814 bytes .../SendingContext/CodeBaseOperations.class | Bin 0 -> 565 bytes .../org/omg/SendingContext/CodeBasePOA.class | Bin 0 -> 3999 bytes .../omg/SendingContext/CodeBasePOATie.class | Bin 0 -> 1401 bytes .../CodeBasePackage/URLHelper.class | Bin 0 -> 1852 bytes .../CodeBasePackage/URLSeqHelper.class | Bin 0 -> 2146 bytes .../CodeBasePackage/URLSeqHolder.class | Bin 0 -> 816 bytes .../CodeBasePackage/ValueDescSeqHelper.class | Bin 0 -> 2484 bytes .../CodeBasePackage/ValueDescSeqHolder.class | Bin 0 -> 998 bytes .../org/omg/SendingContext/RunTime.class | Bin 0 -> 198 bytes .../omg/SendingContext/RunTimeHelper.class | Bin 0 -> 2220 bytes .../omg/SendingContext/RunTimeHolder.class | Bin 0 -> 808 bytes .../SendingContext/RunTimeOperations.class | Bin 0 -> 92 bytes .../org/omg/SendingContext/RunTimePOA.class | Bin 0 -> 1420 bytes .../omg/SendingContext/RunTimePOATie.class | Bin 0 -> 688 bytes .../omg/SendingContext/_CodeBaseStub.class | Bin 0 -> 3179 bytes .../org/omg/SendingContext/_RunTimeStub.class | Bin 0 -> 430 bytes idl/SendingContext/.cvsignore | 2 + .../org/omg/SendingContext/CodeBase.java | 16 + .../omg/SendingContext/CodeBaseHelper.java | 76 + .../omg/SendingContext/CodeBaseHolder.java | 33 + .../SendingContext/CodeBaseOperations.java | 26 + .../org/omg/SendingContext/CodeBasePOA.java | 129 + .../omg/SendingContext/CodeBasePOATie.java | 68 + .../CodeBasePackage/URLHelper.java | 57 + .../CodeBasePackage/URLSeqHelper.java | 64 + .../CodeBasePackage/URLSeqHolder.java | 34 + .../CodeBasePackage/ValueDescSeqHelper.java | 64 + .../CodeBasePackage/ValueDescSeqHolder.java | 34 + .../.java/org/omg/SendingContext/RunTime.java | 15 + .../org/omg/SendingContext/RunTimeHelper.java | 76 + .../org/omg/SendingContext/RunTimeHolder.java | 33 + .../omg/SendingContext/RunTimeOperations.java | 13 + .../org/omg/SendingContext/RunTimePOA.java | 43 + .../org/omg/SendingContext/RunTimePOATie.java | 31 + .../org/omg/SendingContext/_CodeBaseStub.java | 136 + .../org/omg/SendingContext/_RunTimeStub.java | 22 + idl/SendingContext/.svn/all-wcprops | 23 + idl/SendingContext/.svn/dir-prop-base | 6 + idl/SendingContext/.svn/entries | 130 + .../.svn/prop-base/.cvsignore.svn-base | 9 + .../prop-base/SendingContext.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../text-base/SendingContext.idl.svn-base | 35 + .../.svn/text-base/build.xml.svn-base | 81 + idl/SendingContext/SendingContext.idl | 35 + idl/SendingContext/build.xml | 81 + .../org/omg/TimeBase/InaccuracyTHelper.class | Bin 0 -> 1750 bytes .../.class/org/omg/TimeBase/IntervalT.class | Bin 0 -> 298 bytes .../org/omg/TimeBase/IntervalTHelper.class | Bin 0 -> 2206 bytes .../org/omg/TimeBase/IntervalTHolder.class | Bin 0 -> 784 bytes .../.class/org/omg/TimeBase/TdfTHelper.class | Bin 0 -> 1718 bytes .../.class/org/omg/TimeBase/TimeTHelper.class | Bin 0 -> 1732 bytes .../.class/org/omg/TimeBase/UtcT.class | Bin 0 -> 356 bytes .../.class/org/omg/TimeBase/UtcTHelper.class | Bin 0 -> 2499 bytes .../.class/org/omg/TimeBase/UtcTHolder.class | Bin 0 -> 754 bytes idl/TimeBase/.cvsignore | 2 + .../org/omg/TimeBase/InaccuracyTHelper.java | 57 + .../.java/org/omg/TimeBase/IntervalT.java | 24 + .../org/omg/TimeBase/IntervalTHelper.java | 61 + .../org/omg/TimeBase/IntervalTHolder.java | 33 + .../.java/org/omg/TimeBase/TdfTHelper.java | 57 + .../.java/org/omg/TimeBase/TimeTHelper.java | 57 + idl/TimeBase/.java/org/omg/TimeBase/UtcT.java | 28 + .../.java/org/omg/TimeBase/UtcTHelper.java | 67 + .../.java/org/omg/TimeBase/UtcTHolder.java | 33 + idl/TimeBase/.svn/all-wcprops | 23 + idl/TimeBase/.svn/dir-prop-base | 6 + idl/TimeBase/.svn/entries | 130 + .../.svn/prop-base/.cvsignore.svn-base | 9 + .../.svn/prop-base/TimeBase.idl.svn-base | 9 + .../.svn/prop-base/build.xml.svn-base | 9 + .../.svn/text-base/.cvsignore.svn-base | 2 + .../.svn/text-base/TimeBase.idl.svn-base | 42 + .../.svn/text-base/build.xml.svn-base | 82 + idl/TimeBase/TimeBase.idl | 42 + idl/TimeBase/build.xml | 82 + idl/build.xml | 111 + .../omg/IIOP/BiDirIIOPServiceContext.class | Bin 0 -> 324 bytes .../IIOP/BiDirIIOPServiceContextHelper.class | Bin 0 -> 2178 bytes .../IIOP/BiDirIIOPServiceContextHolder.class | Bin 0 -> 844 bytes .../.class/org/omg/IIOP/ListenPoint.class | Bin 0 -> 332 bytes .../org/omg/IIOP/ListenPointHelper.class | Bin 0 -> 2281 bytes .../org/omg/IIOP/ListenPointHolder.class | Bin 0 -> 772 bytes .../org/omg/IIOP/ListenPointListHelper.class | Bin 0 -> 2165 bytes .../org/omg/IIOP/ListenPointListHolder.class | Bin 0 -> 822 bytes .../.class/org/omg/IIOP/ProfileBody_1_0.class | Bin 0 -> 465 bytes .../org/omg/IIOP/ProfileBody_1_0Helper.class | Bin 0 -> 2994 bytes .../org/omg/IIOP/ProfileBody_1_0Holder.class | Bin 0 -> 796 bytes .../.class/org/omg/IIOP/ProfileBody_1_1.class | Bin 0 -> 565 bytes .../org/omg/IIOP/ProfileBody_1_1Helper.class | Bin 0 -> 3405 bytes .../org/omg/IIOP/ProfileBody_1_1Holder.class | Bin 0 -> 796 bytes idl/comm/.class/org/omg/IIOP/Version.class | Bin 0 -> 280 bytes .../.class/org/omg/IIOP/VersionHelper.class | Bin 0 -> 2120 bytes .../.class/org/omg/IIOP/VersionHolder.class | Bin 0 -> 748 bytes idl/comm/.class/org/omg/IOP/BI_DIR_IIOP.class | Bin 0 -> 124 bytes .../.class/org/omg/IOP/ChainBypassCheck.class | Bin 0 -> 129 bytes .../.class/org/omg/IOP/ChainBypassInfo.class | Bin 0 -> 128 bytes idl/comm/.class/org/omg/IOP/CodeSets.class | Bin 0 -> 121 bytes idl/comm/.class/org/omg/IOP/Codec.class | Bin 0 -> 180 bytes .../.class/org/omg/IOP/CodecFactory.class | Bin 0 -> 194 bytes .../org/omg/IOP/CodecFactoryHelper.class | Bin 0 -> 1889 bytes .../org/omg/IOP/CodecFactoryHolder.class | Bin 0 -> 772 bytes .../org/omg/IOP/CodecFactoryLocalBase.class | Bin 0 -> 432 bytes .../org/omg/IOP/CodecFactoryLocalTie.class | Bin 0 -> 576 bytes .../org/omg/IOP/CodecFactoryOperations.class | Bin 0 -> 231 bytes .../CodecFactoryPackage/UnknownEncoding.class | Bin 0 -> 487 bytes .../UnknownEncodingHelper.class | Bin 0 -> 2219 bytes .../UnknownEncodingHolder.class | Bin 0 -> 910 bytes idl/comm/.class/org/omg/IOP/CodecHelper.class | Bin 0 -> 1819 bytes idl/comm/.class/org/omg/IOP/CodecHolder.class | Bin 0 -> 730 bytes .../.class/org/omg/IOP/CodecLocalBase.class | Bin 0 -> 411 bytes .../.class/org/omg/IOP/CodecLocalTie.class | Bin 0 -> 885 bytes .../.class/org/omg/IOP/CodecOperations.class | Bin 0 -> 457 bytes .../omg/IOP/CodecPackage/FormatMismatch.class | Bin 0 -> 471 bytes .../CodecPackage/FormatMismatchHelper.class | Bin 0 -> 2138 bytes .../CodecPackage/FormatMismatchHolder.class | Bin 0 -> 862 bytes .../CodecPackage/InvalidTypeForEncoding.class | Bin 0 -> 487 bytes .../InvalidTypeForEncodingHelper.class | Bin 0 -> 2226 bytes .../InvalidTypeForEncodingHolder.class | Bin 0 -> 910 bytes .../omg/IOP/CodecPackage/TypeMismatch.class | Bin 0 -> 467 bytes .../IOP/CodecPackage/TypeMismatchHelper.class | Bin 0 -> 2116 bytes .../IOP/CodecPackage/TypeMismatchHolder.class | Bin 0 -> 850 bytes .../org/omg/IOP/ComponentIdHelper.class | Bin 0 -> 1727 bytes .../org/omg/IOP/ENCODING_CDR_ENCAPS.class | Bin 0 -> 132 bytes idl/comm/.class/org/omg/IOP/Encoding.class | Bin 0 -> 333 bytes .../org/omg/IOP/EncodingFormatHelper.class | Bin 0 -> 1738 bytes .../.class/org/omg/IOP/EncodingHelper.class | Bin 0 -> 2282 bytes .../.class/org/omg/IOP/EncodingHolder.class | Bin 0 -> 748 bytes .../org/omg/IOP/ExceptionDetailMessage.class | Bin 0 -> 135 bytes .../org/omg/IOP/FORWARDED_IDENTITY.class | Bin 0 -> 131 bytes .../org/omg/IOP/INVOCATION_POLICIES.class | Bin 0 -> 132 bytes idl/comm/.class/org/omg/IOP/IOR.class | Bin 0 -> 384 bytes idl/comm/.class/org/omg/IOP/IORHelper.class | Bin 0 -> 2608 bytes idl/comm/.class/org/omg/IOP/IORHolder.class | Bin 0 -> 718 bytes .../.class/org/omg/IOP/LogicalThreadId.class | Bin 0 -> 128 bytes .../IOP/MultipleComponentProfileHelper.class | Bin 0 -> 2228 bytes .../IOP/MultipleComponentProfileHolder.class | Bin 0 -> 853 bytes .../.class/org/omg/IOP/ProfileIdHelper.class | Bin 0 -> 1721 bytes .../.class/org/omg/IOP/RTCorbaPriority.class | Bin 0 -> 128 bytes .../org/omg/IOP/RTCorbaPriorityRange.class | Bin 0 -> 133 bytes .../omg/IOP/SecurityAttributeService.class | Bin 0 -> 137 bytes .../org/omg/IOP/SendingContextRunTime.class | Bin 0 -> 134 bytes .../.class/org/omg/IOP/ServiceContext.class | Bin 0 -> 304 bytes .../org/omg/IOP/ServiceContextHelper.class | Bin 0 -> 2469 bytes .../org/omg/IOP/ServiceContextHolder.class | Bin 0 -> 784 bytes .../omg/IOP/ServiceContextListHelper.class | Bin 0 -> 2194 bytes .../omg/IOP/ServiceContextListHolder.class | Bin 0 -> 836 bytes .../.class/org/omg/IOP/ServiceIdHelper.class | Bin 0 -> 1721 bytes .../omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.class | Bin 0 -> 139 bytes .../org/omg/IOP/TAG_ASSOCIATION_OPTIONS.class | Bin 0 -> 136 bytes .../.class/org/omg/IOP/TAG_CODE_SETS.class | Bin 0 -> 126 bytes .../org/omg/IOP/TAG_COMPLETE_OBJECT_KEY.class | Bin 0 -> 136 bytes .../IOP/TAG_CSI_ECMA_Hybrid_SEC_MECH.class | Bin 0 -> 141 bytes .../IOP/TAG_CSI_ECMA_Public_SEC_MECH.class | Bin 0 -> 141 bytes .../IOP/TAG_CSI_ECMA_Secret_SEC_MECH.class | Bin 0 -> 141 bytes .../org/omg/IOP/TAG_CSI_SEC_MECH_LIST.class | Bin 0 -> 134 bytes .../org/omg/IOP/TAG_DCE_BINDING_NAME.class | Bin 0 -> 133 bytes .../.class/org/omg/IOP/TAG_DCE_NO_PIPES.class | Bin 0 -> 129 bytes .../.class/org/omg/IOP/TAG_DCE_SEC_MECH.class | Bin 0 -> 129 bytes .../org/omg/IOP/TAG_DCE_STRING_BINDING.class | Bin 0 -> 135 bytes .../omg/IOP/TAG_ENDPOINT_ID_POSITION.class | Bin 0 -> 137 bytes .../org/omg/IOP/TAG_FIREWALL_TRANS.class | Bin 0 -> 131 bytes .../org/omg/IOP/TAG_GENERIC_SEC_MECH.class | Bin 0 -> 133 bytes .../org/omg/IOP/TAG_INET_SEC_TRANS.class | Bin 0 -> 131 bytes .../.class/org/omg/IOP/TAG_INTERNET_IOP.class | Bin 0 -> 129 bytes .../.class/org/omg/IOP/TAG_INV_POLICY.class | Bin 0 -> 127 bytes .../org/omg/IOP/TAG_JAVA_CODEBASE.class | Bin 0 -> 130 bytes .../org/omg/IOP/TAG_KerberosV5_SEC_MECH.class | Bin 0 -> 136 bytes .../org/omg/IOP/TAG_LOCATION_POLICY.class | Bin 0 -> 132 bytes .../org/omg/IOP/TAG_MESSAGE_ROUTERS.class | Bin 0 -> 132 bytes .../org/omg/IOP/TAG_MULTIPLE_COMPONENTS.class | Bin 0 -> 136 bytes .../.class/org/omg/IOP/TAG_NULL_TAG.class | Bin 0 -> 125 bytes .../.class/org/omg/IOP/TAG_ORB_TYPE.class | Bin 0 -> 125 bytes .../.class/org/omg/IOP/TAG_OTS_POLICY.class | Bin 0 -> 127 bytes .../.class/org/omg/IOP/TAG_POLICIES.class | Bin 0 -> 125 bytes .../org/omg/IOP/TAG_SCCP_CONTACT_INFO.class | Bin 0 -> 134 bytes .../.class/org/omg/IOP/TAG_SEC_NAME.class | Bin 0 -> 125 bytes .../org/omg/IOP/TAG_SPKM_1_SEC_MECH.class | Bin 0 -> 132 bytes .../org/omg/IOP/TAG_SPKM_2_SEC_MECH.class | Bin 0 -> 132 bytes .../org/omg/IOP/TAG_SSL_SEC_TRANS.class | Bin 0 -> 130 bytes .../org/omg/IOP/TAG_TLS_SEC_TRANS.class | Bin 0 -> 130 bytes .../org/omg/IOP/TAG_TRANSACTION_POLICY.class | Bin 0 -> 135 bytes .../.class/org/omg/IOP/TaggedComponent.class | Bin 0 -> 300 bytes .../org/omg/IOP/TaggedComponentHelper.class | Bin 0 -> 2475 bytes .../org/omg/IOP/TaggedComponentHolder.class | Bin 0 -> 790 bytes .../omg/IOP/TaggedComponentSeqHelper.class | Bin 0 -> 2204 bytes .../omg/IOP/TaggedComponentSeqHolder.class | Bin 0 -> 841 bytes .../.class/org/omg/IOP/TaggedProfile.class | Bin 0 -> 296 bytes .../org/omg/IOP/TaggedProfileHelper.class | Bin 0 -> 2451 bytes .../org/omg/IOP/TaggedProfileHolder.class | Bin 0 -> 778 bytes .../org/omg/IOP/TransactionService.class | Bin 0 -> 131 bytes .../org/omg/IOP/UnknownExceptionInfo.class | Bin 0 -> 133 bytes idl/comm/.cvsignore | 2 + .../org/omg/IIOP/BiDirIIOPServiceContext.java | 22 + .../IIOP/BiDirIIOPServiceContextHelper.java | 58 + .../IIOP/BiDirIIOPServiceContextHolder.java | 33 + idl/comm/.java/org/omg/IIOP/ListenPoint.java | 25 + .../.java/org/omg/IIOP/ListenPointHelper.java | 61 + .../.java/org/omg/IIOP/ListenPointHolder.java | 33 + .../org/omg/IIOP/ListenPointListHelper.java | 64 + .../org/omg/IIOP/ListenPointListHolder.java | 34 + .../.java/org/omg/IIOP/ProfileBody_1_0.java | 29 + .../org/omg/IIOP/ProfileBody_1_0Helper.java | 74 + .../org/omg/IIOP/ProfileBody_1_0Holder.java | 33 + .../.java/org/omg/IIOP/ProfileBody_1_1.java | 31 + .../org/omg/IIOP/ProfileBody_1_1Helper.java | 84 + .../org/omg/IIOP/ProfileBody_1_1Holder.java | 33 + idl/comm/.java/org/omg/IIOP/Version.java | 24 + .../.java/org/omg/IIOP/VersionHelper.java | 61 + .../.java/org/omg/IIOP/VersionHolder.java | 33 + idl/comm/.java/org/omg/IOP/BI_DIR_IIOP.java | 12 + .../.java/org/omg/IOP/ChainBypassCheck.java | 12 + .../.java/org/omg/IOP/ChainBypassInfo.java | 12 + idl/comm/.java/org/omg/IOP/CodeSets.java | 12 + idl/comm/.java/org/omg/IOP/Codec.java | 15 + idl/comm/.java/org/omg/IOP/CodecFactory.java | 15 + .../.java/org/omg/IOP/CodecFactoryHelper.java | 70 + .../.java/org/omg/IOP/CodecFactoryHolder.java | 33 + .../org/omg/IOP/CodecFactoryLocalBase.java | 20 + .../org/omg/IOP/CodecFactoryLocalTie.java | 31 + .../org/omg/IOP/CodecFactoryOperations.java | 16 + .../CodecFactoryPackage/UnknownEncoding.java | 23 + .../UnknownEncodingHelper.java | 59 + .../UnknownEncodingHolder.java | 33 + idl/comm/.java/org/omg/IOP/CodecHelper.java | 70 + idl/comm/.java/org/omg/IOP/CodecHolder.java | 33 + .../.java/org/omg/IOP/CodecLocalBase.java | 20 + idl/comm/.java/org/omg/IOP/CodecLocalTie.java | 53 + .../.java/org/omg/IOP/CodecOperations.java | 25 + .../omg/IOP/CodecPackage/FormatMismatch.java | 23 + .../CodecPackage/FormatMismatchHelper.java | 59 + .../CodecPackage/FormatMismatchHolder.java | 33 + .../CodecPackage/InvalidTypeForEncoding.java | 23 + .../InvalidTypeForEncodingHelper.java | 59 + .../InvalidTypeForEncodingHolder.java | 33 + .../omg/IOP/CodecPackage/TypeMismatch.java | 23 + .../IOP/CodecPackage/TypeMismatchHelper.java | 59 + .../IOP/CodecPackage/TypeMismatchHolder.java | 33 + .../.java/org/omg/IOP/ComponentIdHelper.java | 57 + .../org/omg/IOP/ENCODING_CDR_ENCAPS.java | 12 + idl/comm/.java/org/omg/IOP/Encoding.java | 26 + .../org/omg/IOP/EncodingFormatHelper.java | 57 + .../.java/org/omg/IOP/EncodingHelper.java | 64 + .../.java/org/omg/IOP/EncodingHolder.java | 33 + .../org/omg/IOP/ExceptionDetailMessage.java | 12 + .../.java/org/omg/IOP/FORWARDED_IDENTITY.java | 12 + .../org/omg/IOP/INVOCATION_POLICIES.java | 12 + idl/comm/.java/org/omg/IOP/IOR.java | 25 + idl/comm/.java/org/omg/IOP/IORHelper.java | 68 + idl/comm/.java/org/omg/IOP/IORHolder.java | 33 + .../.java/org/omg/IOP/LogicalThreadId.java | 12 + .../IOP/MultipleComponentProfileHelper.java | 64 + .../IOP/MultipleComponentProfileHolder.java | 34 + .../.java/org/omg/IOP/ProfileIdHelper.java | 57 + .../.java/org/omg/IOP/RTCorbaPriority.java | 12 + .../org/omg/IOP/RTCorbaPriorityRange.java | 12 + .../org/omg/IOP/SecurityAttributeService.java | 12 + .../org/omg/IOP/SendingContextRunTime.java | 12 + .../.java/org/omg/IOP/ServiceContext.java | 24 + .../org/omg/IOP/ServiceContextHelper.java | 68 + .../org/omg/IOP/ServiceContextHolder.java | 33 + .../org/omg/IOP/ServiceContextListHelper.java | 64 + .../org/omg/IOP/ServiceContextListHolder.java | 34 + .../.java/org/omg/IOP/ServiceIdHelper.java | 57 + .../omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.java | 12 + .../org/omg/IOP/TAG_ASSOCIATION_OPTIONS.java | 12 + idl/comm/.java/org/omg/IOP/TAG_CODE_SETS.java | 12 + .../org/omg/IOP/TAG_COMPLETE_OBJECT_KEY.java | 12 + .../omg/IOP/TAG_CSI_ECMA_Hybrid_SEC_MECH.java | 12 + .../omg/IOP/TAG_CSI_ECMA_Public_SEC_MECH.java | 12 + .../omg/IOP/TAG_CSI_ECMA_Secret_SEC_MECH.java | 12 + .../org/omg/IOP/TAG_CSI_SEC_MECH_LIST.java | 12 + .../org/omg/IOP/TAG_DCE_BINDING_NAME.java | 12 + .../.java/org/omg/IOP/TAG_DCE_NO_PIPES.java | 12 + .../.java/org/omg/IOP/TAG_DCE_SEC_MECH.java | 12 + .../org/omg/IOP/TAG_DCE_STRING_BINDING.java | 12 + .../org/omg/IOP/TAG_ENDPOINT_ID_POSITION.java | 12 + .../.java/org/omg/IOP/TAG_FIREWALL_TRANS.java | 12 + .../org/omg/IOP/TAG_GENERIC_SEC_MECH.java | 12 + .../.java/org/omg/IOP/TAG_INET_SEC_TRANS.java | 12 + .../.java/org/omg/IOP/TAG_INTERNET_IOP.java | 12 + .../.java/org/omg/IOP/TAG_INV_POLICY.java | 12 + .../.java/org/omg/IOP/TAG_JAVA_CODEBASE.java | 12 + .../org/omg/IOP/TAG_KerberosV5_SEC_MECH.java | 12 + .../org/omg/IOP/TAG_LOCATION_POLICY.java | 12 + .../org/omg/IOP/TAG_MESSAGE_ROUTERS.java | 12 + .../org/omg/IOP/TAG_MULTIPLE_COMPONENTS.java | 12 + idl/comm/.java/org/omg/IOP/TAG_NULL_TAG.java | 12 + idl/comm/.java/org/omg/IOP/TAG_ORB_TYPE.java | 12 + .../.java/org/omg/IOP/TAG_OTS_POLICY.java | 12 + idl/comm/.java/org/omg/IOP/TAG_POLICIES.java | 12 + .../org/omg/IOP/TAG_SCCP_CONTACT_INFO.java | 12 + idl/comm/.java/org/omg/IOP/TAG_SEC_NAME.java | 12 + .../org/omg/IOP/TAG_SPKM_1_SEC_MECH.java | 12 + .../org/omg/IOP/TAG_SPKM_2_SEC_MECH.java | 12 + .../.java/org/omg/IOP/TAG_SSL_SEC_TRANS.java | 12 + .../.java/org/omg/IOP/TAG_TLS_SEC_TRANS.java | 12 + .../org/omg/IOP/TAG_TRANSACTION_POLICY.java | 12 + .../.java/org/omg/IOP/TaggedComponent.java | 24 + .../org/omg/IOP/TaggedComponentHelper.java | 68 + .../org/omg/IOP/TaggedComponentHolder.java | 33 + .../org/omg/IOP/TaggedComponentSeqHelper.java | 64 + .../org/omg/IOP/TaggedComponentSeqHolder.java | 34 + idl/comm/.java/org/omg/IOP/TaggedProfile.java | 24 + .../org/omg/IOP/TaggedProfileHelper.java | 68 + .../org/omg/IOP/TaggedProfileHolder.java | 33 + .../.java/org/omg/IOP/TransactionService.java | 12 + .../org/omg/IOP/UnknownExceptionInfo.java | 12 + idl/comm/.svn/all-wcprops | 35 + idl/comm/.svn/dir-prop-base | 6 + idl/comm/.svn/entries | 198 ++ idl/comm/.svn/prop-base/.cvsignore.svn-base | 9 + idl/comm/.svn/prop-base/GIOP.idl.svn-base | 9 + idl/comm/.svn/prop-base/IIOP.idl.svn-base | 9 + idl/comm/.svn/prop-base/IOP.idl.svn-base | 9 + idl/comm/.svn/prop-base/build.xml.svn-base | 9 + idl/comm/.svn/text-base/.cvsignore.svn-base | 2 + idl/comm/.svn/text-base/GIOP.idl.svn-base | 200 ++ idl/comm/.svn/text-base/IIOP.idl.svn-base | 37 + idl/comm/.svn/text-base/IOP.idl.svn-base | 134 + idl/comm/.svn/text-base/build.xml.svn-base | 80 + idl/comm/GIOP.idl | 200 ++ idl/comm/IIOP.idl | 37 + idl/comm/IOP.idl | 134 + idl/comm/build.xml | 80 + idl/orb/.class/es/tid/CORBA/Any.class | Bin 0 -> 264 bytes idl/orb/.class/org/omg/CORBA/ARG_IN.class | Bin 0 -> 121 bytes idl/orb/.class/org/omg/CORBA/ARG_INOUT.class | Bin 0 -> 124 bytes idl/orb/.class/org/omg/CORBA/ARG_OUT.class | Bin 0 -> 122 bytes idl/orb/.class/org/omg/CORBA/AliasDef.class | Bin 0 -> 214 bytes .../.class/org/omg/CORBA/AliasDefHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/AliasDefHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/AliasDefOperations.class | Bin 0 -> 219 bytes .../.class/org/omg/CORBA/AliasDefPOA.class | Bin 0 -> 5221 bytes .../.class/org/omg/CORBA/AliasDefPOATie.class | Bin 0 -> 2027 bytes idl/orb/.class/org/omg/CORBA/Any.class | Bin 0 -> 2900 bytes idl/orb/.class/org/omg/CORBA/AnyHolder.class | Bin 0 -> 997 bytes .../.class/org/omg/CORBA/AnySeqHelper.class | Bin 0 -> 2106 bytes .../.class/org/omg/CORBA/AnySeqHolder.class | Bin 0 -> 771 bytes idl/orb/.class/org/omg/CORBA/ArrayDef.class | Bin 0 -> 211 bytes .../.class/org/omg/CORBA/ArrayDefHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/ArrayDefHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/ArrayDefOperations.class | Bin 0 -> 305 bytes .../.class/org/omg/CORBA/ArrayDefPOA.class | Bin 0 -> 3564 bytes .../.class/org/omg/CORBA/ArrayDefPOATie.class | Bin 0 -> 1288 bytes .../omg/CORBA/AttrDescriptionSeqHelper.class | Bin 0 -> 2280 bytes .../omg/CORBA/AttrDescriptionSeqHolder.class | Bin 0 -> 880 bytes .../.class/org/omg/CORBA/AttributeDef.class | Bin 0 -> 221 bytes .../org/omg/CORBA/AttributeDefHelper.class | Bin 0 -> 2185 bytes .../org/omg/CORBA/AttributeDefHolder.class | Bin 0 -> 784 bytes .../omg/CORBA/AttributeDefOperations.class | Bin 0 -> 349 bytes .../org/omg/CORBA/AttributeDefPOA.class | Bin 0 -> 5585 bytes .../org/omg/CORBA/AttributeDefPOATie.class | Bin 0 -> 2132 bytes .../org/omg/CORBA/AttributeDescription.class | Bin 0 -> 651 bytes .../CORBA/AttributeDescriptionHelper.class | Bin 0 -> 2952 bytes .../CORBA/AttributeDescriptionHolder.class | Bin 0 -> 832 bytes .../.class/org/omg/CORBA/AttributeMode.class | Bin 0 -> 814 bytes .../org/omg/CORBA/AttributeModeHelper.class | Bin 0 -> 1928 bytes .../org/omg/CORBA/AttributeModeHolder.class | Bin 0 -> 790 bytes .../.class/org/omg/CORBA/BAD_CONTEXT.class | Bin 0 -> 478 bytes .../.class/org/omg/CORBA/BAD_INV_ORDER.class | Bin 0 -> 480 bytes .../.class/org/omg/CORBA/BAD_OPERATION.class | Bin 0 -> 480 bytes idl/orb/.class/org/omg/CORBA/BAD_PARAM.class | Bin 0 -> 476 bytes idl/orb/.class/org/omg/CORBA/BAD_POLICY.class | Bin 0 -> 125 bytes .../org/omg/CORBA/BAD_POLICY_TYPE.class | Bin 0 -> 130 bytes .../org/omg/CORBA/BAD_POLICY_VALUE.class | Bin 0 -> 131 bytes .../.class/org/omg/CORBA/BAD_TYPECODE.class | Bin 0 -> 479 bytes .../.class/org/omg/CORBA/BadFixedValue.class | Bin 0 -> 554 bytes .../org/omg/CORBA/BadFixedValueHelper.class | Bin 0 -> 2381 bytes .../org/omg/CORBA/BadFixedValueHolder.class | Bin 0 -> 790 bytes .../.class/org/omg/CORBA/BooleanHolder.class | Bin 0 -> 857 bytes .../org/omg/CORBA/BooleanSeqHelper.class | Bin 0 -> 1989 bytes .../org/omg/CORBA/BooleanSeqHolder.class | Bin 0 -> 683 bytes idl/orb/.class/org/omg/CORBA/Bounds.class | Bin 0 -> 441 bytes idl/orb/.class/org/omg/CORBA/ByteHolder.class | Bin 0 -> 848 bytes .../org/omg/CORBA/CODESET_INCOMPATIBLE.class | Bin 0 -> 487 bytes .../.class/org/omg/CORBA/COMM_FAILURE.class | Bin 0 -> 479 bytes .../org/omg/CORBA/CTX_RESTRICT_SCOPE.class | Bin 0 -> 133 bytes idl/orb/.class/org/omg/CORBA/CharHolder.class | Bin 0 -> 845 bytes .../.class/org/omg/CORBA/CharSeqHelper.class | Bin 0 -> 1968 bytes .../.class/org/omg/CORBA/CharSeqHolder.class | Bin 0 -> 677 bytes .../org/omg/CORBA/CompletionStatus.class | Bin 0 -> 841 bytes .../.class/org/omg/CORBA/ConstantDef.class | Bin 0 -> 219 bytes .../org/omg/CORBA/ConstantDefHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/ConstantDefHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/ConstantDefOperations.class | Bin 0 -> 329 bytes .../.class/org/omg/CORBA/ConstantDefPOA.class | Bin 0 -> 5405 bytes .../org/omg/CORBA/ConstantDefPOATie.class | Bin 0 -> 2106 bytes .../org/omg/CORBA/ConstantDescription.class | Bin 0 -> 631 bytes .../omg/CORBA/ConstantDescriptionHelper.class | Bin 0 -> 2835 bytes .../omg/CORBA/ConstantDescriptionHolder.class | Bin 0 -> 826 bytes .../org/omg/CORBA/ConstructionPolicy.class | Bin 0 -> 230 bytes .../omg/CORBA/ConstructionPolicyHelper.class | Bin 0 -> 2251 bytes .../omg/CORBA/ConstructionPolicyHolder.class | Bin 0 -> 820 bytes .../CORBA/ConstructionPolicyOperations.class | Bin 0 -> 197 bytes .../org/omg/CORBA/ConstructionPolicyPOA.class | Bin 0 -> 3033 bytes .../omg/CORBA/ConstructionPolicyPOATie.class | Bin 0 -> 1048 bytes idl/orb/.class/org/omg/CORBA/Contained.class | Bin 0 -> 214 bytes .../org/omg/CORBA/ContainedHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/ContainedHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/ContainedOperations.class | Bin 0 -> 530 bytes .../.class/org/omg/CORBA/ContainedPOA.class | Bin 0 -> 4467 bytes .../org/omg/CORBA/ContainedPOATie.class | Bin 0 -> 1657 bytes .../CORBA/ContainedPackage/Description.class | Bin 0 -> 399 bytes .../ContainedPackage/DescriptionHelper.class | Bin 0 -> 2617 bytes .../ContainedPackage/DescriptionHolder.class | Bin 0 -> 880 bytes .../org/omg/CORBA/ContainedSeqHelper.class | Bin 0 -> 2146 bytes .../org/omg/CORBA/ContainedSeqHolder.class | Bin 0 -> 813 bytes idl/orb/.class/org/omg/CORBA/Container.class | Bin 0 -> 214 bytes .../org/omg/CORBA/ContainerHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/ContainerHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/ContainerOperations.class | Bin 0 -> 2038 bytes .../.class/org/omg/CORBA/ContainerPOA.class | Bin 0 -> 10868 bytes .../org/omg/CORBA/ContainerPOATie.class | Bin 0 -> 3391 bytes .../CORBA/ContainerPackage/Description.class | Bin 0 -> 494 bytes .../ContainerPackage/DescriptionHelper.class | Bin 0 -> 2903 bytes .../ContainerPackage/DescriptionHolder.class | Bin 0 -> 880 bytes .../DescriptionSeqHelper.class | Bin 0 -> 2388 bytes .../DescriptionSeqHolder.class | Bin 0 -> 946 bytes idl/orb/.class/org/omg/CORBA/Context.class | Bin 0 -> 545 bytes .../org/omg/CORBA/ContextIdSeqHelper.class | Bin 0 -> 2091 bytes .../org/omg/CORBA/ContextIdSeqHolder.class | Bin 0 -> 778 bytes .../omg/CORBA/ContextIdentifierHelper.class | Bin 0 -> 1851 bytes .../.class/org/omg/CORBA/ContextList.class | Bin 0 -> 322 bytes idl/orb/.class/org/omg/CORBA/Current.class | Bin 0 -> 180 bytes .../.class/org/omg/CORBA/CurrentHelper.class | Bin 0 -> 2130 bytes .../.class/org/omg/CORBA/CurrentHolder.class | Bin 0 -> 754 bytes .../org/omg/CORBA/CurrentOperations.class | Bin 0 -> 83 bytes idl/orb/.class/org/omg/CORBA/CurrentPOA.class | Bin 0 -> 1357 bytes .../.class/org/omg/CORBA/CurrentPOATie.class | Bin 0 -> 625 bytes .../.class/org/omg/CORBA/CustomMarshal.class | Bin 0 -> 232 bytes .../org/omg/CORBA/CustomMarshalHelper.class | Bin 0 -> 1851 bytes .../org/omg/CORBA/CustomMarshalHolder.class | Bin 0 -> 790 bytes .../org/omg/CORBA/DATA_CONVERSION.class | Bin 0 -> 482 bytes .../org/omg/CORBA/DataInputStream.class | Bin 0 -> 1775 bytes .../org/omg/CORBA/DataInputStreamHelper.class | Bin 0 -> 1869 bytes .../org/omg/CORBA/DataInputStreamHolder.class | Bin 0 -> 802 bytes .../org/omg/CORBA/DataOutputStream.class | Bin 0 -> 1367 bytes .../omg/CORBA/DataOutputStreamHelper.class | Bin 0 -> 1878 bytes .../omg/CORBA/DataOutputStreamHolder.class | Bin 0 -> 808 bytes .../.class/org/omg/CORBA/DefinitionKind.class | Bin 0 -> 2709 bytes .../org/omg/CORBA/DefinitionKindHelper.class | Bin 0 -> 2415 bytes .../org/omg/CORBA/DefinitionKindHolder.class | Bin 0 -> 796 bytes .../.class/org/omg/CORBA/DomainManager.class | Bin 0 -> 192 bytes .../org/omg/CORBA/DomainManagerHelper.class | Bin 0 -> 2196 bytes .../org/omg/CORBA/DomainManagerHolder.class | Bin 0 -> 790 bytes .../omg/CORBA/DomainManagerListHelper.class | Bin 0 -> 2206 bytes .../omg/CORBA/DomainManagerListHolder.class | Bin 0 -> 843 bytes .../omg/CORBA/DomainManagerOperations.class | Bin 0 -> 145 bytes .../org/omg/CORBA/DomainManagerPOA.class | Bin 0 -> 2441 bytes .../org/omg/CORBA/DomainManagerPOATie.class | Bin 0 -> 762 bytes .../.class/org/omg/CORBA/DoubleHolder.class | Bin 0 -> 853 bytes .../org/omg/CORBA/DoubleSeqHelper.class | Bin 0 -> 1982 bytes .../org/omg/CORBA/DoubleSeqHolder.class | Bin 0 -> 681 bytes .../org/omg/CORBA/DynamicImplementation.class | Bin 0 -> 307 bytes idl/orb/.class/org/omg/CORBA/EnumDef.class | Bin 0 -> 212 bytes .../.class/org/omg/CORBA/EnumDefHelper.class | Bin 0 -> 2130 bytes .../.class/org/omg/CORBA/EnumDefHolder.class | Bin 0 -> 754 bytes .../org/omg/CORBA/EnumDefOperations.class | Bin 0 -> 200 bytes idl/orb/.class/org/omg/CORBA/EnumDefPOA.class | Bin 0 -> 5174 bytes .../.class/org/omg/CORBA/EnumDefPOATie.class | Bin 0 -> 2002 bytes .../org/omg/CORBA/EnumMemberSeqHelper.class | Bin 0 -> 2088 bytes .../org/omg/CORBA/EnumMemberSeqHolder.class | Bin 0 -> 780 bytes .../.class/org/omg/CORBA/Environment.class | Bin 0 -> 237 bytes .../omg/CORBA/ExcDescriptionSeqHelper.class | Bin 0 -> 2276 bytes .../omg/CORBA/ExcDescriptionSeqHolder.class | Bin 0 -> 878 bytes .../.class/org/omg/CORBA/ExceptionDef.class | Bin 0 -> 252 bytes .../org/omg/CORBA/ExceptionDefHelper.class | Bin 0 -> 2185 bytes .../org/omg/CORBA/ExceptionDefHolder.class | Bin 0 -> 784 bytes .../omg/CORBA/ExceptionDefOperations.class | Bin 0 -> 309 bytes .../org/omg/CORBA/ExceptionDefPOA.class | Bin 0 -> 13358 bytes .../org/omg/CORBA/ExceptionDefPOATie.class | Bin 0 -> 4579 bytes .../org/omg/CORBA/ExceptionDefSeqHelper.class | Bin 0 -> 2188 bytes .../org/omg/CORBA/ExceptionDefSeqHolder.class | Bin 0 -> 834 bytes .../org/omg/CORBA/ExceptionDescription.class | Bin 0 -> 559 bytes .../CORBA/ExceptionDescriptionHelper.class | Bin 0 -> 2661 bytes .../CORBA/ExceptionDescriptionHolder.class | Bin 0 -> 832 bytes .../.class/org/omg/CORBA/ExceptionList.class | Bin 0 -> 336 bytes idl/orb/.class/org/omg/CORBA/FREE_MEM.class | Bin 0 -> 475 bytes idl/orb/.class/org/omg/CORBA/FixedDef.class | Bin 0 -> 211 bytes .../.class/org/omg/CORBA/FixedDefHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/FixedDefHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/FixedDefOperations.class | Bin 0 -> 185 bytes .../.class/org/omg/CORBA/FixedDefPOA.class | Bin 0 -> 3289 bytes .../.class/org/omg/CORBA/FixedDefPOATie.class | Bin 0 -> 1159 bytes .../.class/org/omg/CORBA/FlagsHelper.class | Bin 0 -> 1713 bytes .../.class/org/omg/CORBA/FloatHolder.class | Bin 0 -> 849 bytes .../.class/org/omg/CORBA/FloatSeqHelper.class | Bin 0 -> 1975 bytes .../.class/org/omg/CORBA/FloatSeqHolder.class | Bin 0 -> 679 bytes idl/orb/.class/org/omg/CORBA/IDLType.class | Bin 0 -> 210 bytes .../.class/org/omg/CORBA/IDLTypeHelper.class | Bin 0 -> 2130 bytes .../.class/org/omg/CORBA/IDLTypeHolder.class | Bin 0 -> 754 bytes .../org/omg/CORBA/IDLTypeOperations.class | Bin 0 -> 167 bytes idl/orb/.class/org/omg/CORBA/IDLTypePOA.class | Bin 0 -> 2313 bytes .../.class/org/omg/CORBA/IDLTypePOATie.class | Bin 0 -> 896 bytes idl/orb/.class/org/omg/CORBA/IMP_LIMIT.class | Bin 0 -> 476 bytes idl/orb/.class/org/omg/CORBA/INITIALIZE.class | Bin 0 -> 477 bytes idl/orb/.class/org/omg/CORBA/INTERNAL.class | Bin 0 -> 475 bytes idl/orb/.class/org/omg/CORBA/INTF_REPOS.class | Bin 0 -> 477 bytes .../org/omg/CORBA/INVALID_TRANSACTION.class | Bin 0 -> 486 bytes idl/orb/.class/org/omg/CORBA/INV_FLAG.class | Bin 0 -> 475 bytes idl/orb/.class/org/omg/CORBA/INV_IDENT.class | Bin 0 -> 476 bytes idl/orb/.class/org/omg/CORBA/INV_OBJREF.class | Bin 0 -> 477 bytes idl/orb/.class/org/omg/CORBA/INV_POLICY.class | Bin 0 -> 477 bytes idl/orb/.class/org/omg/CORBA/IRObject.class | Bin 0 -> 182 bytes .../.class/org/omg/CORBA/IRObjectHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/IRObjectHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/IRObjectOperations.class | Bin 0 -> 162 bytes .../.class/org/omg/CORBA/IRObjectPOA.class | Bin 0 -> 2062 bytes .../.class/org/omg/CORBA/IRObjectPOATie.class | Bin 0 -> 780 bytes .../org/omg/CORBA/IdentifierHelper.class | Bin 0 -> 1830 bytes .../.class/org/omg/CORBA/Initializer.class | Bin 0 -> 392 bytes .../org/omg/CORBA/InitializerHelper.class | Bin 0 -> 2445 bytes .../org/omg/CORBA/InitializerHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/InitializerSeqHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/InitializerSeqHolder.class | Bin 0 -> 827 bytes idl/orb/.class/org/omg/CORBA/IntHolder.class | Bin 0 -> 844 bytes .../.class/org/omg/CORBA/InterfaceDef.class | Bin 0 -> 281 bytes .../org/omg/CORBA/InterfaceDefHelper.class | Bin 0 -> 2185 bytes .../org/omg/CORBA/InterfaceDefHolder.class | Bin 0 -> 784 bytes .../omg/CORBA/InterfaceDefOperations.class | Bin 0 -> 905 bytes .../org/omg/CORBA/InterfaceDefPOA.class | Bin 0 -> 16015 bytes .../org/omg/CORBA/InterfaceDefPOATie.class | Bin 0 -> 5470 bytes .../FullInterfaceDescription.class | Bin 0 -> 967 bytes .../FullInterfaceDescriptionHelper.class | Bin 0 -> 3979 bytes .../FullInterfaceDescriptionHolder.class | Bin 0 -> 976 bytes .../org/omg/CORBA/InterfaceDefSeqHelper.class | Bin 0 -> 2188 bytes .../org/omg/CORBA/InterfaceDefSeqHolder.class | Bin 0 -> 834 bytes .../org/omg/CORBA/InterfaceDescription.class | Bin 0 -> 633 bytes .../CORBA/InterfaceDescriptionHelper.class | Bin 0 -> 2855 bytes .../CORBA/InterfaceDescriptionHolder.class | Bin 0 -> 832 bytes .../org/omg/CORBA/InvalidPolicies.class | Bin 0 -> 562 bytes .../org/omg/CORBA/InvalidPoliciesHelper.class | Bin 0 -> 2644 bytes .../org/omg/CORBA/InvalidPoliciesHolder.class | Bin 0 -> 802 bytes .../.class/org/omg/CORBA/LocalInterface.class | Bin 0 -> 108 bytes .../.class/org/omg/CORBA/LocalObject.class | Bin 0 -> 2581 bytes idl/orb/.class/org/omg/CORBA/LongHolder.class | Bin 0 -> 857 bytes .../org/omg/CORBA/LongLongSeqHelper.class | Bin 0 -> 1996 bytes .../org/omg/CORBA/LongLongSeqHolder.class | Bin 0 -> 685 bytes .../.class/org/omg/CORBA/LongSeqHelper.class | Bin 0 -> 1955 bytes .../.class/org/omg/CORBA/LongSeqHolder.class | Bin 0 -> 677 bytes idl/orb/.class/org/omg/CORBA/MARSHAL.class | Bin 0 -> 474 bytes idl/orb/.class/org/omg/CORBA/ModuleDef.class | Bin 0 -> 246 bytes .../org/omg/CORBA/ModuleDefHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/ModuleDefHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/ModuleDefOperations.class | Bin 0 -> 167 bytes .../.class/org/omg/CORBA/ModuleDefPOA.class | Bin 0 -> 12821 bytes .../org/omg/CORBA/ModuleDefPOATie.class | Bin 0 -> 4304 bytes .../org/omg/CORBA/ModuleDescription.class | Bin 0 -> 474 bytes .../omg/CORBA/ModuleDescriptionHelper.class | Bin 0 -> 2387 bytes .../omg/CORBA/ModuleDescriptionHolder.class | Bin 0 -> 814 bytes .../.class/org/omg/CORBA/NO_IMPLEMENT.class | Bin 0 -> 479 bytes idl/orb/.class/org/omg/CORBA/NO_MEMORY.class | Bin 0 -> 476 bytes .../.class/org/omg/CORBA/NO_PERMISSION.class | Bin 0 -> 480 bytes .../.class/org/omg/CORBA/NO_RESOURCES.class | Bin 0 -> 479 bytes .../.class/org/omg/CORBA/NO_RESPONSE.class | Bin 0 -> 478 bytes idl/orb/.class/org/omg/CORBA/NVList.class | Bin 0 -> 459 bytes idl/orb/.class/org/omg/CORBA/NamedValue.class | Bin 0 -> 239 bytes idl/orb/.class/org/omg/CORBA/NativeDef.class | Bin 0 -> 216 bytes .../org/omg/CORBA/NativeDefHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/NativeDefHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/NativeDefOperations.class | Bin 0 -> 127 bytes .../.class/org/omg/CORBA/NativeDefPOA.class | Bin 0 -> 4773 bytes .../org/omg/CORBA/NativeDefPOATie.class | Bin 0 -> 1864 bytes .../org/omg/CORBA/OBJECT_NOT_EXIST.class | Bin 0 -> 483 bytes .../.class/org/omg/CORBA/OBJ_ADAPTER.class | Bin 0 -> 478 bytes idl/orb/.class/org/omg/CORBA/OMGVMCID.class | Bin 0 -> 123 bytes idl/orb/.class/org/omg/CORBA/ORB.class | Bin 0 -> 5466 bytes .../omg/CORBA/ORBPackage/InvalidName.class | Bin 0 -> 475 bytes idl/orb/.class/org/omg/CORBA/Object.class | Bin 0 -> 1014 bytes .../.class/org/omg/CORBA/ObjectHolder.class | Bin 0 -> 916 bytes .../.class/org/omg/CORBA/OctetSeqHelper.class | Bin 0 -> 1975 bytes .../.class/org/omg/CORBA/OctetSeqHolder.class | Bin 0 -> 679 bytes .../omg/CORBA/OpDescriptionSeqHelper.class | Bin 0 -> 2272 bytes .../omg/CORBA/OpDescriptionSeqHolder.class | Bin 0 -> 876 bytes .../.class/org/omg/CORBA/OperationDef.class | Bin 0 -> 221 bytes .../org/omg/CORBA/OperationDefHelper.class | Bin 0 -> 2185 bytes .../org/omg/CORBA/OperationDefHolder.class | Bin 0 -> 784 bytes .../omg/CORBA/OperationDefOperations.class | Bin 0 -> 637 bytes .../org/omg/CORBA/OperationDefPOA.class | Bin 0 -> 6978 bytes .../org/omg/CORBA/OperationDefPOATie.class | Bin 0 -> 2651 bytes .../org/omg/CORBA/OperationDescription.class | Bin 0 -> 987 bytes .../CORBA/OperationDescriptionHelper.class | Bin 0 -> 3875 bytes .../CORBA/OperationDescriptionHolder.class | Bin 0 -> 832 bytes .../.class/org/omg/CORBA/OperationMode.class | Bin 0 -> 802 bytes .../org/omg/CORBA/OperationModeHelper.class | Bin 0 -> 1922 bytes .../org/omg/CORBA/OperationModeHolder.class | Bin 0 -> 790 bytes .../.class/org/omg/CORBA/PERSIST_STORE.class | Bin 0 -> 480 bytes .../.class/org/omg/CORBA/PRIVATE_MEMBER.class | Bin 0 -> 129 bytes .../.class/org/omg/CORBA/PUBLIC_MEMBER.class | Bin 0 -> 128 bytes .../omg/CORBA/ParDescriptionSeqHelper.class | Bin 0 -> 2276 bytes .../omg/CORBA/ParDescriptionSeqHolder.class | Bin 0 -> 878 bytes .../org/omg/CORBA/ParameterDescription.class | Bin 0 -> 563 bytes .../CORBA/ParameterDescriptionHelper.class | Bin 0 -> 3045 bytes .../CORBA/ParameterDescriptionHolder.class | Bin 0 -> 832 bytes .../.class/org/omg/CORBA/ParameterMode.class | Bin 0 -> 884 bytes .../org/omg/CORBA/ParameterModeHelper.class | Bin 0 -> 1943 bytes .../org/omg/CORBA/ParameterModeHolder.class | Bin 0 -> 790 bytes idl/orb/.class/org/omg/CORBA/Policy.class | Bin 0 -> 178 bytes .../.class/org/omg/CORBA/PolicyCurrent.class | Bin 0 -> 264 bytes .../org/omg/CORBA/PolicyCurrentHelper.class | Bin 0 -> 1917 bytes .../org/omg/CORBA/PolicyCurrentHolder.class | Bin 0 -> 790 bytes .../omg/CORBA/PolicyCurrentLocalBase.class | Bin 0 -> 527 bytes .../org/omg/CORBA/PolicyCurrentLocalTie.class | Bin 0 -> 699 bytes .../omg/CORBA/PolicyCurrentOperations.class | Bin 0 -> 173 bytes .../.class/org/omg/CORBA/PolicyError.class | Bin 0 -> 550 bytes .../org/omg/CORBA/PolicyErrorCodeHelper.class | Bin 0 -> 1745 bytes .../org/omg/CORBA/PolicyErrorHelper.class | Bin 0 -> 2359 bytes .../org/omg/CORBA/PolicyErrorHolder.class | Bin 0 -> 778 bytes .../.class/org/omg/CORBA/PolicyHelper.class | Bin 0 -> 2119 bytes .../.class/org/omg/CORBA/PolicyHolder.class | Bin 0 -> 748 bytes .../org/omg/CORBA/PolicyListHelper.class | Bin 0 -> 2108 bytes .../org/omg/CORBA/PolicyListHolder.class | Bin 0 -> 794 bytes .../.class/org/omg/CORBA/PolicyManager.class | Bin 0 -> 200 bytes .../org/omg/CORBA/PolicyManagerHelper.class | Bin 0 -> 1917 bytes .../org/omg/CORBA/PolicyManagerHolder.class | Bin 0 -> 790 bytes .../omg/CORBA/PolicyManagerLocalBase.class | Bin 0 -> 441 bytes .../org/omg/CORBA/PolicyManagerLocalTie.class | Bin 0 -> 699 bytes .../omg/CORBA/PolicyManagerOperations.class | Bin 0 -> 299 bytes .../org/omg/CORBA/PolicyOperations.class | Bin 0 -> 176 bytes idl/orb/.class/org/omg/CORBA/PolicyPOA.class | Bin 0 -> 2102 bytes .../.class/org/omg/CORBA/PolicyPOATie.class | Bin 0 -> 820 bytes .../org/omg/CORBA/PolicyTypeHelper.class | Bin 0 -> 1728 bytes .../org/omg/CORBA/PolicyTypeSeqHelper.class | Bin 0 -> 1929 bytes .../org/omg/CORBA/PolicyTypeSeqHolder.class | Bin 0 -> 689 bytes .../.class/org/omg/CORBA/PrimitiveDef.class | Bin 0 -> 219 bytes .../org/omg/CORBA/PrimitiveDefHelper.class | Bin 0 -> 2185 bytes .../org/omg/CORBA/PrimitiveDefHolder.class | Bin 0 -> 784 bytes .../omg/CORBA/PrimitiveDefOperations.class | Bin 0 -> 176 bytes .../org/omg/CORBA/PrimitiveDefPOA.class | Bin 0 -> 2624 bytes .../org/omg/CORBA/PrimitiveDefPOATie.class | Bin 0 -> 1058 bytes .../.class/org/omg/CORBA/PrimitiveKind.class | Bin 0 -> 2504 bytes .../org/omg/CORBA/PrimitiveKindHelper.class | Bin 0 -> 2345 bytes .../org/omg/CORBA/PrimitiveKindHolder.class | Bin 0 -> 790 bytes idl/orb/.class/org/omg/CORBA/Principal.class | Bin 0 -> 296 bytes .../org/omg/CORBA/PrincipalHolder.class | Bin 0 -> 937 bytes idl/orb/.class/org/omg/CORBA/Repository.class | Bin 0 -> 217 bytes .../org/omg/CORBA/RepositoryHelper.class | Bin 0 -> 2163 bytes .../org/omg/CORBA/RepositoryHolder.class | Bin 0 -> 772 bytes .../org/omg/CORBA/RepositoryIdHelper.class | Bin 0 -> 1836 bytes .../org/omg/CORBA/RepositoryIdSeqHelper.class | Bin 0 -> 2098 bytes .../org/omg/CORBA/RepositoryIdSeqHolder.class | Bin 0 -> 784 bytes .../org/omg/CORBA/RepositoryOperations.class | Bin 0 -> 691 bytes .../.class/org/omg/CORBA/RepositoryPOA.class | Bin 0 -> 13569 bytes .../org/omg/CORBA/RepositoryPOATie.class | Bin 0 -> 4271 bytes idl/orb/.class/org/omg/CORBA/Request.class | Bin 0 -> 1083 bytes .../org/omg/CORBA/ScopedNameHelper.class | Bin 0 -> 1830 bytes .../org/omg/CORBA/SecConstruction.class | Bin 0 -> 130 bytes idl/orb/.class/org/omg/CORBA/Security.class | Bin 0 -> 123 bytes .../.class/org/omg/CORBA/SequenceDef.class | Bin 0 -> 217 bytes .../org/omg/CORBA/SequenceDefHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/SequenceDefHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/SequenceDefOperations.class | Bin 0 -> 307 bytes .../.class/org/omg/CORBA/SequenceDefPOA.class | Bin 0 -> 3582 bytes .../org/omg/CORBA/SequenceDefPOATie.class | Bin 0 -> 1308 bytes .../.class/org/omg/CORBA/ServerRequest.class | Bin 0 -> 727 bytes .../.class/org/omg/CORBA/ServiceDetail.class | Bin 0 -> 316 bytes .../org/omg/CORBA/ServiceDetailHelper.class | Bin 0 -> 2489 bytes .../org/omg/CORBA/ServiceDetailHolder.class | Bin 0 -> 790 bytes .../omg/CORBA/ServiceDetailTypeHelper.class | Bin 0 -> 1749 bytes .../org/omg/CORBA/ServiceInformation.class | Bin 0 -> 376 bytes .../omg/CORBA/ServiceInformationHelper.class | Bin 0 -> 2800 bytes .../omg/CORBA/ServiceInformationHolder.class | Bin 0 -> 820 bytes .../org/omg/CORBA/ServiceOptionHelper.class | Bin 0 -> 1737 bytes .../org/omg/CORBA/ServiceTypeHelper.class | Bin 0 -> 1736 bytes .../org/omg/CORBA/SetOverrideType.class | Bin 0 -> 820 bytes .../org/omg/CORBA/SetOverrideTypeHelper.class | Bin 0 -> 1952 bytes .../org/omg/CORBA/SetOverrideTypeHolder.class | Bin 0 -> 802 bytes .../.class/org/omg/CORBA/ShortHolder.class | Bin 0 -> 849 bytes .../.class/org/omg/CORBA/ShortSeqHelper.class | Bin 0 -> 1975 bytes .../.class/org/omg/CORBA/ShortSeqHolder.class | Bin 0 -> 679 bytes idl/orb/.class/org/omg/CORBA/StringDef.class | Bin 0 -> 213 bytes .../org/omg/CORBA/StringDefHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/StringDefHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/StringDefOperations.class | Bin 0 -> 161 bytes .../.class/org/omg/CORBA/StringDefPOA.class | Bin 0 -> 2991 bytes .../org/omg/CORBA/StringDefPOATie.class | Bin 0 -> 1064 bytes .../.class/org/omg/CORBA/StringHolder.class | Bin 0 -> 904 bytes .../org/omg/CORBA/StringSeqHelper.class | Bin 0 -> 2118 bytes .../org/omg/CORBA/StringSeqHolder.class | Bin 0 -> 772 bytes .../org/omg/CORBA/StringValueHelper.class | Bin 0 -> 2546 bytes .../org/omg/CORBA/StringValueHolder.class | Bin 0 -> 742 bytes idl/orb/.class/org/omg/CORBA/StructDef.class | Bin 0 -> 247 bytes .../org/omg/CORBA/StructDefHelper.class | Bin 0 -> 2152 bytes .../org/omg/CORBA/StructDefHolder.class | Bin 0 -> 766 bytes .../org/omg/CORBA/StructDefOperations.class | Bin 0 -> 263 bytes .../.class/org/omg/CORBA/StructDefPOA.class | Bin 0 -> 13424 bytes .../org/omg/CORBA/StructDefPOATie.class | Bin 0 -> 4642 bytes .../.class/org/omg/CORBA/StructMember.class | Bin 0 -> 463 bytes .../org/omg/CORBA/StructMemberHelper.class | Bin 0 -> 2635 bytes .../org/omg/CORBA/StructMemberHolder.class | Bin 0 -> 784 bytes .../org/omg/CORBA/StructMemberSeqHelper.class | Bin 0 -> 2188 bytes .../org/omg/CORBA/StructMemberSeqHolder.class | Bin 0 -> 834 bytes .../org/omg/CORBA/SystemException.class | Bin 0 -> 860 bytes idl/orb/.class/org/omg/CORBA/TCKind.class | Bin 0 -> 3533 bytes .../.class/org/omg/CORBA/TCKindHelper.class | Bin 0 -> 2528 bytes .../.class/org/omg/CORBA/TCKindHolder.class | Bin 0 -> 748 bytes idl/orb/.class/org/omg/CORBA/TIMEOUT.class | Bin 0 -> 474 bytes .../org/omg/CORBA/TRANSACTION_REQUIRED.class | Bin 0 -> 487 bytes .../omg/CORBA/TRANSACTION_ROLLEDBACK.class | Bin 0 -> 489 bytes idl/orb/.class/org/omg/CORBA/TRANSIENT.class | Bin 0 -> 476 bytes idl/orb/.class/org/omg/CORBA/TypeCode.class | Bin 0 -> 1227 bytes .../.class/org/omg/CORBA/TypeCodeHelper.class | Bin 0 -> 1339 bytes .../.class/org/omg/CORBA/TypeCodeHolder.class | Bin 0 -> 901 bytes .../omg/CORBA/TypeCodePackage/BadKind.class | Bin 0 -> 478 bytes .../omg/CORBA/TypeCodePackage/Bounds.class | Bin 0 -> 475 bytes .../org/omg/CORBA/TypeDescription.class | Bin 0 -> 554 bytes .../org/omg/CORBA/TypeDescriptionHelper.class | Bin 0 -> 2606 bytes .../org/omg/CORBA/TypeDescriptionHolder.class | Bin 0 -> 802 bytes idl/orb/.class/org/omg/CORBA/TypedefDef.class | Bin 0 -> 246 bytes .../org/omg/CORBA/TypedefDefHelper.class | Bin 0 -> 2163 bytes .../org/omg/CORBA/TypedefDefHolder.class | Bin 0 -> 772 bytes .../org/omg/CORBA/TypedefDefOperations.class | Bin 0 -> 166 bytes .../.class/org/omg/CORBA/TypedefDefPOA.class | Bin 0 -> 4737 bytes .../org/omg/CORBA/TypedefDefPOATie.class | Bin 0 -> 1828 bytes .../org/omg/CORBA/ULongLongSeqHelper.class | Bin 0 -> 2003 bytes .../org/omg/CORBA/ULongLongSeqHolder.class | Bin 0 -> 687 bytes .../.class/org/omg/CORBA/ULongSeqHelper.class | Bin 0 -> 1915 bytes .../.class/org/omg/CORBA/ULongSeqHolder.class | Bin 0 -> 679 bytes idl/orb/.class/org/omg/CORBA/UNKNOWN.class | Bin 0 -> 474 bytes .../org/omg/CORBA/UNSUPPORTED_POLICY.class | Bin 0 -> 133 bytes .../omg/CORBA/UNSUPPORTED_POLICY_VALUE.class | Bin 0 -> 139 bytes .../org/omg/CORBA/UShortSeqHelper.class | Bin 0 -> 1982 bytes .../org/omg/CORBA/UShortSeqHolder.class | Bin 0 -> 681 bytes idl/orb/.class/org/omg/CORBA/UnionDef.class | Bin 0 -> 245 bytes .../.class/org/omg/CORBA/UnionDefHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/UnionDefHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/UnionDefOperations.class | Bin 0 -> 416 bytes .../.class/org/omg/CORBA/UnionDefPOA.class | Bin 0 -> 13897 bytes .../.class/org/omg/CORBA/UnionDefPOATie.class | Bin 0 -> 4875 bytes .../.class/org/omg/CORBA/UnionMember.class | Bin 0 -> 535 bytes .../org/omg/CORBA/UnionMemberHelper.class | Bin 0 -> 2848 bytes .../org/omg/CORBA/UnionMemberHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/UnionMemberSeqHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/UnionMemberSeqHolder.class | Bin 0 -> 827 bytes .../org/omg/CORBA/UnknownUserException.class | Bin 0 -> 270 bytes .../.class/org/omg/CORBA/UserException.class | Bin 0 -> 251 bytes .../.class/org/omg/CORBA/VM_ABSTRACT.class | Bin 0 -> 126 bytes idl/orb/.class/org/omg/CORBA/VM_CUSTOM.class | Bin 0 -> 124 bytes idl/orb/.class/org/omg/CORBA/VM_NONE.class | Bin 0 -> 122 bytes .../.class/org/omg/CORBA/VM_TRUNCATABLE.class | Bin 0 -> 129 bytes .../org/omg/CORBA/ValueBaseHelper.class | Bin 0 -> 1421 bytes .../org/omg/CORBA/ValueBaseHolder.class | Bin 0 -> 959 bytes .../.class/org/omg/CORBA/ValueBoxDef.class | Bin 0 -> 220 bytes .../org/omg/CORBA/ValueBoxDefHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/ValueBoxDefHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/ValueBoxDefOperations.class | Bin 0 -> 222 bytes .../.class/org/omg/CORBA/ValueBoxDefPOA.class | Bin 0 -> 5242 bytes .../org/omg/CORBA/ValueBoxDefPOATie.class | Bin 0 -> 2048 bytes idl/orb/.class/org/omg/CORBA/ValueDef.class | Bin 0 -> 273 bytes .../.class/org/omg/CORBA/ValueDefHelper.class | Bin 0 -> 2141 bytes .../.class/org/omg/CORBA/ValueDefHolder.class | Bin 0 -> 760 bytes .../org/omg/CORBA/ValueDefOperations.class | Bin 0 -> 1384 bytes .../.class/org/omg/CORBA/ValueDefPOA.class | Bin 0 -> 17930 bytes .../.class/org/omg/CORBA/ValueDefPOATie.class | Bin 0 -> 6355 bytes .../FullValueDescription.class | Bin 0 -> 1369 bytes .../FullValueDescriptionHelper.class | Bin 0 -> 4756 bytes .../FullValueDescriptionHolder.class | Bin 0 -> 928 bytes .../org/omg/CORBA/ValueDefSeqHelper.class | Bin 0 -> 2132 bytes .../org/omg/CORBA/ValueDefSeqHolder.class | Bin 0 -> 806 bytes .../org/omg/CORBA/ValueDescription.class | Bin 0 -> 848 bytes .../omg/CORBA/ValueDescriptionHelper.class | Bin 0 -> 3083 bytes .../omg/CORBA/ValueDescriptionHolder.class | Bin 0 -> 808 bytes .../.class/org/omg/CORBA/ValueMember.class | Bin 0 -> 672 bytes .../.class/org/omg/CORBA/ValueMemberDef.class | Bin 0 -> 225 bytes .../org/omg/CORBA/ValueMemberDefHelper.class | Bin 0 -> 2207 bytes .../org/omg/CORBA/ValueMemberDefHolder.class | Bin 0 -> 796 bytes .../omg/CORBA/ValueMemberDefOperations.class | Bin 0 -> 297 bytes .../org/omg/CORBA/ValueMemberDefPOA.class | Bin 0 -> 5456 bytes .../org/omg/CORBA/ValueMemberDefPOATie.class | Bin 0 -> 2092 bytes .../org/omg/CORBA/ValueMemberHelper.class | Bin 0 -> 2979 bytes .../org/omg/CORBA/ValueMemberHolder.class | Bin 0 -> 778 bytes .../org/omg/CORBA/ValueMemberSeqHelper.class | Bin 0 -> 2174 bytes .../org/omg/CORBA/ValueMemberSeqHolder.class | Bin 0 -> 827 bytes .../org/omg/CORBA/ValueModifierHelper.class | Bin 0 -> 1739 bytes .../org/omg/CORBA/VersionSpecHelper.class | Bin 0 -> 1833 bytes .../org/omg/CORBA/VisibilityHelper.class | Bin 0 -> 1730 bytes .../.class/org/omg/CORBA/WCharSeqHelper.class | Bin 0 -> 1975 bytes .../.class/org/omg/CORBA/WCharSeqHolder.class | Bin 0 -> 679 bytes .../org/omg/CORBA/WStringSeqHelper.class | Bin 0 -> 2125 bytes .../org/omg/CORBA/WStringSeqHolder.class | Bin 0 -> 774 bytes .../org/omg/CORBA/WStringValueHelper.class | Bin 0 -> 2553 bytes .../org/omg/CORBA/WStringValueHolder.class | Bin 0 -> 744 bytes .../org/omg/CORBA/WrongTransaction.class | Bin 0 -> 471 bytes idl/orb/.class/org/omg/CORBA/WstringDef.class | Bin 0 -> 215 bytes .../org/omg/CORBA/WstringDefHelper.class | Bin 0 -> 2163 bytes .../org/omg/CORBA/WstringDefHolder.class | Bin 0 -> 772 bytes .../org/omg/CORBA/WstringDefOperations.class | Bin 0 -> 162 bytes .../.class/org/omg/CORBA/WstringDefPOA.class | Bin 0 -> 2998 bytes .../org/omg/CORBA/WstringDefPOATie.class | Bin 0 -> 1071 bytes .../.class/org/omg/CORBA/_AliasDefStub.class | Bin 0 -> 4565 bytes .../.class/org/omg/CORBA/_ArrayDefStub.class | Bin 0 -> 2712 bytes .../org/omg/CORBA/_AttributeDefStub.class | Bin 0 -> 4920 bytes .../org/omg/CORBA/_ConstantDefStub.class | Bin 0 -> 4777 bytes .../omg/CORBA/_ConstructionPolicyStub.class | Bin 0 -> 2207 bytes .../.class/org/omg/CORBA/_ContainedStub.class | Bin 0 -> 3781 bytes .../.class/org/omg/CORBA/_ContainerStub.class | Bin 0 -> 9420 bytes .../.class/org/omg/CORBA/_CurrentStub.class | Bin 0 -> 403 bytes .../org/omg/CORBA/_DomainManagerStub.class | Bin 0 -> 1352 bytes .../.class/org/omg/CORBA/_EnumDefStub.class | Bin 0 -> 4498 bytes .../org/omg/CORBA/_ExceptionDefStub.class | Bin 0 -> 12332 bytes .../.class/org/omg/CORBA/_FixedDefStub.class | Bin 0 -> 2415 bytes .../.class/org/omg/CORBA/_IDLTypeStub.class | Bin 0 -> 1521 bytes .../.class/org/omg/CORBA/_IRObjectStub.class | Bin 0 -> 1283 bytes .../org/omg/CORBA/_InterfaceDefStub.class | Bin 0 -> 15028 bytes .../.class/org/omg/CORBA/_ModuleDefStub.class | Bin 0 -> 11774 bytes .../.class/org/omg/CORBA/_NativeDefStub.class | Bin 0 -> 4106 bytes .../org/omg/CORBA/_OperationDefStub.class | Bin 0 -> 6305 bytes .../.class/org/omg/CORBA/_PolicyStub.class | Bin 0 -> 1647 bytes .../org/omg/CORBA/_PrimitiveDefStub.class | Bin 0 -> 1827 bytes .../org/omg/CORBA/_RepositoryStub.class | Bin 0 -> 12062 bytes .../org/omg/CORBA/_SequenceDefStub.class | Bin 0 -> 2718 bytes .../.class/org/omg/CORBA/_StringDefStub.class | Bin 0 -> 2118 bytes .../.class/org/omg/CORBA/_StructDefStub.class | Bin 0 -> 12407 bytes .../org/omg/CORBA/_TypedefDefStub.class | Bin 0 -> 4066 bytes .../.class/org/omg/CORBA/_UnionDefStub.class | Bin 0 -> 12904 bytes .../org/omg/CORBA/_ValueBoxDefStub.class | Bin 0 -> 4574 bytes .../.class/org/omg/CORBA/_ValueDefStub.class | Bin 0 -> 16922 bytes .../org/omg/CORBA/_ValueMemberDefStub.class | Bin 0 -> 4783 bytes .../org/omg/CORBA/_WstringDefStub.class | Bin 0 -> 2121 bytes .../CORBA/portable/ApplicationException.class | Bin 0 -> 490 bytes .../omg/CORBA/portable/BoxedValueHelper.class | Bin 0 -> 302 bytes .../org/omg/CORBA/portable/CustomValue.class | Bin 0 -> 161 bytes .../org/omg/CORBA/portable/Delegate.class | Bin 0 -> 2992 bytes .../org/omg/CORBA/portable/IDLEntity.class | Bin 0 -> 112 bytes .../CORBA/portable/IndirectionException.class | Bin 0 -> 373 bytes .../org/omg/CORBA/portable/InputStream.class | Bin 0 -> 1715 bytes .../omg/CORBA/portable/InvokeHandler.class | Bin 0 -> 300 bytes .../org/omg/CORBA/portable/ObjectImpl.class | Bin 0 -> 4848 bytes .../org/omg/CORBA/portable/OutputStream.class | Bin 0 -> 1746 bytes .../CORBA/portable/RemarshalException.class | Bin 0 -> 159 bytes .../omg/CORBA/portable/ResponseHandler.class | Bin 0 -> 185 bytes .../omg/CORBA/portable/ServantObject.class | Bin 0 -> 190 bytes .../org/omg/CORBA/portable/Streamable.class | Bin 0 -> 248 bytes .../omg/CORBA/portable/StreamableValue.class | Bin 0 -> 171 bytes .../omg/CORBA/portable/UnknownException.class | Bin 0 -> 413 bytes .../org/omg/CORBA/portable/ValueBase.class | Bin 0 -> 175 bytes .../org/omg/CORBA/portable/ValueFactory.class | Bin 0 -> 175 bytes idl/orb/.class/org/omg/CORBA_2_3/ORB.class | Bin 0 -> 752 bytes .../org/omg/CORBA_2_3/portable/Delegate.class | Bin 0 -> 253 bytes .../omg/CORBA_2_3/portable/InputStream.class | Bin 0 -> 781 bytes .../omg/CORBA_2_3/portable/ObjectImpl.class | Bin 0 -> 499 bytes .../omg/CORBA_2_3/portable/OutputStream.class | Bin 0 -> 633 bytes idl/orb/.class/org/omg/CORBA_2_5/ORB.class | Bin 0 -> 541 bytes .../omg/PortableServer/AdapterActivator.class | Bin 0 -> 224 bytes .../AdapterActivatorHelper.class | Bin 0 -> 2028 bytes .../AdapterActivatorHolder.class | Bin 0 -> 862 bytes .../AdapterActivatorLocalBase.class | Bin 0 -> 477 bytes .../AdapterActivatorLocalTie.class | Bin 0 -> 600 bytes .../AdapterActivatorOperations.class | Bin 0 -> 179 bytes .../org/omg/PortableServer/Current.class | Bin 0 -> 235 bytes .../omg/PortableServer/CurrentHelper.class | Bin 0 -> 1938 bytes .../omg/PortableServer/CurrentHolder.class | Bin 0 -> 808 bytes .../omg/PortableServer/CurrentLocalBase.class | Bin 0 -> 490 bytes .../omg/PortableServer/CurrentLocalTie.class | Bin 0 -> 878 bytes .../PortableServer/CurrentOperations.class | Bin 0 -> 429 bytes .../CurrentPackage/NoContext.class | Bin 0 -> 487 bytes .../CurrentPackage/NoContextHelper.class | Bin 0 -> 2213 bytes .../CurrentPackage/NoContextHolder.class | Bin 0 -> 910 bytes .../DynamicImplementation.class | Bin 0 -> 225 bytes .../omg/PortableServer/ForwardRequest.class | Bin 0 -> 648 bytes .../PortableServer/ForwardRequestHelper.class | Bin 0 -> 2559 bytes .../PortableServer/ForwardRequestHolder.class | Bin 0 -> 850 bytes .../ID_ASSIGNMENT_POLICY_ID.class | Bin 0 -> 147 bytes .../ID_UNIQUENESS_POLICY_ID.class | Bin 0 -> 147 bytes .../IMPLICIT_ACTIVATION_POLICY_ID.class | Bin 0 -> 153 bytes .../PortableServer/IdAssignmentPolicy.class | Bin 0 -> 256 bytes .../IdAssignmentPolicyHelper.class | Bin 0 -> 2048 bytes .../IdAssignmentPolicyHolder.class | Bin 0 -> 874 bytes .../IdAssignmentPolicyLocalBase.class | Bin 0 -> 522 bytes .../IdAssignmentPolicyLocalTie.class | Bin 0 -> 803 bytes .../IdAssignmentPolicyOperations.class | Bin 0 -> 210 bytes .../IdAssignmentPolicyValue.class | Bin 0 -> 855 bytes .../IdAssignmentPolicyValueHelper.class | Bin 0 -> 2139 bytes .../IdAssignmentPolicyValueHolder.class | Bin 0 -> 904 bytes .../PortableServer/IdUniquenessPolicy.class | Bin 0 -> 256 bytes .../IdUniquenessPolicyHelper.class | Bin 0 -> 2048 bytes .../IdUniquenessPolicyHolder.class | Bin 0 -> 874 bytes .../IdUniquenessPolicyLocalBase.class | Bin 0 -> 522 bytes .../IdUniquenessPolicyLocalTie.class | Bin 0 -> 803 bytes .../IdUniquenessPolicyOperations.class | Bin 0 -> 210 bytes .../IdUniquenessPolicyValue.class | Bin 0 -> 863 bytes .../IdUniquenessPolicyValueHelper.class | Bin 0 -> 2143 bytes .../IdUniquenessPolicyValueHolder.class | Bin 0 -> 904 bytes .../ImplicitActivationPolicy.class | Bin 0 -> 268 bytes .../ImplicitActivationPolicyHelper.class | Bin 0 -> 2108 bytes .../ImplicitActivationPolicyHolder.class | Bin 0 -> 910 bytes .../ImplicitActivationPolicyLocalBase.class | Bin 0 -> 540 bytes .../ImplicitActivationPolicyLocalTie.class | Bin 0 -> 845 bytes .../ImplicitActivationPolicyOperations.class | Bin 0 -> 222 bytes .../ImplicitActivationPolicyValue.class | Bin 0 -> 923 bytes .../ImplicitActivationPolicyValueHelper.class | Bin 0 -> 2236 bytes .../ImplicitActivationPolicyValueHolder.class | Bin 0 -> 940 bytes .../PortableServer/LIFESPAN_POLICY_ID.class | Bin 0 -> 142 bytes .../omg/PortableServer/LifespanPolicy.class | Bin 0 -> 248 bytes .../PortableServer/LifespanPolicyHelper.class | Bin 0 -> 2008 bytes .../PortableServer/LifespanPolicyHolder.class | Bin 0 -> 850 bytes .../LifespanPolicyLocalBase.class | Bin 0 -> 510 bytes .../LifespanPolicyLocalTie.class | Bin 0 -> 775 bytes .../LifespanPolicyOperations.class | Bin 0 -> 202 bytes .../PortableServer/LifespanPolicyValue.class | Bin 0 -> 849 bytes .../LifespanPolicyValueHelper.class | Bin 0 -> 2094 bytes .../LifespanPolicyValueHolder.class | Bin 0 -> 880 bytes .../omg/PortableServer/ObjectIdHelper.class | Bin 0 -> 1518 bytes .../.class/org/omg/PortableServer/POA.class | Bin 0 -> 198 bytes .../org/omg/PortableServer/POAHelper.class | Bin 0 -> 1898 bytes .../org/omg/PortableServer/POAHolder.class | Bin 0 -> 784 bytes .../omg/PortableServer/POAListHelper.class | Bin 0 -> 2183 bytes .../omg/PortableServer/POAListHolder.class | Bin 0 -> 836 bytes .../org/omg/PortableServer/POALocalBase.class | Bin 0 -> 438 bytes .../org/omg/PortableServer/POALocalTie.class | Bin 0 -> 4917 bytes .../org/omg/PortableServer/POAManager.class | Bin 0 -> 212 bytes .../omg/PortableServer/POAManagerHelper.class | Bin 0 -> 1968 bytes .../omg/PortableServer/POAManagerHolder.class | Bin 0 -> 826 bytes .../PortableServer/POAManagerLocalBase.class | Bin 0 -> 459 bytes .../PortableServer/POAManagerLocalTie.class | Bin 0 -> 934 bytes .../PortableServer/POAManagerOperations.class | Bin 0 -> 395 bytes .../POAManagerPackage/AdapterInactive.class | Bin 0 -> 505 bytes .../AdapterInactiveHelper.class | Bin 0 -> 2309 bytes .../AdapterInactiveHolder.class | Bin 0 -> 964 bytes .../POAManagerPackage/State.class | Bin 0 -> 1013 bytes .../POAManagerPackage/StateHelper.class | Bin 0 -> 2151 bytes .../POAManagerPackage/StateHolder.class | Bin 0 -> 904 bytes .../omg/PortableServer/POAOperations.class | Bin 0 -> 3355 bytes .../POAPackage/AdapterAlreadyExists.class | Bin 0 -> 501 bytes .../AdapterAlreadyExistsHelper.class | Bin 0 -> 2294 bytes .../AdapterAlreadyExistsHolder.class | Bin 0 -> 952 bytes .../POAPackage/AdapterNonExistent.class | Bin 0 -> 497 bytes .../POAPackage/AdapterNonExistentHelper.class | Bin 0 -> 2272 bytes .../POAPackage/AdapterNonExistentHolder.class | Bin 0 -> 940 bytes .../POAPackage/InvalidPolicy.class | Bin 0 -> 593 bytes .../POAPackage/InvalidPolicyHelper.class | Bin 0 -> 2576 bytes .../POAPackage/InvalidPolicyHolder.class | Bin 0 -> 910 bytes .../PortableServer/POAPackage/NoServant.class | Bin 0 -> 479 bytes .../POAPackage/NoServantHelper.class | Bin 0 -> 2173 bytes .../POAPackage/NoServantHolder.class | Bin 0 -> 886 bytes .../POAPackage/ObjectAlreadyActive.class | Bin 0 -> 499 bytes .../ObjectAlreadyActiveHelper.class | Bin 0 -> 2283 bytes .../ObjectAlreadyActiveHolder.class | Bin 0 -> 946 bytes .../POAPackage/ObjectNotActive.class | Bin 0 -> 491 bytes .../POAPackage/ObjectNotActiveHelper.class | Bin 0 -> 2239 bytes .../POAPackage/ObjectNotActiveHolder.class | Bin 0 -> 922 bytes .../POAPackage/ServantAlreadyActive.class | Bin 0 -> 501 bytes .../ServantAlreadyActiveHelper.class | Bin 0 -> 2294 bytes .../ServantAlreadyActiveHolder.class | Bin 0 -> 952 bytes .../POAPackage/ServantNotActive.class | Bin 0 -> 493 bytes .../POAPackage/ServantNotActiveHelper.class | Bin 0 -> 2250 bytes .../POAPackage/ServantNotActiveHolder.class | Bin 0 -> 928 bytes .../POAPackage/WrongAdapter.class | Bin 0 -> 485 bytes .../POAPackage/WrongAdapterHelper.class | Bin 0 -> 2206 bytes .../POAPackage/WrongAdapterHolder.class | Bin 0 -> 904 bytes .../POAPackage/WrongPolicy.class | Bin 0 -> 483 bytes .../POAPackage/WrongPolicyHelper.class | Bin 0 -> 2195 bytes .../POAPackage/WrongPolicyHolder.class | Bin 0 -> 898 bytes .../REQUEST_PROCESSING_POLICY_ID.class | Bin 0 -> 152 bytes .../RequestProcessingPolicy.class | Bin 0 -> 266 bytes .../RequestProcessingPolicyHelper.class | Bin 0 -> 2098 bytes .../RequestProcessingPolicyHolder.class | Bin 0 -> 904 bytes .../RequestProcessingPolicyLocalBase.class | Bin 0 -> 537 bytes .../RequestProcessingPolicyLocalTie.class | Bin 0 -> 838 bytes .../RequestProcessingPolicyOperations.class | Bin 0 -> 220 bytes .../RequestProcessingPolicyValue.class | Bin 0 -> 1028 bytes .../RequestProcessingPolicyValueHelper.class | Bin 0 -> 2258 bytes .../RequestProcessingPolicyValueHolder.class | Bin 0 -> 934 bytes .../SERVANT_RETENTION_POLICY_ID.class | Bin 0 -> 151 bytes .../org/omg/PortableServer/Servant.class | Bin 0 -> 2264 bytes .../omg/PortableServer/ServantActivator.class | Bin 0 -> 269 bytes .../ServantActivatorHelper.class | Bin 0 -> 2028 bytes .../ServantActivatorHolder.class | Bin 0 -> 862 bytes .../ServantActivatorLocalBase.class | Bin 0 -> 533 bytes .../ServantActivatorLocalTie.class | Bin 0 -> 812 bytes .../ServantActivatorOperations.class | Bin 0 -> 401 bytes .../omg/PortableServer/ServantHelper.class | Bin 0 -> 1169 bytes .../omg/PortableServer/ServantLocator.class | Bin 0 -> 265 bytes .../PortableServer/ServantLocatorHelper.class | Bin 0 -> 2008 bytes .../PortableServer/ServantLocatorHolder.class | Bin 0 -> 850 bytes .../ServantLocatorLocalBase.class | Bin 0 -> 527 bytes .../ServantLocatorLocalTie.class | Bin 0 -> 913 bytes .../ServantLocatorOperations.class | Bin 0 -> 509 bytes .../ServantLocatorPackage/CookieHelper.class | Bin 0 -> 1145 bytes .../ServantLocatorPackage/CookieHolder.class | Bin 0 -> 794 bytes .../omg/PortableServer/ServantManager.class | Bin 0 -> 220 bytes .../PortableServer/ServantManagerHelper.class | Bin 0 -> 2008 bytes .../PortableServer/ServantManagerHolder.class | Bin 0 -> 850 bytes .../ServantManagerLocalBase.class | Bin 0 -> 471 bytes .../ServantManagerLocalTie.class | Bin 0 -> 417 bytes .../ServantManagerOperations.class | Bin 0 -> 99 bytes .../ServantRetentionPolicy.class | Bin 0 -> 264 bytes .../ServantRetentionPolicyHelper.class | Bin 0 -> 2088 bytes .../ServantRetentionPolicyHolder.class | Bin 0 -> 898 bytes .../ServantRetentionPolicyLocalBase.class | Bin 0 -> 534 bytes .../ServantRetentionPolicyLocalTie.class | Bin 0 -> 831 bytes .../ServantRetentionPolicyOperations.class | Bin 0 -> 218 bytes .../ServantRetentionPolicyValue.class | Bin 0 -> 867 bytes .../ServantRetentionPolicyValueHelper.class | Bin 0 -> 2187 bytes .../ServantRetentionPolicyValueHolder.class | Bin 0 -> 928 bytes .../omg/PortableServer/THREAD_POLICY_ID.class | Bin 0 -> 140 bytes .../org/omg/PortableServer/ThreadPolicy.class | Bin 0 -> 244 bytes .../PortableServer/ThreadPolicyHelper.class | Bin 0 -> 1988 bytes .../PortableServer/ThreadPolicyHolder.class | Bin 0 -> 838 bytes .../ThreadPolicyLocalBase.class | Bin 0 -> 504 bytes .../PortableServer/ThreadPolicyLocalTie.class | Bin 0 -> 761 bytes .../ThreadPolicyOperations.class | Bin 0 -> 198 bytes .../PortableServer/ThreadPolicyValue.class | Bin 0 -> 967 bytes .../ThreadPolicyValueHelper.class | Bin 0 -> 2112 bytes .../ThreadPolicyValueHolder.class | Bin 0 -> 868 bytes .../PortableServer/portable/Delegate.class | Bin 0 -> 652 bytes idl/orb/.cvsignore | 2 + idl/orb/.java/es/tid/CORBA/Any.java | 10 + idl/orb/.java/org/omg/CORBA/ARG_IN.java | 12 + idl/orb/.java/org/omg/CORBA/ARG_INOUT.java | 12 + idl/orb/.java/org/omg/CORBA/ARG_OUT.java | 12 + idl/orb/.java/org/omg/CORBA/AliasDef.java | 16 + .../.java/org/omg/CORBA/AliasDefHelper.java | 76 + .../.java/org/omg/CORBA/AliasDefHolder.java | 33 + .../org/omg/CORBA/AliasDefOperations.java | 18 + idl/orb/.java/org/omg/CORBA/AliasDefPOA.java | 224 ++ .../.java/org/omg/CORBA/AliasDefPOATie.java | 109 + idl/orb/.java/org/omg/CORBA/Any.java | 116 + idl/orb/.java/org/omg/CORBA/AnyHolder.java | 39 + idl/orb/.java/org/omg/CORBA/AnySeqHelper.java | 64 + idl/orb/.java/org/omg/CORBA/AnySeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/ArrayDef.java | 16 + .../.java/org/omg/CORBA/ArrayDefHelper.java | 76 + .../.java/org/omg/CORBA/ArrayDefHolder.java | 33 + .../org/omg/CORBA/ArrayDefOperations.java | 24 + idl/orb/.java/org/omg/CORBA/ArrayDefPOA.java | 126 + .../.java/org/omg/CORBA/ArrayDefPOATie.java | 68 + .../omg/CORBA/AttrDescriptionSeqHelper.java | 64 + .../omg/CORBA/AttrDescriptionSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/AttributeDef.java | 16 + .../org/omg/CORBA/AttributeDefHelper.java | 76 + .../org/omg/CORBA/AttributeDefHolder.java | 33 + .../org/omg/CORBA/AttributeDefOperations.java | 24 + .../.java/org/omg/CORBA/AttributeDefPOA.java | 244 ++ .../org/omg/CORBA/AttributeDefPOATie.java | 113 + .../org/omg/CORBA/AttributeDescription.java | 36 + .../omg/CORBA/AttributeDescriptionHelper.java | 73 + .../omg/CORBA/AttributeDescriptionHolder.java | 33 + .../.java/org/omg/CORBA/AttributeMode.java | 33 + .../org/omg/CORBA/AttributeModeHelper.java | 57 + .../org/omg/CORBA/AttributeModeHolder.java | 33 + idl/orb/.java/org/omg/CORBA/BAD_CONTEXT.java | 26 + .../.java/org/omg/CORBA/BAD_INV_ORDER.java | 26 + .../.java/org/omg/CORBA/BAD_OPERATION.java | 26 + idl/orb/.java/org/omg/CORBA/BAD_PARAM.java | 26 + idl/orb/.java/org/omg/CORBA/BAD_POLICY.java | 10 + .../.java/org/omg/CORBA/BAD_POLICY_TYPE.java | 10 + .../.java/org/omg/CORBA/BAD_POLICY_VALUE.java | 10 + idl/orb/.java/org/omg/CORBA/BAD_TYPECODE.java | 26 + .../.java/org/omg/CORBA/BadFixedValue.java | 31 + .../org/omg/CORBA/BadFixedValueHelper.java | 62 + .../org/omg/CORBA/BadFixedValueHolder.java | 33 + .../.java/org/omg/CORBA/BooleanHolder.java | 31 + .../.java/org/omg/CORBA/BooleanSeqHelper.java | 64 + .../.java/org/omg/CORBA/BooleanSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/Bounds.java | 23 + idl/orb/.java/org/omg/CORBA/ByteHolder.java | 31 + .../org/omg/CORBA/CODESET_INCOMPATIBLE.java | 26 + idl/orb/.java/org/omg/CORBA/COMM_FAILURE.java | 26 + .../org/omg/CORBA/CTX_RESTRICT_SCOPE.java | 12 + idl/orb/.java/org/omg/CORBA/CharHolder.java | 31 + .../.java/org/omg/CORBA/CharSeqHelper.java | 64 + .../.java/org/omg/CORBA/CharSeqHolder.java | 34 + .../.java/org/omg/CORBA/CompletionStatus.java | 43 + idl/orb/.java/org/omg/CORBA/ConstantDef.java | 16 + .../org/omg/CORBA/ConstantDefHelper.java | 76 + .../org/omg/CORBA/ConstantDefHolder.java | 33 + .../org/omg/CORBA/ConstantDefOperations.java | 24 + .../.java/org/omg/CORBA/ConstantDefPOA.java | 244 ++ .../org/omg/CORBA/ConstantDefPOATie.java | 113 + .../org/omg/CORBA/ConstantDescription.java | 36 + .../omg/CORBA/ConstantDescriptionHelper.java | 73 + .../omg/CORBA/ConstantDescriptionHolder.java | 33 + .../org/omg/CORBA/ConstructionPolicy.java | 16 + .../omg/CORBA/ConstructionPolicyHelper.java | 76 + .../omg/CORBA/ConstructionPolicyHolder.java | 33 + .../CORBA/ConstructionPolicyOperations.java | 16 + .../org/omg/CORBA/ConstructionPolicyPOA.java | 88 + .../omg/CORBA/ConstructionPolicyPOATie.java | 54 + idl/orb/.java/org/omg/CORBA/Contained.java | 16 + .../.java/org/omg/CORBA/ContainedHelper.java | 76 + .../.java/org/omg/CORBA/ContainedHolder.java | 33 + .../org/omg/CORBA/ContainedOperations.java | 36 + idl/orb/.java/org/omg/CORBA/ContainedPOA.java | 189 ++ .../.java/org/omg/CORBA/ContainedPOATie.java | 91 + .../CORBA/ContainedPackage/Description.java | 24 + .../ContainedPackage/DescriptionHelper.java | 61 + .../ContainedPackage/DescriptionHolder.java | 33 + .../org/omg/CORBA/ContainedSeqHelper.java | 64 + .../org/omg/CORBA/ContainedSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/Container.java | 16 + .../.java/org/omg/CORBA/ContainerHelper.java | 76 + .../.java/org/omg/CORBA/ContainerHolder.java | 33 + .../org/omg/CORBA/ContainerOperations.java | 44 + idl/orb/.java/org/omg/CORBA/ContainerPOA.java | 516 ++++ .../.java/org/omg/CORBA/ContainerPOATie.java | 178 ++ .../CORBA/ContainerPackage/Description.java | 26 + .../ContainerPackage/DescriptionHelper.java | 64 + .../ContainerPackage/DescriptionHolder.java | 33 + .../DescriptionSeqHelper.java | 64 + .../DescriptionSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/Context.java | 20 + .../org/omg/CORBA/ContextIdSeqHelper.java | 64 + .../org/omg/CORBA/ContextIdSeqHolder.java | 34 + .../omg/CORBA/ContextIdentifierHelper.java | 57 + idl/orb/.java/org/omg/CORBA/ContextList.java | 14 + idl/orb/.java/org/omg/CORBA/Current.java | 15 + .../.java/org/omg/CORBA/CurrentHelper.java | 76 + .../.java/org/omg/CORBA/CurrentHolder.java | 33 + .../org/omg/CORBA/CurrentOperations.java | 13 + idl/orb/.java/org/omg/CORBA/CurrentPOA.java | 43 + .../.java/org/omg/CORBA/CurrentPOATie.java | 31 + .../.java/org/omg/CORBA/CustomMarshal.java | 18 + .../org/omg/CORBA/CustomMarshalHelper.java | 53 + .../org/omg/CORBA/CustomMarshalHolder.java | 33 + .../.java/org/omg/CORBA/DATA_CONVERSION.java | 26 + .../.java/org/omg/CORBA/DataInputStream.java | 84 + .../org/omg/CORBA/DataInputStreamHelper.java | 53 + .../org/omg/CORBA/DataInputStreamHolder.java | 33 + .../.java/org/omg/CORBA/DataOutputStream.java | 84 + .../org/omg/CORBA/DataOutputStreamHelper.java | 53 + .../org/omg/CORBA/DataOutputStreamHolder.java | 33 + .../.java/org/omg/CORBA/DefinitionKind.java | 99 + .../org/omg/CORBA/DefinitionKindHelper.java | 79 + .../org/omg/CORBA/DefinitionKindHolder.java | 33 + .../.java/org/omg/CORBA/DomainManager.java | 15 + .../org/omg/CORBA/DomainManagerHelper.java | 76 + .../org/omg/CORBA/DomainManagerHolder.java | 33 + .../omg/CORBA/DomainManagerListHelper.java | 64 + .../omg/CORBA/DomainManagerListHolder.java | 34 + .../omg/CORBA/DomainManagerOperations.java | 15 + .../.java/org/omg/CORBA/DomainManagerPOA.java | 58 + .../org/omg/CORBA/DomainManagerPOATie.java | 37 + idl/orb/.java/org/omg/CORBA/DoubleHolder.java | 31 + .../.java/org/omg/CORBA/DoubleSeqHelper.java | 64 + .../.java/org/omg/CORBA/DoubleSeqHolder.java | 34 + .../org/omg/CORBA/DynamicImplementation.java | 22 + idl/orb/.java/org/omg/CORBA/EnumDef.java | 16 + .../.java/org/omg/CORBA/EnumDefHelper.java | 76 + .../.java/org/omg/CORBA/EnumDefHolder.java | 33 + .../org/omg/CORBA/EnumDefOperations.java | 18 + idl/orb/.java/org/omg/CORBA/EnumDefPOA.java | 224 ++ .../.java/org/omg/CORBA/EnumDefPOATie.java | 109 + .../org/omg/CORBA/EnumMemberSeqHelper.java | 64 + .../org/omg/CORBA/EnumMemberSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/Environment.java | 12 + .../omg/CORBA/ExcDescriptionSeqHelper.java | 64 + .../omg/CORBA/ExcDescriptionSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/ExceptionDef.java | 16 + .../org/omg/CORBA/ExceptionDefHelper.java | 76 + .../org/omg/CORBA/ExceptionDefHolder.java | 33 + .../org/omg/CORBA/ExceptionDefOperations.java | 20 + .../.java/org/omg/CORBA/ExceptionDefPOA.java | 678 +++++ .../org/omg/CORBA/ExceptionDefPOATie.java | 243 ++ .../org/omg/CORBA/ExceptionDefSeqHelper.java | 64 + .../org/omg/CORBA/ExceptionDefSeqHolder.java | 34 + .../org/omg/CORBA/ExceptionDescription.java | 34 + .../omg/CORBA/ExceptionDescriptionHelper.java | 70 + .../omg/CORBA/ExceptionDescriptionHolder.java | 33 + .../.java/org/omg/CORBA/ExceptionList.java | 18 + idl/orb/.java/org/omg/CORBA/FREE_MEM.java | 26 + idl/orb/.java/org/omg/CORBA/FixedDef.java | 16 + .../.java/org/omg/CORBA/FixedDefHelper.java | 76 + .../.java/org/omg/CORBA/FixedDefHolder.java | 33 + .../org/omg/CORBA/FixedDefOperations.java | 22 + idl/orb/.java/org/omg/CORBA/FixedDefPOA.java | 116 + .../.java/org/omg/CORBA/FixedDefPOATie.java | 64 + idl/orb/.java/org/omg/CORBA/FlagsHelper.java | 57 + idl/orb/.java/org/omg/CORBA/FloatHolder.java | 31 + .../.java/org/omg/CORBA/FloatSeqHelper.java | 64 + .../.java/org/omg/CORBA/FloatSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/IDLType.java | 16 + .../.java/org/omg/CORBA/IDLTypeHelper.java | 76 + .../.java/org/omg/CORBA/IDLTypeHolder.java | 33 + .../org/omg/CORBA/IDLTypeOperations.java | 16 + idl/orb/.java/org/omg/CORBA/IDLTypePOA.java | 71 + .../.java/org/omg/CORBA/IDLTypePOATie.java | 46 + idl/orb/.java/org/omg/CORBA/IMP_LIMIT.java | 26 + idl/orb/.java/org/omg/CORBA/INITIALIZE.java | 26 + idl/orb/.java/org/omg/CORBA/INTERNAL.java | 26 + idl/orb/.java/org/omg/CORBA/INTF_REPOS.java | 26 + .../org/omg/CORBA/INVALID_TRANSACTION.java | 27 + idl/orb/.java/org/omg/CORBA/INV_FLAG.java | 26 + idl/orb/.java/org/omg/CORBA/INV_IDENT.java | 26 + idl/orb/.java/org/omg/CORBA/INV_OBJREF.java | 26 + idl/orb/.java/org/omg/CORBA/INV_POLICY.java | 26 + idl/orb/.java/org/omg/CORBA/IRObject.java | 15 + .../.java/org/omg/CORBA/IRObjectHelper.java | 76 + .../.java/org/omg/CORBA/IRObjectHolder.java | 33 + .../org/omg/CORBA/IRObjectOperations.java | 17 + idl/orb/.java/org/omg/CORBA/IRObjectPOA.java | 60 + .../.java/org/omg/CORBA/IRObjectPOATie.java | 40 + .../.java/org/omg/CORBA/IdentifierHelper.java | 57 + idl/orb/.java/org/omg/CORBA/Initializer.java | 25 + .../org/omg/CORBA/InitializerHelper.java | 61 + .../org/omg/CORBA/InitializerHolder.java | 33 + .../org/omg/CORBA/InitializerSeqHelper.java | 64 + .../org/omg/CORBA/InitializerSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/IntHolder.java | 31 + idl/orb/.java/org/omg/CORBA/InterfaceDef.java | 16 + .../org/omg/CORBA/InterfaceDefHelper.java | 76 + .../org/omg/CORBA/InterfaceDefHolder.java | 33 + .../org/omg/CORBA/InterfaceDefOperations.java | 30 + .../.java/org/omg/CORBA/InterfaceDefPOA.java | 811 ++++++ .../org/omg/CORBA/InterfaceDefPOATie.java | 287 ++ .../FullInterfaceDescription.java | 43 + .../FullInterfaceDescriptionHelper.java | 82 + .../FullInterfaceDescriptionHolder.java | 33 + .../org/omg/CORBA/InterfaceDefSeqHelper.java | 64 + .../org/omg/CORBA/InterfaceDefSeqHolder.java | 34 + .../org/omg/CORBA/InterfaceDescription.java | 37 + .../omg/CORBA/InterfaceDescriptionHelper.java | 73 + .../omg/CORBA/InterfaceDescriptionHolder.java | 33 + .../.java/org/omg/CORBA/InvalidPolicies.java | 31 + .../org/omg/CORBA/InvalidPoliciesHelper.java | 69 + .../org/omg/CORBA/InvalidPoliciesHolder.java | 33 + .../.java/org/omg/CORBA/LocalInterface.java | 3 + idl/orb/.java/org/omg/CORBA/LocalObject.java | 143 + idl/orb/.java/org/omg/CORBA/LongHolder.java | 31 + .../org/omg/CORBA/LongLongSeqHelper.java | 64 + .../org/omg/CORBA/LongLongSeqHolder.java | 34 + .../.java/org/omg/CORBA/LongSeqHelper.java | 64 + .../.java/org/omg/CORBA/LongSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/MARSHAL.java | 26 + idl/orb/.java/org/omg/CORBA/ModuleDef.java | 16 + .../.java/org/omg/CORBA/ModuleDefHelper.java | 76 + .../.java/org/omg/CORBA/ModuleDefHolder.java | 33 + .../org/omg/CORBA/ModuleDefOperations.java | 14 + idl/orb/.java/org/omg/CORBA/ModuleDefPOA.java | 646 +++++ .../.java/org/omg/CORBA/ModuleDefPOATie.java | 231 ++ .../org/omg/CORBA/ModuleDescription.java | 32 + .../omg/CORBA/ModuleDescriptionHelper.java | 67 + .../omg/CORBA/ModuleDescriptionHolder.java | 33 + idl/orb/.java/org/omg/CORBA/NO_IMPLEMENT.java | 26 + idl/orb/.java/org/omg/CORBA/NO_MEMORY.java | 26 + .../.java/org/omg/CORBA/NO_PERMISSION.java | 26 + idl/orb/.java/org/omg/CORBA/NO_RESOURCES.java | 26 + idl/orb/.java/org/omg/CORBA/NO_RESPONSE.java | 26 + idl/orb/.java/org/omg/CORBA/NVList.java | 19 + idl/orb/.java/org/omg/CORBA/NamedValue.java | 13 + idl/orb/.java/org/omg/CORBA/NativeDef.java | 16 + .../.java/org/omg/CORBA/NativeDefHelper.java | 76 + .../.java/org/omg/CORBA/NativeDefHolder.java | 33 + .../org/omg/CORBA/NativeDefOperations.java | 14 + idl/orb/.java/org/omg/CORBA/NativeDefPOA.java | 202 ++ .../.java/org/omg/CORBA/NativeDefPOATie.java | 101 + .../.java/org/omg/CORBA/OBJECT_NOT_EXIST.java | 27 + idl/orb/.java/org/omg/CORBA/OBJ_ADAPTER.java | 26 + idl/orb/.java/org/omg/CORBA/OMGVMCID.java | 12 + idl/orb/.java/org/omg/CORBA/ORB.java | 285 ++ .../org/omg/CORBA/ORBPackage/InvalidName.java | 15 + idl/orb/.java/org/omg/CORBA/Object.java | 52 + idl/orb/.java/org/omg/CORBA/ObjectHolder.java | 31 + .../.java/org/omg/CORBA/OctetSeqHelper.java | 64 + .../.java/org/omg/CORBA/OctetSeqHolder.java | 34 + .../org/omg/CORBA/OpDescriptionSeqHelper.java | 64 + .../org/omg/CORBA/OpDescriptionSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/OperationDef.java | 16 + .../org/omg/CORBA/OperationDefHelper.java | 76 + .../org/omg/CORBA/OperationDefHolder.java | 33 + .../org/omg/CORBA/OperationDefOperations.java | 36 + .../.java/org/omg/CORBA/OperationDefPOA.java | 310 ++ .../org/omg/CORBA/OperationDefPOATie.java | 137 + .../org/omg/CORBA/OperationDescription.java | 43 + .../omg/CORBA/OperationDescriptionHelper.java | 82 + .../omg/CORBA/OperationDescriptionHolder.java | 33 + .../.java/org/omg/CORBA/OperationMode.java | 33 + .../org/omg/CORBA/OperationModeHelper.java | 57 + .../org/omg/CORBA/OperationModeHolder.java | 33 + .../.java/org/omg/CORBA/PERSIST_STORE.java | 26 + .../.java/org/omg/CORBA/PRIVATE_MEMBER.java | 12 + .../.java/org/omg/CORBA/PUBLIC_MEMBER.java | 12 + .../omg/CORBA/ParDescriptionSeqHelper.java | 64 + .../omg/CORBA/ParDescriptionSeqHolder.java | 34 + .../org/omg/CORBA/ParameterDescription.java | 29 + .../omg/CORBA/ParameterDescriptionHelper.java | 67 + .../omg/CORBA/ParameterDescriptionHolder.java | 33 + .../.java/org/omg/CORBA/ParameterMode.java | 36 + .../org/omg/CORBA/ParameterModeHelper.java | 58 + .../org/omg/CORBA/ParameterModeHolder.java | 33 + idl/orb/.java/org/omg/CORBA/Policy.java | 15 + .../.java/org/omg/CORBA/PolicyCurrent.java | 16 + .../org/omg/CORBA/PolicyCurrentHelper.java | 70 + .../org/omg/CORBA/PolicyCurrentHolder.java | 33 + .../org/omg/CORBA/PolicyCurrentLocalBase.java | 22 + .../org/omg/CORBA/PolicyCurrentLocalTie.java | 40 + .../omg/CORBA/PolicyCurrentOperations.java | 14 + idl/orb/.java/org/omg/CORBA/PolicyError.java | 31 + .../org/omg/CORBA/PolicyErrorCodeHelper.java | 57 + .../org/omg/CORBA/PolicyErrorHelper.java | 62 + .../org/omg/CORBA/PolicyErrorHolder.java | 33 + idl/orb/.java/org/omg/CORBA/PolicyHelper.java | 76 + idl/orb/.java/org/omg/CORBA/PolicyHolder.java | 33 + .../.java/org/omg/CORBA/PolicyListHelper.java | 64 + .../.java/org/omg/CORBA/PolicyListHolder.java | 34 + .../.java/org/omg/CORBA/PolicyManager.java | 15 + .../org/omg/CORBA/PolicyManagerHelper.java | 70 + .../org/omg/CORBA/PolicyManagerHolder.java | 33 + .../org/omg/CORBA/PolicyManagerLocalBase.java | 20 + .../org/omg/CORBA/PolicyManagerLocalTie.java | 38 + .../omg/CORBA/PolicyManagerOperations.java | 18 + .../.java/org/omg/CORBA/PolicyOperations.java | 19 + idl/orb/.java/org/omg/CORBA/PolicyPOA.java | 70 + idl/orb/.java/org/omg/CORBA/PolicyPOATie.java | 45 + .../.java/org/omg/CORBA/PolicyTypeHelper.java | 57 + .../org/omg/CORBA/PolicyTypeSeqHelper.java | 64 + .../org/omg/CORBA/PolicyTypeSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/PrimitiveDef.java | 16 + .../org/omg/CORBA/PrimitiveDefHelper.java | 76 + .../org/omg/CORBA/PrimitiveDefHolder.java | 33 + .../org/omg/CORBA/PrimitiveDefOperations.java | 16 + .../.java/org/omg/CORBA/PrimitiveDefPOA.java | 82 + .../org/omg/CORBA/PrimitiveDefPOATie.java | 52 + .../.java/org/omg/CORBA/PrimitiveKind.java | 93 + .../org/omg/CORBA/PrimitiveKindHelper.java | 77 + .../org/omg/CORBA/PrimitiveKindHolder.java | 33 + idl/orb/.java/org/omg/CORBA/Principal.java | 25 + .../.java/org/omg/CORBA/PrincipalHolder.java | 32 + idl/orb/.java/org/omg/CORBA/Repository.java | 16 + .../.java/org/omg/CORBA/RepositoryHelper.java | 76 + .../.java/org/omg/CORBA/RepositoryHolder.java | 33 + .../org/omg/CORBA/RepositoryIdHelper.java | 57 + .../org/omg/CORBA/RepositoryIdSeqHelper.java | 64 + .../org/omg/CORBA/RepositoryIdSeqHolder.java | 34 + .../org/omg/CORBA/RepositoryOperations.java | 30 + .../.java/org/omg/CORBA/RepositoryPOA.java | 652 +++++ .../.java/org/omg/CORBA/RepositoryPOATie.java | 231 ++ idl/orb/.java/org/omg/CORBA/Request.java | 46 + .../.java/org/omg/CORBA/ScopedNameHelper.java | 57 + .../.java/org/omg/CORBA/SecConstruction.java | 12 + idl/orb/.java/org/omg/CORBA/Security.java | 12 + idl/orb/.java/org/omg/CORBA/SequenceDef.java | 16 + .../org/omg/CORBA/SequenceDefHelper.java | 76 + .../org/omg/CORBA/SequenceDefHolder.java | 33 + .../org/omg/CORBA/SequenceDefOperations.java | 24 + .../.java/org/omg/CORBA/SequenceDefPOA.java | 126 + .../org/omg/CORBA/SequenceDefPOATie.java | 68 + .../.java/org/omg/CORBA/ServerRequest.java | 52 + .../.java/org/omg/CORBA/ServiceDetail.java | 24 + .../org/omg/CORBA/ServiceDetailHelper.java | 68 + .../org/omg/CORBA/ServiceDetailHolder.java | 33 + .../omg/CORBA/ServiceDetailTypeHelper.java | 57 + .../org/omg/CORBA/ServiceInformation.java | 24 + .../omg/CORBA/ServiceInformationHelper.java | 75 + .../omg/CORBA/ServiceInformationHolder.java | 33 + .../org/omg/CORBA/ServiceOptionHelper.java | 57 + .../org/omg/CORBA/ServiceTypeHelper.java | 57 + .../.java/org/omg/CORBA/SetOverrideType.java | 33 + .../org/omg/CORBA/SetOverrideTypeHelper.java | 57 + .../org/omg/CORBA/SetOverrideTypeHolder.java | 33 + idl/orb/.java/org/omg/CORBA/ShortHolder.java | 31 + .../.java/org/omg/CORBA/ShortSeqHelper.java | 64 + .../.java/org/omg/CORBA/ShortSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/StringDef.java | 16 + .../.java/org/omg/CORBA/StringDefHelper.java | 76 + .../.java/org/omg/CORBA/StringDefHolder.java | 33 + .../org/omg/CORBA/StringDefOperations.java | 18 + idl/orb/.java/org/omg/CORBA/StringDefPOA.java | 94 + .../.java/org/omg/CORBA/StringDefPOATie.java | 56 + idl/orb/.java/org/omg/CORBA/StringHolder.java | 31 + .../.java/org/omg/CORBA/StringSeqHelper.java | 64 + .../.java/org/omg/CORBA/StringSeqHolder.java | 34 + .../org/omg/CORBA/StringValueHelper.java | 73 + .../org/omg/CORBA/StringValueHolder.java | 33 + idl/orb/.java/org/omg/CORBA/StructDef.java | 16 + .../.java/org/omg/CORBA/StructDefHelper.java | 76 + .../.java/org/omg/CORBA/StructDefHolder.java | 33 + .../org/omg/CORBA/StructDefOperations.java | 18 + idl/orb/.java/org/omg/CORBA/StructDefPOA.java | 680 +++++ .../.java/org/omg/CORBA/StructDefPOATie.java | 247 ++ idl/orb/.java/org/omg/CORBA/StructMember.java | 27 + .../org/omg/CORBA/StructMemberHelper.java | 64 + .../org/omg/CORBA/StructMemberHolder.java | 33 + .../org/omg/CORBA/StructMemberSeqHelper.java | 64 + .../org/omg/CORBA/StructMemberSeqHolder.java | 34 + .../.java/org/omg/CORBA/SystemException.java | 42 + idl/orb/.java/org/omg/CORBA/TCKind.java | 129 + idl/orb/.java/org/omg/CORBA/TCKindHelper.java | 89 + idl/orb/.java/org/omg/CORBA/TCKindHolder.java | 33 + idl/orb/.java/org/omg/CORBA/TIMEOUT.java | 26 + .../org/omg/CORBA/TRANSACTION_REQUIRED.java | 27 + .../org/omg/CORBA/TRANSACTION_ROLLEDBACK.java | 27 + idl/orb/.java/org/omg/CORBA/TRANSIENT.java | 26 + idl/orb/.java/org/omg/CORBA/TypeCode.java | 66 + .../.java/org/omg/CORBA/TypeCodeHelper.java | 44 + .../.java/org/omg/CORBA/TypeCodeHolder.java | 31 + .../omg/CORBA/TypeCodePackage/BadKind.java | 16 + .../org/omg/CORBA/TypeCodePackage/Bounds.java | 16 + .../.java/org/omg/CORBA/TypeDescription.java | 34 + .../org/omg/CORBA/TypeDescriptionHelper.java | 70 + .../org/omg/CORBA/TypeDescriptionHolder.java | 33 + idl/orb/.java/org/omg/CORBA/TypedefDef.java | 16 + .../.java/org/omg/CORBA/TypedefDefHelper.java | 76 + .../.java/org/omg/CORBA/TypedefDefHolder.java | 33 + .../org/omg/CORBA/TypedefDefOperations.java | 14 + .../.java/org/omg/CORBA/TypedefDefPOA.java | 201 ++ .../.java/org/omg/CORBA/TypedefDefPOATie.java | 99 + .../org/omg/CORBA/ULongLongSeqHelper.java | 64 + .../org/omg/CORBA/ULongLongSeqHolder.java | 34 + .../.java/org/omg/CORBA/ULongSeqHelper.java | 64 + .../.java/org/omg/CORBA/ULongSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/UNKNOWN.java | 26 + .../org/omg/CORBA/UNSUPPORTED_POLICY.java | 12 + .../omg/CORBA/UNSUPPORTED_POLICY_VALUE.java | 12 + .../.java/org/omg/CORBA/UShortSeqHelper.java | 64 + .../.java/org/omg/CORBA/UShortSeqHolder.java | 34 + idl/orb/.java/org/omg/CORBA/UnionDef.java | 16 + .../.java/org/omg/CORBA/UnionDefHelper.java | 76 + .../.java/org/omg/CORBA/UnionDefHolder.java | 33 + .../org/omg/CORBA/UnionDefOperations.java | 24 + idl/orb/.java/org/omg/CORBA/UnionDefPOA.java | 712 +++++ .../.java/org/omg/CORBA/UnionDefPOATie.java | 259 ++ idl/orb/.java/org/omg/CORBA/UnionMember.java | 29 + .../org/omg/CORBA/UnionMemberHelper.java | 67 + .../org/omg/CORBA/UnionMemberHolder.java | 33 + .../org/omg/CORBA/UnionMemberSeqHelper.java | 64 + .../org/omg/CORBA/UnionMemberSeqHolder.java | 34 + .../org/omg/CORBA/UnknownUserException.java | 20 + .../.java/org/omg/CORBA/UserException.java | 20 + idl/orb/.java/org/omg/CORBA/VM_ABSTRACT.java | 12 + idl/orb/.java/org/omg/CORBA/VM_CUSTOM.java | 12 + idl/orb/.java/org/omg/CORBA/VM_NONE.java | 12 + .../.java/org/omg/CORBA/VM_TRUNCATABLE.java | 12 + .../.java/org/omg/CORBA/ValueBaseHelper.java | 61 + .../.java/org/omg/CORBA/ValueBaseHolder.java | 32 + idl/orb/.java/org/omg/CORBA/ValueBoxDef.java | 16 + .../org/omg/CORBA/ValueBoxDefHelper.java | 76 + .../org/omg/CORBA/ValueBoxDefHolder.java | 33 + .../org/omg/CORBA/ValueBoxDefOperations.java | 18 + .../.java/org/omg/CORBA/ValueBoxDefPOA.java | 224 ++ .../org/omg/CORBA/ValueBoxDefPOATie.java | 109 + idl/orb/.java/org/omg/CORBA/ValueDef.java | 16 + .../.java/org/omg/CORBA/ValueDefHelper.java | 76 + .../.java/org/omg/CORBA/ValueDefHolder.java | 33 + .../org/omg/CORBA/ValueDefOperations.java | 52 + idl/orb/.java/org/omg/CORBA/ValueDefPOA.java | 956 ++++++ .../.java/org/omg/CORBA/ValueDefPOATie.java | 337 +++ .../ValueDefPackage/FullValueDescription.java | 57 + .../FullValueDescriptionHelper.java | 100 + .../FullValueDescriptionHolder.java | 33 + .../org/omg/CORBA/ValueDefSeqHelper.java | 64 + .../org/omg/CORBA/ValueDefSeqHolder.java | 34 + .../.java/org/omg/CORBA/ValueDescription.java | 47 + .../org/omg/CORBA/ValueDescriptionHelper.java | 85 + .../org/omg/CORBA/ValueDescriptionHolder.java | 33 + idl/orb/.java/org/omg/CORBA/ValueMember.java | 38 + .../.java/org/omg/CORBA/ValueMemberDef.java | 16 + .../org/omg/CORBA/ValueMemberDefHelper.java | 76 + .../org/omg/CORBA/ValueMemberDefHolder.java | 33 + .../omg/CORBA/ValueMemberDefOperations.java | 24 + .../org/omg/CORBA/ValueMemberDefPOA.java | 244 ++ .../org/omg/CORBA/ValueMemberDefPOATie.java | 113 + .../org/omg/CORBA/ValueMemberHelper.java | 76 + .../org/omg/CORBA/ValueMemberHolder.java | 33 + .../org/omg/CORBA/ValueMemberSeqHelper.java | 64 + .../org/omg/CORBA/ValueMemberSeqHolder.java | 34 + .../org/omg/CORBA/ValueModifierHelper.java | 57 + .../org/omg/CORBA/VersionSpecHelper.java | 57 + .../.java/org/omg/CORBA/VisibilityHelper.java | 57 + .../.java/org/omg/CORBA/WCharSeqHelper.java | 64 + .../.java/org/omg/CORBA/WCharSeqHolder.java | 34 + .../.java/org/omg/CORBA/WStringSeqHelper.java | 64 + .../.java/org/omg/CORBA/WStringSeqHolder.java | 34 + .../org/omg/CORBA/WStringValueHelper.java | 73 + .../org/omg/CORBA/WStringValueHolder.java | 33 + .../.java/org/omg/CORBA/WrongTransaction.java | 17 + idl/orb/.java/org/omg/CORBA/WstringDef.java | 16 + .../.java/org/omg/CORBA/WstringDefHelper.java | 76 + .../.java/org/omg/CORBA/WstringDefHolder.java | 33 + .../org/omg/CORBA/WstringDefOperations.java | 18 + .../.java/org/omg/CORBA/WstringDefPOA.java | 94 + .../.java/org/omg/CORBA/WstringDefPOATie.java | 56 + .../.java/org/omg/CORBA/_AliasDefStub.java | 231 ++ .../.java/org/omg/CORBA/_ArrayDefStub.java | 121 + .../org/omg/CORBA/_AttributeDefStub.java | 250 ++ .../.java/org/omg/CORBA/_ConstantDefStub.java | 250 ++ .../omg/CORBA/_ConstructionPolicyStub.java | 83 + .../.java/org/omg/CORBA/_ContainedStub.java | 190 ++ .../.java/org/omg/CORBA/_ContainerStub.java | 426 +++ idl/orb/.java/org/omg/CORBA/_CurrentStub.java | 22 + .../org/omg/CORBA/_DomainManagerStub.java | 41 + idl/orb/.java/org/omg/CORBA/_EnumDefStub.java | 231 ++ .../org/omg/CORBA/_ExceptionDefStub.java | 606 ++++ .../.java/org/omg/CORBA/_FixedDefStub.java | 109 + idl/orb/.java/org/omg/CORBA/_IDLTypeStub.java | 61 + .../.java/org/omg/CORBA/_IRObjectStub.java | 47 + .../org/omg/CORBA/_InterfaceDefStub.java | 727 +++++ .../.java/org/omg/CORBA/_ModuleDefStub.java | 571 ++++ .../.java/org/omg/CORBA/_NativeDefStub.java | 208 ++ .../org/omg/CORBA/_OperationDefStub.java | 319 ++ idl/orb/.java/org/omg/CORBA/_PolicyStub.java | 64 + .../org/omg/CORBA/_PrimitiveDefStub.java | 75 + .../.java/org/omg/CORBA/_RepositoryStub.java | 586 ++++ .../.java/org/omg/CORBA/_SequenceDefStub.java | 121 + .../.java/org/omg/CORBA/_StringDefStub.java | 86 + .../.java/org/omg/CORBA/_StructDefStub.java | 610 ++++ .../.java/org/omg/CORBA/_TypedefDefStub.java | 206 ++ .../.java/org/omg/CORBA/_UnionDefStub.java | 645 +++++ .../.java/org/omg/CORBA/_ValueBoxDefStub.java | 231 ++ .../.java/org/omg/CORBA/_ValueDefStub.java | 869 ++++++ .../org/omg/CORBA/_ValueMemberDefStub.java | 250 ++ .../.java/org/omg/CORBA/_WstringDefStub.java | 86 + .../CORBA/portable/ApplicationException.java | 27 + .../omg/CORBA/portable/BoxedValueHelper.java | 14 + .../org/omg/CORBA/portable/CustomValue.java | 10 + .../org/omg/CORBA/portable/Delegate.java | 118 + .../org/omg/CORBA/portable/IDLEntity.java | 10 + .../CORBA/portable/IndirectionException.java | 17 + .../org/omg/CORBA/portable/InputStream.java | 88 + .../org/omg/CORBA/portable/InvokeHandler.java | 14 + .../org/omg/CORBA/portable/ObjectImpl.java | 140 + .../org/omg/CORBA/portable/OutputStream.java | 76 + .../CORBA/portable/RemarshalException.java | 13 + .../omg/CORBA/portable/ResponseHandler.java | 14 + .../org/omg/CORBA/portable/ServantObject.java | 10 + .../org/omg/CORBA/portable/Streamable.java | 13 + .../omg/CORBA/portable/StreamableValue.java | 10 + .../omg/CORBA/portable/UnknownException.java | 16 + .../org/omg/CORBA/portable/ValueBase.java | 11 + .../org/omg/CORBA/portable/ValueFactory.java | 11 + idl/orb/.java/org/omg/CORBA_2_3/ORB.java | 49 + .../org/omg/CORBA_2_3/portable/Delegate.java | 13 + .../omg/CORBA_2_3/portable/InputStream.java | 39 + .../omg/CORBA_2_3/portable/ObjectImpl.java | 17 + .../omg/CORBA_2_3/portable/OutputStream.java | 32 + idl/orb/.java/org/omg/CORBA_2_5/ORB.java | 21 + .../omg/PortableServer/AdapterActivator.java | 15 + .../AdapterActivatorHelper.java | 70 + .../AdapterActivatorHolder.java | 33 + .../AdapterActivatorLocalBase.java | 20 + .../AdapterActivatorLocalTie.java | 31 + .../AdapterActivatorOperations.java | 15 + .../.java/org/omg/PortableServer/Current.java | 16 + .../org/omg/PortableServer/CurrentHelper.java | 70 + .../org/omg/PortableServer/CurrentHolder.java | 33 + .../omg/PortableServer/CurrentLocalBase.java | 21 + .../omg/PortableServer/CurrentLocalTie.java | 49 + .../omg/PortableServer/CurrentOperations.java | 26 + .../CurrentPackage/NoContext.java | 23 + .../CurrentPackage/NoContextHelper.java | 59 + .../CurrentPackage/NoContextHolder.java | 33 + .../PortableServer/DynamicImplementation.java | 11 + .../omg/PortableServer/ForwardRequest.java | 31 + .../PortableServer/ForwardRequestHelper.java | 62 + .../PortableServer/ForwardRequestHolder.java | 33 + .../ID_ASSIGNMENT_POLICY_ID.java | 12 + .../ID_UNIQUENESS_POLICY_ID.java | 12 + .../IMPLICIT_ACTIVATION_POLICY_ID.java | 12 + .../PortableServer/IdAssignmentPolicy.java | 16 + .../IdAssignmentPolicyHelper.java | 70 + .../IdAssignmentPolicyHolder.java | 33 + .../IdAssignmentPolicyLocalBase.java | 21 + .../IdAssignmentPolicyLocalTie.java | 43 + .../IdAssignmentPolicyOperations.java | 16 + .../IdAssignmentPolicyValue.java | 33 + .../IdAssignmentPolicyValueHelper.java | 57 + .../IdAssignmentPolicyValueHolder.java | 33 + .../PortableServer/IdUniquenessPolicy.java | 16 + .../IdUniquenessPolicyHelper.java | 70 + .../IdUniquenessPolicyHolder.java | 33 + .../IdUniquenessPolicyLocalBase.java | 21 + .../IdUniquenessPolicyLocalTie.java | 43 + .../IdUniquenessPolicyOperations.java | 16 + .../IdUniquenessPolicyValue.java | 33 + .../IdUniquenessPolicyValueHelper.java | 57 + .../IdUniquenessPolicyValueHolder.java | 33 + .../ImplicitActivationPolicy.java | 16 + .../ImplicitActivationPolicyHelper.java | 70 + .../ImplicitActivationPolicyHolder.java | 33 + .../ImplicitActivationPolicyLocalBase.java | 21 + .../ImplicitActivationPolicyLocalTie.java | 43 + .../ImplicitActivationPolicyOperations.java | 16 + .../ImplicitActivationPolicyValue.java | 33 + .../ImplicitActivationPolicyValueHelper.java | 57 + .../ImplicitActivationPolicyValueHolder.java | 33 + .../PortableServer/LIFESPAN_POLICY_ID.java | 12 + .../omg/PortableServer/LifespanPolicy.java | 16 + .../PortableServer/LifespanPolicyHelper.java | 70 + .../PortableServer/LifespanPolicyHolder.java | 33 + .../LifespanPolicyLocalBase.java | 21 + .../LifespanPolicyLocalTie.java | 43 + .../LifespanPolicyOperations.java | 16 + .../PortableServer/LifespanPolicyValue.java | 33 + .../LifespanPolicyValueHelper.java | 57 + .../LifespanPolicyValueHolder.java | 33 + .../omg/PortableServer/ObjectIdHelper.java | 57 + idl/orb/.java/org/omg/PortableServer/POA.java | 15 + .../org/omg/PortableServer/POAHelper.java | 70 + .../org/omg/PortableServer/POAHolder.java | 33 + .../org/omg/PortableServer/POAListHelper.java | 64 + .../org/omg/PortableServer/POAListHolder.java | 34 + .../org/omg/PortableServer/POALocalBase.java | 20 + .../org/omg/PortableServer/POALocalTie.java | 222 ++ .../org/omg/PortableServer/POAManager.java | 15 + .../omg/PortableServer/POAManagerHelper.java | 70 + .../omg/PortableServer/POAManagerHolder.java | 33 + .../PortableServer/POAManagerLocalBase.java | 20 + .../PortableServer/POAManagerLocalTie.java | 57 + .../PortableServer/POAManagerOperations.java | 27 + .../POAManagerPackage/AdapterInactive.java | 23 + .../AdapterInactiveHelper.java | 59 + .../AdapterInactiveHolder.java | 33 + .../POAManagerPackage/State.java | 39 + .../POAManagerPackage/StateHelper.java | 59 + .../POAManagerPackage/StateHolder.java | 33 + .../org/omg/PortableServer/POAOperations.java | 93 + .../POAPackage/AdapterAlreadyExists.java | 23 + .../AdapterAlreadyExistsHelper.java | 59 + .../AdapterAlreadyExistsHolder.java | 33 + .../POAPackage/AdapterNonExistent.java | 23 + .../POAPackage/AdapterNonExistentHelper.java | 59 + .../POAPackage/AdapterNonExistentHolder.java | 33 + .../POAPackage/InvalidPolicy.java | 31 + .../POAPackage/InvalidPolicyHelper.java | 62 + .../POAPackage/InvalidPolicyHolder.java | 33 + .../PortableServer/POAPackage/NoServant.java | 23 + .../POAPackage/NoServantHelper.java | 59 + .../POAPackage/NoServantHolder.java | 33 + .../POAPackage/ObjectAlreadyActive.java | 23 + .../POAPackage/ObjectAlreadyActiveHelper.java | 59 + .../POAPackage/ObjectAlreadyActiveHolder.java | 33 + .../POAPackage/ObjectNotActive.java | 23 + .../POAPackage/ObjectNotActiveHelper.java | 59 + .../POAPackage/ObjectNotActiveHolder.java | 33 + .../POAPackage/ServantAlreadyActive.java | 23 + .../ServantAlreadyActiveHelper.java | 59 + .../ServantAlreadyActiveHolder.java | 33 + .../POAPackage/ServantNotActive.java | 23 + .../POAPackage/ServantNotActiveHelper.java | 59 + .../POAPackage/ServantNotActiveHolder.java | 33 + .../POAPackage/WrongAdapter.java | 23 + .../POAPackage/WrongAdapterHelper.java | 59 + .../POAPackage/WrongAdapterHolder.java | 33 + .../POAPackage/WrongPolicy.java | 23 + .../POAPackage/WrongPolicyHelper.java | 59 + .../POAPackage/WrongPolicyHolder.java | 33 + .../REQUEST_PROCESSING_POLICY_ID.java | 12 + .../RequestProcessingPolicy.java | 16 + .../RequestProcessingPolicyHelper.java | 70 + .../RequestProcessingPolicyHolder.java | 33 + .../RequestProcessingPolicyLocalBase.java | 21 + .../RequestProcessingPolicyLocalTie.java | 43 + .../RequestProcessingPolicyOperations.java | 16 + .../RequestProcessingPolicyValue.java | 36 + .../RequestProcessingPolicyValueHelper.java | 58 + .../RequestProcessingPolicyValueHolder.java | 33 + .../SERVANT_RETENTION_POLICY_ID.java | 12 + .../.java/org/omg/PortableServer/Servant.java | 76 + .../omg/PortableServer/ServantActivator.java | 16 + .../ServantActivatorHelper.java | 70 + .../ServantActivatorHolder.java | 33 + .../ServantActivatorLocalBase.java | 21 + .../ServantActivatorLocalTie.java | 43 + .../ServantActivatorOperations.java | 19 + .../org/omg/PortableServer/ServantHelper.java | 47 + .../omg/PortableServer/ServantLocator.java | 16 + .../PortableServer/ServantLocatorHelper.java | 70 + .../PortableServer/ServantLocatorHolder.java | 33 + .../ServantLocatorLocalBase.java | 21 + .../ServantLocatorLocalTie.java | 45 + .../ServantLocatorOperations.java | 22 + .../ServantLocatorPackage/CookieHelper.java | 43 + .../ServantLocatorPackage/CookieHolder.java | 31 + .../omg/PortableServer/ServantManager.java | 15 + .../PortableServer/ServantManagerHelper.java | 70 + .../PortableServer/ServantManagerHolder.java | 33 + .../ServantManagerLocalBase.java | 20 + .../ServantManagerLocalTie.java | 24 + .../ServantManagerOperations.java | 13 + .../ServantRetentionPolicy.java | 16 + .../ServantRetentionPolicyHelper.java | 70 + .../ServantRetentionPolicyHolder.java | 33 + .../ServantRetentionPolicyLocalBase.java | 21 + .../ServantRetentionPolicyLocalTie.java | 43 + .../ServantRetentionPolicyOperations.java | 16 + .../ServantRetentionPolicyValue.java | 33 + .../ServantRetentionPolicyValueHelper.java | 57 + .../ServantRetentionPolicyValueHolder.java | 33 + .../omg/PortableServer/THREAD_POLICY_ID.java | 12 + .../org/omg/PortableServer/ThreadPolicy.java | 16 + .../PortableServer/ThreadPolicyHelper.java | 70 + .../PortableServer/ThreadPolicyHolder.java | 33 + .../PortableServer/ThreadPolicyLocalBase.java | 21 + .../PortableServer/ThreadPolicyLocalTie.java | 43 + .../ThreadPolicyOperations.java | 16 + .../omg/PortableServer/ThreadPolicyValue.java | 36 + .../ThreadPolicyValueHelper.java | 58 + .../ThreadPolicyValueHolder.java | 33 + .../omg/PortableServer/portable/Delegate.java | 24 + idl/orb/.svn/all-wcprops | 23 + idl/orb/.svn/dir-prop-base | 6 + idl/orb/.svn/entries | 133 + idl/orb/.svn/prop-base/.cvsignore.svn-base | 9 + idl/orb/.svn/prop-base/CORBA.idl.svn-base | 9 + idl/orb/.svn/prop-base/build.xml.svn-base | 9 + idl/orb/.svn/text-base/.cvsignore.svn-base | 2 + idl/orb/.svn/text-base/CORBA.idl.svn-base | 1127 ++++++++ idl/orb/.svn/text-base/build.xml.svn-base | 89 + idl/orb/CORBA.idl | 1127 ++++++++ idl/orb/build.xml | 89 + idl/orb/extra/.svn/all-wcprops | 5 + idl/orb/extra/.svn/entries | 34 + idl/orb/extra/es/.svn/all-wcprops | 5 + idl/orb/extra/es/.svn/entries | 31 + idl/orb/extra/es/tid/.svn/all-wcprops | 5 + idl/orb/extra/es/tid/.svn/entries | 31 + idl/orb/extra/es/tid/CORBA/.svn/all-wcprops | 11 + idl/orb/extra/es/tid/CORBA/.svn/entries | 62 + .../CORBA/.svn/prop-base/Any.java.svn-base | 9 + .../CORBA/.svn/text-base/Any.java.svn-base | 10 + idl/orb/extra/es/tid/CORBA/Any.java | 10 + idl/orb/extra/org/.svn/all-wcprops | 5 + idl/orb/extra/org/.svn/entries | 31 + idl/orb/extra/org/omg/.svn/all-wcprops | 5 + idl/orb/extra/org/omg/.svn/entries | 40 + idl/orb/extra/org/omg/CORBA/.svn/all-wcprops | 449 +++ idl/orb/extra/org/omg/CORBA/.svn/entries | 2553 +++++++++++++++++ .../CORBA/.svn/prop-base/Any.java.svn-base | 9 + .../.svn/prop-base/AnyHolder.java.svn-base | 9 + .../.svn/prop-base/BAD_CONTEXT.java.svn-base | 9 + .../prop-base/BAD_INV_ORDER.java.svn-base | 9 + .../prop-base/BAD_OPERATION.java.svn-base | 9 + .../.svn/prop-base/BAD_PARAM.java.svn-base | 9 + .../.svn/prop-base/BAD_POLICY.java.svn-base | 9 + .../prop-base/BAD_POLICY_TYPE.java.svn-base | 9 + .../prop-base/BAD_POLICY_VALUE.java.svn-base | 9 + .../.svn/prop-base/BAD_TYPECODE.java.svn-base | 9 + .../prop-base/BooleanHolder.java.svn-base | 9 + .../CORBA/.svn/prop-base/Bounds.java.svn-base | 9 + .../.svn/prop-base/ByteHolder.java.svn-base | 9 + .../CODESET_INCOMPATIBLE.java.svn-base | 9 + .../.svn/prop-base/COMM_FAILURE.java.svn-base | 9 + .../.svn/prop-base/CharHolder.java.svn-base | 9 + .../prop-base/CompletionStatus.java.svn-base | 9 + .../.svn/prop-base/Context.java.svn-base | 9 + .../.svn/prop-base/ContextList.java.svn-base | 9 + .../prop-base/DATA_CONVERSION.java.svn-base | 9 + .../.svn/prop-base/DoubleHolder.java.svn-base | 9 + .../DynamicImplementation.java.svn-base | 9 + .../.svn/prop-base/Environment.java.svn-base | 9 + .../prop-base/ExceptionList.java.svn-base | 9 + .../.svn/prop-base/FREE_MEM.java.svn-base | 9 + .../.svn/prop-base/FloatHolder.java.svn-base | 9 + .../.svn/prop-base/IMP_LIMIT.java.svn-base | 9 + .../.svn/prop-base/INITIALIZE.java.svn-base | 9 + .../.svn/prop-base/INTERNAL.java.svn-base | 9 + .../.svn/prop-base/INTF_REPOS.java.svn-base | 9 + .../INVALID_TRANSACTION.java.svn-base | 9 + .../.svn/prop-base/INV_FLAG.java.svn-base | 9 + .../.svn/prop-base/INV_IDENT.java.svn-base | 9 + .../.svn/prop-base/INV_OBJREF.java.svn-base | 9 + .../.svn/prop-base/INV_POLICY.java.svn-base | 9 + .../.svn/prop-base/IntHolder.java.svn-base | 9 + .../prop-base/LocalInterface.java.svn-base | 9 + .../.svn/prop-base/LocalObject.java.svn-base | 9 + .../.svn/prop-base/LongHolder.java.svn-base | 9 + .../.svn/prop-base/MARSHAL.java.svn-base | 9 + .../.svn/prop-base/NO_IMPLEMENT.java.svn-base | 9 + .../.svn/prop-base/NO_MEMORY.java.svn-base | 9 + .../prop-base/NO_PERMISSION.java.svn-base | 9 + .../.svn/prop-base/NO_RESOURCES.java.svn-base | 9 + .../.svn/prop-base/NO_RESPONSE.java.svn-base | 9 + .../CORBA/.svn/prop-base/NVList.java.svn-base | 9 + .../.svn/prop-base/NamedValue.java.svn-base | 9 + .../prop-base/OBJECT_NOT_EXIST.java.svn-base | 9 + .../.svn/prop-base/OBJ_ADAPTER.java.svn-base | 9 + .../CORBA/.svn/prop-base/ORB.java.svn-base | 9 + .../CORBA/.svn/prop-base/Object.java.svn-base | 9 + .../.svn/prop-base/ObjectHolder.java.svn-base | 9 + .../prop-base/PERSIST_STORE.java.svn-base | 9 + .../.svn/prop-base/PolicyError.java.svn-base | 9 + .../.svn/prop-base/Principal.java.svn-base | 9 + .../prop-base/PrincipalHolder.java.svn-base | 9 + .../.svn/prop-base/Request.java.svn-base | 9 + .../prop-base/ServerRequest.java.svn-base | 9 + .../.svn/prop-base/ShortHolder.java.svn-base | 9 + .../.svn/prop-base/StringHolder.java.svn-base | 9 + .../prop-base/SystemException.java.svn-base | 9 + .../.svn/prop-base/TIMEOUT.java.svn-base | 9 + .../TRANSACTION_REQUIRED.java.svn-base | 9 + .../TRANSACTION_ROLLEDBACK.java.svn-base | 9 + .../.svn/prop-base/TRANSIENT.java.svn-base | 9 + .../.svn/prop-base/TypeCode.java.svn-base | 9 + .../prop-base/TypeCodeHelper.java.svn-base | 9 + .../prop-base/TypeCodeHolder.java.svn-base | 9 + .../.svn/prop-base/UNKNOWN.java.svn-base | 9 + .../UnknownUserException.java.svn-base | 9 + .../prop-base/UserException.java.svn-base | 9 + .../prop-base/ValueBaseHelper.java.svn-base | 9 + .../prop-base/ValueBaseHolder.java.svn-base | 9 + .../prop-base/WrongTransaction.java.svn-base | 9 + .../CORBA/.svn/text-base/Any.java.svn-base | 116 + .../.svn/text-base/AnyHolder.java.svn-base | 39 + .../.svn/text-base/BAD_CONTEXT.java.svn-base | 26 + .../text-base/BAD_INV_ORDER.java.svn-base | 26 + .../text-base/BAD_OPERATION.java.svn-base | 26 + .../.svn/text-base/BAD_PARAM.java.svn-base | 26 + .../.svn/text-base/BAD_POLICY.java.svn-base | 10 + .../text-base/BAD_POLICY_TYPE.java.svn-base | 10 + .../text-base/BAD_POLICY_VALUE.java.svn-base | 10 + .../.svn/text-base/BAD_TYPECODE.java.svn-base | 26 + .../text-base/BooleanHolder.java.svn-base | 31 + .../CORBA/.svn/text-base/Bounds.java.svn-base | 23 + .../.svn/text-base/ByteHolder.java.svn-base | 31 + .../CODESET_INCOMPATIBLE.java.svn-base | 26 + .../.svn/text-base/COMM_FAILURE.java.svn-base | 26 + .../.svn/text-base/CharHolder.java.svn-base | 31 + .../text-base/CompletionStatus.java.svn-base | 43 + .../.svn/text-base/Context.java.svn-base | 20 + .../.svn/text-base/ContextList.java.svn-base | 14 + .../text-base/DATA_CONVERSION.java.svn-base | 26 + .../.svn/text-base/DoubleHolder.java.svn-base | 31 + .../DynamicImplementation.java.svn-base | 22 + .../.svn/text-base/Environment.java.svn-base | 12 + .../text-base/ExceptionList.java.svn-base | 18 + .../.svn/text-base/FREE_MEM.java.svn-base | 26 + .../.svn/text-base/FloatHolder.java.svn-base | 31 + .../.svn/text-base/IMP_LIMIT.java.svn-base | 26 + .../.svn/text-base/INITIALIZE.java.svn-base | 26 + .../.svn/text-base/INTERNAL.java.svn-base | 26 + .../.svn/text-base/INTF_REPOS.java.svn-base | 26 + .../INVALID_TRANSACTION.java.svn-base | 27 + .../.svn/text-base/INV_FLAG.java.svn-base | 26 + .../.svn/text-base/INV_IDENT.java.svn-base | 26 + .../.svn/text-base/INV_OBJREF.java.svn-base | 26 + .../.svn/text-base/INV_POLICY.java.svn-base | 26 + .../.svn/text-base/IntHolder.java.svn-base | 31 + .../text-base/LocalInterface.java.svn-base | 3 + .../.svn/text-base/LocalObject.java.svn-base | 143 + .../.svn/text-base/LongHolder.java.svn-base | 31 + .../.svn/text-base/MARSHAL.java.svn-base | 26 + .../.svn/text-base/NO_IMPLEMENT.java.svn-base | 26 + .../.svn/text-base/NO_MEMORY.java.svn-base | 26 + .../text-base/NO_PERMISSION.java.svn-base | 26 + .../.svn/text-base/NO_RESOURCES.java.svn-base | 26 + .../.svn/text-base/NO_RESPONSE.java.svn-base | 26 + .../CORBA/.svn/text-base/NVList.java.svn-base | 19 + .../.svn/text-base/NamedValue.java.svn-base | 13 + .../text-base/OBJECT_NOT_EXIST.java.svn-base | 27 + .../.svn/text-base/OBJ_ADAPTER.java.svn-base | 26 + .../CORBA/.svn/text-base/ORB.java.svn-base | 285 ++ .../CORBA/.svn/text-base/Object.java.svn-base | 52 + .../.svn/text-base/ObjectHolder.java.svn-base | 31 + .../text-base/PERSIST_STORE.java.svn-base | 26 + .../.svn/text-base/PolicyError.java.svn-base | 31 + .../.svn/text-base/Principal.java.svn-base | 25 + .../text-base/PrincipalHolder.java.svn-base | 32 + .../.svn/text-base/Request.java.svn-base | 46 + .../text-base/ServerRequest.java.svn-base | 52 + .../.svn/text-base/ShortHolder.java.svn-base | 31 + .../.svn/text-base/StringHolder.java.svn-base | 31 + .../text-base/SystemException.java.svn-base | 42 + .../.svn/text-base/TIMEOUT.java.svn-base | 26 + .../TRANSACTION_REQUIRED.java.svn-base | 27 + .../TRANSACTION_ROLLEDBACK.java.svn-base | 27 + .../.svn/text-base/TRANSIENT.java.svn-base | 26 + .../.svn/text-base/TypeCode.java.svn-base | 66 + .../text-base/TypeCodeHelper.java.svn-base | 44 + .../text-base/TypeCodeHolder.java.svn-base | 31 + .../.svn/text-base/UNKNOWN.java.svn-base | 26 + .../UnknownUserException.java.svn-base | 20 + .../text-base/UserException.java.svn-base | 20 + .../text-base/ValueBaseHelper.java.svn-base | 61 + .../text-base/ValueBaseHolder.java.svn-base | 32 + .../text-base/WrongTransaction.java.svn-base | 17 + idl/orb/extra/org/omg/CORBA/Any.java | 116 + idl/orb/extra/org/omg/CORBA/AnyHolder.java | 39 + idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java | 26 + .../extra/org/omg/CORBA/BAD_INV_ORDER.java | 26 + .../extra/org/omg/CORBA/BAD_OPERATION.java | 26 + idl/orb/extra/org/omg/CORBA/BAD_PARAM.java | 26 + idl/orb/extra/org/omg/CORBA/BAD_POLICY.java | 10 + .../extra/org/omg/CORBA/BAD_POLICY_TYPE.java | 10 + .../extra/org/omg/CORBA/BAD_POLICY_VALUE.java | 10 + idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java | 26 + .../extra/org/omg/CORBA/BooleanHolder.java | 31 + idl/orb/extra/org/omg/CORBA/Bounds.java | 23 + idl/orb/extra/org/omg/CORBA/ByteHolder.java | 31 + .../org/omg/CORBA/CODESET_INCOMPATIBLE.java | 26 + idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java | 26 + idl/orb/extra/org/omg/CORBA/CharHolder.java | 31 + .../extra/org/omg/CORBA/CompletionStatus.java | 43 + idl/orb/extra/org/omg/CORBA/Context.java | 20 + idl/orb/extra/org/omg/CORBA/ContextList.java | 14 + .../extra/org/omg/CORBA/DATA_CONVERSION.java | 26 + idl/orb/extra/org/omg/CORBA/DoubleHolder.java | 31 + .../org/omg/CORBA/DynamicImplementation.java | 22 + idl/orb/extra/org/omg/CORBA/Environment.java | 12 + .../extra/org/omg/CORBA/ExceptionList.java | 18 + idl/orb/extra/org/omg/CORBA/FREE_MEM.java | 26 + idl/orb/extra/org/omg/CORBA/FloatHolder.java | 31 + idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java | 26 + idl/orb/extra/org/omg/CORBA/INITIALIZE.java | 26 + idl/orb/extra/org/omg/CORBA/INTERNAL.java | 26 + idl/orb/extra/org/omg/CORBA/INTF_REPOS.java | 26 + .../org/omg/CORBA/INVALID_TRANSACTION.java | 27 + idl/orb/extra/org/omg/CORBA/INV_FLAG.java | 26 + idl/orb/extra/org/omg/CORBA/INV_IDENT.java | 26 + idl/orb/extra/org/omg/CORBA/INV_OBJREF.java | 26 + idl/orb/extra/org/omg/CORBA/INV_POLICY.java | 26 + idl/orb/extra/org/omg/CORBA/IntHolder.java | 31 + .../extra/org/omg/CORBA/LocalInterface.java | 3 + idl/orb/extra/org/omg/CORBA/LocalObject.java | 143 + idl/orb/extra/org/omg/CORBA/LongHolder.java | 31 + idl/orb/extra/org/omg/CORBA/MARSHAL.java | 26 + idl/orb/extra/org/omg/CORBA/NO_IMPLEMENT.java | 26 + idl/orb/extra/org/omg/CORBA/NO_MEMORY.java | 26 + .../extra/org/omg/CORBA/NO_PERMISSION.java | 26 + idl/orb/extra/org/omg/CORBA/NO_RESOURCES.java | 26 + idl/orb/extra/org/omg/CORBA/NO_RESPONSE.java | 26 + idl/orb/extra/org/omg/CORBA/NVList.java | 19 + idl/orb/extra/org/omg/CORBA/NamedValue.java | 13 + .../extra/org/omg/CORBA/OBJECT_NOT_EXIST.java | 27 + idl/orb/extra/org/omg/CORBA/OBJ_ADAPTER.java | 26 + idl/orb/extra/org/omg/CORBA/ORB.java | 285 ++ .../org/omg/CORBA/ORBPackage/.svn/all-wcprops | 11 + .../org/omg/CORBA/ORBPackage/.svn/entries | 62 + .../.svn/prop-base/InvalidName.java.svn-base | 9 + .../.svn/text-base/InvalidName.java.svn-base | 15 + .../org/omg/CORBA/ORBPackage/InvalidName.java | 15 + idl/orb/extra/org/omg/CORBA/Object.java | 52 + idl/orb/extra/org/omg/CORBA/ObjectHolder.java | 31 + .../extra/org/omg/CORBA/PERSIST_STORE.java | 26 + idl/orb/extra/org/omg/CORBA/PolicyError.java | 31 + idl/orb/extra/org/omg/CORBA/Principal.java | 25 + .../extra/org/omg/CORBA/PrincipalHolder.java | 32 + idl/orb/extra/org/omg/CORBA/Request.java | 46 + .../extra/org/omg/CORBA/ServerRequest.java | 52 + idl/orb/extra/org/omg/CORBA/ShortHolder.java | 31 + idl/orb/extra/org/omg/CORBA/StringHolder.java | 31 + .../extra/org/omg/CORBA/SystemException.java | 42 + idl/orb/extra/org/omg/CORBA/TIMEOUT.java | 26 + .../org/omg/CORBA/TRANSACTION_REQUIRED.java | 27 + .../org/omg/CORBA/TRANSACTION_ROLLEDBACK.java | 27 + idl/orb/extra/org/omg/CORBA/TRANSIENT.java | 26 + idl/orb/extra/org/omg/CORBA/TypeCode.java | 66 + .../extra/org/omg/CORBA/TypeCodeHelper.java | 44 + .../extra/org/omg/CORBA/TypeCodeHolder.java | 31 + .../CORBA/TypeCodePackage/.svn/all-wcprops | 17 + .../omg/CORBA/TypeCodePackage/.svn/entries | 96 + .../.svn/prop-base/BadKind.java.svn-base | 9 + .../.svn/prop-base/Bounds.java.svn-base | 9 + .../.svn/text-base/BadKind.java.svn-base | 16 + .../.svn/text-base/Bounds.java.svn-base | 16 + .../omg/CORBA/TypeCodePackage/BadKind.java | 16 + .../org/omg/CORBA/TypeCodePackage/Bounds.java | 16 + idl/orb/extra/org/omg/CORBA/UNKNOWN.java | 26 + .../org/omg/CORBA/UnknownUserException.java | 20 + .../extra/org/omg/CORBA/UserException.java | 20 + .../extra/org/omg/CORBA/ValueBaseHelper.java | 61 + .../extra/org/omg/CORBA/ValueBaseHolder.java | 32 + .../extra/org/omg/CORBA/WrongTransaction.java | 17 + .../org/omg/CORBA/portable/.svn/all-wcprops | 113 + .../extra/org/omg/CORBA/portable/.svn/entries | 640 +++++ .../ApplicationException.java.svn-base | 9 + .../prop-base/BoxedValueHelper.java.svn-base | 9 + .../.svn/prop-base/CustomValue.java.svn-base | 9 + .../.svn/prop-base/Delegate.java.svn-base | 9 + .../.svn/prop-base/IDLEntity.java.svn-base | 9 + .../IndirectionException.java.svn-base | 9 + .../.svn/prop-base/InputStream.java.svn-base | 9 + .../prop-base/InvokeHandler.java.svn-base | 9 + .../.svn/prop-base/ObjectImpl.java.svn-base | 9 + .../.svn/prop-base/OutputStream.java.svn-base | 9 + .../RemarshalException.java.svn-base | 9 + .../prop-base/ResponseHandler.java.svn-base | 9 + .../prop-base/ServantObject.java.svn-base | 9 + .../.svn/prop-base/Streamable.java.svn-base | 9 + .../prop-base/StreamableValue.java.svn-base | 9 + .../prop-base/UnknownException.java.svn-base | 9 + .../.svn/prop-base/ValueBase.java.svn-base | 9 + .../.svn/prop-base/ValueFactory.java.svn-base | 9 + .../ApplicationException.java.svn-base | 27 + .../text-base/BoxedValueHelper.java.svn-base | 14 + .../.svn/text-base/CustomValue.java.svn-base | 10 + .../.svn/text-base/Delegate.java.svn-base | 118 + .../.svn/text-base/IDLEntity.java.svn-base | 10 + .../IndirectionException.java.svn-base | 17 + .../.svn/text-base/InputStream.java.svn-base | 88 + .../text-base/InvokeHandler.java.svn-base | 14 + .../.svn/text-base/ObjectImpl.java.svn-base | 140 + .../.svn/text-base/OutputStream.java.svn-base | 76 + .../RemarshalException.java.svn-base | 13 + .../text-base/ResponseHandler.java.svn-base | 14 + .../text-base/ServantObject.java.svn-base | 10 + .../.svn/text-base/Streamable.java.svn-base | 13 + .../text-base/StreamableValue.java.svn-base | 10 + .../text-base/UnknownException.java.svn-base | 16 + .../.svn/text-base/ValueBase.java.svn-base | 11 + .../.svn/text-base/ValueFactory.java.svn-base | 11 + .../CORBA/portable/ApplicationException.java | 27 + .../omg/CORBA/portable/BoxedValueHelper.java | 14 + .../org/omg/CORBA/portable/CustomValue.java | 10 + .../org/omg/CORBA/portable/Delegate.java | 118 + .../org/omg/CORBA/portable/IDLEntity.java | 10 + .../CORBA/portable/IndirectionException.java | 17 + .../org/omg/CORBA/portable/InputStream.java | 88 + .../org/omg/CORBA/portable/InvokeHandler.java | 14 + .../org/omg/CORBA/portable/ObjectImpl.java | 140 + .../org/omg/CORBA/portable/OutputStream.java | 76 + .../CORBA/portable/RemarshalException.java | 13 + .../omg/CORBA/portable/ResponseHandler.java | 14 + .../org/omg/CORBA/portable/ServantObject.java | 10 + .../org/omg/CORBA/portable/Streamable.java | 13 + .../omg/CORBA/portable/StreamableValue.java | 10 + .../omg/CORBA/portable/UnknownException.java | 16 + .../org/omg/CORBA/portable/ValueBase.java | 11 + .../org/omg/CORBA/portable/ValueFactory.java | 11 + .../extra/org/omg/CORBA_2_3/.svn/all-wcprops | 11 + idl/orb/extra/org/omg/CORBA_2_3/.svn/entries | 65 + .../.svn/prop-base/ORB.java.svn-base | 9 + .../.svn/text-base/ORB.java.svn-base | 49 + idl/orb/extra/org/omg/CORBA_2_3/ORB.java | 49 + .../omg/CORBA_2_3/portable/.svn/all-wcprops | 29 + .../org/omg/CORBA_2_3/portable/.svn/entries | 164 ++ .../.svn/prop-base/Delegate.java.svn-base | 9 + .../.svn/prop-base/InputStream.java.svn-base | 9 + .../.svn/prop-base/ObjectImpl.java.svn-base | 9 + .../.svn/prop-base/OutputStream.java.svn-base | 9 + .../.svn/text-base/Delegate.java.svn-base | 13 + .../.svn/text-base/InputStream.java.svn-base | 39 + .../.svn/text-base/ObjectImpl.java.svn-base | 17 + .../.svn/text-base/OutputStream.java.svn-base | 32 + .../org/omg/CORBA_2_3/portable/Delegate.java | 13 + .../omg/CORBA_2_3/portable/InputStream.java | 39 + .../omg/CORBA_2_3/portable/ObjectImpl.java | 17 + .../omg/CORBA_2_3/portable/OutputStream.java | 32 + .../extra/org/omg/CORBA_2_5/.svn/all-wcprops | 11 + idl/orb/extra/org/omg/CORBA_2_5/.svn/entries | 62 + .../.svn/prop-base/ORB.java.svn-base | 9 + .../.svn/text-base/ORB.java.svn-base | 21 + idl/orb/extra/org/omg/CORBA_2_5/ORB.java | 21 + .../org/omg/PortableServer/.svn/all-wcprops | 35 + .../extra/org/omg/PortableServer/.svn/entries | 204 ++ .../DynamicImplementation.java.svn-base | 9 + .../.svn/prop-base/Servant.java.svn-base | 9 + .../prop-base/ServantHelper.java.svn-base | 9 + .../ServantLocatorLocalTie.java.svn-base | 9 + .../ServantLocatorOperations.java.svn-base | 9 + .../DynamicImplementation.java.svn-base | 11 + .../.svn/text-base/Servant.java.svn-base | 76 + .../text-base/ServantHelper.java.svn-base | 47 + .../ServantLocatorLocalTie.java.svn-base | 45 + .../ServantLocatorOperations.java.svn-base | 22 + .../PortableServer/DynamicImplementation.java | 11 + .../extra/org/omg/PortableServer/Servant.java | 76 + .../org/omg/PortableServer/ServantHelper.java | 47 + .../ServantLocatorLocalTie.java | 45 + .../ServantLocatorOperations.java | 22 + .../ServantLocatorPackage/.svn/all-wcprops | 17 + .../ServantLocatorPackage/.svn/entries | 96 + .../.svn/prop-base/CookieHelper.java.svn-base | 9 + .../.svn/prop-base/CookieHolder.java.svn-base | 9 + .../.svn/text-base/CookieHelper.java.svn-base | 43 + .../.svn/text-base/CookieHolder.java.svn-base | 31 + .../ServantLocatorPackage/CookieHelper.java | 43 + .../ServantLocatorPackage/CookieHolder.java | 31 + .../PortableServer/portable/.svn/all-wcprops | 11 + .../omg/PortableServer/portable/.svn/entries | 62 + .../.svn/prop-base/Delegate.java.svn-base | 9 + .../.svn/text-base/Delegate.java.svn-base | 24 + .../omg/PortableServer/portable/Delegate.java | 24 + idl/properties.xml | 73 + lib/CompressionIdl.jar | Bin 0 -> 78851 bytes lib/SecurityIdl.jar | Bin 0 -> 358664 bytes lib/SendingContextIdl.jar | Bin 0 -> 15743 bytes lib/bidirpolicyIdl.jar | Bin 0 -> 7949 bytes lib/commIdl.jar | Bin 0 -> 62225 bytes lib/core.jar | Bin 0 -> 440495 bytes lib/dynAnyIdl.jar | Bin 0 -> 68360 bytes lib/messagingIdl.jar | Bin 0 -> 155456 bytes lib/namingIdl.jar | Bin 0 -> 54670 bytes lib/orbIdl.jar | Bin 0 -> 551785 bytes lib/tidorbj.jar | Bin 0 -> 1598012 bytes lib/timebaseIdl.jar | Bin 0 -> 7941 bytes lib/tools.jar | Bin 0 -> 2350 bytes lib/util.jar | Bin 0 -> 12237 bytes properties.xml | 52 + .../es/tid/PortableServer/POAManager.class | Bin 0 -> 504 bytes .../.class/es/tid/TIDorbj/core/AnyImpl.class | Bin 0 -> 15707 bytes .../core/BidirectionalPolicyImpl.class | Bin 0 -> 1953 bytes .../tid/TIDorbj/core/CodecFactoryImpl.class | Bin 0 -> 1220 bytes .../es/tid/TIDorbj/core/CodecImpl.class | Bin 0 -> 2399 bytes .../.class/es/tid/TIDorbj/core/ConfORB.class | Bin 0 -> 15251 bytes .../es/tid/TIDorbj/core/ContextImpl.class | Bin 0 -> 4577 bytes .../es/tid/TIDorbj/core/ContextListImpl.class | Bin 0 -> 778 bytes .../es/tid/TIDorbj/core/EnvironmentImpl.class | Bin 0 -> 388 bytes .../tid/TIDorbj/core/ExceptionListImpl.class | Bin 0 -> 1198 bytes .../es/tid/TIDorbj/core/ForwardRequest.class | Bin 0 -> 256 bytes .../es/tid/TIDorbj/core/NVListImpl.class | Bin 0 -> 4275 bytes .../es/tid/TIDorbj/core/NamedValueImpl.class | Bin 0 -> 1012 bytes .../es/tid/TIDorbj/core/ORBComponent.class | Bin 0 -> 313 bytes .../es/tid/TIDorbj/core/ORBServices.class | Bin 0 -> 5716 bytes .../es/tid/TIDorbj/core/ObjectImpl.class | Bin 0 -> 1034 bytes .../es/tid/TIDorbj/core/ObjectKey.class | Bin 0 -> 1872 bytes .../es/tid/TIDorbj/core/ProcessingState.class | Bin 0 -> 1299 bytes .../es/tid/TIDorbj/core/PseudoObject.class | Bin 0 -> 2091 bytes .../es/tid/TIDorbj/core/RequestCounter.class | Bin 0 -> 238 bytes .../es/tid/TIDorbj/core/RequestImpl.class | Bin 0 -> 7216 bytes .../tid/TIDorbj/core/ServerRequestImpl.class | Bin 0 -> 4127 bytes .../es/tid/TIDorbj/core/ShutdownThread.class | Bin 0 -> 348 bytes .../es/tid/TIDorbj/core/SingletonORB.class | Bin 0 -> 7373 bytes .../tid/TIDorbj/core/StreamRequestImpl.class | Bin 0 -> 1608 bytes .../.class/es/tid/TIDorbj/core/TIDORB.class | Bin 0 -> 24327 bytes .../TIDorbj/core/cdr/AbsolutePosition.class | Bin 0 -> 782 bytes .../TIDorbj/core/cdr/AlignmentOffset.class | Bin 0 -> 356 bytes .../es/tid/TIDorbj/core/cdr/BufferCDR.class | Bin 0 -> 2500 bytes .../.class/es/tid/TIDorbj/core/cdr/CDR.class | Bin 0 -> 2536 bytes .../tid/TIDorbj/core/cdr/CDRInputStream.class | Bin 0 -> 28769 bytes .../TIDorbj/core/cdr/CDROutputStream.class | Bin 0 -> 19922 bytes .../es/tid/TIDorbj/core/cdr/ChunkCDR.class | Bin 0 -> 773 bytes .../es/tid/TIDorbj/core/cdr/ContextCDR.class | Bin 0 -> 3331 bytes .../tid/TIDorbj/core/cdr/Encapsulation.class | Bin 0 -> 2912 bytes .../TIDorbj/core/cdr/IndirectionNode.class | Bin 0 -> 1170 bytes .../es/tid/TIDorbj/core/cdr/IteratorCDR.class | Bin 0 -> 4854 bytes .../es/tid/TIDorbj/core/cdr/MarkCDR.class | Bin 0 -> 542 bytes .../es/tid/TIDorbj/core/cdr/PointerCDR.class | Bin 0 -> 1164 bytes .../tid/TIDorbj/core/cdr/PositionsNode.class | Bin 0 -> 1095 bytes .../tid/TIDorbj/core/cdr/TypeCodeReader.class | Bin 0 -> 3936 bytes .../tid/TIDorbj/core/cdr/ValueTypeInfo.class | Bin 0 -> 4913 bytes .../core/comm/CommunicationDelegate.class | Bin 0 -> 8914 bytes .../core/comm/CommunicationException.class | Bin 0 -> 388 bytes .../core/comm/CommunicationLayer.class | Bin 0 -> 1663 bytes .../core/comm/CommunicationManager.class | Bin 0 -> 8172 bytes .../es/tid/TIDorbj/core/comm/Connection.class | Bin 0 -> 28233 bytes .../TIDorbj/core/comm/ForwardRequest.class | Bin 0 -> 267 bytes .../es/tid/TIDorbj/core/comm/LayerInfo.class | Bin 0 -> 626 bytes .../core/comm/LocateResponseHandler.class | Bin 0 -> 178 bytes .../tid/TIDorbj/core/comm/PropertyInfo.class | Bin 0 -> 1705 bytes .../TIDorbj/core/comm/RequestDispatcher.class | Bin 0 -> 3077 bytes .../TIDorbj/core/comm/ResponseHandler.class | Bin 0 -> 398 bytes .../comm/giop/AddressingDisposition.class | Bin 0 -> 776 bytes .../core/comm/giop/BiDirServiceContext.class | Bin 0 -> 1256 bytes .../comm/giop/GIOPCancelRequestMessage.class | Bin 0 -> 2376 bytes .../core/comm/giop/GIOPFragmentMessage.class | Bin 0 -> 2918 bytes .../comm/giop/GIOPFragmentedMessage.class | Bin 0 -> 4029 bytes .../TIDorbj/core/comm/giop/GIOPHeader.class | Bin 0 -> 3794 bytes .../comm/giop/GIOPLocateReplyMessage.class | Bin 0 -> 5021 bytes .../comm/giop/GIOPLocateRequestMessage.class | Bin 0 -> 2759 bytes .../TIDorbj/core/comm/giop/GIOPMessage.class | Bin 0 -> 3382 bytes .../core/comm/giop/GIOPReplyMessage.class | Bin 0 -> 9292 bytes .../core/comm/giop/GIOPRequestMessage.class | Bin 0 -> 7537 bytes .../TIDorbj/core/comm/giop/GIOPVersion.class | Bin 0 -> 2039 bytes .../comm/giop/InvocationPoliciesContext.class | Bin 0 -> 1017 bytes .../comm/giop/LocateReplyStatusType.class | Bin 0 -> 2347 bytes .../core/comm/giop/MessageFactory.class | Bin 0 -> 1101 bytes .../tid/TIDorbj/core/comm/giop/MsgType.class | Bin 0 -> 1300 bytes .../core/comm/giop/ReplyStatusType.class | Bin 0 -> 1471 bytes .../TIDorbj/core/comm/giop/RequestId.class | Bin 0 -> 653 bytes .../core/comm/giop/ServiceContext.class | Bin 0 -> 972 bytes .../core/comm/giop/ServiceContextList.class | Bin 0 -> 1324 bytes .../core/comm/giop/ServiceContextReader.class | Bin 0 -> 743 bytes .../TIDorbj/core/comm/giop/ServiceId.class | Bin 0 -> 509 bytes .../TIDorbj/core/comm/giop/ZIOPMessage.class | Bin 0 -> 7695 bytes .../TIDorbj/core/comm/iiop/CommLayer.class | Bin 0 -> 2498 bytes .../core/comm/iiop/CommunicationLayer.class | Bin 0 -> 900 bytes .../core/comm/iiop/ConnectionState.class | Bin 0 -> 1233 bytes .../core/comm/iiop/ConnectionThread.class | Bin 0 -> 390 bytes .../comm/iiop/ConnectionWriteMonitor.class | Bin 0 -> 1176 bytes .../comm/iiop/FragmentedMessageHolder.class | Bin 0 -> 415 bytes .../core/comm/iiop/IIOPCommLayer.class | Bin 0 -> 11895 bytes .../comm/iiop/IIOPCommunicationDelegate.class | Bin 0 -> 5249 bytes .../comm/iiop/IIOPCommunicationLayer.class | Bin 0 -> 6922 bytes ...IIOPCommunicationLayerPropertiesInfo.class | Bin 0 -> 6413 bytes .../core/comm/iiop/IIOPConnection.class | Bin 0 -> 9783 bytes .../comm/iiop/IIOPConnectionManager.class | Bin 0 -> 8956 bytes .../TIDorbj/core/comm/iiop/IIOPCorbaloc.class | Bin 0 -> 2667 bytes .../tid/TIDorbj/core/comm/iiop/IIOPIOR.class | Bin 0 -> 3992 bytes .../comm/iiop/IIOPLocateResponseHandler.class | Bin 0 -> 3007 bytes .../TIDorbj/core/comm/iiop/IIOPProfile.class | Bin 0 -> 6012 bytes .../core/comm/iiop/IIOPResponseHandler.class | Bin 0 -> 2704 bytes .../core/comm/iiop/IORAddressingInfo.class | Bin 0 -> 1623 bytes .../TIDorbj/core/comm/iiop/ListenPoint.class | Bin 0 -> 1450 bytes .../es/tid/TIDorbj/core/comm/iiop/Lock.class | Bin 0 -> 1444 bytes .../core/comm/iiop/LockEnumeration.class | Bin 0 -> 522 bytes .../tid/TIDorbj/core/comm/iiop/LockList.class | Bin 0 -> 1079 bytes .../TIDorbj/core/comm/iiop/OpeningLock.class | Bin 0 -> 979 bytes .../comm/iiop/RECOVERABLE_COMM_FAILURE.class | Bin 0 -> 277 bytes .../core/comm/iiop/ReliableOnewayThread.class | Bin 0 -> 717 bytes .../core/comm/iiop/ServerListener.class | Bin 0 -> 6453 bytes .../core/comm/iiop/TargetAddress.class | Bin 0 -> 2900 bytes .../TIDorbj/core/comm/iiop/WriteTimeout.class | Bin 0 -> 160 bytes .../comm/local/AMILocalResponseHandler.class | Bin 0 -> 4159 bytes .../core/comm/local/LocalCommLayer.class | Bin 0 -> 6203 bytes .../local/LocalLocateResponseHandler.class | Bin 0 -> 2498 bytes .../comm/local/LocalResponseHandler.class | Bin 0 -> 2375 bytes .../core/comm/local/LocalServerRequest.class | Bin 0 -> 2117 bytes .../core/comm/ssliop/SSLComponent.class | Bin 0 -> 2394 bytes .../core/comm/ssliop/SSLConnection.class | Bin 0 -> 11327 bytes .../core/comm/ssliop/SSLIOPCommLayer.class | Bin 0 -> 10208 bytes .../ssliop/SSLIOPCommunicationDelegate.class | Bin 0 -> 5267 bytes .../ssliop/SSLIOPCommunicationLayer.class | Bin 0 -> 7104 bytes ...LIOPCommunicationLayerPropertiesInfo.class | Bin 0 -> 3616 bytes .../core/comm/ssliop/SSLIOPCorbaloc.class | Bin 0 -> 3001 bytes .../ssliop/SSLLocateResponseHandler.class | Bin 0 -> 3013 bytes .../core/comm/ssliop/SSLResponseHandler.class | Bin 0 -> 2710 bytes .../core/comm/ssliop/SSLServerListener.class | Bin 0 -> 7161 bytes .../compression/CompressionManagerImpl.class | Bin 0 -> 1990 bytes .../compression/CompressorFactoryImpl.class | Bin 0 -> 1454 bytes .../core/compression/CompressorImpl.class | Bin 0 -> 1208 bytes .../core/compression/ZlibCompressorImpl.class | Bin 0 -> 1550 bytes .../tid/TIDorbj/core/iop/CSIComponent.class | Bin 0 -> 5280 bytes .../es/tid/TIDorbj/core/iop/DefaultIOR.class | Bin 0 -> 1878 bytes .../es/tid/TIDorbj/core/iop/IOR$1.class | Bin 0 -> 366 bytes .../.class/es/tid/TIDorbj/core/iop/IOR.class | Bin 0 -> 4275 bytes .../tid/TIDorbj/core/iop/ORBComponent.class | Bin 0 -> 1218 bytes .../core/iop/ProfileMultipleComponents.class | Bin 0 -> 1840 bytes .../tid/TIDorbj/core/iop/SSLComponent.class | Bin 0 -> 2160 bytes .../TIDorbj/core/iop/TaggedComponent.class | Bin 0 -> 917 bytes .../core/iop/TaggedComponentReader.class | Bin 0 -> 881 bytes .../tid/TIDorbj/core/iop/TaggedProfile.class | Bin 0 -> 699 bytes .../core/iop/TaggedProfileReader.class | Bin 0 -> 857 bytes .../tid/TIDorbj/core/messaging/AMILock.class | Bin 0 -> 6603 bytes .../core/messaging/AMILockEnumeration.class | Bin 0 -> 531 bytes .../TIDorbj/core/messaging/AMILockList.class | Bin 0 -> 2192 bytes .../TIDorbj/core/messaging/AMIManager.class | Bin 0 -> 2747 bytes .../core/messaging/AMIManagerConf.class | Bin 0 -> 1486 bytes .../messaging/AMIManagerConfListener.class | Bin 0 -> 141 bytes .../TIDorbj/core/messaging/AMIThread.class | Bin 0 -> 2326 bytes .../core/messaging/AMIThreadPool.class | Bin 0 -> 2517 bytes .../core/messaging/PoliciesComponent.class | Bin 0 -> 1205 bytes .../es/tid/TIDorbj/core/messaging/QoS.class | Bin 0 -> 2912 bytes .../core/messaging/QueueOrderPolicyImpl.class | Bin 0 -> 1347 bytes .../core/messaging/RebindPolicyImpl.class | Bin 0 -> 1020 bytes .../RelativeRequestTimeoutPolicyImpl.class | Bin 0 -> 1334 bytes .../RelativeRoundtripTimeoutPolicyImpl.class | Bin 0 -> 1120 bytes .../messaging/RequestEndTimePolicyImpl.class | Bin 0 -> 1470 bytes .../messaging/RequestPriorityPolicyImpl.class | Bin 0 -> 1605 bytes .../RequestStartTimePolicyImpl.class | Bin 0 -> 1535 bytes .../core/messaging/ThreadStateListener.class | Bin 0 -> 238 bytes .../core/messaging/_ExceptionHolderImpl.class | Bin 0 -> 2697 bytes .../core/poa/ActiveObjectMap$AOMElement.class | Bin 0 -> 677 bytes .../poa/ActiveObjectMap$AOMEnumeration.class | Bin 0 -> 710 bytes .../TIDorbj/core/poa/ActiveObjectMap.class | Bin 0 -> 2643 bytes .../TIDorbj/core/poa/CompletionWaiter.class | Bin 0 -> 1200 bytes .../es/tid/TIDorbj/core/poa/CurrentImpl.class | Bin 0 -> 1756 bytes .../es/tid/TIDorbj/core/poa/CurrentInfo.class | Bin 0 -> 674 bytes .../core/poa/DeadlineRequestComparator.class | Bin 0 -> 1170 bytes .../es/tid/TIDorbj/core/poa/ExecThread.class | Bin 0 -> 14233 bytes .../.class/es/tid/TIDorbj/core/poa/OID.class | Bin 0 -> 1132 bytes .../es/tid/TIDorbj/core/poa/POAImpl.class | Bin 0 -> 25765 bytes .../es/tid/TIDorbj/core/poa/POAKey.class | Bin 0 -> 4622 bytes .../tid/TIDorbj/core/poa/POAManagerConf.class | Bin 0 -> 1462 bytes .../core/poa/POAManagerConfListener.class | Bin 0 -> 135 bytes .../POAManagerImpl$EtherealizerThread.class | Bin 0 -> 536 bytes .../tid/TIDorbj/core/poa/POAManagerImpl.class | Bin 0 -> 6501 bytes .../core/poa/PriorityRequestComparator.class | Bin 0 -> 1406 bytes .../TIDorbj/core/poa/QueueReaderManager.class | Bin 0 -> 126 bytes .../poa/QueuedLocateResponseHandler.class | Bin 0 -> 796 bytes .../tid/TIDorbj/core/poa/QueuedRequest.class | Bin 0 -> 2293 bytes .../core/poa/QueuedResponseHandler.class | Bin 0 -> 906 bytes .../tid/TIDorbj/core/poa/RequestQueue.class | Bin 0 -> 2725 bytes .../TIDorbj/core/poa/ServantDelegate.class | Bin 0 -> 1856 bytes .../es/tid/TIDorbj/core/poa/SystemOID.class | Bin 0 -> 1376 bytes .../core/poa/TemporalRequestComparator.class | Bin 0 -> 564 bytes .../es/tid/TIDorbj/core/poa/ThreadPool.class | Bin 0 -> 2467 bytes .../core/poa/ThreadStateListener.class | Bin 0 -> 232 bytes .../poa/policies/IdAssignmentPolicyImpl.class | Bin 0 -> 1037 bytes .../poa/policies/IdUniquenessPolicyImpl.class | Bin 0 -> 1037 bytes .../ImplicitActivationPolicyImpl.class | Bin 0 -> 1085 bytes .../poa/policies/LifespanPolicyImpl.class | Bin 0 -> 1005 bytes .../RequestProcessingPolicyImpl.class | Bin 0 -> 1077 bytes .../policies/ServantRetentionPolicyImpl.class | Bin 0 -> 1069 bytes .../core/poa/policies/ThreadPolicyImpl.class | Bin 0 -> 989 bytes .../TIDorbj/core/policy/PolicyContext.class | Bin 0 -> 15395 bytes .../core/policy/PolicyContextManager.class | Bin 0 -> 1488 bytes .../core/policy/PolicyCurrentImpl.class | Bin 0 -> 1223 bytes .../TIDorbj/core/policy/PolicyFactory.class | Bin 0 -> 4726 bytes .../core/policy/PolicyManagerImpl.class | Bin 0 -> 875 bytes .../core/policy/UnsuportedPolicy.class | Bin 0 -> 937 bytes .../TIDorbj/core/security/CSIComponent.class | Bin 0 -> 5293 bytes .../typecode/AbstractInterfaceTypeCode.class | Bin 0 -> 1213 bytes .../TIDorbj/core/typecode/AliasTypeCode.class | Bin 0 -> 2796 bytes .../TIDorbj/core/typecode/ArrayTypeCode.class | Bin 0 -> 3689 bytes .../core/typecode/ComplexTypeCode.class | Bin 0 -> 3754 bytes .../TIDorbj/core/typecode/EnumTypeCode.class | Bin 0 -> 4007 bytes .../core/typecode/ExceptionTypeCode.class | Bin 0 -> 2810 bytes .../TIDorbj/core/typecode/FixedTypeCode.class | Bin 0 -> 2932 bytes .../core/typecode/NativeTypeCode.class | Bin 0 -> 442 bytes .../core/typecode/ObjectRefTypeCode.class | Bin 0 -> 2556 bytes .../core/typecode/RecursiveTypeCode.class | Bin 0 -> 2361 bytes .../core/typecode/SequenceTypeCode.class | Bin 0 -> 2729 bytes .../core/typecode/StringTypeCode.class | Bin 0 -> 2778 bytes .../core/typecode/StructTypeCode.class | Bin 0 -> 4887 bytes .../typecode/TransparentAliasTypeCode.class | Bin 0 -> 2035 bytes .../TIDorbj/core/typecode/TypeCodeCache.class | Bin 0 -> 1389 bytes .../core/typecode/TypeCodeDumper.class | Bin 0 -> 2031 bytes .../core/typecode/TypeCodeFactory.class | Bin 0 -> 3799 bytes .../core/typecode/TypeCodeHandler.class | Bin 0 -> 423 bytes .../TIDorbj/core/typecode/TypeCodeImpl.class | Bin 0 -> 7920 bytes .../core/typecode/TypeCodeMarshaler.class | Bin 0 -> 5120 bytes .../TIDorbj/core/typecode/UnionTypeCode.class | Bin 0 -> 7110 bytes .../core/typecode/ValueBoxTypeCode.class | Bin 0 -> 3040 bytes .../TIDorbj/core/typecode/ValueTypeCode.class | Bin 0 -> 5342 bytes .../core/typecode/WStringTypeCode.class | Bin 0 -> 2001 bytes .../core/util/AbstractInterfaceHolder.class | Bin 0 -> 1070 bytes .../core/util/BoxedValueHelperFinder.class | Bin 0 -> 1135 bytes .../tid/TIDorbj/core/util/CodeBaseURL.class | Bin 0 -> 227 bytes .../es/tid/TIDorbj/core/util/Corbaloc.class | Bin 0 -> 5255 bytes .../es/tid/TIDorbj/core/util/Corbaname.class | Bin 0 -> 2820 bytes .../es/tid/TIDorbj/core/util/Counter.class | Bin 0 -> 610 bytes .../TIDorbj/core/util/DestructionState.class | Bin 0 -> 290 bytes .../es/tid/TIDorbj/core/util/EnumHolder.class | Bin 0 -> 828 bytes .../tid/TIDorbj/core/util/FixedHolder.class | Bin 0 -> 2832 bytes .../core/util/FullUseTableException.class | Bin 0 -> 230 bytes .../TIDorbj/core/util/HashedLinkedList.class | Bin 0 -> 1398 bytes .../TIDorbj/core/util/InitialReference.class | Bin 0 -> 794 bytes .../LinkedList$LinkedListEnumeration.class | Bin 0 -> 943 bytes .../es/tid/TIDorbj/core/util/LinkedList.class | Bin 0 -> 2612 bytes .../es/tid/TIDorbj/core/util/Mutex.class | Bin 0 -> 400 bytes .../core/util/OnlyOneThreadCanWait.class | Bin 0 -> 163 bytes .../core/util/OperationCompletion.class | Bin 0 -> 770 bytes .../TIDorbj/core/util/RemovableObject.class | Bin 0 -> 121 bytes .../tid/TIDorbj/core/util/RepositoryId.class | Bin 0 -> 3300 bytes .../tid/TIDorbj/core/util/StringHolder.class | Bin 0 -> 1553 bytes .../tid/TIDorbj/core/util/ULongHolder.class | Bin 0 -> 755 bytes .../TIDorbj/core/util/ULongLongHolder.class | Bin 0 -> 771 bytes .../tid/TIDorbj/core/util/UShortHolder.class | Bin 0 -> 759 bytes .../es/tid/TIDorbj/core/util/UseTable.class | Bin 0 -> 2515 bytes .../util/UserSystemExceptionEncoder.class | Bin 0 -> 1881 bytes .../tid/TIDorbj/core/util/ValueHolder.class | Bin 0 -> 1244 bytes .../tid/TIDorbj/core/util/WCharHolder.class | Bin 0 -> 755 bytes .../tid/TIDorbj/core/util/WStringHolder.class | Bin 0 -> 1598 bytes .../util/exception/BAD_CONTEXT_Creator.class | Bin 0 -> 454 bytes .../exception/BAD_INV_ORDER_Creator.class | Bin 0 -> 458 bytes .../exception/BAD_OPERATION_Creator.class | Bin 0 -> 458 bytes .../util/exception/BAD_PARAM_Creator.class | Bin 0 -> 450 bytes .../util/exception/BAD_TYPECODE_Creator.class | Bin 0 -> 456 bytes .../util/exception/COMM_FAILURE_Creator.class | Bin 0 -> 456 bytes .../exception/DATA_CONVERSION_Creator.class | Bin 0 -> 462 bytes .../util/exception/FREE_MEM_Creator.class | Bin 0 -> 448 bytes .../util/exception/IMP_LIMIT_Creator.class | Bin 0 -> 450 bytes .../util/exception/INITIALIZE_Creator.class | Bin 0 -> 452 bytes .../util/exception/INTERNAL_Creator.class | Bin 0 -> 448 bytes .../util/exception/INTF_REPOS_Creator.class | Bin 0 -> 452 bytes .../INVALID_TRANSACTION_Creator.class | Bin 0 -> 470 bytes .../util/exception/INV_FLAG_Creator.class | Bin 0 -> 448 bytes .../util/exception/INV_IDENT_Creator.class | Bin 0 -> 450 bytes .../util/exception/INV_OBJREF_Creator.class | Bin 0 -> 452 bytes .../util/exception/INV_POLICY_Creator.class | Bin 0 -> 452 bytes .../core/util/exception/MARSHAL_Creator.class | Bin 0 -> 446 bytes .../util/exception/NO_IMPLEMENT_Creator.class | Bin 0 -> 456 bytes .../util/exception/NO_MEMORY_Creator.class | Bin 0 -> 450 bytes .../exception/NO_PERMISSION_Creator.class | Bin 0 -> 458 bytes .../util/exception/NO_RESOURCES_Creator.class | Bin 0 -> 456 bytes .../util/exception/NO_RESPONSE_Creator.class | Bin 0 -> 454 bytes .../exception/OBJECT_NOT_EXIST_Creator.class | Bin 0 -> 464 bytes .../util/exception/OBJ_ADAPTER_Creator.class | Bin 0 -> 454 bytes .../exception/PERSIST_STORE_Creator.class | Bin 0 -> 458 bytes .../exception/SystemExceptionCreator.class | Bin 0 -> 195 bytes .../exception/SystemExceptionEncoder.class | Bin 0 -> 6882 bytes .../util/exception/SystemExceptionNames.class | Bin 0 -> 4478 bytes .../core/util/exception/TIMEOUT_Creator.class | Bin 0 -> 446 bytes .../TRANSACTION_REQUIRED_Creator.class | Bin 0 -> 472 bytes .../TRANSACTION_ROLLEDBACK_Creator.class | Bin 0 -> 476 bytes .../util/exception/TRANSIENT_Creator.class | Bin 0 -> 450 bytes .../core/util/exception/UNKNOWN_Creator.class | Bin 0 -> 446 bytes .../ziop/CompressionEnablingPolicyImpl.class | Bin 0 -> 1295 bytes .../ziop/CompressionLowValuePolicyImpl.class | Bin 0 -> 1079 bytes .../ziop/CompressionMinRatioPolicyImpl.class | Bin 0 -> 1081 bytes .../CompressorIdLevelListPolicyImpl.class | Bin 0 -> 1534 bytes .../es/tid/TIDorbj/core/ziop/ZIOP.class | Bin 0 -> 2250 bytes .../es/tid/TIDorbj/dynAny/DynAnyBase.class | Bin 0 -> 4219 bytes .../TIDorbj/dynAny/DynAnyFactoryImpl.class | Bin 0 -> 4434 bytes .../es/tid/TIDorbj/dynAny/DynAnyImpl.class | Bin 0 -> 14898 bytes .../es/tid/TIDorbj/dynAny/DynAnyWithAny.class | Bin 0 -> 9043 bytes .../es/tid/TIDorbj/dynAny/DynArrayImpl.class | Bin 0 -> 6863 bytes .../es/tid/TIDorbj/dynAny/DynComposite.class | Bin 0 -> 21049 bytes .../es/tid/TIDorbj/dynAny/DynEnumImpl.class | Bin 0 -> 9838 bytes .../es/tid/TIDorbj/dynAny/DynExceptImpl.class | Bin 0 -> 2369 bytes .../es/tid/TIDorbj/dynAny/DynFixedImpl.class | Bin 0 -> 9638 bytes .../tid/TIDorbj/dynAny/DynSequenceImpl.class | Bin 0 -> 9308 bytes .../es/tid/TIDorbj/dynAny/DynSingleton.class | Bin 0 -> 4043 bytes .../es/tid/TIDorbj/dynAny/DynStructBase.class | Bin 0 -> 4377 bytes .../es/tid/TIDorbj/dynAny/DynStructImpl.class | Bin 0 -> 1911 bytes .../es/tid/TIDorbj/dynAny/DynUnionImpl.class | Bin 0 -> 18619 bytes .../es/tid/TIDorbj/dynAny/DynValueImpl.class | Bin 0 -> 2092 bytes source/.cvsignore | 1 + source/.svn/all-wcprops | 23 + source/.svn/dir-prop-base | 5 + source/.svn/entries | 133 + source/.svn/prop-base/.cvsignore.svn-base | 9 + source/.svn/prop-base/build.xml.svn-base | 9 + source/.svn/prop-base/properties.xml.svn-base | 9 + source/.svn/text-base/.cvsignore.svn-base | 1 + source/.svn/text-base/build.xml.svn-base | 81 + source/.svn/text-base/properties.xml.svn-base | 51 + source/build.xml | 81 + source/es/.svn/all-wcprops | 5 + source/es/.svn/entries | 31 + source/es/tid/.svn/all-wcprops | 5 + source/es/tid/.svn/entries | 34 + source/es/tid/PortableServer/.svn/all-wcprops | 11 + source/es/tid/PortableServer/.svn/entries | 62 + .../.svn/prop-base/POAManager.java.svn-base | 9 + .../.svn/text-base/POAManager.java.svn-base | 115 + source/es/tid/PortableServer/POAManager.java | 115 + source/es/tid/TIDorbj/.svn/all-wcprops | 5 + source/es/tid/TIDorbj/.svn/entries | 34 + source/es/tid/TIDorbj/core/.svn/all-wcprops | 155 + source/es/tid/TIDorbj/core/.svn/entries | 920 ++++++ .../core/.svn/prop-base/AnyImpl.java.svn-base | 9 + .../BidirectionalPolicyImpl.java.svn-base | 9 + .../prop-base/CodecFactoryImpl.java.svn-base | 9 + .../.svn/prop-base/CodecImpl.java.svn-base | 9 + .../core/.svn/prop-base/ConfORB.java.svn-base | 9 + .../.svn/prop-base/ContextImpl.java.svn-base | 9 + .../prop-base/ContextListImpl.java.svn-base | 9 + .../prop-base/EnvironmentImpl.java.svn-base | 9 + .../prop-base/ExceptionListImpl.java.svn-base | 9 + .../prop-base/ForwardRequest.java.svn-base | 9 + .../.svn/prop-base/NVListImpl.java.svn-base | 9 + .../prop-base/NamedValueImpl.java.svn-base | 9 + .../.svn/prop-base/ORBComponent.java.svn-base | 9 + .../.svn/prop-base/ORBServices.java.svn-base | 9 + .../.svn/prop-base/ObjectImpl.java.svn-base | 9 + .../.svn/prop-base/ObjectKey.java.svn-base | 9 + .../prop-base/ProcessingState.java.svn-base | 9 + .../.svn/prop-base/PseudoObject.java.svn-base | 9 + .../prop-base/RequestCounter.java.svn-base | 9 + .../.svn/prop-base/RequestImpl.java.svn-base | 9 + .../prop-base/ServerRequestImpl.java.svn-base | 9 + .../prop-base/ShutdownThread.java.svn-base | 9 + .../.svn/prop-base/SingletonORB.java.svn-base | 9 + .../prop-base/StreamRequestImpl.java.svn-base | 9 + .../core/.svn/prop-base/TIDORB.java.svn-base | 9 + .../core/.svn/text-base/AnyImpl.java.svn-base | 1282 +++++++++ .../BidirectionalPolicyImpl.java.svn-base | 170 ++ .../text-base/CodecFactoryImpl.java.svn-base | 102 + .../.svn/text-base/CodecImpl.java.svn-base | 187 ++ .../core/.svn/text-base/ConfORB.java.svn-base | 1662 +++++++++++ .../.svn/text-base/ContextImpl.java.svn-base | 325 +++ .../text-base/ContextListImpl.java.svn-base | 90 + .../text-base/EnvironmentImpl.java.svn-base | 76 + .../text-base/ExceptionListImpl.java.svn-base | 100 + .../text-base/ForwardRequest.java.svn-base | 56 + .../.svn/text-base/NVListImpl.java.svn-base | 332 +++ .../text-base/NamedValueImpl.java.svn-base | 109 + .../.svn/text-base/ORBComponent.java.svn-base | 71 + .../.svn/text-base/ORBServices.java.svn-base | 332 +++ .../.svn/text-base/ObjectImpl.java.svn-base | 74 + .../.svn/text-base/ObjectKey.java.svn-base | 135 + .../text-base/ProcessingState.java.svn-base | 133 + .../.svn/text-base/PseudoObject.java.svn-base | 187 ++ .../text-base/RequestCounter.java.svn-base | 18 + .../.svn/text-base/RequestImpl.java.svn-base | 559 ++++ .../text-base/ServerRequestImpl.java.svn-base | 279 ++ .../text-base/ShutdownThread.java.svn-base | 60 + .../.svn/text-base/SingletonORB.java.svn-base | 420 +++ .../text-base/StreamRequestImpl.java.svn-base | 145 + .../core/.svn/text-base/TIDORB.java.svn-base | 1653 +++++++++++ .../tid/TIDorbj/core/.svn/tmp/TIDORB.java.tmp | 1690 +++++++++++ .../tid/TIDorbj/core/.svn/tmp/tempfile.2.tmp | 1684 +++++++++++ .../es/tid/TIDorbj/core/.svn/tmp/tempfile.tmp | 1684 +++++++++++ source/es/tid/TIDorbj/core/AnyImpl.java | 1282 +++++++++ .../TIDorbj/core/BidirectionalPolicyImpl.java | 170 ++ .../es/tid/TIDorbj/core/CodecFactoryImpl.java | 102 + source/es/tid/TIDorbj/core/CodecImpl.java | 187 ++ source/es/tid/TIDorbj/core/ConfORB.java | 1662 +++++++++++ source/es/tid/TIDorbj/core/ContextImpl.java | 325 +++ .../es/tid/TIDorbj/core/ContextListImpl.java | 90 + .../es/tid/TIDorbj/core/EnvironmentImpl.java | 76 + .../tid/TIDorbj/core/ExceptionListImpl.java | 100 + .../es/tid/TIDorbj/core/ForwardRequest.java | 56 + source/es/tid/TIDorbj/core/NVListImpl.java | 332 +++ .../es/tid/TIDorbj/core/NamedValueImpl.java | 109 + source/es/tid/TIDorbj/core/ORBComponent.java | 71 + source/es/tid/TIDorbj/core/ORBServices.java | 332 +++ source/es/tid/TIDorbj/core/ObjectImpl.java | 74 + source/es/tid/TIDorbj/core/ObjectKey.java | 135 + .../es/tid/TIDorbj/core/ProcessingState.java | 133 + source/es/tid/TIDorbj/core/PseudoObject.java | 187 ++ .../es/tid/TIDorbj/core/RequestCounter.java | 18 + source/es/tid/TIDorbj/core/RequestImpl.java | 559 ++++ .../tid/TIDorbj/core/ServerRequestImpl.java | 279 ++ .../es/tid/TIDorbj/core/ShutdownThread.java | 60 + source/es/tid/TIDorbj/core/SingletonORB.java | 420 +++ .../tid/TIDorbj/core/StreamRequestImpl.java | 145 + source/es/tid/TIDorbj/core/TIDORB.java | 1653 +++++++++++ .../es/tid/TIDorbj/core/cdr/.svn/all-wcprops | 101 + source/es/tid/TIDorbj/core/cdr/.svn/entries | 572 ++++ .../prop-base/AbsolutePosition.java.svn-base | 9 + .../prop-base/AlignmentOffset.java.svn-base | 9 + .../.svn/prop-base/BufferCDR.java.svn-base | 9 + .../core/cdr/.svn/prop-base/CDR.java.svn-base | 9 + .../prop-base/CDRInputStream.java.svn-base | 9 + .../prop-base/CDROutputStream.java.svn-base | 9 + .../cdr/.svn/prop-base/ChunkCDR.java.svn-base | 9 + .../.svn/prop-base/ContextCDR.java.svn-base | 9 + .../prop-base/Encapsulation.java.svn-base | 9 + .../prop-base/IndirectionNode.java.svn-base | 9 + .../.svn/prop-base/IteratorCDR.java.svn-base | 9 + .../cdr/.svn/prop-base/MarkCDR.java.svn-base | 9 + .../.svn/prop-base/PointerCDR.java.svn-base | 9 + .../prop-base/PositionsNode.java.svn-base | 9 + .../prop-base/TypeCodeReader.java.svn-base | 9 + .../prop-base/ValueTypeInfo.java.svn-base | 9 + .../text-base/AbsolutePosition.java.svn-base | 125 + .../text-base/AlignmentOffset.java.svn-base | 93 + .../.svn/text-base/BufferCDR.java.svn-base | 290 ++ .../core/cdr/.svn/text-base/CDR.java.svn-base | 151 + .../text-base/CDRInputStream.java.svn-base | 2324 +++++++++++++++ .../text-base/CDROutputStream.java.svn-base | 1810 ++++++++++++ .../cdr/.svn/text-base/ChunkCDR.java.svn-base | 162 ++ .../.svn/text-base/ContextCDR.java.svn-base | 273 ++ .../text-base/Encapsulation.java.svn-base | 302 ++ .../text-base/IndirectionNode.java.svn-base | 113 + .../.svn/text-base/IteratorCDR.java.svn-base | 483 ++++ .../cdr/.svn/text-base/MarkCDR.java.svn-base | 83 + .../.svn/text-base/PointerCDR.java.svn-base | 137 + .../text-base/PositionsNode.java.svn-base | 149 + .../text-base/TypeCodeReader.java.svn-base | 267 ++ .../text-base/ValueTypeInfo.java.svn-base | 342 +++ .../TIDorbj/core/cdr/AbsolutePosition.java | 125 + .../tid/TIDorbj/core/cdr/AlignmentOffset.java | 93 + source/es/tid/TIDorbj/core/cdr/BufferCDR.java | 290 ++ source/es/tid/TIDorbj/core/cdr/CDR.java | 151 + .../tid/TIDorbj/core/cdr/CDRInputStream.java | 2324 +++++++++++++++ .../tid/TIDorbj/core/cdr/CDROutputStream.java | 1810 ++++++++++++ source/es/tid/TIDorbj/core/cdr/ChunkCDR.java | 162 ++ .../es/tid/TIDorbj/core/cdr/ContextCDR.java | 273 ++ .../tid/TIDorbj/core/cdr/Encapsulation.java | 302 ++ .../tid/TIDorbj/core/cdr/IndirectionNode.java | 113 + .../es/tid/TIDorbj/core/cdr/IteratorCDR.java | 483 ++++ source/es/tid/TIDorbj/core/cdr/MarkCDR.java | 83 + .../es/tid/TIDorbj/core/cdr/PointerCDR.java | 137 + .../tid/TIDorbj/core/cdr/PositionsNode.java | 149 + .../tid/TIDorbj/core/cdr/TypeCodeReader.java | 267 ++ .../tid/TIDorbj/core/cdr/ValueTypeInfo.java | 342 +++ .../es/tid/TIDorbj/core/comm/.svn/all-wcprops | 65 + source/es/tid/TIDorbj/core/comm/.svn/entries | 380 +++ .../CommunicationDelegate.java.svn-base | 9 + .../CommunicationException.java.svn-base | 9 + .../CommunicationLayer.java.svn-base | 9 + .../CommunicationManager.java.svn-base | 9 + .../prop-base/ForwardRequest.java.svn-base | 9 + .../LocateResponseHandler.java.svn-base | 9 + .../.svn/prop-base/PropertyInfo.java.svn-base | 9 + .../prop-base/RequestDispatcher.java.svn-base | 9 + .../prop-base/ResponseHandler.java.svn-base | 9 + .../CommunicationDelegate.java.svn-base | 513 ++++ .../CommunicationException.java.svn-base | 71 + .../CommunicationLayer.java.svn-base | 249 ++ .../CommunicationManager.java.svn-base | 725 +++++ .../.svn/text-base/Connection.java.svn-base | 2047 +++++++++++++ .../text-base/ForwardRequest.java.svn-base | 19 + .../LocateResponseHandler.java.svn-base | 64 + .../.svn/text-base/PropertyInfo.java.svn-base | 155 + .../text-base/RequestDispatcher.java.svn-base | 188 ++ .../text-base/ResponseHandler.java.svn-base | 94 + .../core/comm/CommunicationDelegate.java | 513 ++++ .../core/comm/CommunicationException.java | 71 + .../TIDorbj/core/comm/CommunicationLayer.java | 249 ++ .../core/comm/CommunicationManager.java | 725 +++++ .../es/tid/TIDorbj/core/comm/Connection.java | 2047 +++++++++++++ .../es/tid/TIDorbj/core/comm/Connection.java~ | 2035 +++++++++++++ .../tid/TIDorbj/core/comm/ForwardRequest.java | 19 + .../core/comm/LocateResponseHandler.java | 64 + .../tid/TIDorbj/core/comm/PropertyInfo.java | 155 + .../TIDorbj/core/comm/RequestDispatcher.java | 188 ++ .../TIDorbj/core/comm/ResponseHandler.java | 94 + .../TIDorbj/core/comm/giop/.svn/all-wcprops | 143 + .../tid/TIDorbj/core/comm/giop/.svn/entries | 819 ++++++ .../AddressingDisposition.java.svn-base | 9 + .../BiDirServiceContext.java.svn-base | 9 + .../GIOPCancelRequestMessage.java.svn-base | 9 + .../GIOPFragmentMessage.java.svn-base | 9 + .../GIOPFragmentedMessage.java.svn-base | 9 + .../.svn/prop-base/GIOPHeader.java.svn-base | 9 + .../GIOPLocateReplyMessage.java.svn-base | 9 + .../GIOPLocateRequestMessage.java.svn-base | 9 + .../.svn/prop-base/GIOPMessage.java.svn-base | 9 + .../prop-base/GIOPReplyMessage.java.svn-base | 9 + .../GIOPRequestMessage.java.svn-base | 9 + .../.svn/prop-base/GIOPVersion.java.svn-base | 9 + .../InvocationPoliciesContext.java.svn-base | 9 + .../LocateReplyStatusType.java.svn-base | 9 + .../prop-base/MessageFactory.java.svn-base | 9 + .../giop/.svn/prop-base/MsgType.java.svn-base | 9 + .../prop-base/ReplyStatusType.java.svn-base | 9 + .../.svn/prop-base/RequestId.java.svn-base | 9 + .../prop-base/ServiceContext.java.svn-base | 9 + .../ServiceContextList.java.svn-base | 9 + .../ServiceContextReader.java.svn-base | 9 + .../.svn/prop-base/ServiceId.java.svn-base | 9 + .../.svn/prop-base/ZIOPMessage.java.svn-base | 5 + .../AddressingDisposition.java.svn-base | 97 + .../BiDirServiceContext.java.svn-base | 104 + .../GIOPCancelRequestMessage.java.svn-base | 145 + .../GIOPFragmentMessage.java.svn-base | 143 + .../GIOPFragmentedMessage.java.svn-base | 326 +++ .../.svn/text-base/GIOPHeader.java.svn-base | 246 ++ .../GIOPLocateReplyMessage.java.svn-base | 245 ++ .../GIOPLocateRequestMessage.java.svn-base | 127 + .../.svn/text-base/GIOPMessage.java.svn-base | 258 ++ .../text-base/GIOPReplyMessage.java.svn-base | 511 ++++ .../GIOPRequestMessage.java.svn-base | 607 ++++ .../.svn/text-base/GIOPVersion.java.svn-base | 171 ++ .../InvocationPoliciesContext.java.svn-base | 101 + .../LocateReplyStatusType.java.svn-base | 157 + .../text-base/MessageFactory.java.svn-base | 79 + .../giop/.svn/text-base/MsgType.java.svn-base | 143 + .../text-base/ReplyStatusType.java.svn-base | 136 + .../.svn/text-base/RequestId.java.svn-base | 83 + .../text-base/ServiceContext.java.svn-base | 94 + .../ServiceContextList.java.svn-base | 98 + .../ServiceContextReader.java.svn-base | 79 + .../.svn/text-base/ServiceId.java.svn-base | 72 + .../.svn/text-base/ZIOPMessage.java.svn-base | 406 +++ .../core/comm/giop/AddressingDisposition.java | 97 + .../core/comm/giop/BiDirServiceContext.java | 104 + .../comm/giop/GIOPCancelRequestMessage.java | 145 + .../core/comm/giop/GIOPFragmentMessage.java | 143 + .../core/comm/giop/GIOPFragmentedMessage.java | 326 +++ .../TIDorbj/core/comm/giop/GIOPHeader.java | 246 ++ .../comm/giop/GIOPLocateReplyMessage.java | 245 ++ .../comm/giop/GIOPLocateRequestMessage.java | 127 + .../TIDorbj/core/comm/giop/GIOPMessage.java | 258 ++ .../core/comm/giop/GIOPReplyMessage.java | 511 ++++ .../core/comm/giop/GIOPRequestMessage.java | 607 ++++ .../TIDorbj/core/comm/giop/GIOPVersion.java | 171 ++ .../comm/giop/InvocationPoliciesContext.java | 101 + .../core/comm/giop/LocateReplyStatusType.java | 157 + .../core/comm/giop/MessageFactory.java | 79 + .../tid/TIDorbj/core/comm/giop/MsgType.java | 143 + .../core/comm/giop/ReplyStatusType.java | 136 + .../tid/TIDorbj/core/comm/giop/RequestId.java | 83 + .../core/comm/giop/ServiceContext.java | 94 + .../core/comm/giop/ServiceContextList.java | 98 + .../core/comm/giop/ServiceContextReader.java | 79 + .../tid/TIDorbj/core/comm/giop/ServiceId.java | 72 + .../TIDorbj/core/comm/giop/ZIOPMessage.java | 406 +++ .../TIDorbj/core/comm/iiop/.svn/all-wcprops | 173 ++ .../tid/TIDorbj/core/comm/iiop/.svn/entries | 980 +++++++ .../.svn/prop-base/CommLayer.java.svn-base | 9 + .../CommunicationLayer.java.svn-base | 9 + .../prop-base/ConnectionState.java.svn-base | 9 + .../prop-base/ConnectionThread.java.svn-base | 9 + .../ConnectionWriteMonitor.java.svn-base | 9 + .../FragmentedMessageHolder.java.svn-base | 9 + .../prop-base/IIOPCommLayer.java.svn-base | 9 + .../IIOPCommunicationDelegate.java.svn-base | 9 + .../IIOPCommunicationLayer.java.svn-base | 9 + ...unicationLayerPropertiesInfo.java.svn-base | 9 + .../prop-base/IIOPConnection.java.svn-base | 9 + .../IIOPConnectionManager.java.svn-base | 9 + .../.svn/prop-base/IIOPCorbaloc.java.svn-base | 9 + .../iiop/.svn/prop-base/IIOPIOR.java.svn-base | 9 + .../IIOPLocateResponseHandler.java.svn-base | 9 + .../.svn/prop-base/IIOPProfile.java.svn-base | 9 + .../IIOPResponseHandler.java.svn-base | 9 + .../prop-base/IORAddressingInfo.java.svn-base | 9 + .../.svn/prop-base/ListenPoint.java.svn-base | 9 + .../iiop/.svn/prop-base/Lock.java.svn-base | 9 + .../prop-base/LockEnumeration.java.svn-base | 9 + .../.svn/prop-base/LockList.java.svn-base | 9 + .../.svn/prop-base/OpeningLock.java.svn-base | 9 + .../RECOVERABLE_COMM_FAILURE.java.svn-base | 9 + .../ReliableOnewayThread.java.svn-base | 9 + .../prop-base/ServerListener.java.svn-base | 9 + .../prop-base/TargetAddress.java.svn-base | 9 + .../.svn/prop-base/WriteTimeout.java.svn-base | 9 + .../.svn/text-base/CommLayer.java.svn-base | 248 ++ .../CommunicationLayer.java.svn-base | 124 + .../text-base/ConnectionState.java.svn-base | 163 ++ .../text-base/ConnectionThread.java.svn-base | 70 + .../ConnectionWriteMonitor.java.svn-base | 115 + .../FragmentedMessageHolder.java.svn-base | 77 + .../text-base/IIOPCommLayer.java.svn-base | 1047 +++++++ .../IIOPCommunicationDelegate.java.svn-base | 364 +++ .../IIOPCommunicationLayer.java.svn-base | 376 +++ ...unicationLayerPropertiesInfo.java.svn-base | 508 ++++ .../text-base/IIOPConnection.java.svn-base | 507 ++++ .../IIOPConnectionManager.java.svn-base | 746 +++++ .../.svn/text-base/IIOPCorbaloc.java.svn-base | 178 ++ .../iiop/.svn/text-base/IIOPIOR.java.svn-base | 245 ++ .../IIOPLocateResponseHandler.java.svn-base | 190 ++ .../.svn/text-base/IIOPProfile.java.svn-base | 402 +++ .../IIOPResponseHandler.java.svn-base | 193 ++ .../text-base/IORAddressingInfo.java.svn-base | 101 + .../.svn/text-base/ListenPoint.java.svn-base | 110 + .../iiop/.svn/text-base/Lock.java.svn-base | 133 + .../text-base/LockEnumeration.java.svn-base | 63 + .../.svn/text-base/LockList.java.svn-base | 82 + .../.svn/text-base/OpeningLock.java.svn-base | 113 + .../RECOVERABLE_COMM_FAILURE.java.svn-base | 63 + .../ReliableOnewayThread.java.svn-base | 67 + .../text-base/ServerListener.java.svn-base | 376 +++ .../text-base/TargetAddress.java.svn-base | 206 ++ .../.svn/text-base/WriteTimeout.java.svn-base | 46 + .../tid/TIDorbj/core/comm/iiop/CommLayer.java | 248 ++ .../core/comm/iiop/CommunicationLayer.java | 124 + .../core/comm/iiop/ConnectionState.java | 163 ++ .../core/comm/iiop/ConnectionThread.java | 70 + .../comm/iiop/ConnectionWriteMonitor.java | 115 + .../comm/iiop/FragmentedMessageHolder.java | 77 + .../TIDorbj/core/comm/iiop/IIOPCommLayer.java | 1047 +++++++ .../comm/iiop/IIOPCommunicationDelegate.java | 364 +++ .../comm/iiop/IIOPCommunicationLayer.java | 376 +++ .../IIOPCommunicationLayerPropertiesInfo.java | 508 ++++ .../core/comm/iiop/IIOPConnection.java | 507 ++++ .../core/comm/iiop/IIOPConnectionManager.java | 746 +++++ .../TIDorbj/core/comm/iiop/IIOPCorbaloc.java | 178 ++ .../tid/TIDorbj/core/comm/iiop/IIOPIOR.java | 245 ++ .../comm/iiop/IIOPLocateResponseHandler.java | 190 ++ .../TIDorbj/core/comm/iiop/IIOPProfile.java | 402 +++ .../core/comm/iiop/IIOPResponseHandler.java | 193 ++ .../core/comm/iiop/IORAddressingInfo.java | 101 + .../TIDorbj/core/comm/iiop/ListenPoint.java | 110 + .../es/tid/TIDorbj/core/comm/iiop/Lock.java | 133 + .../core/comm/iiop/LockEnumeration.java | 63 + .../tid/TIDorbj/core/comm/iiop/LockList.java | 82 + .../TIDorbj/core/comm/iiop/OpeningLock.java | 113 + .../comm/iiop/RECOVERABLE_COMM_FAILURE.java | 63 + .../core/comm/iiop/ReliableOnewayThread.java | 67 + .../core/comm/iiop/ServerListener.java | 376 +++ .../TIDorbj/core/comm/iiop/TargetAddress.java | 206 ++ .../TIDorbj/core/comm/iiop/WriteTimeout.java | 46 + .../TIDorbj/core/comm/local/.svn/all-wcprops | 35 + .../tid/TIDorbj/core/comm/local/.svn/entries | 207 ++ .../AMILocalResponseHandler.java.svn-base | 9 + .../prop-base/LocalCommLayer.java.svn-base | 9 + .../LocalLocateResponseHandler.java.svn-base | 9 + .../LocalResponseHandler.java.svn-base | 9 + .../LocalServerRequest.java.svn-base | 9 + .../AMILocalResponseHandler.java.svn-base | 236 ++ .../text-base/LocalCommLayer.java.svn-base | 471 +++ .../LocalLocateResponseHandler.java.svn-base | 199 ++ .../LocalResponseHandler.java.svn-base | 184 ++ .../LocalServerRequest.java.svn-base | 159 + .../comm/local/AMILocalResponseHandler.java | 236 ++ .../core/comm/local/LocalCommLayer.java | 471 +++ .../local/LocalLocateResponseHandler.java | 199 ++ .../core/comm/local/LocalResponseHandler.java | 184 ++ .../core/comm/local/LocalServerRequest.java | 159 + .../TIDorbj/core/comm/ssliop/.svn/all-wcprops | 65 + .../tid/TIDorbj/core/comm/ssliop/.svn/entries | 368 +++ .../.svn/text-base/SSLComponent.java.svn-base | 195 ++ .../text-base/SSLConnection.java.svn-base | 577 ++++ .../text-base/SSLIOPCommLayer.java.svn-base | 962 +++++++ .../SSLIOPCommunicationDelegate.java.svn-base | 366 +++ .../SSLIOPCommunicationLayer.java.svn-base | 398 +++ ...unicationLayerPropertiesInfo.java.svn-base | 292 ++ .../text-base/SSLIOPCorbaloc.java.svn-base | 202 ++ .../SSLLocateResponseHandler.java.svn-base | 190 ++ .../SSLResponseHandler.java.svn-base | 193 ++ .../text-base/SSLServerListener.java.svn-base | 462 +++ .../core/comm/ssliop/SSLComponent.java | 195 ++ .../core/comm/ssliop/SSLConnection.java | 577 ++++ .../core/comm/ssliop/SSLIOPCommLayer.java | 962 +++++++ .../ssliop/SSLIOPCommunicationDelegate.java | 366 +++ .../comm/ssliop/SSLIOPCommunicationLayer.java | 398 +++ ...SLIOPCommunicationLayerPropertiesInfo.java | 292 ++ .../core/comm/ssliop/SSLIOPCorbaloc.java | 202 ++ .../comm/ssliop/SSLLocateResponseHandler.java | 190 ++ .../core/comm/ssliop/SSLResponseHandler.java | 193 ++ .../core/comm/ssliop/SSLServerListener.java | 462 +++ .../TIDorbj/core/compression/.svn/all-wcprops | 29 + .../tid/TIDorbj/core/compression/.svn/entries | 164 ++ .../CompressionManagerImpl.java.svn-base | 206 ++ .../CompressorFactoryImpl.java.svn-base | 145 + .../text-base/CompressorImpl.java.svn-base | 192 ++ .../ZlibCompressorImpl.java.svn-base | 175 ++ .../compression/CompressionManagerImpl.java | 206 ++ .../compression/CompressorFactoryImpl.java | 145 + .../core/compression/CompressorImpl.java | 192 ++ .../core/compression/ZlibCompressorImpl.java | 175 ++ .../es/tid/TIDorbj/core/iop/.svn/all-wcprops | 65 + source/es/tid/TIDorbj/core/iop/.svn/entries | 368 +++ .../.svn/prop-base/DefaultIOR.java.svn-base | 9 + .../core/iop/.svn/prop-base/IOR.java.svn-base | 9 + .../.svn/prop-base/ORBComponent.java.svn-base | 9 + .../ProfileMultipleComponents.java.svn-base | 9 + .../prop-base/TaggedComponent.java.svn-base | 9 + .../TaggedComponentReader.java.svn-base | 9 + .../prop-base/TaggedProfile.java.svn-base | 9 + .../TaggedProfileReader.java.svn-base | 9 + .../.svn/text-base/CSIComponent.java.svn-base | 330 +++ .../.svn/text-base/DefaultIOR.java.svn-base | 136 + .../core/iop/.svn/text-base/IOR.java.svn-base | 311 ++ .../.svn/text-base/ORBComponent.java.svn-base | 113 + .../ProfileMultipleComponents.java.svn-base | 156 + .../.svn/text-base/SSLComponent.java.svn-base | 169 ++ .../text-base/TaggedComponent.java.svn-base | 88 + .../TaggedComponentReader.java.svn-base | 92 + .../text-base/TaggedProfile.java.svn-base | 89 + .../TaggedProfileReader.java.svn-base | 87 + .../es/tid/TIDorbj/core/iop/CSIComponent.java | 330 +++ .../es/tid/TIDorbj/core/iop/DefaultIOR.java | 136 + source/es/tid/TIDorbj/core/iop/IOR.java | 311 ++ .../es/tid/TIDorbj/core/iop/ORBComponent.java | 113 + .../core/iop/ProfileMultipleComponents.java | 156 + .../es/tid/TIDorbj/core/iop/SSLComponent.java | 169 ++ .../tid/TIDorbj/core/iop/TaggedComponent.java | 88 + .../core/iop/TaggedComponentReader.java | 92 + .../tid/TIDorbj/core/iop/TaggedProfile.java | 89 + .../TIDorbj/core/iop/TaggedProfileReader.java | 87 + .../TIDorbj/core/messaging/.svn/all-wcprops | 119 + .../tid/TIDorbj/core/messaging/.svn/entries | 683 +++++ .../.svn/prop-base/AMILock.java.svn-base | 9 + .../AMILockEnumeration.java.svn-base | 9 + .../.svn/prop-base/AMILockList.java.svn-base | 9 + .../.svn/prop-base/AMIManager.java.svn-base | 9 + .../prop-base/AMIManagerConf.java.svn-base | 9 + .../AMIManagerConfListener.java.svn-base | 9 + .../.svn/prop-base/AMIThread.java.svn-base | 9 + .../prop-base/AMIThreadPool.java.svn-base | 9 + .../prop-base/PoliciesComponent.java.svn-base | 9 + .../.svn/prop-base/QoS.java.svn-base | 9 + .../QueueOrderPolicyImpl.java.svn-base | 9 + .../prop-base/RebindPolicyImpl.java.svn-base | 9 + ...tiveRequestTimeoutPolicyImpl.java.svn-base | 9 + ...veRoundtripTimeoutPolicyImpl.java.svn-base | 9 + .../RequestEndTimePolicyImpl.java.svn-base | 9 + .../RequestPriorityPolicyImpl.java.svn-base | 9 + .../RequestStartTimePolicyImpl.java.svn-base | 9 + .../ThreadStateListener.java.svn-base | 9 + .../_ExceptionHolderImpl.java.svn-base | 9 + .../.svn/text-base/AMILock.java.svn-base | 393 +++ .../AMILockEnumeration.java.svn-base | 63 + .../.svn/text-base/AMILockList.java.svn-base | 137 + .../.svn/text-base/AMIManager.java.svn-base | 190 ++ .../text-base/AMIManagerConf.java.svn-base | 140 + .../AMIManagerConfListener.java.svn-base | 50 + .../.svn/text-base/AMIThread.java.svn-base | 214 ++ .../text-base/AMIThreadPool.java.svn-base | 191 ++ .../text-base/PoliciesComponent.java.svn-base | 121 + .../.svn/text-base/QoS.java.svn-base | 260 ++ .../QueueOrderPolicyImpl.java.svn-base | 141 + .../text-base/RebindPolicyImpl.java.svn-base | 102 + ...tiveRequestTimeoutPolicyImpl.java.svn-base | 112 + ...veRoundtripTimeoutPolicyImpl.java.svn-base | 109 + .../RequestEndTimePolicyImpl.java.svn-base | 145 + .../RequestPriorityPolicyImpl.java.svn-base | 87 + .../RequestStartTimePolicyImpl.java.svn-base | 132 + .../ThreadStateListener.java.svn-base | 62 + .../_ExceptionHolderImpl.java.svn-base | 159 + .../tid/TIDorbj/core/messaging/AMILock.java | 393 +++ .../core/messaging/AMILockEnumeration.java | 63 + .../TIDorbj/core/messaging/AMILockList.java | 137 + .../TIDorbj/core/messaging/AMIManager.java | 190 ++ .../core/messaging/AMIManagerConf.java | 140 + .../messaging/AMIManagerConfListener.java | 50 + .../tid/TIDorbj/core/messaging/AMIThread.java | 214 ++ .../TIDorbj/core/messaging/AMIThreadPool.java | 191 ++ .../core/messaging/PoliciesComponent.java | 121 + source/es/tid/TIDorbj/core/messaging/QoS.java | 260 ++ .../core/messaging/QueueOrderPolicyImpl.java | 141 + .../core/messaging/RebindPolicyImpl.java | 102 + .../RelativeRequestTimeoutPolicyImpl.java | 112 + .../RelativeRoundtripTimeoutPolicyImpl.java | 109 + .../messaging/RequestEndTimePolicyImpl.java | 145 + .../messaging/RequestPriorityPolicyImpl.java | 87 + .../messaging/RequestStartTimePolicyImpl.java | 132 + .../core/messaging/ThreadStateListener.java | 62 + .../core/messaging/_ExceptionHolderImpl.java | 159 + .../es/tid/TIDorbj/core/poa/.svn/all-wcprops | 143 + source/es/tid/TIDorbj/core/poa/.svn/entries | 813 ++++++ .../prop-base/ActiveObjectMap.java.svn-base | 9 + .../prop-base/CompletionWaiter.java.svn-base | 9 + .../.svn/prop-base/CurrentImpl.java.svn-base | 9 + .../.svn/prop-base/CurrentInfo.java.svn-base | 9 + .../DeadlineRequestComparator.java.svn-base | 9 + .../.svn/prop-base/ExecThread.java.svn-base | 9 + .../core/poa/.svn/prop-base/OID.java.svn-base | 9 + .../poa/.svn/prop-base/POAImpl.java.svn-base | 9 + .../poa/.svn/prop-base/POAKey.java.svn-base | 9 + .../prop-base/POAManagerConf.java.svn-base | 9 + .../POAManagerConfListener.java.svn-base | 9 + .../prop-base/POAManagerImpl.java.svn-base | 9 + .../PriorityRequestComparator.java.svn-base | 9 + .../QueueReaderManager.java.svn-base | 9 + .../QueuedLocateResponseHandler.java.svn-base | 9 + .../prop-base/QueuedRequest.java.svn-base | 9 + .../QueuedResponseHandler.java.svn-base | 9 + .../.svn/prop-base/RequestQueue.java.svn-base | 9 + .../prop-base/ServantDelegate.java.svn-base | 9 + .../.svn/prop-base/SystemOID.java.svn-base | 9 + .../TemporalRequestComparator.java.svn-base | 9 + .../.svn/prop-base/ThreadPool.java.svn-base | 9 + .../ThreadStateListener.java.svn-base | 9 + .../text-base/ActiveObjectMap.java.svn-base | 308 ++ .../text-base/CompletionWaiter.java.svn-base | 137 + .../.svn/text-base/CurrentImpl.java.svn-base | 186 ++ .../.svn/text-base/CurrentInfo.java.svn-base | 78 + .../DeadlineRequestComparator.java.svn-base | 79 + .../.svn/text-base/ExecThread.java.svn-base | 945 ++++++ .../core/poa/.svn/text-base/OID.java.svn-base | 166 ++ .../poa/.svn/text-base/POAImpl.java.svn-base | 1984 +++++++++++++ .../poa/.svn/text-base/POAKey.java.svn-base | 332 +++ .../text-base/POAManagerConf.java.svn-base | 141 + .../POAManagerConfListener.java.svn-base | 50 + .../text-base/POAManagerImpl.java.svn-base | 487 ++++ .../PriorityRequestComparator.java.svn-base | 84 + .../QueueReaderManager.java.svn-base | 56 + .../QueuedLocateResponseHandler.java.svn-base | 74 + .../text-base/QueuedRequest.java.svn-base | 179 ++ .../QueuedResponseHandler.java.svn-base | 74 + .../.svn/text-base/RequestQueue.java.svn-base | 181 ++ .../text-base/ServantDelegate.java.svn-base | 181 ++ .../.svn/text-base/SystemOID.java.svn-base | 146 + .../TemporalRequestComparator.java.svn-base | 40 + .../.svn/text-base/ThreadPool.java.svn-base | 190 ++ .../ThreadStateListener.java.svn-base | 62 + .../tid/TIDorbj/core/poa/ActiveObjectMap.java | 308 ++ .../TIDorbj/core/poa/CompletionWaiter.java | 137 + .../es/tid/TIDorbj/core/poa/CurrentImpl.java | 186 ++ .../es/tid/TIDorbj/core/poa/CurrentInfo.java | 78 + .../core/poa/DeadlineRequestComparator.java | 79 + .../es/tid/TIDorbj/core/poa/ExecThread.java | 945 ++++++ source/es/tid/TIDorbj/core/poa/OID.java | 166 ++ source/es/tid/TIDorbj/core/poa/POAImpl.java | 1984 +++++++++++++ source/es/tid/TIDorbj/core/poa/POAKey.java | 332 +++ .../tid/TIDorbj/core/poa/POAManagerConf.java | 141 + .../core/poa/POAManagerConfListener.java | 50 + .../tid/TIDorbj/core/poa/POAManagerImpl.java | 487 ++++ .../core/poa/PriorityRequestComparator.java | 84 + .../TIDorbj/core/poa/QueueReaderManager.java | 56 + .../core/poa/QueuedLocateResponseHandler.java | 74 + .../tid/TIDorbj/core/poa/QueuedRequest.java | 179 ++ .../core/poa/QueuedResponseHandler.java | 74 + .../es/tid/TIDorbj/core/poa/RequestQueue.java | 181 ++ .../tid/TIDorbj/core/poa/ServantDelegate.java | 181 ++ source/es/tid/TIDorbj/core/poa/SystemOID.java | 146 + .../core/poa/TemporalRequestComparator.java | 40 + .../es/tid/TIDorbj/core/poa/ThreadPool.java | 190 ++ .../TIDorbj/core/poa/ThreadStateListener.java | 62 + .../core/poa/policies/.svn/all-wcprops | 47 + .../TIDorbj/core/poa/policies/.svn/entries | 266 ++ .../IdAssignmentPolicyImpl.java.svn-base | 9 + .../IdUniquenessPolicyImpl.java.svn-base | 9 + ...ImplicitActivationPolicyImpl.java.svn-base | 9 + .../LifespanPolicyImpl.java.svn-base | 9 + .../RequestProcessingPolicyImpl.java.svn-base | 9 + .../ServantRetentionPolicyImpl.java.svn-base | 9 + .../prop-base/ThreadPolicyImpl.java.svn-base | 9 + .../IdAssignmentPolicyImpl.java.svn-base | 102 + .../IdUniquenessPolicyImpl.java.svn-base | 103 + ...ImplicitActivationPolicyImpl.java.svn-base | 103 + .../LifespanPolicyImpl.java.svn-base | 99 + .../RequestProcessingPolicyImpl.java.svn-base | 103 + .../ServantRetentionPolicyImpl.java.svn-base | 103 + .../text-base/ThreadPolicyImpl.java.svn-base | 101 + .../poa/policies/IdAssignmentPolicyImpl.java | 102 + .../poa/policies/IdUniquenessPolicyImpl.java | 103 + .../ImplicitActivationPolicyImpl.java | 103 + .../core/poa/policies/LifespanPolicyImpl.java | 99 + .../policies/RequestProcessingPolicyImpl.java | 103 + .../policies/ServantRetentionPolicyImpl.java | 103 + .../core/poa/policies/ThreadPolicyImpl.java | 101 + .../tid/TIDorbj/core/policy/.svn/all-wcprops | 41 + .../es/tid/TIDorbj/core/policy/.svn/entries | 232 ++ .../prop-base/PolicyContext.java.svn-base | 9 + .../PolicyContextManager.java.svn-base | 9 + .../prop-base/PolicyCurrentImpl.java.svn-base | 9 + .../prop-base/PolicyFactory.java.svn-base | 9 + .../prop-base/PolicyManagerImpl.java.svn-base | 9 + .../prop-base/UnsuportedPolicy.java.svn-base | 9 + .../text-base/PolicyContext.java.svn-base | 1054 +++++++ .../PolicyContextManager.java.svn-base | 107 + .../text-base/PolicyCurrentImpl.java.svn-base | 86 + .../text-base/PolicyFactory.java.svn-base | 220 ++ .../text-base/PolicyManagerImpl.java.svn-base | 76 + .../text-base/UnsuportedPolicy.java.svn-base | 56 + .../TIDorbj/core/policy/PolicyContext.java | 1054 +++++++ .../core/policy/PolicyContextManager.java | 107 + .../core/policy/PolicyCurrentImpl.java | 86 + .../TIDorbj/core/policy/PolicyFactory.java | 220 ++ .../core/policy/PolicyManagerImpl.java | 76 + .../TIDorbj/core/policy/UnsuportedPolicy.java | 56 + .../TIDorbj/core/security/.svn/all-wcprops | 11 + .../es/tid/TIDorbj/core/security/.svn/entries | 62 + .../.svn/text-base/CSIComponent.java.svn-base | 335 +++ .../TIDorbj/core/security/CSIComponent.java | 335 +++ .../TIDorbj/core/typecode/.svn/all-wcprops | 149 + .../es/tid/TIDorbj/core/typecode/.svn/entries | 844 ++++++ .../AbstractInterfaceTypeCode.java.svn-base | 9 + .../prop-base/AliasTypeCode.java.svn-base | 9 + .../prop-base/ArrayTypeCode.java.svn-base | 9 + .../prop-base/ComplexTypeCode.java.svn-base | 9 + .../.svn/prop-base/EnumTypeCode.java.svn-base | 9 + .../prop-base/ExceptionTypeCode.java.svn-base | 9 + .../prop-base/FixedTypeCode.java.svn-base | 9 + .../prop-base/NativeTypeCode.java.svn-base | 9 + .../prop-base/ObjectRefTypeCode.java.svn-base | 9 + .../prop-base/RecursiveTypeCode.java.svn-base | 9 + .../prop-base/SequenceTypeCode.java.svn-base | 9 + .../prop-base/StringTypeCode.java.svn-base | 9 + .../prop-base/StructTypeCode.java.svn-base | 9 + .../TransparentAliasTypeCode.java.svn-base | 9 + .../prop-base/TypeCodeCache.java.svn-base | 9 + .../prop-base/TypeCodeDumper.java.svn-base | 9 + .../prop-base/TypeCodeFactory.java.svn-base | 9 + .../prop-base/TypeCodeHandler.java.svn-base | 9 + .../.svn/prop-base/TypeCodeImpl.java.svn-base | 9 + .../prop-base/TypeCodeMarshaler.java.svn-base | 9 + .../prop-base/UnionTypeCode.java.svn-base | 9 + .../prop-base/ValueBoxTypeCode.java.svn-base | 9 + .../prop-base/ValueTypeCode.java.svn-base | 9 + .../prop-base/WStringTypeCode.java.svn-base | 9 + .../AbstractInterfaceTypeCode.java.svn-base | 120 + .../text-base/AliasTypeCode.java.svn-base | 266 ++ .../text-base/ArrayTypeCode.java.svn-base | 321 +++ .../text-base/ComplexTypeCode.java.svn-base | 328 +++ .../.svn/text-base/EnumTypeCode.java.svn-base | 363 +++ .../text-base/ExceptionTypeCode.java.svn-base | 237 ++ .../text-base/FixedTypeCode.java.svn-base | 277 ++ .../text-base/NativeTypeCode.java.svn-base | 68 + .../text-base/ObjectRefTypeCode.java.svn-base | 211 ++ .../text-base/RecursiveTypeCode.java.svn-base | 179 ++ .../text-base/SequenceTypeCode.java.svn-base | 275 ++ .../text-base/StringTypeCode.java.svn-base | 270 ++ .../text-base/StructTypeCode.java.svn-base | 431 +++ .../TransparentAliasTypeCode.java.svn-base | 173 ++ .../text-base/TypeCodeCache.java.svn-base | 116 + .../text-base/TypeCodeDumper.java.svn-base | 178 ++ .../text-base/TypeCodeFactory.java.svn-base | 233 ++ .../text-base/TypeCodeHandler.java.svn-base | 66 + .../.svn/text-base/TypeCodeImpl.java.svn-base | 655 +++++ .../text-base/TypeCodeMarshaler.java.svn-base | 476 +++ .../text-base/UnionTypeCode.java.svn-base | 579 ++++ .../text-base/ValueBoxTypeCode.java.svn-base | 258 ++ .../text-base/ValueTypeCode.java.svn-base | 437 +++ .../text-base/WStringTypeCode.java.svn-base | 198 ++ .../typecode/AbstractInterfaceTypeCode.java | 120 + .../TIDorbj/core/typecode/AliasTypeCode.java | 266 ++ .../TIDorbj/core/typecode/ArrayTypeCode.java | 321 +++ .../core/typecode/ComplexTypeCode.java | 328 +++ .../TIDorbj/core/typecode/EnumTypeCode.java | 363 +++ .../core/typecode/ExceptionTypeCode.java | 237 ++ .../TIDorbj/core/typecode/FixedTypeCode.java | 277 ++ .../TIDorbj/core/typecode/NativeTypeCode.java | 68 + .../core/typecode/ObjectRefTypeCode.java | 211 ++ .../core/typecode/RecursiveTypeCode.java | 179 ++ .../core/typecode/SequenceTypeCode.java | 275 ++ .../TIDorbj/core/typecode/StringTypeCode.java | 270 ++ .../TIDorbj/core/typecode/StructTypeCode.java | 431 +++ .../typecode/TransparentAliasTypeCode.java | 173 ++ .../TIDorbj/core/typecode/TypeCodeCache.java | 116 + .../TIDorbj/core/typecode/TypeCodeDumper.java | 178 ++ .../core/typecode/TypeCodeFactory.java | 233 ++ .../core/typecode/TypeCodeHandler.java | 66 + .../TIDorbj/core/typecode/TypeCodeImpl.java | 655 +++++ .../core/typecode/TypeCodeMarshaler.java | 476 +++ .../TIDorbj/core/typecode/UnionTypeCode.java | 579 ++++ .../core/typecode/ValueBoxTypeCode.java | 258 ++ .../TIDorbj/core/typecode/ValueTypeCode.java | 437 +++ .../core/typecode/WStringTypeCode.java | 198 ++ .../es/tid/TIDorbj/core/util/.svn/all-wcprops | 167 ++ source/es/tid/TIDorbj/core/util/.svn/entries | 949 ++++++ .../AbstractInterfaceHolder.java.svn-base | 9 + .../BoxedValueHelperFinder.java.svn-base | 9 + .../.svn/prop-base/CodeBaseURL.java.svn-base | 9 + .../.svn/prop-base/Corbaloc.java.svn-base | 9 + .../.svn/prop-base/Corbaname.java.svn-base | 9 + .../util/.svn/prop-base/Counter.java.svn-base | 9 + .../prop-base/DestructionState.java.svn-base | 9 + .../.svn/prop-base/EnumHolder.java.svn-base | 9 + .../.svn/prop-base/FixedHolder.java.svn-base | 9 + .../FullUseTableException.java.svn-base | 9 + .../prop-base/HashedLinkedList.java.svn-base | 9 + .../prop-base/InitialReference.java.svn-base | 9 + .../.svn/prop-base/LinkedList.java.svn-base | 9 + .../util/.svn/prop-base/Mutex.java.svn-base | 9 + .../OnlyOneThreadCanWait.java.svn-base | 9 + .../OperationCompletion.java.svn-base | 9 + .../prop-base/RemovableObject.java.svn-base | 9 + .../.svn/prop-base/RepositoryId.java.svn-base | 9 + .../.svn/prop-base/StringHolder.java.svn-base | 9 + .../.svn/prop-base/ULongHolder.java.svn-base | 9 + .../prop-base/ULongLongHolder.java.svn-base | 9 + .../.svn/prop-base/UShortHolder.java.svn-base | 9 + .../.svn/prop-base/UseTable.java.svn-base | 9 + .../UserExceptionEncoder.java.svn-base | 9 + .../.svn/prop-base/ValueHolder.java.svn-base | 9 + .../.svn/prop-base/WCharHolder.java.svn-base | 9 + .../prop-base/WStringHolder.java.svn-base | 9 + .../AbstractInterfaceHolder.java.svn-base | 100 + .../BoxedValueHelperFinder.java.svn-base | 82 + .../.svn/text-base/CodeBaseURL.java.svn-base | 53 + .../.svn/text-base/Corbaloc.java.svn-base | 274 ++ .../.svn/text-base/Corbaname.java.svn-base | 143 + .../util/.svn/text-base/Counter.java.svn-base | 130 + .../text-base/DestructionState.java.svn-base | 64 + .../.svn/text-base/EnumHolder.java.svn-base | 88 + .../.svn/text-base/FixedHolder.java.svn-base | 208 ++ .../FullUseTableException.java.svn-base | 57 + .../text-base/HashedLinkedList.java.svn-base | 143 + .../text-base/InitialReference.java.svn-base | 89 + .../.svn/text-base/LinkedList.java.svn-base | 239 ++ .../util/.svn/text-base/Mutex.java.svn-base | 69 + .../OnlyOneThreadCanWait.java.svn-base | 56 + .../OperationCompletion.java.svn-base | 131 + .../text-base/RemovableObject.java.svn-base | 50 + .../.svn/text-base/RepositoryId.java.svn-base | 207 ++ .../.svn/text-base/StringHolder.java.svn-base | 117 + .../.svn/text-base/ULongHolder.java.svn-base | 82 + .../text-base/ULongLongHolder.java.svn-base | 82 + .../.svn/text-base/UShortHolder.java.svn-base | 82 + .../.svn/text-base/UseTable.java.svn-base | 247 ++ .../UserExceptionEncoder.java.svn-base | 92 + .../.svn/text-base/ValueHolder.java.svn-base | 107 + .../.svn/text-base/WCharHolder.java.svn-base | 83 + .../text-base/WStringHolder.java.svn-base | 122 + .../core/util/AbstractInterfaceHolder.java | 100 + .../core/util/BoxedValueHelperFinder.java | 82 + .../es/tid/TIDorbj/core/util/CodeBaseURL.java | 53 + source/es/tid/TIDorbj/core/util/Corbaloc.java | 274 ++ .../es/tid/TIDorbj/core/util/Corbaname.java | 143 + source/es/tid/TIDorbj/core/util/Counter.java | 130 + .../TIDorbj/core/util/DestructionState.java | 64 + .../es/tid/TIDorbj/core/util/EnumHolder.java | 88 + .../es/tid/TIDorbj/core/util/FixedHolder.java | 208 ++ .../core/util/FullUseTableException.java | 57 + .../TIDorbj/core/util/HashedLinkedList.java | 143 + .../TIDorbj/core/util/InitialReference.java | 89 + .../es/tid/TIDorbj/core/util/LinkedList.java | 239 ++ source/es/tid/TIDorbj/core/util/Mutex.java | 69 + .../core/util/OnlyOneThreadCanWait.java | 56 + .../core/util/OperationCompletion.java | 131 + .../TIDorbj/core/util/RemovableObject.java | 50 + .../tid/TIDorbj/core/util/RepositoryId.java | 207 ++ .../tid/TIDorbj/core/util/StringHolder.java | 117 + .../es/tid/TIDorbj/core/util/ULongHolder.java | 82 + .../TIDorbj/core/util/ULongLongHolder.java | 82 + .../tid/TIDorbj/core/util/UShortHolder.java | 82 + source/es/tid/TIDorbj/core/util/UseTable.java | 247 ++ .../core/util/UserExceptionEncoder.java | 92 + .../es/tid/TIDorbj/core/util/ValueHolder.java | 107 + .../es/tid/TIDorbj/core/util/WCharHolder.java | 83 + .../tid/TIDorbj/core/util/WStringHolder.java | 122 + .../core/util/exception/.svn/all-wcprops | 215 ++ .../TIDorbj/core/util/exception/.svn/entries | 1218 ++++++++ .../BAD_CONTEXT_Creator.java.svn-base | 9 + .../BAD_INV_ORDER_Creator.java.svn-base | 9 + .../BAD_OPERATION_Creator.java.svn-base | 9 + .../prop-base/BAD_PARAM_Creator.java.svn-base | 9 + .../BAD_TYPECODE_Creator.java.svn-base | 9 + .../COMM_FAILURE_Creator.java.svn-base | 9 + .../DATA_CONVERSION_Creator.java.svn-base | 9 + .../prop-base/FREE_MEM_Creator.java.svn-base | 9 + .../prop-base/IMP_LIMIT_Creator.java.svn-base | 9 + .../INITIALIZE_Creator.java.svn-base | 9 + .../prop-base/INTERNAL_Creator.java.svn-base | 9 + .../INTF_REPOS_Creator.java.svn-base | 9 + .../INVALID_TRANSACTION_Creator.java.svn-base | 9 + .../prop-base/INV_FLAG_Creator.java.svn-base | 9 + .../prop-base/INV_IDENT_Creator.java.svn-base | 9 + .../INV_OBJREF_Creator.java.svn-base | 9 + .../INV_POLICY_Creator.java.svn-base | 9 + .../prop-base/MARSHAL_Creator.java.svn-base | 9 + .../.svn/prop-base/Makefile.svn-base | 9 + .../NO_IMPLEMENT_Creator.java.svn-base | 9 + .../prop-base/NO_MEMORY_Creator.java.svn-base | 9 + .../NO_PERMISSION_Creator.java.svn-base | 9 + .../NO_RESOURCES_Creator.java.svn-base | 9 + .../NO_RESPONSE_Creator.java.svn-base | 9 + .../OBJECT_NOT_EXIST_Creator.java.svn-base | 9 + .../OBJ_ADAPTER_Creator.java.svn-base | 9 + .../PERSIST_STORE_Creator.java.svn-base | 9 + .../SystemExceptionCreator.java.svn-base | 9 + .../SystemExceptionEncoder.java.svn-base | 9 + .../SystemExceptionNames.java.svn-base | 9 + .../prop-base/TIMEOUT_Creator.java.svn-base | 9 + ...TRANSACTION_REQUIRED_Creator.java.svn-base | 9 + ...ANSACTION_ROLLEDBACK_Creator.java.svn-base | 9 + .../prop-base/TRANSIENT_Creator.java.svn-base | 9 + .../prop-base/UNKNOWN_Creator.java.svn-base | 9 + .../BAD_CONTEXT_Creator.java.svn-base | 58 + .../BAD_INV_ORDER_Creator.java.svn-base | 58 + .../BAD_OPERATION_Creator.java.svn-base | 58 + .../text-base/BAD_PARAM_Creator.java.svn-base | 58 + .../BAD_TYPECODE_Creator.java.svn-base | 58 + .../COMM_FAILURE_Creator.java.svn-base | 58 + .../DATA_CONVERSION_Creator.java.svn-base | 58 + .../text-base/FREE_MEM_Creator.java.svn-base | 58 + .../text-base/IMP_LIMIT_Creator.java.svn-base | 58 + .../INITIALIZE_Creator.java.svn-base | 58 + .../text-base/INTERNAL_Creator.java.svn-base | 58 + .../INTF_REPOS_Creator.java.svn-base | 58 + .../INVALID_TRANSACTION_Creator.java.svn-base | 57 + .../text-base/INV_FLAG_Creator.java.svn-base | 58 + .../text-base/INV_IDENT_Creator.java.svn-base | 58 + .../INV_OBJREF_Creator.java.svn-base | 58 + .../INV_POLICY_Creator.java.svn-base | 57 + .../text-base/MARSHAL_Creator.java.svn-base | 57 + .../.svn/text-base/Makefile.svn-base | 52 + .../NO_IMPLEMENT_Creator.java.svn-base | 57 + .../text-base/NO_MEMORY_Creator.java.svn-base | 57 + .../NO_PERMISSION_Creator.java.svn-base | 57 + .../NO_RESOURCES_Creator.java.svn-base | 57 + .../NO_RESPONSE_Creator.java.svn-base | 57 + .../OBJECT_NOT_EXIST_Creator.java.svn-base | 57 + .../OBJ_ADAPTER_Creator.java.svn-base | 57 + .../PERSIST_STORE_Creator.java.svn-base | 57 + .../SystemExceptionCreator.java.svn-base | 53 + .../SystemExceptionEncoder.java.svn-base | 235 ++ .../SystemExceptionNames.java.svn-base | 178 ++ .../text-base/TIMEOUT_Creator.java.svn-base | 58 + ...TRANSACTION_REQUIRED_Creator.java.svn-base | 57 + ...ANSACTION_ROLLEDBACK_Creator.java.svn-base | 57 + .../text-base/TRANSIENT_Creator.java.svn-base | 57 + .../text-base/UNKNOWN_Creator.java.svn-base | 57 + .../util/exception/BAD_CONTEXT_Creator.java | 58 + .../util/exception/BAD_INV_ORDER_Creator.java | 58 + .../util/exception/BAD_OPERATION_Creator.java | 58 + .../util/exception/BAD_PARAM_Creator.java | 58 + .../util/exception/BAD_TYPECODE_Creator.java | 58 + .../util/exception/COMM_FAILURE_Creator.java | 58 + .../exception/DATA_CONVERSION_Creator.java | 58 + .../core/util/exception/FREE_MEM_Creator.java | 58 + .../util/exception/IMP_LIMIT_Creator.java | 58 + .../util/exception/INITIALIZE_Creator.java | 58 + .../core/util/exception/INTERNAL_Creator.java | 58 + .../util/exception/INTF_REPOS_Creator.java | 58 + .../INVALID_TRANSACTION_Creator.java | 57 + .../core/util/exception/INV_FLAG_Creator.java | 58 + .../util/exception/INV_IDENT_Creator.java | 58 + .../util/exception/INV_OBJREF_Creator.java | 58 + .../util/exception/INV_POLICY_Creator.java | 57 + .../core/util/exception/MARSHAL_Creator.java | 57 + .../tid/TIDorbj/core/util/exception/Makefile | 52 + .../util/exception/NO_IMPLEMENT_Creator.java | 57 + .../util/exception/NO_MEMORY_Creator.java | 57 + .../util/exception/NO_PERMISSION_Creator.java | 57 + .../util/exception/NO_RESOURCES_Creator.java | 57 + .../util/exception/NO_RESPONSE_Creator.java | 57 + .../exception/OBJECT_NOT_EXIST_Creator.java | 57 + .../util/exception/OBJ_ADAPTER_Creator.java | 57 + .../util/exception/PERSIST_STORE_Creator.java | 57 + .../exception/SystemExceptionCreator.java | 53 + .../exception/SystemExceptionEncoder.java | 235 ++ .../util/exception/SystemExceptionNames.java | 178 ++ .../core/util/exception/TIMEOUT_Creator.java | 58 + .../TRANSACTION_REQUIRED_Creator.java | 57 + .../TRANSACTION_ROLLEDBACK_Creator.java | 57 + .../util/exception/TRANSIENT_Creator.java | 57 + .../core/util/exception/UNKNOWN_Creator.java | 57 + .../es/tid/TIDorbj/core/ziop/.svn/all-wcprops | 35 + source/es/tid/TIDorbj/core/ziop/.svn/entries | 205 ++ .../ziop/.svn/prop-base/ZIOP.java.svn-base | 5 + ...ompressionEnablingPolicyImpl.java.svn-base | 167 ++ ...ompressionLowValuePolicyImpl.java.svn-base | 154 + ...ompressionMinRatioPolicyImpl.java.svn-base | 154 + ...pressorIdLevelListPolicyImpl.java.svn-base | 165 ++ .../ziop/.svn/text-base/ZIOP.java.svn-base | 258 ++ .../ziop/CompressionEnablingPolicyImpl.java | 167 ++ .../ziop/CompressionLowValuePolicyImpl.java | 154 + .../ziop/CompressionMinRatioPolicyImpl.java | 154 + .../ziop/CompressorIdLevelListPolicyImpl.java | 165 ++ source/es/tid/TIDorbj/core/ziop/ZIOP.java | 258 ++ source/es/tid/TIDorbj/dynAny/.svn/all-wcprops | 95 + source/es/tid/TIDorbj/dynAny/.svn/entries | 538 ++++ .../.svn/prop-base/DynAnyBase.java.svn-base | 9 + .../prop-base/DynAnyFactoryImpl.java.svn-base | 9 + .../.svn/prop-base/DynAnyImpl.java.svn-base | 9 + .../prop-base/DynAnyWithAny.java.svn-base | 9 + .../.svn/prop-base/DynArrayImpl.java.svn-base | 9 + .../.svn/prop-base/DynComposite.java.svn-base | 9 + .../.svn/prop-base/DynEnumImpl.java.svn-base | 9 + .../prop-base/DynExceptImpl.java.svn-base | 9 + .../.svn/prop-base/DynFixedImpl.java.svn-base | 9 + .../prop-base/DynSequenceImpl.java.svn-base | 9 + .../.svn/prop-base/DynSingleton.java.svn-base | 9 + .../prop-base/DynStructBase.java.svn-base | 9 + .../prop-base/DynStructImpl.java.svn-base | 9 + .../.svn/prop-base/DynUnionImpl.java.svn-base | 9 + .../.svn/prop-base/DynValueImpl.java.svn-base | 9 + .../.svn/text-base/DynAnyBase.java.svn-base | 433 +++ .../text-base/DynAnyFactoryImpl.java.svn-base | 410 +++ .../.svn/text-base/DynAnyImpl.java.svn-base | 1180 ++++++++ .../text-base/DynAnyWithAny.java.svn-base | 305 ++ .../.svn/text-base/DynArrayImpl.java.svn-base | 565 ++++ .../.svn/text-base/DynComposite.java.svn-base | 2233 ++++++++++++++ .../.svn/text-base/DynEnumImpl.java.svn-base | 320 +++ .../text-base/DynExceptImpl.java.svn-base | 157 + .../.svn/text-base/DynFixedImpl.java.svn-base | 298 ++ .../text-base/DynSequenceImpl.java.svn-base | 682 +++++ .../.svn/text-base/DynSingleton.java.svn-base | 418 +++ .../text-base/DynStructBase.java.svn-base | 335 +++ .../text-base/DynStructImpl.java.svn-base | 157 + .../.svn/text-base/DynUnionImpl.java.svn-base | 1566 ++++++++++ .../.svn/text-base/DynValueImpl.java.svn-base | 175 ++ source/es/tid/TIDorbj/dynAny/DynAnyBase.java | 433 +++ .../tid/TIDorbj/dynAny/DynAnyFactoryImpl.java | 410 +++ source/es/tid/TIDorbj/dynAny/DynAnyImpl.java | 1180 ++++++++ .../es/tid/TIDorbj/dynAny/DynAnyWithAny.java | 305 ++ .../es/tid/TIDorbj/dynAny/DynArrayImpl.java | 565 ++++ .../es/tid/TIDorbj/dynAny/DynComposite.java | 2233 ++++++++++++++ source/es/tid/TIDorbj/dynAny/DynEnumImpl.java | 320 +++ .../es/tid/TIDorbj/dynAny/DynExceptImpl.java | 157 + .../es/tid/TIDorbj/dynAny/DynFixedImpl.java | 298 ++ .../tid/TIDorbj/dynAny/DynSequenceImpl.java | 682 +++++ .../es/tid/TIDorbj/dynAny/DynSingleton.java | 418 +++ .../es/tid/TIDorbj/dynAny/DynStructBase.java | 335 +++ .../es/tid/TIDorbj/dynAny/DynStructImpl.java | 157 + .../es/tid/TIDorbj/dynAny/DynUnionImpl.java | 1566 ++++++++++ .../es/tid/TIDorbj/dynAny/DynValueImpl.java | 175 ++ source/properties.xml | 51 + .../es/tid/TIDorbj/tools/PrintIOR.class | Bin 0 -> 3329 bytes tools/.cvsignore | 1 + tools/.svn/all-wcprops | 23 + tools/.svn/dir-prop-base | 5 + tools/.svn/entries | 133 + tools/.svn/prop-base/.cvsignore.svn-base | 9 + tools/.svn/prop-base/build.xml.svn-base | 9 + tools/.svn/prop-base/properties.xml.svn-base | 9 + tools/.svn/text-base/.cvsignore.svn-base | 1 + tools/.svn/text-base/build.xml.svn-base | 75 + tools/.svn/text-base/properties.xml.svn-base | 50 + tools/build.xml | 75 + tools/es/.svn/all-wcprops | 5 + tools/es/.svn/entries | 31 + tools/es/tid/.svn/all-wcprops | 5 + tools/es/tid/.svn/entries | 31 + tools/es/tid/TIDorbj/.svn/all-wcprops | 5 + tools/es/tid/TIDorbj/.svn/entries | 31 + tools/es/tid/TIDorbj/tools/.svn/all-wcprops | 11 + tools/es/tid/TIDorbj/tools/.svn/entries | 62 + .../.svn/prop-base/PrintIOR.java.svn-base | 9 + .../.svn/prop-base/startClient.sh.svn-base | 5 + .../.svn/prop-base/startServer.sh.svn-base | 5 + .../tools/.svn/text-base/Echo.idl.svn-base | 7 + .../.svn/text-base/EchoClient.java.svn-base | 41 + .../.svn/text-base/EchoServer.java.svn-base | 107 + .../text-base/MyEchoTestImpl.java.svn-base | 64 + .../.svn/text-base/PrintIOR.java.svn-base | 272 ++ .../tools/.svn/text-base/build.xml.svn-base | 123 + .../.svn/text-base/startClient.sh.svn-base | 63 + .../.svn/text-base/startServer.sh.svn-base | 70 + tools/es/tid/TIDorbj/tools/PrintIOR.java | 272 ++ tools/properties.xml | 50 + .../util/AlreadyActivatedException.class | Bin 0 -> 163 bytes .../util/AlreadyDeactivatedException.class | Bin 0 -> 165 bytes .../es/tid/TIDorbj/util/Base16Codec.class | Bin 0 -> 1358 bytes .../es/tid/TIDorbj/util/Base64Codec.class | Bin 0 -> 2079 bytes .../TIDorbj/util/CannotProceedException.class | Bin 0 -> 179 bytes .../tid/TIDorbj/util/CircularTraceFile.class | Bin 0 -> 2064 bytes .../util/InvalidTraceLevelException.class | Bin 0 -> 164 bytes .../util/NoFileEspecifiedException.class | Bin 0 -> 163 bytes .../TIDorbj/util/NotActivatedException.class | Bin 0 -> 159 bytes .../TIDorbj/util/OutputStreamWrapper.class | Bin 0 -> 675 bytes .../tid/TIDorbj/util/SystemProperties.class | Bin 0 -> 1078 bytes util/.class/es/tid/TIDorbj/util/Trace.class | Bin 0 -> 6505 bytes .../TIDorbj/util/TranslateURLEscapes.class | Bin 0 -> 2075 bytes util/.class/es/tid/TIDorbj/util/UTC.class | Bin 0 -> 425 bytes util/.cvsignore | 1 + util/.svn/all-wcprops | 23 + util/.svn/dir-prop-base | 5 + util/.svn/entries | 133 + util/.svn/prop-base/.cvsignore.svn-base | 9 + util/.svn/prop-base/build.xml.svn-base | 9 + util/.svn/prop-base/properties.xml.svn-base | 9 + util/.svn/text-base/.cvsignore.svn-base | 1 + util/.svn/text-base/build.xml.svn-base | 71 + util/.svn/text-base/properties.xml.svn-base | 50 + util/build.xml | 71 + util/es/.svn/all-wcprops | 5 + util/es/.svn/entries | 31 + util/es/tid/.svn/all-wcprops | 5 + util/es/tid/.svn/entries | 31 + util/es/tid/TIDorbj/.svn/all-wcprops | 5 + util/es/tid/TIDorbj/.svn/entries | 31 + util/es/tid/TIDorbj/util/.svn/all-wcprops | 89 + util/es/tid/TIDorbj/util/.svn/entries | 504 ++++ .../AlreadyActivatedException.java.svn-base | 9 + .../AlreadyDeactivatedException.java.svn-base | 9 + .../.svn/prop-base/Base16Codec.java.svn-base | 9 + .../.svn/prop-base/Base64Codec.java.svn-base | 9 + .../CannotProceedException.java.svn-base | 9 + .../prop-base/CircularTraceFile.java.svn-base | 9 + .../InvalidTraceLevelException.java.svn-base | 9 + .../NoFileEspecifiedException.java.svn-base | 9 + .../NotActivatedException.java.svn-base | 9 + .../OutputStreamWrapper.java.svn-base | 9 + .../prop-base/SystemProperties.java.svn-base | 9 + .../util/.svn/prop-base/Trace.java.svn-base | 9 + .../TranslateURLEscapes.java.svn-base | 9 + .../util/.svn/prop-base/UTC.java.svn-base | 9 + .../AlreadyActivatedException.java.svn-base | 46 + .../AlreadyDeactivatedException.java.svn-base | 46 + .../.svn/text-base/Base16Codec.java.svn-base | 128 + .../.svn/text-base/Base64Codec.java.svn-base | 223 ++ .../CannotProceedException.java.svn-base | 54 + .../text-base/CircularTraceFile.java.svn-base | 205 ++ .../InvalidTraceLevelException.java.svn-base | 46 + .../NoFileEspecifiedException.java.svn-base | 46 + .../NotActivatedException.java.svn-base | 46 + .../OutputStreamWrapper.java.svn-base | 100 + .../text-base/SystemProperties.java.svn-base | 84 + .../util/.svn/text-base/Trace.java.svn-base | 699 +++++ .../TranslateURLEscapes.java.svn-base | 164 ++ .../util/.svn/text-base/UTC.java.svn-base | 96 + .../util/AlreadyActivatedException.java | 46 + .../util/AlreadyDeactivatedException.java | 46 + util/es/tid/TIDorbj/util/Base16Codec.java | 128 + util/es/tid/TIDorbj/util/Base64Codec.java | 223 ++ .../TIDorbj/util/CannotProceedException.java | 54 + .../tid/TIDorbj/util/CircularTraceFile.java | 205 ++ .../util/InvalidTraceLevelException.java | 46 + .../util/NoFileEspecifiedException.java | 46 + .../TIDorbj/util/NotActivatedException.java | 46 + .../tid/TIDorbj/util/OutputStreamWrapper.java | 100 + .../es/tid/TIDorbj/util/SystemProperties.java | 84 + util/es/tid/TIDorbj/util/Trace.java | 699 +++++ .../tid/TIDorbj/util/TranslateURLEscapes.java | 164 ++ util/es/tid/TIDorbj/util/UTC.java | 96 + util/properties.xml | 50 + 5147 files changed, 294222 insertions(+) create mode 100644 AUTHORS create mode 100644 BUGS create mode 100644 BUILT create mode 100644 COPYING create mode 100644 CREDITS create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 OMG_SPEC create mode 100644 VERSION create mode 100644 bin/.svn/all-wcprops create mode 100644 bin/.svn/entries create mode 100644 bin/.svn/prop-base/printIOR.bat.svn-base create mode 100644 bin/.svn/prop-base/printIOR.sh.svn-base create mode 100644 bin/.svn/prop-base/setup_TIDorbJ.bat.svn-base create mode 100644 bin/.svn/prop-base/setup_TIDorbJ.sh.svn-base create mode 100644 bin/.svn/prop-base/tidorbj.bat.svn-base create mode 100644 bin/.svn/prop-base/tidorbj.sh.svn-base create mode 100644 bin/.svn/text-base/printIOR.bat.svn-base create mode 100644 bin/.svn/text-base/printIOR.sh.svn-base create mode 100644 bin/.svn/text-base/setup_TIDorbJ.bat.svn-base create mode 100644 bin/.svn/text-base/setup_TIDorbJ.sh.svn-base create mode 100644 bin/.svn/text-base/tidorbj.bat.svn-base create mode 100644 bin/.svn/text-base/tidorbj.sh.svn-base create mode 100644 bin/.svn/tmp/setup_TIDorbJ.sh.tmp create mode 100644 bin/.svn/tmp/tempfile.2.tmp create mode 100644 bin/.svn/tmp/tempfile.tmp create mode 100644 bin/printIOR.bat create mode 100755 bin/printIOR.sh create mode 100644 bin/setup_TIDorbJ.bat create mode 100644 bin/setup_TIDorbJ.sh create mode 100644 bin/setup_TIDorbJ.sh~ create mode 100644 bin/tidorbj.bat create mode 100644 bin/tidorbj.sh create mode 100644 build.xml create mode 100644 build/.cvsignore create mode 100644 build/.svn/all-wcprops create mode 100644 build/.svn/dir-prop-base create mode 100644 build/.svn/entries create mode 100644 build/.svn/prop-base/.cvsignore.svn-base create mode 100644 build/.svn/prop-base/build.bat.svn-base create mode 100644 build/.svn/prop-base/build.sh.svn-base create mode 100644 build/.svn/text-base/.cvsignore.svn-base create mode 100644 build/.svn/text-base/Makefile.gcj.svn-base create mode 100644 build/.svn/text-base/build.bat.svn-base create mode 100644 build/.svn/text-base/build.sh.svn-base create mode 100644 build/Makefile.gcj create mode 100644 build/build.bat create mode 100644 build/build.sh create mode 100644 dist/AUTHORS create mode 100644 dist/BUGS create mode 100644 dist/BUILT create mode 100644 dist/COPYING create mode 100644 dist/ChangeLog create mode 100644 dist/INSTALL create mode 100644 dist/OMG_SPEC create mode 100644 dist/VERSION create mode 100644 dist/bin/printIOR.bat create mode 100755 dist/bin/printIOR.sh create mode 100644 dist/bin/setup_TIDorbJ.bat create mode 100755 dist/bin/setup_TIDorbJ.sh create mode 100644 dist/bin/tidorbj.bat create mode 100755 dist/bin/tidorbj.sh create mode 100644 dist/idl/BiDirPolicy.idl create mode 100644 dist/idl/CSI.idl create mode 100644 dist/idl/CSIIOP.idl create mode 100644 dist/idl/Compression.idl create mode 100644 dist/idl/CosNaming.idl create mode 100644 dist/idl/Dynamic.idl create mode 100644 dist/idl/DynamicAny.idl create mode 100644 dist/idl/GIOP.idl create mode 100644 dist/idl/IIOP.idl create mode 100644 dist/idl/IOP.idl create mode 100644 dist/idl/Messaging.idl create mode 100644 dist/idl/SSLIOP.idl create mode 100644 dist/idl/Security.idl create mode 100644 dist/idl/SecurityLevel1.idl create mode 100644 dist/idl/SecurityLevel2.idl create mode 100644 dist/idl/SecurityLevel3.idl create mode 100644 dist/idl/SendingContext.idl create mode 100644 dist/idl/TimeBase.idl create mode 100644 dist/idl/ZIOP.idl create mode 100644 dist/lib/tidorbj.jar create mode 100644 doc/.cvsignore create mode 100644 doc/.svn/all-wcprops create mode 100644 doc/.svn/dir-prop-base create mode 100644 doc/.svn/entries create mode 100644 doc/.svn/prop-base/.cvsignore.svn-base create mode 100644 doc/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/.svn/all-wcprops create mode 100644 idl/.svn/entries create mode 100644 idl/.svn/prop-base/build.xml.svn-base create mode 100644 idl/.svn/prop-base/properties.xml.svn-base create mode 100644 idl/.svn/text-base/build.xml.svn-base create mode 100644 idl/.svn/text-base/properties.xml.svn-base create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BIDIRECTIONAL_POLICY_TYPE.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BOTH.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicy.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyHelper.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyHolder.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyOperations.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyPOA.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyPOATie.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyValueHelper.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/NORMAL.class create mode 100644 idl/BiDirPolicy/.class/org/omg/BiDirPolicy/_BidirectionalPolicyStub.class create mode 100644 idl/BiDirPolicy/.cvsignore create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BIDIRECTIONAL_POLICY_TYPE.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BOTH.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicy.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyHelper.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyHolder.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyOperations.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyPOA.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyPOATie.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/BidirectionalPolicyValueHelper.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/NORMAL.java create mode 100644 idl/BiDirPolicy/.java/org/omg/BiDirPolicy/_BidirectionalPolicyStub.java create mode 100644 idl/BiDirPolicy/.svn/all-wcprops create mode 100644 idl/BiDirPolicy/.svn/dir-prop-base create mode 100644 idl/BiDirPolicy/.svn/entries create mode 100644 idl/BiDirPolicy/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/BiDirPolicy/.svn/prop-base/BiDirPolicy.idl.svn-base create mode 100644 idl/BiDirPolicy/.svn/prop-base/build.xml.svn-base create mode 100644 idl/BiDirPolicy/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/BiDirPolicy/.svn/text-base/BiDirPolicy.idl.svn-base create mode 100644 idl/BiDirPolicy/.svn/text-base/build.xml.svn-base create mode 100644 idl/BiDirPolicy/BiDirPolicy.idl create mode 100644 idl/BiDirPolicy/build.xml create mode 100644 idl/Compression/.class/org/omg/Compression/BufferHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_7X.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_BZIP2.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_GZIP.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZMA.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZOP.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_NONE.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_PKZIP.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_RZIP.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_XAR.class create mode 100644 idl/Compression/.class/org/omg/Compression/COMPRESSORID_ZLIB.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionException.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionExceptionHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionExceptionHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionLevelHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManager.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManagerHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManagerHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManagerLocalBase.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManagerLocalTie.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionManagerOperations.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressionRatioHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/Compressor.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactory.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactoryHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactoryHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactoryLocalBase.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactoryLocalTie.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactoryOperations.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactorySeqHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorFactorySeqHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdLevel.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdLevelHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdLevelHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorLocalBase.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorLocalTie.class create mode 100644 idl/Compression/.class/org/omg/Compression/CompressorOperations.class create mode 100644 idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegistered.class create mode 100644 idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHolder.class create mode 100644 idl/Compression/.class/org/omg/Compression/UnknownCompressorId.class create mode 100644 idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHelper.class create mode 100644 idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/COMPRESSION_ENABLING_POLICY_ID.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/COMPRESSION_LOW_VALUE_POLICY_ID.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/COMPRESSION_MIN_RATIO_POLICY_ID.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressedData.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressedDataHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressedDataHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicy.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyLocalBase.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyLocalTie.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyOperations.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyValueHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicy.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalBase.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalTie.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyOperations.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyValueHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicy.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyLocalBase.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyLocalTie.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyOperations.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyValueHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicy.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyHelper.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyHolder.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyLocalBase.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyLocalTie.class create mode 100644 idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyOperations.class create mode 100644 idl/Compression/.java/org/omg/Compression/BufferHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_7X.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_BZIP2.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_GZIP.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZMA.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZOP.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_NONE.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_PKZIP.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_RZIP.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_XAR.java create mode 100644 idl/Compression/.java/org/omg/Compression/COMPRESSORID_ZLIB.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionException.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionExceptionHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionExceptionHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionLevelHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManager.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManagerHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManagerHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManagerLocalBase.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManagerLocalTie.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionManagerOperations.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressionRatioHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/Compressor.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactory.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactoryHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactoryHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalBase.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalTie.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactoryOperations.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactorySeqHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorFactorySeqHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdLevel.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdLevelHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdLevelHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdLevelListHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorIdLevelListHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorLocalBase.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorLocalTie.java create mode 100644 idl/Compression/.java/org/omg/Compression/CompressorOperations.java create mode 100644 idl/Compression/.java/org/omg/Compression/FactoryAlreadyRegistered.java create mode 100644 idl/Compression/.java/org/omg/Compression/FactoryAlreadyRegisteredHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/FactoryAlreadyRegisteredHolder.java create mode 100644 idl/Compression/.java/org/omg/Compression/UnknownCompressorId.java create mode 100644 idl/Compression/.java/org/omg/Compression/UnknownCompressorIdHelper.java create mode 100644 idl/Compression/.java/org/omg/Compression/UnknownCompressorIdHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/COMPRESSION_ENABLING_POLICY_ID.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/COMPRESSION_LOW_VALUE_POLICY_ID.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/COMPRESSION_MIN_RATIO_POLICY_ID.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressedData.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressedDataHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressedDataHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicy.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyLocalBase.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyLocalTie.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyOperations.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionEnablingPolicyValueHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicy.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyLocalBase.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyLocalTie.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyOperations.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionLowValuePolicyValueHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicy.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyLocalBase.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyLocalTie.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyOperations.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressionMinRatioPolicyValueHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicy.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicyHelper.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicyHolder.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicyLocalBase.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicyLocalTie.java create mode 100644 idl/Compression/.java/org/omg/ZIOP/CompressorIdLevelListPolicyOperations.java create mode 100644 idl/Compression/.svn/all-wcprops create mode 100644 idl/Compression/.svn/dir-prop-base create mode 100644 idl/Compression/.svn/entries create mode 100644 idl/Compression/.svn/text-base/Compression.idl.svn-base create mode 100644 idl/Compression/.svn/text-base/ZIOP.idl.svn-base create mode 100644 idl/Compression/.svn/text-base/build.xml.svn-base create mode 100644 idl/Compression/Compression.idl create mode 100644 idl/Compression/ZIOP.idl create mode 100644 idl/Compression/build.xml create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/Binding.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIterator.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorOperations.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorPOA.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorPOATie.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingListHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingListHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingType.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/IstringHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NameComponent.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NameComponentHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NameComponentHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NameHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NameHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContext.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExt.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtOperations.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPOA.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPOATie.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/AddressHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/URLStringHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextOperations.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPOA.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPOATie.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBound.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceed.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/InvalidName.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/InvalidNameHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmpty.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmptyHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFound.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundReason.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHolder.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/_BindingIteratorStub.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/_NamingContextExtStub.class create mode 100644 idl/CosNaming/.class/org/omg/CosNaming/_NamingContextStub.class create mode 100644 idl/CosNaming/.cvsignore create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/Binding.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIterator.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorOperations.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOA.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOATie.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingListHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingListHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingType.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingTypeHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/BindingTypeHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/IstringHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NameComponent.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NameComponentHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NameComponentHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NameHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NameHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContext.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExt.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtOperations.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPOA.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPOATie.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/AddressHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextExtPackage/URLStringHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextOperations.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPOA.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPOATie.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/AlreadyBound.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/CannotProceed.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/InvalidName.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/InvalidNameHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotEmpty.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotEmptyHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFound.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFoundHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFoundHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFoundReason.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/NamingContextPackage/NotFoundReasonHolder.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/_BindingIteratorStub.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/_NamingContextExtStub.java create mode 100644 idl/CosNaming/.java/org/omg/CosNaming/_NamingContextStub.java create mode 100644 idl/CosNaming/.svn/all-wcprops create mode 100644 idl/CosNaming/.svn/dir-prop-base create mode 100644 idl/CosNaming/.svn/entries create mode 100644 idl/CosNaming/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/CosNaming/.svn/prop-base/CosNaming.idl.svn-base create mode 100644 idl/CosNaming/.svn/prop-base/build.xml.svn-base create mode 100644 idl/CosNaming/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/CosNaming/.svn/text-base/CosNaming.idl.svn-base create mode 100644 idl/CosNaming/.svn/text-base/build.xml.svn-base create mode 100644 idl/CosNaming/CosNaming.idl create mode 100644 idl/CosNaming/build.xml create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAny.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactory.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValue.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArray.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnum.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixed.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequence.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStruct.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStructHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStructHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynStructOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnion.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValue.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommon.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueLocalBase.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueLocalTie.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/DynValueOperations.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/FieldNameHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPair.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairSeqHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairSeqHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePair.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairHolder.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairSeqHelper.class create mode 100644 idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairSeqHolder.class create mode 100644 idl/DynamicAny/.cvsignore create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/AnySeqHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/AnySeqHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAny.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactory.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/InvalidValue.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/TypeMismatch.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnySeqHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynAnySeqHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArray.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArrayHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArrayHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArrayLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArrayLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynArrayOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnum.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnumHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnumHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnumLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnumLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynEnumOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixed.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixedHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixedHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixedLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixedLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynFixedOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequence.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequenceHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequenceHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequenceLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequenceLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynSequenceOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStruct.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStructHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStructHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStructLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStructLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynStructOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnion.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnionHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnionHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnionLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnionLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynUnionOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValue.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommon.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommonHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommonHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommonLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommonLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueCommonOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueLocalBase.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueLocalTie.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/DynValueOperations.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/FieldNameHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameDynAnyPair.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameDynAnyPairHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameDynAnyPairHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameDynAnyPairSeqHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameDynAnyPairSeqHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameValuePair.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameValuePairHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameValuePairHolder.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameValuePairSeqHelper.java create mode 100644 idl/DynamicAny/.java/org/omg/DynamicAny/NameValuePairSeqHolder.java create mode 100644 idl/DynamicAny/.svn/all-wcprops create mode 100644 idl/DynamicAny/.svn/dir-prop-base create mode 100644 idl/DynamicAny/.svn/entries create mode 100644 idl/DynamicAny/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/DynamicAny/.svn/prop-base/DynamicAny.idl.svn-base create mode 100644 idl/DynamicAny/.svn/prop-base/build.xml.svn-base create mode 100644 idl/DynamicAny/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/DynamicAny/.svn/text-base/DynamicAny.idl.svn-base create mode 100644 idl/DynamicAny/.svn/text-base/build.xml.svn-base create mode 100644 idl/DynamicAny/DynamicAny.idl create mode 100644 idl/DynamicAny/build.xml create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ContextListHelper.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ExceptionListHelper.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ExceptionListHolder.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/Parameter.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ParameterHelper.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ParameterHolder.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ParameterListHelper.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/ParameterListHolder.class create mode 100644 idl/Messaging/.class/org/omg/Dynamic/RequestContextHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/INVOCATION_POLICIES.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MAX_HOPS_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MarshaledExceptionHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/NO_REBIND.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/NO_RECONNECT.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ORDER_ANY.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ORDER_DEADLINE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ORDER_PRIORITY.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ORDER_TEMPORAL.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/OrderingHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PolicyValue.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PolicyValueHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PolicyValueHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PriorityHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PriorityRange.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PriorityRangeHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/PriorityRangeHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QUEUE_ORDER_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REBIND_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RELATIVE_REQ_TIMEOUT_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RELATIVE_RT_TIMEOUT_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REPLY_END_TIME_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REPLY_PRIORITY_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REPLY_START_TIME_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REQUEST_END_TIME_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REQUEST_PRIORITY_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/REQUEST_START_TIME_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ROUTE_FORWARD.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ROUTE_NONE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ROUTE_STORE_AND_FORWARD.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ROUTING_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindModeHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RebindPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandler.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandlerOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandlerPOA.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyHandlerPOATie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOA.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOATie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingPolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingTypeHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingTypeRange.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingTypeRangeHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/RoutingTypeRangeHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SYNC_NONE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SYNC_SCOPE_POLICY_TYPE.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_SERVER.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TARGET.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TRANSPORT.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopeHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicy.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalBase.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalTie.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyOperations.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/TAG_POLICIES.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/TRANSPARENT.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/_ExceptionHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/_ExceptionHolderHelper.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/_ExceptionHolderHolder.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/_ReplyHandlerStub.class create mode 100644 idl/Messaging/.class/org/omg/Messaging/_ReplyPriorityPolicyStub.class create mode 100644 idl/Messaging/.cvsignore create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ContextListHelper.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ExceptionListHelper.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ExceptionListHolder.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/Parameter.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ParameterHelper.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ParameterHolder.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ParameterListHelper.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/ParameterListHolder.java create mode 100644 idl/Messaging/.java/org/omg/Dynamic/RequestContextHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/INVOCATION_POLICIES.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MAX_HOPS_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MarshaledExceptionHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/MaxHopsPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/NO_REBIND.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/NO_RECONNECT.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ORDER_ANY.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ORDER_DEADLINE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ORDER_PRIORITY.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ORDER_TEMPORAL.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/OrderingHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PolicyValue.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PolicyValueHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PolicyValueHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PolicyValueSeqHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PolicyValueSeqHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PriorityHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PriorityRange.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PriorityRangeHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/PriorityRangeHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QUEUE_ORDER_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/QueueOrderPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REBIND_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RELATIVE_REQ_TIMEOUT_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RELATIVE_RT_TIMEOUT_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REPLY_END_TIME_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REPLY_PRIORITY_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REPLY_START_TIME_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REQUEST_END_TIME_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REQUEST_PRIORITY_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/REQUEST_START_TIME_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ROUTE_FORWARD.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ROUTE_NONE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ROUTE_STORE_AND_FORWARD.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ROUTING_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindModeHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RebindPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRequestTimeoutPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RelativeRoundtripTimeoutPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyEndTimePolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandler.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandlerHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandlerHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandlerOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandlerPOA.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyHandlerPOATie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicyPOA.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyPriorityPolicyPOATie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/ReplyStartTimePolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestEndTimePolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestPriorityPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RequestStartTimePolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingPolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingTypeHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingTypeRange.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingTypeRangeHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/RoutingTypeRangeHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SYNC_NONE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SYNC_SCOPE_POLICY_TYPE.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SYNC_WITH_SERVER.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SYNC_WITH_TARGET.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SYNC_WITH_TRANSPORT.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopeHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicy.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicyHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicyHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicyLocalBase.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicyLocalTie.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/SyncScopePolicyOperations.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/TAG_POLICIES.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/TRANSPARENT.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/_ExceptionHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/_ExceptionHolderHelper.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/_ExceptionHolderHolder.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/_ReplyHandlerStub.java create mode 100644 idl/Messaging/.java/org/omg/Messaging/_ReplyPriorityPolicyStub.java create mode 100644 idl/Messaging/.svn/all-wcprops create mode 100644 idl/Messaging/.svn/dir-prop-base create mode 100644 idl/Messaging/.svn/entries create mode 100644 idl/Messaging/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/Messaging/.svn/prop-base/Dynamic.idl.svn-base create mode 100644 idl/Messaging/.svn/prop-base/Messaging.idl.svn-base create mode 100644 idl/Messaging/.svn/prop-base/build.xml.svn-base create mode 100644 idl/Messaging/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/Messaging/.svn/text-base/Dynamic.idl.svn-base create mode 100644 idl/Messaging/.svn/text-base/Messaging.idl.svn-base create mode 100644 idl/Messaging/.svn/text-base/build.xml.svn-base create mode 100644 idl/Messaging/Dynamic.idl create mode 100644 idl/Messaging/Messaging.idl create mode 100644 idl/Messaging/build.xml create mode 100644 idl/Messaging/extra/.svn/all-wcprops create mode 100644 idl/Messaging/extra/.svn/entries create mode 100644 idl/Messaging/extra/org/.svn/all-wcprops create mode 100644 idl/Messaging/extra/org/.svn/entries create mode 100644 idl/Messaging/extra/org/omg/.svn/all-wcprops create mode 100644 idl/Messaging/extra/org/omg/.svn/entries create mode 100644 idl/Messaging/extra/org/omg/Messaging/.svn/all-wcprops create mode 100644 idl/Messaging/extra/org/omg/Messaging/.svn/entries create mode 100644 idl/Messaging/extra/org/omg/Messaging/.svn/text-base/_ExceptionHolder.java.svn-base create mode 100644 idl/Messaging/extra/org/omg/Messaging/_ExceptionHolder.java create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElement.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElementContentsHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElementContentsHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElementHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElementHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationElementTypeHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationTokenHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/AuthorizationTokenHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/CompleteEstablishContext.class create mode 100644 idl/Security/.class/org/omg/CSI/CompleteEstablishContextHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/CompleteEstablishContextHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/ContextError.class create mode 100644 idl/Security/.class/org/omg/CSI/ContextErrorHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/ContextErrorHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/ContextIdHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/EstablishContext.class create mode 100644 idl/Security/.class/org/omg/CSI/EstablishContextHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/EstablishContextHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/GSSTokenHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/GSSTokenHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_Export_Name_OID.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameListHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameListHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/GSS_NT_Scoped_Username_OID.class create mode 100644 idl/Security/.class/org/omg/CSI/ITTAbsent.class create mode 100644 idl/Security/.class/org/omg/CSI/ITTAnonymous.class create mode 100644 idl/Security/.class/org/omg/CSI/ITTDistinguishedName.class create mode 100644 idl/Security/.class/org/omg/CSI/ITTPrincipalName.class create mode 100644 idl/Security/.class/org/omg/CSI/ITTX509CertChain.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityExtensionHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityExtensionHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityToken.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityTokenHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityTokenHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/IdentityTokenTypeHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/KRB5MechOID.class create mode 100644 idl/Security/.class/org/omg/CSI/MTCompleteEstablishContext.class create mode 100644 idl/Security/.class/org/omg/CSI/MTContextError.class create mode 100644 idl/Security/.class/org/omg/CSI/MTEstablishContext.class create mode 100644 idl/Security/.class/org/omg/CSI/MTMessageInContext.class create mode 100644 idl/Security/.class/org/omg/CSI/MessageInContext.class create mode 100644 idl/Security/.class/org/omg/CSI/MessageInContextHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/MessageInContextHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/MsgTypeHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/OIDHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/OIDHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/OIDListHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/OIDListHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/OMGVMCID.class create mode 100644 idl/Security/.class/org/omg/CSI/SASContextBody.class create mode 100644 idl/Security/.class/org/omg/CSI/SASContextBodyHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/SASContextBodyHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/StringOIDHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/UTF8StringHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/UTF8StringHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/X501DistinguishedNameHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/X501DistinguishedNameHolder.class create mode 100644 idl/Security/.class/org/omg/CSI/X509AttributeCertChain.class create mode 100644 idl/Security/.class/org/omg/CSI/X509CertificateChainHelper.class create mode 100644 idl/Security/.class/org/omg/CSI/X509CertificateChainHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/AS_ContextSec.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/AS_ContextSecHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/AS_ContextSecHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/AssociationOptionsHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompositeDelegation.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMech.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechList.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/Confidentiality.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/DelegationByClient.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/DetectMisordering.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/DetectReplay.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/EstablishTrustInClient.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/EstablishTrustInTarget.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/IdentityAssertion.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/Integrity.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/NoDelegation.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/NoProtection.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SAS_ContextSec.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SCS_GSSExportedName.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SCS_GeneralNames.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANS.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfiguration.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationSyntaxHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceSpecificNameHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/ServiceSpecificNameHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/SimpleDelegation.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TAG_SECIOP_SEC_TRANS.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TAG_TLS_SEC_TRANS.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANS.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TransportAddress.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TransportAddressHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TransportAddressHolder.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TransportAddressListHelper.class create mode 100644 idl/Security/.class/org/omg/CSIIOP/TransportAddressListHolder.class create mode 100644 idl/Security/.class/org/omg/SSLIOP/SSL.class create mode 100644 idl/Security/.class/org/omg/SSLIOP/SSLHelper.class create mode 100644 idl/Security/.class/org/omg/SSLIOP/SSLHolder.class create mode 100644 idl/Security/.class/org/omg/SSLIOP/TAG_SSL_SEC_TRANS.class create mode 100644 idl/Security/.class/org/omg/Security/AccessId.class create mode 100644 idl/Security/.class/org/omg/Security/AccountingId.class create mode 100644 idl/Security/.class/org/omg/Security/AssociationOptionsHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AssociationStatus.class create mode 100644 idl/Security/.class/org/omg/Security/AssociationStatusHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AssociationStatusHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeSet.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeType.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeTypeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeTypeListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AttributeTypeListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AuditAll.class create mode 100644 idl/Security/.class/org/omg/Security/AuditAuthorization.class create mode 100644 idl/Security/.class/org/omg/Security/AuditChannelIdHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuditCombinator.class create mode 100644 idl/Security/.class/org/omg/Security/AuditCombinatorHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuditCombinatorHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AuditEventType.class create mode 100644 idl/Security/.class/org/omg/Security/AuditEventTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuditEventTypeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AuditEventTypeListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuditEventTypeListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AuditId.class create mode 100644 idl/Security/.class/org/omg/Security/AuditInvocation.class create mode 100644 idl/Security/.class/org/omg/Security/AuditNonRepudiation.class create mode 100644 idl/Security/.class/org/omg/Security/AuditObjectCreation.class create mode 100644 idl/Security/.class/org/omg/Security/AuditObjectDestruction.class create mode 100644 idl/Security/.class/org/omg/Security/AuditPolicyChange.class create mode 100644 idl/Security/.class/org/omg/Security/AuditPrincipalAuth.class create mode 100644 idl/Security/.class/org/omg/Security/AuditSecEnvChange.class create mode 100644 idl/Security/.class/org/omg/Security/AuditSessionAuth.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationMethodHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationMethodListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationMethodListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationStatus.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationStatusHelper.class create mode 100644 idl/Security/.class/org/omg/Security/AuthenticationStatusHolder.class create mode 100644 idl/Security/.class/org/omg/Security/Capability.class create mode 100644 idl/Security/.class/org/omg/Security/ChannelBindings.class create mode 100644 idl/Security/.class/org/omg/Security/ChannelBindingsHelper.class create mode 100644 idl/Security/.class/org/omg/Security/ChannelBindingsHolder.class create mode 100644 idl/Security/.class/org/omg/Security/Clearance.class create mode 100644 idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel0.class create mode 100644 idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel1.class create mode 100644 idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel2.class create mode 100644 idl/Security/.class/org/omg/Security/CommunicationDirection.class create mode 100644 idl/Security/.class/org/omg/Security/CommunicationDirectionHelper.class create mode 100644 idl/Security/.class/org/omg/Security/CommunicationDirectionHolder.class create mode 100644 idl/Security/.class/org/omg/Security/CompositeDelegation.class create mode 100644 idl/Security/.class/org/omg/Security/Confidentiality.class create mode 100644 idl/Security/.class/org/omg/Security/DCESecureInteroperability.class create mode 100644 idl/Security/.class/org/omg/Security/DayOfTheWeek.class create mode 100644 idl/Security/.class/org/omg/Security/DayOfTheWeekHelper.class create mode 100644 idl/Security/.class/org/omg/Security/DayOfTheWeekHolder.class create mode 100644 idl/Security/.class/org/omg/Security/DayOfWeek.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationDirective.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationDirectiveHelper.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationDirectiveHolder.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationMode.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationModeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationModeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationState.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationStateHelper.class create mode 100644 idl/Security/.class/org/omg/Security/DelegationStateHolder.class create mode 100644 idl/Security/.class/org/omg/Security/DetectMisordering.class create mode 100644 idl/Security/.class/org/omg/Security/DetectReplay.class create mode 100644 idl/Security/.class/org/omg/Security/EstablishTrust.class create mode 100644 idl/Security/.class/org/omg/Security/EstablishTrustHelper.class create mode 100644 idl/Security/.class/org/omg/Security/EstablishTrustHolder.class create mode 100644 idl/Security/.class/org/omg/Security/EstablishTrustInClient.class create mode 100644 idl/Security/.class/org/omg/Security/EstablishTrustInTarget.class create mode 100644 idl/Security/.class/org/omg/Security/EventTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/ExtensibleFamily.class create mode 100644 idl/Security/.class/org/omg/Security/ExtensibleFamilyHelper.class create mode 100644 idl/Security/.class/org/omg/Security/ExtensibleFamilyHolder.class create mode 100644 idl/Security/.class/org/omg/Security/GroupId.class create mode 100644 idl/Security/.class/org/omg/Security/Initiator.class create mode 100644 idl/Security/.class/org/omg/Security/Integrity.class create mode 100644 idl/Security/.class/org/omg/Security/InterfaceName.class create mode 100644 idl/Security/.class/org/omg/Security/IntervalTHelper.class create mode 100644 idl/Security/.class/org/omg/Security/InvocationCredentialsType.class create mode 100644 idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/MechandOptions.class create mode 100644 idl/Security/.class/org/omg/Security/MechandOptionsHelper.class create mode 100644 idl/Security/.class/org/omg/Security/MechandOptionsHolder.class create mode 100644 idl/Security/.class/org/omg/Security/MechandOptionsListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/MechandOptionsListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/MechanismTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/MechanismTypeListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/MechanismTypeListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/NoDelegation.class create mode 100644 idl/Security/.class/org/omg/Security/NoProtection.class create mode 100644 idl/Security/.class/org/omg/Security/NonRepudiation.class create mode 100644 idl/Security/.class/org/omg/Security/NonRepudiationId.class create mode 100644 idl/Security/.class/org/omg/Security/OIDHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OIDHolder.class create mode 100644 idl/Security/.class/org/omg/Security/OIDListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OIDListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/ObjectRef.class create mode 100644 idl/Security/.class/org/omg/Security/OpaqueBuffer.class create mode 100644 idl/Security/.class/org/omg/Security/OpaqueBufferHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OpaqueBufferHolder.class create mode 100644 idl/Security/.class/org/omg/Security/OpaqueHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OpaqueHolder.class create mode 100644 idl/Security/.class/org/omg/Security/Operation.class create mode 100644 idl/Security/.class/org/omg/Security/OptionsDirectionPair.class create mode 100644 idl/Security/.class/org/omg/Security/OptionsDirectionPairHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OptionsDirectionPairHolder.class create mode 100644 idl/Security/.class/org/omg/Security/OptionsDirectionPairListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/OptionsDirectionPairListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/PrimaryGroupId.class create mode 100644 idl/Security/.class/org/omg/Security/QOP.class create mode 100644 idl/Security/.class/org/omg/Security/QOPHelper.class create mode 100644 idl/Security/.class/org/omg/Security/QOPHolder.class create mode 100644 idl/Security/.class/org/omg/Security/ReplaceORBServices.class create mode 100644 idl/Security/.class/org/omg/Security/ReplaceSecurityServices.class create mode 100644 idl/Security/.class/org/omg/Security/RequiresSupports.class create mode 100644 idl/Security/.class/org/omg/Security/RequiresSupportsHelper.class create mode 100644 idl/Security/.class/org/omg/Security/RequiresSupportsHolder.class create mode 100644 idl/Security/.class/org/omg/Security/Right.class create mode 100644 idl/Security/.class/org/omg/Security/RightHelper.class create mode 100644 idl/Security/.class/org/omg/Security/RightHolder.class create mode 100644 idl/Security/.class/org/omg/Security/RightsCombinator.class create mode 100644 idl/Security/.class/org/omg/Security/RightsCombinatorHelper.class create mode 100644 idl/Security/.class/org/omg/Security/RightsCombinatorHolder.class create mode 100644 idl/Security/.class/org/omg/Security/RightsListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/RightsListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/Role.class create mode 100644 idl/Security/.class/org/omg/Security/SecApplicationAccess.class create mode 100644 idl/Security/.class/org/omg/Security/SecApplicationAudit.class create mode 100644 idl/Security/.class/org/omg/Security/SecAttribute.class create mode 100644 idl/Security/.class/org/omg/Security/SecAttributeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecAttributeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SecClientInvocationAccess.class create mode 100644 idl/Security/.class/org/omg/Security/SecClientInvocationAudit.class create mode 100644 idl/Security/.class/org/omg/Security/SecClientSecureInvocation.class create mode 100644 idl/Security/.class/org/omg/Security/SecDelegation.class create mode 100644 idl/Security/.class/org/omg/Security/SecDelegationDirectivePolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecEstablishTrustPolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecFeaturePolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecInvocationCredentialsPolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecMechanismsPolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecNonRepudiation.class create mode 100644 idl/Security/.class/org/omg/Security/SecQOPPolicy.class create mode 100644 idl/Security/.class/org/omg/Security/SecTargetInvocationAccess.class create mode 100644 idl/Security/.class/org/omg/Security/SecTargetInvocationAudit.class create mode 100644 idl/Security/.class/org/omg/Security/SecTargetSecureInvocation.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityAttribute.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityAttributeTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextState.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextStateHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextStateHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextType.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityContextTypeHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityFeature.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityFeatureHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityFeatureHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityLevel1.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityLevel2.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityMechanismType.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityNameHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityORBServiceReady.class create mode 100644 idl/Security/.class/org/omg/Security/SecurityServiceReady.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorTypeHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorValue.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorValueHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorValueHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorValueListHelper.class create mode 100644 idl/Security/.class/org/omg/Security/SelectorValueListHolder.class create mode 100644 idl/Security/.class/org/omg/Security/SimpleDelegation.class create mode 100644 idl/Security/.class/org/omg/Security/StandardSecureInteroperability.class create mode 100644 idl/Security/.class/org/omg/Security/SuccessFailure.class create mode 100644 idl/Security/.class/org/omg/Security/Time.class create mode 100644 idl/Security/.class/org/omg/Security/TimeTHelper.class create mode 100644 idl/Security/.class/org/omg/Security/UtcTHelper.class create mode 100644 idl/Security/.class/org/omg/Security/_Public.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/Current.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/CurrentHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/CurrentHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/CurrentLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/CurrentLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel1/CurrentOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecision.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannel.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannelHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannelHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannelLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannelLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditChannelOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecision.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/Credentials.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CredentialsOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/Current.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CurrentHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CurrentHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CurrentLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CurrentLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/CurrentOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicy.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicy.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicy.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicy.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticator.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicy.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentials.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRights.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRightsHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRightsHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRightsOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRightsPOA.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/RequiredRightsPOATie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManager.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentials.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsHelper.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsHolder.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalBase.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalTie.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsOperations.class create mode 100644 idl/Security/.class/org/omg/SecurityLevel2/_RequiredRightsStub.class create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElement.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElementContentsHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElementContentsHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElementHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElementHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationElementTypeHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationTokenHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/AuthorizationTokenHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/CompleteEstablishContext.java create mode 100644 idl/Security/.java/org/omg/CSI/CompleteEstablishContextHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/CompleteEstablishContextHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/ContextError.java create mode 100644 idl/Security/.java/org/omg/CSI/ContextErrorHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/ContextErrorHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/ContextIdHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/EstablishContext.java create mode 100644 idl/Security/.java/org/omg/CSI/EstablishContextHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/EstablishContextHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/GSSTokenHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/GSSTokenHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_Export_Name_OID.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_ExportedNameHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_ExportedNameHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_ExportedNameListHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_ExportedNameListHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/GSS_NT_Scoped_Username_OID.java create mode 100644 idl/Security/.java/org/omg/CSI/ITTAbsent.java create mode 100644 idl/Security/.java/org/omg/CSI/ITTAnonymous.java create mode 100644 idl/Security/.java/org/omg/CSI/ITTDistinguishedName.java create mode 100644 idl/Security/.java/org/omg/CSI/ITTPrincipalName.java create mode 100644 idl/Security/.java/org/omg/CSI/ITTX509CertChain.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityExtensionHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityExtensionHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityToken.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityTokenHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityTokenHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/IdentityTokenTypeHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/KRB5MechOID.java create mode 100644 idl/Security/.java/org/omg/CSI/MTCompleteEstablishContext.java create mode 100644 idl/Security/.java/org/omg/CSI/MTContextError.java create mode 100644 idl/Security/.java/org/omg/CSI/MTEstablishContext.java create mode 100644 idl/Security/.java/org/omg/CSI/MTMessageInContext.java create mode 100644 idl/Security/.java/org/omg/CSI/MessageInContext.java create mode 100644 idl/Security/.java/org/omg/CSI/MessageInContextHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/MessageInContextHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/MsgTypeHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/OIDHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/OIDHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/OIDListHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/OIDListHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/OMGVMCID.java create mode 100644 idl/Security/.java/org/omg/CSI/SASContextBody.java create mode 100644 idl/Security/.java/org/omg/CSI/SASContextBodyHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/SASContextBodyHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/StringOIDHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/UTF8StringHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/UTF8StringHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/X501DistinguishedNameHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/X501DistinguishedNameHolder.java create mode 100644 idl/Security/.java/org/omg/CSI/X509AttributeCertChain.java create mode 100644 idl/Security/.java/org/omg/CSI/X509CertificateChainHelper.java create mode 100644 idl/Security/.java/org/omg/CSI/X509CertificateChainHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/AS_ContextSec.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/AS_ContextSecHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/AS_ContextSecHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/AssociationOptionsHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompositeDelegation.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMech.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechList.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechListHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechListHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechanismsHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/CompoundSecMechanismsHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/Confidentiality.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/DelegationByClient.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/DetectMisordering.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/DetectReplay.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/EstablishTrustInClient.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/EstablishTrustInTarget.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/IdentityAssertion.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/Integrity.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/NoDelegation.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/NoProtection.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SAS_ContextSec.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SAS_ContextSecHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SAS_ContextSecHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SCS_GSSExportedName.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SCS_GeneralNames.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SECIOP_SEC_TRANS.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SECIOP_SEC_TRANSHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SECIOP_SEC_TRANSHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfiguration.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfigurationHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfigurationHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfigurationListHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfigurationListHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceConfigurationSyntaxHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceSpecificNameHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/ServiceSpecificNameHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/SimpleDelegation.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TAG_SECIOP_SEC_TRANS.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TAG_TLS_SEC_TRANS.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TLS_SEC_TRANS.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TLS_SEC_TRANSHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TLS_SEC_TRANSHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TransportAddress.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TransportAddressHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TransportAddressHolder.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TransportAddressListHelper.java create mode 100644 idl/Security/.java/org/omg/CSIIOP/TransportAddressListHolder.java create mode 100644 idl/Security/.java/org/omg/SSLIOP/SSL.java create mode 100644 idl/Security/.java/org/omg/SSLIOP/SSLHelper.java create mode 100644 idl/Security/.java/org/omg/SSLIOP/SSLHolder.java create mode 100644 idl/Security/.java/org/omg/SSLIOP/TAG_SSL_SEC_TRANS.java create mode 100644 idl/Security/.java/org/omg/Security/AccessId.java create mode 100644 idl/Security/.java/org/omg/Security/AccountingId.java create mode 100644 idl/Security/.java/org/omg/Security/AssociationOptionsHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AssociationStatus.java create mode 100644 idl/Security/.java/org/omg/Security/AssociationStatusHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AssociationStatusHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeSet.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeType.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeTypeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeTypeListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AttributeTypeListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AuditAll.java create mode 100644 idl/Security/.java/org/omg/Security/AuditAuthorization.java create mode 100644 idl/Security/.java/org/omg/Security/AuditChannelIdHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuditCombinator.java create mode 100644 idl/Security/.java/org/omg/Security/AuditCombinatorHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuditCombinatorHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AuditEventType.java create mode 100644 idl/Security/.java/org/omg/Security/AuditEventTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuditEventTypeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AuditEventTypeListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuditEventTypeListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AuditId.java create mode 100644 idl/Security/.java/org/omg/Security/AuditInvocation.java create mode 100644 idl/Security/.java/org/omg/Security/AuditNonRepudiation.java create mode 100644 idl/Security/.java/org/omg/Security/AuditObjectCreation.java create mode 100644 idl/Security/.java/org/omg/Security/AuditObjectDestruction.java create mode 100644 idl/Security/.java/org/omg/Security/AuditPolicyChange.java create mode 100644 idl/Security/.java/org/omg/Security/AuditPrincipalAuth.java create mode 100644 idl/Security/.java/org/omg/Security/AuditSecEnvChange.java create mode 100644 idl/Security/.java/org/omg/Security/AuditSessionAuth.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationMethodHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationMethodListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationMethodListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationStatus.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationStatusHelper.java create mode 100644 idl/Security/.java/org/omg/Security/AuthenticationStatusHolder.java create mode 100644 idl/Security/.java/org/omg/Security/Capability.java create mode 100644 idl/Security/.java/org/omg/Security/ChannelBindings.java create mode 100644 idl/Security/.java/org/omg/Security/ChannelBindingsHelper.java create mode 100644 idl/Security/.java/org/omg/Security/ChannelBindingsHolder.java create mode 100644 idl/Security/.java/org/omg/Security/Clearance.java create mode 100644 idl/Security/.java/org/omg/Security/CommonInteroperabilityLevel0.java create mode 100644 idl/Security/.java/org/omg/Security/CommonInteroperabilityLevel1.java create mode 100644 idl/Security/.java/org/omg/Security/CommonInteroperabilityLevel2.java create mode 100644 idl/Security/.java/org/omg/Security/CommunicationDirection.java create mode 100644 idl/Security/.java/org/omg/Security/CommunicationDirectionHelper.java create mode 100644 idl/Security/.java/org/omg/Security/CommunicationDirectionHolder.java create mode 100644 idl/Security/.java/org/omg/Security/CompositeDelegation.java create mode 100644 idl/Security/.java/org/omg/Security/Confidentiality.java create mode 100644 idl/Security/.java/org/omg/Security/DCESecureInteroperability.java create mode 100644 idl/Security/.java/org/omg/Security/DayOfTheWeek.java create mode 100644 idl/Security/.java/org/omg/Security/DayOfTheWeekHelper.java create mode 100644 idl/Security/.java/org/omg/Security/DayOfTheWeekHolder.java create mode 100644 idl/Security/.java/org/omg/Security/DayOfWeek.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationDirective.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationDirectiveHelper.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationDirectiveHolder.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationMode.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationModeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationModeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationState.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationStateHelper.java create mode 100644 idl/Security/.java/org/omg/Security/DelegationStateHolder.java create mode 100644 idl/Security/.java/org/omg/Security/DetectMisordering.java create mode 100644 idl/Security/.java/org/omg/Security/DetectReplay.java create mode 100644 idl/Security/.java/org/omg/Security/EstablishTrust.java create mode 100644 idl/Security/.java/org/omg/Security/EstablishTrustHelper.java create mode 100644 idl/Security/.java/org/omg/Security/EstablishTrustHolder.java create mode 100644 idl/Security/.java/org/omg/Security/EstablishTrustInClient.java create mode 100644 idl/Security/.java/org/omg/Security/EstablishTrustInTarget.java create mode 100644 idl/Security/.java/org/omg/Security/EventTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/ExtensibleFamily.java create mode 100644 idl/Security/.java/org/omg/Security/ExtensibleFamilyHelper.java create mode 100644 idl/Security/.java/org/omg/Security/ExtensibleFamilyHolder.java create mode 100644 idl/Security/.java/org/omg/Security/GroupId.java create mode 100644 idl/Security/.java/org/omg/Security/Initiator.java create mode 100644 idl/Security/.java/org/omg/Security/Integrity.java create mode 100644 idl/Security/.java/org/omg/Security/InterfaceName.java create mode 100644 idl/Security/.java/org/omg/Security/IntervalTHelper.java create mode 100644 idl/Security/.java/org/omg/Security/InvocationCredentialsType.java create mode 100644 idl/Security/.java/org/omg/Security/InvocationCredentialsTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/InvocationCredentialsTypeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/MechandOptions.java create mode 100644 idl/Security/.java/org/omg/Security/MechandOptionsHelper.java create mode 100644 idl/Security/.java/org/omg/Security/MechandOptionsHolder.java create mode 100644 idl/Security/.java/org/omg/Security/MechandOptionsListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/MechandOptionsListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/MechanismTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/MechanismTypeListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/MechanismTypeListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/NoDelegation.java create mode 100644 idl/Security/.java/org/omg/Security/NoProtection.java create mode 100644 idl/Security/.java/org/omg/Security/NonRepudiation.java create mode 100644 idl/Security/.java/org/omg/Security/NonRepudiationId.java create mode 100644 idl/Security/.java/org/omg/Security/OIDHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OIDHolder.java create mode 100644 idl/Security/.java/org/omg/Security/OIDListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OIDListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/ObjectRef.java create mode 100644 idl/Security/.java/org/omg/Security/OpaqueBuffer.java create mode 100644 idl/Security/.java/org/omg/Security/OpaqueBufferHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OpaqueBufferHolder.java create mode 100644 idl/Security/.java/org/omg/Security/OpaqueHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OpaqueHolder.java create mode 100644 idl/Security/.java/org/omg/Security/Operation.java create mode 100644 idl/Security/.java/org/omg/Security/OptionsDirectionPair.java create mode 100644 idl/Security/.java/org/omg/Security/OptionsDirectionPairHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OptionsDirectionPairHolder.java create mode 100644 idl/Security/.java/org/omg/Security/OptionsDirectionPairListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/OptionsDirectionPairListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/PrimaryGroupId.java create mode 100644 idl/Security/.java/org/omg/Security/QOP.java create mode 100644 idl/Security/.java/org/omg/Security/QOPHelper.java create mode 100644 idl/Security/.java/org/omg/Security/QOPHolder.java create mode 100644 idl/Security/.java/org/omg/Security/ReplaceORBServices.java create mode 100644 idl/Security/.java/org/omg/Security/ReplaceSecurityServices.java create mode 100644 idl/Security/.java/org/omg/Security/RequiresSupports.java create mode 100644 idl/Security/.java/org/omg/Security/RequiresSupportsHelper.java create mode 100644 idl/Security/.java/org/omg/Security/RequiresSupportsHolder.java create mode 100644 idl/Security/.java/org/omg/Security/Right.java create mode 100644 idl/Security/.java/org/omg/Security/RightHelper.java create mode 100644 idl/Security/.java/org/omg/Security/RightHolder.java create mode 100644 idl/Security/.java/org/omg/Security/RightsCombinator.java create mode 100644 idl/Security/.java/org/omg/Security/RightsCombinatorHelper.java create mode 100644 idl/Security/.java/org/omg/Security/RightsCombinatorHolder.java create mode 100644 idl/Security/.java/org/omg/Security/RightsListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/RightsListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/Role.java create mode 100644 idl/Security/.java/org/omg/Security/SecApplicationAccess.java create mode 100644 idl/Security/.java/org/omg/Security/SecApplicationAudit.java create mode 100644 idl/Security/.java/org/omg/Security/SecAttribute.java create mode 100644 idl/Security/.java/org/omg/Security/SecAttributeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecAttributeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SecClientInvocationAccess.java create mode 100644 idl/Security/.java/org/omg/Security/SecClientInvocationAudit.java create mode 100644 idl/Security/.java/org/omg/Security/SecClientSecureInvocation.java create mode 100644 idl/Security/.java/org/omg/Security/SecDelegation.java create mode 100644 idl/Security/.java/org/omg/Security/SecDelegationDirectivePolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecEstablishTrustPolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecFeaturePolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecInvocationCredentialsPolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecMechanismsPolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecNonRepudiation.java create mode 100644 idl/Security/.java/org/omg/Security/SecQOPPolicy.java create mode 100644 idl/Security/.java/org/omg/Security/SecTargetInvocationAccess.java create mode 100644 idl/Security/.java/org/omg/Security/SecTargetInvocationAudit.java create mode 100644 idl/Security/.java/org/omg/Security/SecTargetSecureInvocation.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityAttribute.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityAttributeTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextState.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextStateHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextStateHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextType.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityContextTypeHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityFeature.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityFeatureHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityFeatureHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityLevel1.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityLevel2.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityMechanismType.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityNameHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityORBServiceReady.java create mode 100644 idl/Security/.java/org/omg/Security/SecurityServiceReady.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorTypeHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorValue.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorValueHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorValueHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorValueListHelper.java create mode 100644 idl/Security/.java/org/omg/Security/SelectorValueListHolder.java create mode 100644 idl/Security/.java/org/omg/Security/SimpleDelegation.java create mode 100644 idl/Security/.java/org/omg/Security/StandardSecureInteroperability.java create mode 100644 idl/Security/.java/org/omg/Security/SuccessFailure.java create mode 100644 idl/Security/.java/org/omg/Security/Time.java create mode 100644 idl/Security/.java/org/omg/Security/TimeTHelper.java create mode 100644 idl/Security/.java/org/omg/Security/UtcTHelper.java create mode 100644 idl/Security/.java/org/omg/Security/_Public.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/Current.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/CurrentHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/CurrentHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/CurrentLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/CurrentLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel1/CurrentOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecision.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecisionHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecisionHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecisionLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecisionLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AccessDecisionOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannel.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannelHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannelHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannelLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannelLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditChannelOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecision.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecisionHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecisionHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecisionLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecisionLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/AuditDecisionOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/Credentials.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsListHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsListHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CredentialsOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/Current.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CurrentHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CurrentHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CurrentLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CurrentLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/CurrentOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicy.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicyHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicyHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/DelegationDirectivePolicyOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicy.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicyHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicyHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicyLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicyLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/EstablishTrustPolicyOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicy.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicyHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicyHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/InvocationCredentialsPolicyOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicy.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicyHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicyHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicyLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicyLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/MechanismPolicyOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticator.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticatorHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticatorHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/PrincipalAuthenticatorOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicy.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicyHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicyHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicyLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicyLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/QOPPolicyOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentials.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentialsHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentialsHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentialsLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentialsLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/ReceivedCredentialsOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRights.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRightsHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRightsHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRightsOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRightsPOA.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/RequiredRightsPOATie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManager.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManagerHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManagerHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManagerLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManagerLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/SecurityManagerOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentials.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentialsHelper.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentialsHolder.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentialsLocalBase.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentialsLocalTie.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/TargetCredentialsOperations.java create mode 100644 idl/Security/.java/org/omg/SecurityLevel2/_RequiredRightsStub.java create mode 100644 idl/Security/.svn/all-wcprops create mode 100644 idl/Security/.svn/entries create mode 100644 idl/Security/.svn/text-base/CSI.idl.svn-base create mode 100644 idl/Security/.svn/text-base/CSIIOP.idl.svn-base create mode 100644 idl/Security/.svn/text-base/SSLIOP.idl.svn-base create mode 100644 idl/Security/.svn/text-base/Security.idl.svn-base create mode 100644 idl/Security/.svn/text-base/SecurityLevel1.idl.svn-base create mode 100644 idl/Security/.svn/text-base/SecurityLevel2.idl.svn-base create mode 100644 idl/Security/.svn/text-base/SecurityLevel3.idl.svn-base create mode 100644 idl/Security/.svn/text-base/build.xml.svn-base create mode 100644 idl/Security/CSI.idl create mode 100644 idl/Security/CSIIOP.idl create mode 100644 idl/Security/SSLIOP.idl create mode 100644 idl/Security/Security.idl create mode 100644 idl/Security/SecurityLevel1.idl create mode 100644 idl/Security/SecurityLevel2.idl create mode 100644 idl/Security/SecurityLevel3.idl create mode 100644 idl/Security/build.xml create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBase.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBaseHelper.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBaseHolder.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBaseOperations.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePOA.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePOATie.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/URLHelper.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/URLSeqHelper.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/URLSeqHolder.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHelper.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHolder.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTime.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTimeHelper.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTimeHolder.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTimeOperations.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTimePOA.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/RunTimePOATie.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/_CodeBaseStub.class create mode 100644 idl/SendingContext/.class/org/omg/SendingContext/_RunTimeStub.class create mode 100644 idl/SendingContext/.cvsignore create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBase.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBaseHelper.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBaseHolder.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBaseOperations.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePOA.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePOATie.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePackage/URLHelper.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePackage/URLSeqHelper.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePackage/URLSeqHolder.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHelper.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHolder.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTime.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTimeHelper.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTimeHolder.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTimeOperations.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTimePOA.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/RunTimePOATie.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/_CodeBaseStub.java create mode 100644 idl/SendingContext/.java/org/omg/SendingContext/_RunTimeStub.java create mode 100644 idl/SendingContext/.svn/all-wcprops create mode 100644 idl/SendingContext/.svn/dir-prop-base create mode 100644 idl/SendingContext/.svn/entries create mode 100644 idl/SendingContext/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/SendingContext/.svn/prop-base/SendingContext.idl.svn-base create mode 100644 idl/SendingContext/.svn/prop-base/build.xml.svn-base create mode 100644 idl/SendingContext/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/SendingContext/.svn/text-base/SendingContext.idl.svn-base create mode 100644 idl/SendingContext/.svn/text-base/build.xml.svn-base create mode 100644 idl/SendingContext/SendingContext.idl create mode 100644 idl/SendingContext/build.xml create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/InaccuracyTHelper.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/IntervalT.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/IntervalTHelper.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/IntervalTHolder.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/TdfTHelper.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/TimeTHelper.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/UtcT.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/UtcTHelper.class create mode 100644 idl/TimeBase/.class/org/omg/TimeBase/UtcTHolder.class create mode 100644 idl/TimeBase/.cvsignore create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/InaccuracyTHelper.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/IntervalT.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/IntervalTHelper.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/IntervalTHolder.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/TdfTHelper.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/TimeTHelper.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/UtcT.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/UtcTHelper.java create mode 100644 idl/TimeBase/.java/org/omg/TimeBase/UtcTHolder.java create mode 100644 idl/TimeBase/.svn/all-wcprops create mode 100644 idl/TimeBase/.svn/dir-prop-base create mode 100644 idl/TimeBase/.svn/entries create mode 100644 idl/TimeBase/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/TimeBase/.svn/prop-base/TimeBase.idl.svn-base create mode 100644 idl/TimeBase/.svn/prop-base/build.xml.svn-base create mode 100644 idl/TimeBase/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/TimeBase/.svn/text-base/TimeBase.idl.svn-base create mode 100644 idl/TimeBase/.svn/text-base/build.xml.svn-base create mode 100644 idl/TimeBase/TimeBase.idl create mode 100644 idl/TimeBase/build.xml create mode 100644 idl/build.xml create mode 100644 idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContext.class create mode 100644 idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContextHelper.class create mode 100644 idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContextHolder.class create mode 100644 idl/comm/.class/org/omg/IIOP/ListenPoint.class create mode 100644 idl/comm/.class/org/omg/IIOP/ListenPointHelper.class create mode 100644 idl/comm/.class/org/omg/IIOP/ListenPointHolder.class create mode 100644 idl/comm/.class/org/omg/IIOP/ListenPointListHelper.class create mode 100644 idl/comm/.class/org/omg/IIOP/ListenPointListHolder.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_0.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_0Helper.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_0Holder.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_1.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_1Helper.class create mode 100644 idl/comm/.class/org/omg/IIOP/ProfileBody_1_1Holder.class create mode 100644 idl/comm/.class/org/omg/IIOP/Version.class create mode 100644 idl/comm/.class/org/omg/IIOP/VersionHelper.class create mode 100644 idl/comm/.class/org/omg/IIOP/VersionHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/BI_DIR_IIOP.class create mode 100644 idl/comm/.class/org/omg/IOP/ChainBypassCheck.class create mode 100644 idl/comm/.class/org/omg/IOP/ChainBypassInfo.class create mode 100644 idl/comm/.class/org/omg/IOP/CodeSets.class create mode 100644 idl/comm/.class/org/omg/IOP/Codec.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactory.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryLocalBase.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryLocalTie.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryOperations.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecLocalBase.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecLocalTie.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecOperations.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatch.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatch.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatchHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatchHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/ComponentIdHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/ENCODING_CDR_ENCAPS.class create mode 100644 idl/comm/.class/org/omg/IOP/Encoding.class create mode 100644 idl/comm/.class/org/omg/IOP/EncodingFormatHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/EncodingHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/EncodingHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/ExceptionDetailMessage.class create mode 100644 idl/comm/.class/org/omg/IOP/FORWARDED_IDENTITY.class create mode 100644 idl/comm/.class/org/omg/IOP/INVOCATION_POLICIES.class create mode 100644 idl/comm/.class/org/omg/IOP/IOR.class create mode 100644 idl/comm/.class/org/omg/IOP/IORHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/IORHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/LogicalThreadId.class create mode 100644 idl/comm/.class/org/omg/IOP/MultipleComponentProfileHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/MultipleComponentProfileHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/ProfileIdHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/RTCorbaPriority.class create mode 100644 idl/comm/.class/org/omg/IOP/RTCorbaPriorityRange.class create mode 100644 idl/comm/.class/org/omg/IOP/SecurityAttributeService.class create mode 100644 idl/comm/.class/org/omg/IOP/SendingContextRunTime.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceContext.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceContextHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceContextHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceContextListHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceContextListHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/ServiceIdHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_ASSOCIATION_OPTIONS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_CODE_SETS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_COMPLETE_OBJECT_KEY.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_CSI_ECMA_Hybrid_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_CSI_ECMA_Public_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_CSI_ECMA_Secret_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_CSI_SEC_MECH_LIST.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_DCE_BINDING_NAME.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_DCE_NO_PIPES.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_DCE_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_DCE_STRING_BINDING.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_ENDPOINT_ID_POSITION.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_FIREWALL_TRANS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_GENERIC_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_INET_SEC_TRANS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_INTERNET_IOP.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_INV_POLICY.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_JAVA_CODEBASE.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_KerberosV5_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_LOCATION_POLICY.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_MESSAGE_ROUTERS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_MULTIPLE_COMPONENTS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_NULL_TAG.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_ORB_TYPE.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_OTS_POLICY.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_POLICIES.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_SCCP_CONTACT_INFO.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_SEC_NAME.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_SPKM_1_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_SPKM_2_SEC_MECH.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_SSL_SEC_TRANS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_TLS_SEC_TRANS.class create mode 100644 idl/comm/.class/org/omg/IOP/TAG_TRANSACTION_POLICY.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedComponent.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedComponentHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedComponentHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedComponentSeqHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedComponentSeqHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedProfile.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedProfileHelper.class create mode 100644 idl/comm/.class/org/omg/IOP/TaggedProfileHolder.class create mode 100644 idl/comm/.class/org/omg/IOP/TransactionService.class create mode 100644 idl/comm/.class/org/omg/IOP/UnknownExceptionInfo.class create mode 100644 idl/comm/.cvsignore create mode 100644 idl/comm/.java/org/omg/IIOP/BiDirIIOPServiceContext.java create mode 100644 idl/comm/.java/org/omg/IIOP/BiDirIIOPServiceContextHelper.java create mode 100644 idl/comm/.java/org/omg/IIOP/BiDirIIOPServiceContextHolder.java create mode 100644 idl/comm/.java/org/omg/IIOP/ListenPoint.java create mode 100644 idl/comm/.java/org/omg/IIOP/ListenPointHelper.java create mode 100644 idl/comm/.java/org/omg/IIOP/ListenPointHolder.java create mode 100644 idl/comm/.java/org/omg/IIOP/ListenPointListHelper.java create mode 100644 idl/comm/.java/org/omg/IIOP/ListenPointListHolder.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_0.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_0Helper.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_0Holder.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_1.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_1Helper.java create mode 100644 idl/comm/.java/org/omg/IIOP/ProfileBody_1_1Holder.java create mode 100644 idl/comm/.java/org/omg/IIOP/Version.java create mode 100644 idl/comm/.java/org/omg/IIOP/VersionHelper.java create mode 100644 idl/comm/.java/org/omg/IIOP/VersionHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/BI_DIR_IIOP.java create mode 100644 idl/comm/.java/org/omg/IOP/ChainBypassCheck.java create mode 100644 idl/comm/.java/org/omg/IOP/ChainBypassInfo.java create mode 100644 idl/comm/.java/org/omg/IOP/CodeSets.java create mode 100644 idl/comm/.java/org/omg/IOP/Codec.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactory.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryLocalBase.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryLocalTie.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryOperations.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryPackage/UnknownEncoding.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecLocalBase.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecLocalTie.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecOperations.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/FormatMismatch.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/FormatMismatchHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/FormatMismatchHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/TypeMismatch.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/TypeMismatchHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/CodecPackage/TypeMismatchHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/ComponentIdHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/ENCODING_CDR_ENCAPS.java create mode 100644 idl/comm/.java/org/omg/IOP/Encoding.java create mode 100644 idl/comm/.java/org/omg/IOP/EncodingFormatHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/EncodingHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/EncodingHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/ExceptionDetailMessage.java create mode 100644 idl/comm/.java/org/omg/IOP/FORWARDED_IDENTITY.java create mode 100644 idl/comm/.java/org/omg/IOP/INVOCATION_POLICIES.java create mode 100644 idl/comm/.java/org/omg/IOP/IOR.java create mode 100644 idl/comm/.java/org/omg/IOP/IORHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/IORHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/LogicalThreadId.java create mode 100644 idl/comm/.java/org/omg/IOP/MultipleComponentProfileHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/MultipleComponentProfileHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/ProfileIdHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/RTCorbaPriority.java create mode 100644 idl/comm/.java/org/omg/IOP/RTCorbaPriorityRange.java create mode 100644 idl/comm/.java/org/omg/IOP/SecurityAttributeService.java create mode 100644 idl/comm/.java/org/omg/IOP/SendingContextRunTime.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceContext.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceContextHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceContextHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceContextListHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceContextListHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/ServiceIdHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_ASSOCIATION_OPTIONS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_CODE_SETS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_COMPLETE_OBJECT_KEY.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_CSI_ECMA_Hybrid_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_CSI_ECMA_Public_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_CSI_ECMA_Secret_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_CSI_SEC_MECH_LIST.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_DCE_BINDING_NAME.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_DCE_NO_PIPES.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_DCE_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_DCE_STRING_BINDING.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_ENDPOINT_ID_POSITION.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_FIREWALL_TRANS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_GENERIC_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_INET_SEC_TRANS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_INTERNET_IOP.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_INV_POLICY.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_JAVA_CODEBASE.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_KerberosV5_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_LOCATION_POLICY.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_MESSAGE_ROUTERS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_MULTIPLE_COMPONENTS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_NULL_TAG.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_ORB_TYPE.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_OTS_POLICY.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_POLICIES.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_SCCP_CONTACT_INFO.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_SEC_NAME.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_SPKM_1_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_SPKM_2_SEC_MECH.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_SSL_SEC_TRANS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_TLS_SEC_TRANS.java create mode 100644 idl/comm/.java/org/omg/IOP/TAG_TRANSACTION_POLICY.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedComponent.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedComponentHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedComponentHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedComponentSeqHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedComponentSeqHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedProfile.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedProfileHelper.java create mode 100644 idl/comm/.java/org/omg/IOP/TaggedProfileHolder.java create mode 100644 idl/comm/.java/org/omg/IOP/TransactionService.java create mode 100644 idl/comm/.java/org/omg/IOP/UnknownExceptionInfo.java create mode 100644 idl/comm/.svn/all-wcprops create mode 100644 idl/comm/.svn/dir-prop-base create mode 100644 idl/comm/.svn/entries create mode 100644 idl/comm/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/comm/.svn/prop-base/GIOP.idl.svn-base create mode 100644 idl/comm/.svn/prop-base/IIOP.idl.svn-base create mode 100644 idl/comm/.svn/prop-base/IOP.idl.svn-base create mode 100644 idl/comm/.svn/prop-base/build.xml.svn-base create mode 100644 idl/comm/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/comm/.svn/text-base/GIOP.idl.svn-base create mode 100644 idl/comm/.svn/text-base/IIOP.idl.svn-base create mode 100644 idl/comm/.svn/text-base/IOP.idl.svn-base create mode 100644 idl/comm/.svn/text-base/build.xml.svn-base create mode 100644 idl/comm/GIOP.idl create mode 100644 idl/comm/IIOP.idl create mode 100644 idl/comm/IOP.idl create mode 100644 idl/comm/build.xml create mode 100644 idl/orb/.class/es/tid/CORBA/Any.class create mode 100644 idl/orb/.class/org/omg/CORBA/ARG_IN.class create mode 100644 idl/orb/.class/org/omg/CORBA/ARG_INOUT.class create mode 100644 idl/orb/.class/org/omg/CORBA/ARG_OUT.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/AliasDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/Any.class create mode 100644 idl/orb/.class/org/omg/CORBA/AnyHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/AnySeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AnySeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ArrayDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttrDescriptionSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttrDescriptionSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeMode.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeModeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/AttributeModeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_CONTEXT.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_INV_ORDER.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_OPERATION.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_PARAM.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_POLICY.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_POLICY_TYPE.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_POLICY_VALUE.class create mode 100644 idl/orb/.class/org/omg/CORBA/BAD_TYPECODE.class create mode 100644 idl/orb/.class/org/omg/CORBA/BadFixedValue.class create mode 100644 idl/orb/.class/org/omg/CORBA/BadFixedValueHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/BadFixedValueHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/BooleanHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/BooleanSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/BooleanSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Bounds.class create mode 100644 idl/orb/.class/org/omg/CORBA/ByteHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/CODESET_INCOMPATIBLE.class create mode 100644 idl/orb/.class/org/omg/CORBA/COMM_FAILURE.class create mode 100644 idl/orb/.class/org/omg/CORBA/CTX_RESTRICT_SCOPE.class create mode 100644 idl/orb/.class/org/omg/CORBA/CharHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/CharSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/CharSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/CompletionStatus.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstantDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicy.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/Contained.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedPackage/Description.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedPackage/DescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedPackage/DescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainedSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Container.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPackage/Description.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Context.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContextIdSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContextIdSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContextIdentifierHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ContextList.class create mode 100644 idl/orb/.class/org/omg/CORBA/Current.class create mode 100644 idl/orb/.class/org/omg/CORBA/CurrentHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/CurrentHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/CurrentOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/CurrentPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/CurrentPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/CustomMarshal.class create mode 100644 idl/orb/.class/org/omg/CORBA/CustomMarshalHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/CustomMarshalHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DATA_CONVERSION.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataInputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataInputStreamHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataInputStreamHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataOutputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataOutputStreamHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DataOutputStreamHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DefinitionKind.class create mode 100644 idl/orb/.class/org/omg/CORBA/DefinitionKindHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DefinitionKindHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManager.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerListHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerListHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/DomainManagerPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/DoubleHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DoubleSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/DoubleSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/DynamicImplementation.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumMemberSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/EnumMemberSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Environment.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDefSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ExceptionList.class create mode 100644 idl/orb/.class/org/omg/CORBA/FREE_MEM.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/FixedDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/FlagsHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/FloatHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/FloatSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/FloatSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLType.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLTypeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLTypeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLTypeOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLTypePOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/IDLTypePOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/IMP_LIMIT.class create mode 100644 idl/orb/.class/org/omg/CORBA/INITIALIZE.class create mode 100644 idl/orb/.class/org/omg/CORBA/INTERNAL.class create mode 100644 idl/orb/.class/org/omg/CORBA/INTF_REPOS.class create mode 100644 idl/orb/.class/org/omg/CORBA/INVALID_TRANSACTION.class create mode 100644 idl/orb/.class/org/omg/CORBA/INV_FLAG.class create mode 100644 idl/orb/.class/org/omg/CORBA/INV_IDENT.class create mode 100644 idl/orb/.class/org/omg/CORBA/INV_OBJREF.class create mode 100644 idl/orb/.class/org/omg/CORBA/INV_POLICY.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObject.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObjectHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObjectHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObjectOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObjectPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/IRObjectPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/IdentifierHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/Initializer.class create mode 100644 idl/orb/.class/org/omg/CORBA/InitializerHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InitializerHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InitializerSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InitializerSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/IntHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDefSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InterfaceDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/InvalidPolicies.class create mode 100644 idl/orb/.class/org/omg/CORBA/InvalidPoliciesHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/InvalidPoliciesHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/LocalInterface.class create mode 100644 idl/orb/.class/org/omg/CORBA/LocalObject.class create mode 100644 idl/orb/.class/org/omg/CORBA/LongHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/LongLongSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/LongLongSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/LongSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/LongSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/MARSHAL.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ModuleDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/NO_IMPLEMENT.class create mode 100644 idl/orb/.class/org/omg/CORBA/NO_MEMORY.class create mode 100644 idl/orb/.class/org/omg/CORBA/NO_PERMISSION.class create mode 100644 idl/orb/.class/org/omg/CORBA/NO_RESOURCES.class create mode 100644 idl/orb/.class/org/omg/CORBA/NO_RESPONSE.class create mode 100644 idl/orb/.class/org/omg/CORBA/NVList.class create mode 100644 idl/orb/.class/org/omg/CORBA/NamedValue.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/NativeDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/OBJECT_NOT_EXIST.class create mode 100644 idl/orb/.class/org/omg/CORBA/OBJ_ADAPTER.class create mode 100644 idl/orb/.class/org/omg/CORBA/OMGVMCID.class create mode 100644 idl/orb/.class/org/omg/CORBA/ORB.class create mode 100644 idl/orb/.class/org/omg/CORBA/ORBPackage/InvalidName.class create mode 100644 idl/orb/.class/org/omg/CORBA/Object.class create mode 100644 idl/orb/.class/org/omg/CORBA/ObjectHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/OctetSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/OctetSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/OpDescriptionSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/OpDescriptionSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationMode.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationModeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/OperationModeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PERSIST_STORE.class create mode 100644 idl/orb/.class/org/omg/CORBA/PRIVATE_MEMBER.class create mode 100644 idl/orb/.class/org/omg/CORBA/PUBLIC_MEMBER.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParDescriptionSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParDescriptionSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterMode.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterModeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ParameterModeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Policy.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrent.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrentHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrentHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrentLocalBase.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrentLocalTie.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyCurrentOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyError.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyErrorCodeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyErrorHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyErrorHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyListHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyListHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManager.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManagerHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManagerHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManagerLocalBase.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManagerLocalTie.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyManagerOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyTypeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveKind.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveKindHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrimitiveKindHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Principal.class create mode 100644 idl/orb/.class/org/omg/CORBA/PrincipalHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/Repository.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryIdHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryIdSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryIdSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/RepositoryPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/Request.class create mode 100644 idl/orb/.class/org/omg/CORBA/ScopedNameHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/SecConstruction.class create mode 100644 idl/orb/.class/org/omg/CORBA/Security.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/SequenceDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServerRequest.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceDetail.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceDetailHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceDetailHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceDetailTypeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceInformation.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceInformationHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceInformationHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceOptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ServiceTypeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/SetOverrideType.class create mode 100644 idl/orb/.class/org/omg/CORBA/SetOverrideTypeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/SetOverrideTypeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ShortHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ShortSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ShortSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringValueHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StringValueHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructMember.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructMemberHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructMemberHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructMemberSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/StructMemberSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/SystemException.class create mode 100644 idl/orb/.class/org/omg/CORBA/TCKind.class create mode 100644 idl/orb/.class/org/omg/CORBA/TCKindHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/TCKindHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/TIMEOUT.class create mode 100644 idl/orb/.class/org/omg/CORBA/TRANSACTION_REQUIRED.class create mode 100644 idl/orb/.class/org/omg/CORBA/TRANSACTION_ROLLEDBACK.class create mode 100644 idl/orb/.class/org/omg/CORBA/TRANSIENT.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeCode.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeCodeHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeCodeHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeCodePackage/BadKind.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeCodePackage/Bounds.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypeDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/TypedefDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ULongLongSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ULongLongSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ULongSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ULongSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/UNKNOWN.class create mode 100644 idl/orb/.class/org/omg/CORBA/UNSUPPORTED_POLICY.class create mode 100644 idl/orb/.class/org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.class create mode 100644 idl/orb/.class/org/omg/CORBA/UShortSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/UShortSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionMember.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionMemberHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionMemberHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionMemberSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnionMemberSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/UnknownUserException.class create mode 100644 idl/orb/.class/org/omg/CORBA/UserException.class create mode 100644 idl/orb/.class/org/omg/CORBA/VM_ABSTRACT.class create mode 100644 idl/orb/.class/org/omg/CORBA/VM_CUSTOM.class create mode 100644 idl/orb/.class/org/omg/CORBA/VM_NONE.class create mode 100644 idl/orb/.class/org/omg/CORBA/VM_TRUNCATABLE.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBaseHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBaseHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueBoxDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefPackage/FullValueDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDefSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDescription.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDescriptionHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueDescriptionHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMember.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueMemberSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/ValueModifierHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/VersionSpecHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/VisibilityHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/WCharSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/WCharSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/WStringSeqHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/WStringSeqHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/WStringValueHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/WStringValueHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/WrongTransaction.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDef.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDefHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDefHolder.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDefOperations.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDefPOA.class create mode 100644 idl/orb/.class/org/omg/CORBA/WstringDefPOATie.class create mode 100644 idl/orb/.class/org/omg/CORBA/_AliasDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ArrayDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_AttributeDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ConstantDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ConstructionPolicyStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ContainedStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ContainerStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_CurrentStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_DomainManagerStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_EnumDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ExceptionDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_FixedDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_IDLTypeStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_IRObjectStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_InterfaceDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ModuleDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_NativeDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_OperationDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_PolicyStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_PrimitiveDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_RepositoryStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_SequenceDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_StringDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_StructDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_TypedefDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_UnionDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ValueBoxDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ValueDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_ValueMemberDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/_WstringDefStub.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ApplicationException.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/BoxedValueHelper.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/CustomValue.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/Delegate.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/IDLEntity.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/IndirectionException.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/InputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/InvokeHandler.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ObjectImpl.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/OutputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/RemarshalException.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ResponseHandler.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ServantObject.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/Streamable.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/StreamableValue.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/UnknownException.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ValueBase.class create mode 100644 idl/orb/.class/org/omg/CORBA/portable/ValueFactory.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_3/ORB.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_3/portable/Delegate.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_3/portable/InputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_3/portable/ObjectImpl.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_3/portable/OutputStream.class create mode 100644 idl/orb/.class/org/omg/CORBA_2_5/ORB.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivator.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivatorHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivatorHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/AdapterActivatorOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/Current.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentPackage/NoContext.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentPackage/NoContextHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/CurrentPackage/NoContextHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/DynamicImplementation.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ForwardRequest.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ForwardRequestHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ForwardRequestHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LIFESPAN_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ObjectIdHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POA.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAListHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAListHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POALocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POALocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManager.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/AdapterInactive.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/State.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistent.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/NoServant.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActive.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActive.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActive.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapter.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/POAPackage/WrongPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/Servant.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivator.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivatorHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivatorHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivatorLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivatorLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantActivatorOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocator.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManager.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManagerHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManagerHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManagerLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManagerLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantManagerOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/THREAD_POLICY_ID.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicy.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyLocalBase.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyLocalTie.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyOperations.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyValue.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyValueHelper.class create mode 100644 idl/orb/.class/org/omg/PortableServer/ThreadPolicyValueHolder.class create mode 100644 idl/orb/.class/org/omg/PortableServer/portable/Delegate.class create mode 100644 idl/orb/.cvsignore create mode 100644 idl/orb/.java/es/tid/CORBA/Any.java create mode 100644 idl/orb/.java/org/omg/CORBA/ARG_IN.java create mode 100644 idl/orb/.java/org/omg/CORBA/ARG_INOUT.java create mode 100644 idl/orb/.java/org/omg/CORBA/ARG_OUT.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/AliasDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/Any.java create mode 100644 idl/orb/.java/org/omg/CORBA/AnyHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/AnySeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AnySeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ArrayDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttrDescriptionSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttrDescriptionSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeMode.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeModeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/AttributeModeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_CONTEXT.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_INV_ORDER.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_OPERATION.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_PARAM.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_POLICY.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_POLICY_TYPE.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_POLICY_VALUE.java create mode 100644 idl/orb/.java/org/omg/CORBA/BAD_TYPECODE.java create mode 100644 idl/orb/.java/org/omg/CORBA/BadFixedValue.java create mode 100644 idl/orb/.java/org/omg/CORBA/BadFixedValueHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/BadFixedValueHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/BooleanHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/BooleanSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/BooleanSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Bounds.java create mode 100644 idl/orb/.java/org/omg/CORBA/ByteHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/CODESET_INCOMPATIBLE.java create mode 100644 idl/orb/.java/org/omg/CORBA/COMM_FAILURE.java create mode 100644 idl/orb/.java/org/omg/CORBA/CTX_RESTRICT_SCOPE.java create mode 100644 idl/orb/.java/org/omg/CORBA/CharHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/CharSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/CharSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/CompletionStatus.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstantDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicy.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicyPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ConstructionPolicyPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/Contained.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedPackage/Description.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedPackage/DescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedPackage/DescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainedSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Container.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPackage/Description.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPackage/DescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPackage/DescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPackage/DescriptionSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContainerPackage/DescriptionSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Context.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContextIdSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContextIdSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContextIdentifierHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ContextList.java create mode 100644 idl/orb/.java/org/omg/CORBA/Current.java create mode 100644 idl/orb/.java/org/omg/CORBA/CurrentHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/CurrentHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/CurrentOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/CurrentPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/CurrentPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/CustomMarshal.java create mode 100644 idl/orb/.java/org/omg/CORBA/CustomMarshalHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/CustomMarshalHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DATA_CONVERSION.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataInputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataInputStreamHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataInputStreamHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataOutputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataOutputStreamHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DataOutputStreamHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DefinitionKind.java create mode 100644 idl/orb/.java/org/omg/CORBA/DefinitionKindHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DefinitionKindHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManager.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerListHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerListHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/DomainManagerPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/DoubleHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DoubleSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/DoubleSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/DynamicImplementation.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumMemberSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/EnumMemberSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Environment.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExcDescriptionSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExcDescriptionSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDefSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ExceptionList.java create mode 100644 idl/orb/.java/org/omg/CORBA/FREE_MEM.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/FixedDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/FlagsHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/FloatHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/FloatSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/FloatSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLType.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLTypeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLTypeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLTypeOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLTypePOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/IDLTypePOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/IMP_LIMIT.java create mode 100644 idl/orb/.java/org/omg/CORBA/INITIALIZE.java create mode 100644 idl/orb/.java/org/omg/CORBA/INTERNAL.java create mode 100644 idl/orb/.java/org/omg/CORBA/INTF_REPOS.java create mode 100644 idl/orb/.java/org/omg/CORBA/INVALID_TRANSACTION.java create mode 100644 idl/orb/.java/org/omg/CORBA/INV_FLAG.java create mode 100644 idl/orb/.java/org/omg/CORBA/INV_IDENT.java create mode 100644 idl/orb/.java/org/omg/CORBA/INV_OBJREF.java create mode 100644 idl/orb/.java/org/omg/CORBA/INV_POLICY.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObject.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObjectHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObjectHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObjectOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObjectPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/IRObjectPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/IdentifierHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/Initializer.java create mode 100644 idl/orb/.java/org/omg/CORBA/InitializerHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InitializerHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InitializerSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InitializerSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/IntHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDefSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InterfaceDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/InvalidPolicies.java create mode 100644 idl/orb/.java/org/omg/CORBA/InvalidPoliciesHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/InvalidPoliciesHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/LocalInterface.java create mode 100644 idl/orb/.java/org/omg/CORBA/LocalObject.java create mode 100644 idl/orb/.java/org/omg/CORBA/LongHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/LongLongSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/LongLongSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/LongSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/LongSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/MARSHAL.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ModuleDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/NO_IMPLEMENT.java create mode 100644 idl/orb/.java/org/omg/CORBA/NO_MEMORY.java create mode 100644 idl/orb/.java/org/omg/CORBA/NO_PERMISSION.java create mode 100644 idl/orb/.java/org/omg/CORBA/NO_RESOURCES.java create mode 100644 idl/orb/.java/org/omg/CORBA/NO_RESPONSE.java create mode 100644 idl/orb/.java/org/omg/CORBA/NVList.java create mode 100644 idl/orb/.java/org/omg/CORBA/NamedValue.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/NativeDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/OBJECT_NOT_EXIST.java create mode 100644 idl/orb/.java/org/omg/CORBA/OBJ_ADAPTER.java create mode 100644 idl/orb/.java/org/omg/CORBA/OMGVMCID.java create mode 100644 idl/orb/.java/org/omg/CORBA/ORB.java create mode 100644 idl/orb/.java/org/omg/CORBA/ORBPackage/InvalidName.java create mode 100644 idl/orb/.java/org/omg/CORBA/Object.java create mode 100644 idl/orb/.java/org/omg/CORBA/ObjectHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/OctetSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/OctetSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/OpDescriptionSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/OpDescriptionSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationMode.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationModeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/OperationModeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PERSIST_STORE.java create mode 100644 idl/orb/.java/org/omg/CORBA/PRIVATE_MEMBER.java create mode 100644 idl/orb/.java/org/omg/CORBA/PUBLIC_MEMBER.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParDescriptionSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParDescriptionSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterMode.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterModeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ParameterModeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Policy.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrent.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrentHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrentHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrentLocalBase.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrentLocalTie.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyCurrentOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyError.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyErrorCodeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyErrorHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyErrorHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyListHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyListHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManager.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManagerHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManagerHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManagerLocalBase.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManagerLocalTie.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyManagerOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyTypeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyTypeSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PolicyTypeSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveKind.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveKindHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrimitiveKindHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Principal.java create mode 100644 idl/orb/.java/org/omg/CORBA/PrincipalHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/Repository.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryIdHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryIdSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryIdSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/RepositoryPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/Request.java create mode 100644 idl/orb/.java/org/omg/CORBA/ScopedNameHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/SecConstruction.java create mode 100644 idl/orb/.java/org/omg/CORBA/Security.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/SequenceDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServerRequest.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceDetail.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceDetailHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceDetailHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceDetailTypeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceInformation.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceInformationHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceInformationHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceOptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ServiceTypeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/SetOverrideType.java create mode 100644 idl/orb/.java/org/omg/CORBA/SetOverrideTypeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/SetOverrideTypeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ShortHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ShortSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ShortSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringValueHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StringValueHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructMember.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructMemberHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructMemberHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructMemberSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/StructMemberSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/SystemException.java create mode 100644 idl/orb/.java/org/omg/CORBA/TCKind.java create mode 100644 idl/orb/.java/org/omg/CORBA/TCKindHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/TCKindHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/TIMEOUT.java create mode 100644 idl/orb/.java/org/omg/CORBA/TRANSACTION_REQUIRED.java create mode 100644 idl/orb/.java/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java create mode 100644 idl/orb/.java/org/omg/CORBA/TRANSIENT.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeCode.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeCodeHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeCodeHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeCodePackage/BadKind.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeCodePackage/Bounds.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypeDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/TypedefDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ULongLongSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ULongLongSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ULongSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ULongSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/UNKNOWN.java create mode 100644 idl/orb/.java/org/omg/CORBA/UNSUPPORTED_POLICY.java create mode 100644 idl/orb/.java/org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.java create mode 100644 idl/orb/.java/org/omg/CORBA/UShortSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/UShortSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionMember.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionMemberHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionMemberHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionMemberSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnionMemberSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/UnknownUserException.java create mode 100644 idl/orb/.java/org/omg/CORBA/UserException.java create mode 100644 idl/orb/.java/org/omg/CORBA/VM_ABSTRACT.java create mode 100644 idl/orb/.java/org/omg/CORBA/VM_CUSTOM.java create mode 100644 idl/orb/.java/org/omg/CORBA/VM_NONE.java create mode 100644 idl/orb/.java/org/omg/CORBA/VM_TRUNCATABLE.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBaseHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBaseHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueBoxDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefPackage/FullValueDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDefSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDescription.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDescriptionHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueDescriptionHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMember.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueMemberSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/ValueModifierHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/VersionSpecHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/VisibilityHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/WCharSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/WCharSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/WStringSeqHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/WStringSeqHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/WStringValueHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/WStringValueHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/WrongTransaction.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDef.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDefHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDefHolder.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDefOperations.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDefPOA.java create mode 100644 idl/orb/.java/org/omg/CORBA/WstringDefPOATie.java create mode 100644 idl/orb/.java/org/omg/CORBA/_AliasDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ArrayDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_AttributeDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ConstantDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ConstructionPolicyStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ContainedStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ContainerStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_CurrentStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_DomainManagerStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_EnumDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ExceptionDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_FixedDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_IDLTypeStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_IRObjectStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_InterfaceDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ModuleDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_NativeDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_OperationDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_PolicyStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_PrimitiveDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_RepositoryStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_SequenceDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_StringDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_StructDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_TypedefDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_UnionDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ValueBoxDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ValueDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_ValueMemberDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/_WstringDefStub.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ApplicationException.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/BoxedValueHelper.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/CustomValue.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/Delegate.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/IDLEntity.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/IndirectionException.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/InputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/InvokeHandler.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ObjectImpl.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/OutputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/RemarshalException.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ResponseHandler.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ServantObject.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/Streamable.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/StreamableValue.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/UnknownException.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ValueBase.java create mode 100644 idl/orb/.java/org/omg/CORBA/portable/ValueFactory.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_3/ORB.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_3/portable/Delegate.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_3/portable/InputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_3/portable/ObjectImpl.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_3/portable/OutputStream.java create mode 100644 idl/orb/.java/org/omg/CORBA_2_5/ORB.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivator.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivatorHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivatorHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivatorLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivatorLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/AdapterActivatorOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/Current.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentPackage/NoContext.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentPackage/NoContextHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/CurrentPackage/NoContextHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/DynamicImplementation.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ForwardRequest.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ForwardRequestHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ForwardRequestHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdAssignmentPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/IdUniquenessPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LIFESPAN_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/LifespanPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ObjectIdHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POA.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAListHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAListHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POALocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POALocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManager.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/AdapterInactive.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/State.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/StateHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAManagerPackage/StateHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterNonExistent.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/InvalidPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/InvalidPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/NoServant.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/NoServantHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/NoServantHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectNotActive.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantAlreadyActive.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantNotActive.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantNotActiveHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongAdapter.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongAdapterHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongAdapterHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/POAPackage/WrongPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/RequestProcessingPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/Servant.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivator.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivatorHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivatorHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivatorLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivatorLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantActivatorOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocator.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManager.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManagerHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManagerHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManagerLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManagerLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantManagerOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ServantRetentionPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/THREAD_POLICY_ID.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicy.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyLocalBase.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyLocalTie.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyOperations.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyValue.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyValueHelper.java create mode 100644 idl/orb/.java/org/omg/PortableServer/ThreadPolicyValueHolder.java create mode 100644 idl/orb/.java/org/omg/PortableServer/portable/Delegate.java create mode 100644 idl/orb/.svn/all-wcprops create mode 100644 idl/orb/.svn/dir-prop-base create mode 100644 idl/orb/.svn/entries create mode 100644 idl/orb/.svn/prop-base/.cvsignore.svn-base create mode 100644 idl/orb/.svn/prop-base/CORBA.idl.svn-base create mode 100644 idl/orb/.svn/prop-base/build.xml.svn-base create mode 100644 idl/orb/.svn/text-base/.cvsignore.svn-base create mode 100644 idl/orb/.svn/text-base/CORBA.idl.svn-base create mode 100644 idl/orb/.svn/text-base/build.xml.svn-base create mode 100644 idl/orb/CORBA.idl create mode 100644 idl/orb/build.xml create mode 100644 idl/orb/extra/.svn/all-wcprops create mode 100644 idl/orb/extra/.svn/entries create mode 100644 idl/orb/extra/es/.svn/all-wcprops create mode 100644 idl/orb/extra/es/.svn/entries create mode 100644 idl/orb/extra/es/tid/.svn/all-wcprops create mode 100644 idl/orb/extra/es/tid/.svn/entries create mode 100644 idl/orb/extra/es/tid/CORBA/.svn/all-wcprops create mode 100644 idl/orb/extra/es/tid/CORBA/.svn/entries create mode 100644 idl/orb/extra/es/tid/CORBA/.svn/prop-base/Any.java.svn-base create mode 100644 idl/orb/extra/es/tid/CORBA/.svn/text-base/Any.java.svn-base create mode 100644 idl/orb/extra/es/tid/CORBA/Any.java create mode 100644 idl/orb/extra/org/.svn/all-wcprops create mode 100644 idl/orb/extra/org/.svn/entries create mode 100644 idl/orb/extra/org/omg/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Any.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/AnyHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_CONTEXT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_INV_ORDER.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_OPERATION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_PARAM.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_TYPE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_VALUE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_TYPECODE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/BooleanHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Bounds.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ByteHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/CODESET_INCOMPATIBLE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/COMM_FAILURE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/CharHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/CompletionStatus.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Context.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ContextList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/DATA_CONVERSION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/DoubleHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/DynamicImplementation.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Environment.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ExceptionList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/FREE_MEM.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/FloatHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/IMP_LIMIT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INITIALIZE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTERNAL.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTF_REPOS.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INVALID_TRANSACTION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_FLAG.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_IDENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_OBJREF.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_POLICY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/IntHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalInterface.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalObject.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/LongHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/MARSHAL.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_IMPLEMENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_MEMORY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_PERMISSION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESOURCES.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESPONSE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NVList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/NamedValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJECT_NOT_EXIST.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJ_ADAPTER.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Object.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ObjectHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/PERSIST_STORE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/PolicyError.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Principal.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/PrincipalHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/Request.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ServerRequest.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ShortHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/StringHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/SystemException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TIMEOUT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_REQUIRED.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_ROLLEDBACK.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSIENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCode.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/UNKNOWN.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/UnknownUserException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/UserException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/prop-base/WrongTransaction.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Any.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/AnyHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_CONTEXT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_INV_ORDER.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_OPERATION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_PARAM.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_TYPE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_VALUE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_TYPECODE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/BooleanHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Bounds.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ByteHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/CODESET_INCOMPATIBLE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/COMM_FAILURE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/CharHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/CompletionStatus.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Context.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ContextList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/DATA_CONVERSION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/DoubleHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/DynamicImplementation.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Environment.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ExceptionList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/FREE_MEM.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/FloatHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/IMP_LIMIT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INITIALIZE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INTERNAL.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INTF_REPOS.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INVALID_TRANSACTION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_FLAG.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_IDENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_OBJREF.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_POLICY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/IntHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalInterface.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalObject.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/LongHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/MARSHAL.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NO_IMPLEMENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NO_MEMORY.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NO_PERMISSION.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NO_RESOURCES.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NO_RESPONSE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NVList.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/NamedValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/OBJECT_NOT_EXIST.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/OBJ_ADAPTER.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Object.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ObjectHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/PERSIST_STORE.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/PolicyError.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Principal.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/PrincipalHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/Request.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ServerRequest.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ShortHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/StringHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/SystemException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TIMEOUT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_REQUIRED.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_ROLLEDBACK.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSIENT.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCode.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/UNKNOWN.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/UnknownUserException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/UserException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/.svn/text-base/WrongTransaction.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/Any.java create mode 100644 idl/orb/extra/org/omg/CORBA/AnyHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_INV_ORDER.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_OPERATION.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_PARAM.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_POLICY.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_POLICY_TYPE.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_POLICY_VALUE.java create mode 100644 idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java create mode 100644 idl/orb/extra/org/omg/CORBA/BooleanHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/Bounds.java create mode 100644 idl/orb/extra/org/omg/CORBA/ByteHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/CODESET_INCOMPATIBLE.java create mode 100644 idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java create mode 100644 idl/orb/extra/org/omg/CORBA/CharHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/CompletionStatus.java create mode 100644 idl/orb/extra/org/omg/CORBA/Context.java create mode 100644 idl/orb/extra/org/omg/CORBA/ContextList.java create mode 100644 idl/orb/extra/org/omg/CORBA/DATA_CONVERSION.java create mode 100644 idl/orb/extra/org/omg/CORBA/DoubleHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/DynamicImplementation.java create mode 100644 idl/orb/extra/org/omg/CORBA/Environment.java create mode 100644 idl/orb/extra/org/omg/CORBA/ExceptionList.java create mode 100644 idl/orb/extra/org/omg/CORBA/FREE_MEM.java create mode 100644 idl/orb/extra/org/omg/CORBA/FloatHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java create mode 100644 idl/orb/extra/org/omg/CORBA/INITIALIZE.java create mode 100644 idl/orb/extra/org/omg/CORBA/INTERNAL.java create mode 100644 idl/orb/extra/org/omg/CORBA/INTF_REPOS.java create mode 100644 idl/orb/extra/org/omg/CORBA/INVALID_TRANSACTION.java create mode 100644 idl/orb/extra/org/omg/CORBA/INV_FLAG.java create mode 100644 idl/orb/extra/org/omg/CORBA/INV_IDENT.java create mode 100644 idl/orb/extra/org/omg/CORBA/INV_OBJREF.java create mode 100644 idl/orb/extra/org/omg/CORBA/INV_POLICY.java create mode 100644 idl/orb/extra/org/omg/CORBA/IntHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/LocalInterface.java create mode 100644 idl/orb/extra/org/omg/CORBA/LocalObject.java create mode 100644 idl/orb/extra/org/omg/CORBA/LongHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/MARSHAL.java create mode 100644 idl/orb/extra/org/omg/CORBA/NO_IMPLEMENT.java create mode 100644 idl/orb/extra/org/omg/CORBA/NO_MEMORY.java create mode 100644 idl/orb/extra/org/omg/CORBA/NO_PERMISSION.java create mode 100644 idl/orb/extra/org/omg/CORBA/NO_RESOURCES.java create mode 100644 idl/orb/extra/org/omg/CORBA/NO_RESPONSE.java create mode 100644 idl/orb/extra/org/omg/CORBA/NVList.java create mode 100644 idl/orb/extra/org/omg/CORBA/NamedValue.java create mode 100644 idl/orb/extra/org/omg/CORBA/OBJECT_NOT_EXIST.java create mode 100644 idl/orb/extra/org/omg/CORBA/OBJ_ADAPTER.java create mode 100644 idl/orb/extra/org/omg/CORBA/ORB.java create mode 100644 idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/prop-base/InvalidName.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/text-base/InvalidName.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/ORBPackage/InvalidName.java create mode 100644 idl/orb/extra/org/omg/CORBA/Object.java create mode 100644 idl/orb/extra/org/omg/CORBA/ObjectHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/PERSIST_STORE.java create mode 100644 idl/orb/extra/org/omg/CORBA/PolicyError.java create mode 100644 idl/orb/extra/org/omg/CORBA/Principal.java create mode 100644 idl/orb/extra/org/omg/CORBA/PrincipalHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/Request.java create mode 100644 idl/orb/extra/org/omg/CORBA/ServerRequest.java create mode 100644 idl/orb/extra/org/omg/CORBA/ShortHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/StringHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/SystemException.java create mode 100644 idl/orb/extra/org/omg/CORBA/TIMEOUT.java create mode 100644 idl/orb/extra/org/omg/CORBA/TRANSACTION_REQUIRED.java create mode 100644 idl/orb/extra/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java create mode 100644 idl/orb/extra/org/omg/CORBA/TRANSIENT.java create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCode.java create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodeHelper.java create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodeHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/BadKind.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/Bounds.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/BadKind.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/Bounds.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/BadKind.java create mode 100644 idl/orb/extra/org/omg/CORBA/TypeCodePackage/Bounds.java create mode 100644 idl/orb/extra/org/omg/CORBA/UNKNOWN.java create mode 100644 idl/orb/extra/org/omg/CORBA/UnknownUserException.java create mode 100644 idl/orb/extra/org/omg/CORBA/UserException.java create mode 100644 idl/orb/extra/org/omg/CORBA/ValueBaseHelper.java create mode 100644 idl/orb/extra/org/omg/CORBA/ValueBaseHolder.java create mode 100644 idl/orb/extra/org/omg/CORBA/WrongTransaction.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ApplicationException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/BoxedValueHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/CustomValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IDLEntity.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IndirectionException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InvokeHandler.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ObjectImpl.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/OutputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/RemarshalException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ResponseHandler.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ServantObject.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Streamable.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/StreamableValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/UnknownException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueBase.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueFactory.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ApplicationException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/BoxedValueHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/CustomValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IDLEntity.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IndirectionException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InvokeHandler.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ObjectImpl.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/OutputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/RemarshalException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ResponseHandler.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ServantObject.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Streamable.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/StreamableValue.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/UnknownException.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueBase.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueFactory.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ApplicationException.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/BoxedValueHelper.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/CustomValue.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/Delegate.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/IDLEntity.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/IndirectionException.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/InputStream.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/InvokeHandler.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ObjectImpl.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/OutputStream.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/RemarshalException.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ResponseHandler.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ServantObject.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/Streamable.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/StreamableValue.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/UnknownException.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ValueBase.java create mode 100644 idl/orb/extra/org/omg/CORBA/portable/ValueFactory.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/.svn/prop-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/.svn/text-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/ORB.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/InputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/ObjectImpl.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/OutputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/InputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/ObjectImpl.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/OutputStream.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/Delegate.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/InputStream.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/ObjectImpl.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_3/portable/OutputStream.java create mode 100644 idl/orb/extra/org/omg/CORBA_2_5/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/CORBA_2_5/.svn/entries create mode 100644 idl/orb/extra/org/omg/CORBA_2_5/.svn/prop-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_5/.svn/text-base/ORB.java.svn-base create mode 100644 idl/orb/extra/org/omg/CORBA_2_5/ORB.java create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/entries create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/prop-base/DynamicImplementation.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/prop-base/Servant.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorLocalTie.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorOperations.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/text-base/DynamicImplementation.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/text-base/Servant.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorLocalTie.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorOperations.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/DynamicImplementation.java create mode 100644 idl/orb/extra/org/omg/PortableServer/Servant.java create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantHelper.java create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorLocalTie.java create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorOperations.java create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/entries create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHelper.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHolder.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java create mode 100644 idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java create mode 100644 idl/orb/extra/org/omg/PortableServer/portable/.svn/all-wcprops create mode 100644 idl/orb/extra/org/omg/PortableServer/portable/.svn/entries create mode 100644 idl/orb/extra/org/omg/PortableServer/portable/.svn/prop-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/portable/.svn/text-base/Delegate.java.svn-base create mode 100644 idl/orb/extra/org/omg/PortableServer/portable/Delegate.java create mode 100644 idl/properties.xml create mode 100644 lib/CompressionIdl.jar create mode 100644 lib/SecurityIdl.jar create mode 100644 lib/SendingContextIdl.jar create mode 100644 lib/bidirpolicyIdl.jar create mode 100644 lib/commIdl.jar create mode 100644 lib/core.jar create mode 100644 lib/dynAnyIdl.jar create mode 100644 lib/messagingIdl.jar create mode 100644 lib/namingIdl.jar create mode 100644 lib/orbIdl.jar create mode 100644 lib/tidorbj.jar create mode 100644 lib/timebaseIdl.jar create mode 100644 lib/tools.jar create mode 100644 lib/util.jar create mode 100644 properties.xml create mode 100644 source/.class/es/tid/PortableServer/POAManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/AnyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/BidirectionalPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/CodecFactoryImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/CodecImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ConfORB.class create mode 100644 source/.class/es/tid/TIDorbj/core/ContextImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ContextListImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/EnvironmentImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ExceptionListImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ForwardRequest.class create mode 100644 source/.class/es/tid/TIDorbj/core/NVListImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/NamedValueImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ORBComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/ORBServices.class create mode 100644 source/.class/es/tid/TIDorbj/core/ObjectImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ObjectKey.class create mode 100644 source/.class/es/tid/TIDorbj/core/ProcessingState.class create mode 100644 source/.class/es/tid/TIDorbj/core/PseudoObject.class create mode 100644 source/.class/es/tid/TIDorbj/core/RequestCounter.class create mode 100644 source/.class/es/tid/TIDorbj/core/RequestImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ServerRequestImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ShutdownThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/SingletonORB.class create mode 100644 source/.class/es/tid/TIDorbj/core/StreamRequestImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/TIDORB.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/AbsolutePosition.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/AlignmentOffset.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/BufferCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/CDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/CDRInputStream.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/CDROutputStream.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/ChunkCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/ContextCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/Encapsulation.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/IndirectionNode.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/IteratorCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/MarkCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/PointerCDR.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/PositionsNode.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/TypeCodeReader.class create mode 100644 source/.class/es/tid/TIDorbj/core/cdr/ValueTypeInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/CommunicationDelegate.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/CommunicationException.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/CommunicationLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/CommunicationManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/Connection.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ForwardRequest.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/LayerInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/LocateResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/PropertyInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/RequestDispatcher.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPHeader.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/GIOPVersion.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/MessageFactory.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/MsgType.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/RequestId.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContext.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextList.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ServiceId.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/CommLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ConnectionState.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ListenPoint.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/Lock.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/LockList.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/OpeningLock.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/ServerListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/TargetAddress.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/local/LocalCommLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/local/LocalServerRequest.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/compression/CompressionManagerImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/compression/CompressorImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/CSIComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/DefaultIOR.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/IOR$1.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/IOR.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/ORBComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/SSLComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/TaggedComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/TaggedComponentReader.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/TaggedProfile.class create mode 100644 source/.class/es/tid/TIDorbj/core/iop/TaggedProfileReader.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMILock.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMILockEnumeration.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMILockList.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMIManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMIManagerConf.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMIThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/AMIThreadPool.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/PoliciesComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/QoS.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/ThreadStateListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMElement.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMEnumeration.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/CompletionWaiter.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/CurrentImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/CurrentInfo.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ExecThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/OID.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAKey.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAManagerConf.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAManagerConfListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAManagerImpl$EtherealizerThread.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/POAManagerImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/PriorityRequestComparator.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/QueueReaderManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/QueuedRequest.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/QueuedResponseHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/RequestQueue.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ServantDelegate.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/SystemOID.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/TemporalRequestComparator.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ThreadPool.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/ThreadStateListener.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/PolicyContext.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/PolicyContextManager.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/PolicyFactory.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/PolicyManagerImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/policy/UnsuportedPolicy.class create mode 100644 source/.class/es/tid/TIDorbj/core/security/CSIComponent.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/AliasTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ArrayTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ComplexTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/EnumTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/FixedTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/NativeTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/SequenceTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/StringTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/StructTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeCache.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeDumper.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeFactory.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeHandler.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/UnionTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/ValueTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/typecode/WStringTypeCode.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/CodeBaseURL.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/Corbaloc.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/Corbaname.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/Counter.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/DestructionState.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/EnumHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/FixedHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/FullUseTableException.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/HashedLinkedList.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/InitialReference.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/LinkedList$LinkedListEnumeration.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/LinkedList.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/Mutex.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/OperationCompletion.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/RemovableObject.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/RepositoryId.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/StringHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/ULongHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/ULongLongHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/UShortHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/UseTable.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/UserSystemExceptionEncoder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/ValueHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/WCharHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/WStringHolder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.class create mode 100644 source/.class/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/core/ziop/ZIOP.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynAnyBase.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynAnyImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynAnyWithAny.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynArrayImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynComposite.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynEnumImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynExceptImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynFixedImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynSequenceImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynSingleton.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynStructBase.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynStructImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynUnionImpl.class create mode 100644 source/.class/es/tid/TIDorbj/dynAny/DynValueImpl.class create mode 100644 source/.cvsignore create mode 100644 source/.svn/all-wcprops create mode 100644 source/.svn/dir-prop-base create mode 100644 source/.svn/entries create mode 100644 source/.svn/prop-base/.cvsignore.svn-base create mode 100644 source/.svn/prop-base/build.xml.svn-base create mode 100644 source/.svn/prop-base/properties.xml.svn-base create mode 100644 source/.svn/text-base/.cvsignore.svn-base create mode 100644 source/.svn/text-base/build.xml.svn-base create mode 100644 source/.svn/text-base/properties.xml.svn-base create mode 100644 source/build.xml create mode 100644 source/es/.svn/all-wcprops create mode 100644 source/es/.svn/entries create mode 100644 source/es/tid/.svn/all-wcprops create mode 100644 source/es/tid/.svn/entries create mode 100644 source/es/tid/PortableServer/.svn/all-wcprops create mode 100644 source/es/tid/PortableServer/.svn/entries create mode 100644 source/es/tid/PortableServer/.svn/prop-base/POAManager.java.svn-base create mode 100644 source/es/tid/PortableServer/.svn/text-base/POAManager.java.svn-base create mode 100644 source/es/tid/PortableServer/POAManager.java create mode 100644 source/es/tid/TIDorbj/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/AnyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/BidirectionalPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/CodecFactoryImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/CodecImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ConfORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ContextImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ContextListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/EnvironmentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ExceptionListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ForwardRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/NVListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/NamedValueImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ORBComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ORBServices.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ObjectImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ObjectKey.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ProcessingState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/PseudoObject.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/RequestCounter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/RequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ServerRequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/ShutdownThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/SingletonORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/StreamRequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/prop-base/TIDORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/AnyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/BidirectionalPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/CodecFactoryImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/CodecImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ConfORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ContextImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ContextListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/EnvironmentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ExceptionListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ForwardRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/NVListImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/NamedValueImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ORBComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ORBServices.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ObjectImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ObjectKey.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ProcessingState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/PseudoObject.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/RequestCounter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/RequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ServerRequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/ShutdownThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/SingletonORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/StreamRequestImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/text-base/TIDORB.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/.svn/tmp/TIDORB.java.tmp create mode 100644 source/es/tid/TIDorbj/core/.svn/tmp/tempfile.2.tmp create mode 100644 source/es/tid/TIDorbj/core/.svn/tmp/tempfile.tmp create mode 100644 source/es/tid/TIDorbj/core/AnyImpl.java create mode 100644 source/es/tid/TIDorbj/core/BidirectionalPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/CodecFactoryImpl.java create mode 100644 source/es/tid/TIDorbj/core/CodecImpl.java create mode 100644 source/es/tid/TIDorbj/core/ConfORB.java create mode 100644 source/es/tid/TIDorbj/core/ContextImpl.java create mode 100644 source/es/tid/TIDorbj/core/ContextListImpl.java create mode 100644 source/es/tid/TIDorbj/core/EnvironmentImpl.java create mode 100644 source/es/tid/TIDorbj/core/ExceptionListImpl.java create mode 100644 source/es/tid/TIDorbj/core/ForwardRequest.java create mode 100644 source/es/tid/TIDorbj/core/NVListImpl.java create mode 100644 source/es/tid/TIDorbj/core/NamedValueImpl.java create mode 100644 source/es/tid/TIDorbj/core/ORBComponent.java create mode 100644 source/es/tid/TIDorbj/core/ORBServices.java create mode 100644 source/es/tid/TIDorbj/core/ObjectImpl.java create mode 100644 source/es/tid/TIDorbj/core/ObjectKey.java create mode 100644 source/es/tid/TIDorbj/core/ProcessingState.java create mode 100644 source/es/tid/TIDorbj/core/PseudoObject.java create mode 100644 source/es/tid/TIDorbj/core/RequestCounter.java create mode 100644 source/es/tid/TIDorbj/core/RequestImpl.java create mode 100644 source/es/tid/TIDorbj/core/ServerRequestImpl.java create mode 100644 source/es/tid/TIDorbj/core/ShutdownThread.java create mode 100644 source/es/tid/TIDorbj/core/SingletonORB.java create mode 100644 source/es/tid/TIDorbj/core/StreamRequestImpl.java create mode 100644 source/es/tid/TIDorbj/core/TIDORB.java create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AbsolutePosition.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AlignmentOffset.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/BufferCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDRInputStream.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDROutputStream.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ChunkCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ContextCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/Encapsulation.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IndirectionNode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IteratorCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/MarkCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PointerCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PositionsNode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/TypeCodeReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ValueTypeInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/AbsolutePosition.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/AlignmentOffset.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/BufferCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDRInputStream.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDROutputStream.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/ChunkCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/ContextCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/Encapsulation.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/IndirectionNode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/IteratorCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/MarkCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/PointerCDR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/PositionsNode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/TypeCodeReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/.svn/text-base/ValueTypeInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/cdr/AbsolutePosition.java create mode 100644 source/es/tid/TIDorbj/core/cdr/AlignmentOffset.java create mode 100644 source/es/tid/TIDorbj/core/cdr/BufferCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/CDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/CDRInputStream.java create mode 100644 source/es/tid/TIDorbj/core/cdr/CDROutputStream.java create mode 100644 source/es/tid/TIDorbj/core/cdr/ChunkCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/ContextCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/Encapsulation.java create mode 100644 source/es/tid/TIDorbj/core/cdr/IndirectionNode.java create mode 100644 source/es/tid/TIDorbj/core/cdr/IteratorCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/MarkCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/PointerCDR.java create mode 100644 source/es/tid/TIDorbj/core/cdr/PositionsNode.java create mode 100644 source/es/tid/TIDorbj/core/cdr/TypeCodeReader.java create mode 100644 source/es/tid/TIDorbj/core/cdr/ValueTypeInfo.java create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationException.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/ForwardRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/LocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/PropertyInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/RequestDispatcher.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/prop-base/ResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationException.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/Connection.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/ForwardRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/LocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/PropertyInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/RequestDispatcher.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/.svn/text-base/ResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/CommunicationDelegate.java create mode 100644 source/es/tid/TIDorbj/core/comm/CommunicationException.java create mode 100644 source/es/tid/TIDorbj/core/comm/CommunicationLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/CommunicationManager.java create mode 100644 source/es/tid/TIDorbj/core/comm/Connection.java create mode 100644 source/es/tid/TIDorbj/core/comm/Connection.java~ create mode 100644 source/es/tid/TIDorbj/core/comm/ForwardRequest.java create mode 100644 source/es/tid/TIDorbj/core/comm/LocateResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/PropertyInfo.java create mode 100644 source/es/tid/TIDorbj/core/comm/RequestDispatcher.java create mode 100644 source/es/tid/TIDorbj/core/comm/ResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/AddressingDisposition.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/BiDirServiceContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPCancelRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentedMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPHeader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateReplyMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPReplyMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPVersion.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/InvocationPoliciesContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/LocateReplyStatusType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MessageFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MsgType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ReplyStatusType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/RequestId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ZIOPMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/AddressingDisposition.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/BiDirServiceContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPCancelRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentedMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPHeader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateReplyMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPReplyMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPRequestMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPVersion.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/InvocationPoliciesContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/LocateReplyStatusType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MessageFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MsgType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ReplyStatusType.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/RequestId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ZIOPMessage.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPHeader.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/GIOPVersion.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/MessageFactory.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/MsgType.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/RequestId.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ServiceContext.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ServiceContextList.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ServiceId.java create mode 100644 source/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionWriteMonitor.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/FragmentedMessageHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnection.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnectionManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCorbaloc.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPIOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPProfile.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IORAddressingInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ListenPoint.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/Lock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockEnumeration.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/OpeningLock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/RECOVERABLE_COMM_FAILURE.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ReliableOnewayThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ServerListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/TargetAddress.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/WriteTimeout.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionWriteMonitor.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/FragmentedMessageHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnection.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnectionManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCorbaloc.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPIOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPProfile.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IORAddressingInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ListenPoint.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/Lock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockEnumeration.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/OpeningLock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/RECOVERABLE_COMM_FAILURE.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ReliableOnewayThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ServerListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/TargetAddress.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/WriteTimeout.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/CommLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ConnectionState.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ListenPoint.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/Lock.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/LockList.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/OpeningLock.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/ServerListener.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/TargetAddress.java create mode 100644 source/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.java create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/AMILocalResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalCommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalServerRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/text-base/AMILocalResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalCommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalServerRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/local/LocalCommLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/local/LocalServerRequest.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLConnection.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayer.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayerPropertiesInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCorbaloc.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLServerListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.java create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressionManagerImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorFactoryImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/compression/.svn/text-base/ZlibCompressorImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/compression/CompressionManagerImpl.java create mode 100644 source/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.java create mode 100644 source/es/tid/TIDorbj/core/compression/CompressorImpl.java create mode 100644 source/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.java create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/DefaultIOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/IOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/ORBComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/ProfileMultipleComponents.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponentReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfile.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfileReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/CSIComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/DefaultIOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/IOR.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/ORBComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/ProfileMultipleComponents.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/SSLComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponentReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfile.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfileReader.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/iop/CSIComponent.java create mode 100644 source/es/tid/TIDorbj/core/iop/DefaultIOR.java create mode 100644 source/es/tid/TIDorbj/core/iop/IOR.java create mode 100644 source/es/tid/TIDorbj/core/iop/ORBComponent.java create mode 100644 source/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.java create mode 100644 source/es/tid/TIDorbj/core/iop/SSLComponent.java create mode 100644 source/es/tid/TIDorbj/core/iop/TaggedComponent.java create mode 100644 source/es/tid/TIDorbj/core/iop/TaggedComponentReader.java create mode 100644 source/es/tid/TIDorbj/core/iop/TaggedProfile.java create mode 100644 source/es/tid/TIDorbj/core/iop/TaggedProfileReader.java create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockEnumeration.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConf.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConfListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThreadPool.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/PoliciesComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QoS.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QueueOrderPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RebindPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRequestTimeoutPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestEndTimePolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestPriorityPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestStartTimePolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/ThreadStateListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/prop-base/_ExceptionHolderImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILock.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILockEnumeration.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILockList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManagerConf.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManagerConfListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThreadPool.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/PoliciesComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/QoS.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/QueueOrderPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RebindPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRequestTimeoutPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestEndTimePolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestPriorityPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestStartTimePolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/ThreadStateListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/.svn/text-base/_ExceptionHolderImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/messaging/AMILock.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMILockEnumeration.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMILockList.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMIManager.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMIManagerConf.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMIThread.java create mode 100644 source/es/tid/TIDorbj/core/messaging/AMIThreadPool.java create mode 100644 source/es/tid/TIDorbj/core/messaging/PoliciesComponent.java create mode 100644 source/es/tid/TIDorbj/core/messaging/QoS.java create mode 100644 source/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/messaging/ThreadStateListener.java create mode 100644 source/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/ActiveObjectMap.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/CompletionWaiter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/DeadlineRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/ExecThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/OID.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAKey.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConf.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConfListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/PriorityRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueueReaderManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/RequestQueue.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/ServantDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/SystemOID.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/TemporalRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadPool.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadStateListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/ActiveObjectMap.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/CompletionWaiter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentInfo.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/DeadlineRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/ExecThread.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/OID.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/POAImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/POAKey.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConf.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConfListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/PriorityRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/QueueReaderManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedLocateResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedRequest.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedResponseHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/RequestQueue.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/ServantDelegate.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/SystemOID.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/TemporalRequestComparator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadPool.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadStateListener.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/ActiveObjectMap.java create mode 100644 source/es/tid/TIDorbj/core/poa/CompletionWaiter.java create mode 100644 source/es/tid/TIDorbj/core/poa/CurrentImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/CurrentInfo.java create mode 100644 source/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.java create mode 100644 source/es/tid/TIDorbj/core/poa/ExecThread.java create mode 100644 source/es/tid/TIDorbj/core/poa/OID.java create mode 100644 source/es/tid/TIDorbj/core/poa/POAImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/POAKey.java create mode 100644 source/es/tid/TIDorbj/core/poa/POAManagerConf.java create mode 100644 source/es/tid/TIDorbj/core/poa/POAManagerConfListener.java create mode 100644 source/es/tid/TIDorbj/core/poa/POAManagerImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/PriorityRequestComparator.java create mode 100644 source/es/tid/TIDorbj/core/poa/QueueReaderManager.java create mode 100644 source/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/poa/QueuedRequest.java create mode 100644 source/es/tid/TIDorbj/core/poa/QueuedResponseHandler.java create mode 100644 source/es/tid/TIDorbj/core/poa/RequestQueue.java create mode 100644 source/es/tid/TIDorbj/core/poa/ServantDelegate.java create mode 100644 source/es/tid/TIDorbj/core/poa/SystemOID.java create mode 100644 source/es/tid/TIDorbj/core/poa/TemporalRequestComparator.java create mode 100644 source/es/tid/TIDorbj/core/poa/ThreadPool.java create mode 100644 source/es/tid/TIDorbj/core/poa/ThreadStateListener.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdAssignmentPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdUniquenessPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ImplicitActivationPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/LifespanPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/RequestProcessingPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ServantRetentionPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ThreadPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdAssignmentPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdUniquenessPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ImplicitActivationPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/LifespanPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/RequestProcessingPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ServantRetentionPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ThreadPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContextManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyCurrentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyManagerImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/prop-base/UnsuportedPolicy.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContext.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContextManager.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyCurrentImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyManagerImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/.svn/text-base/UnsuportedPolicy.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/policy/PolicyContext.java create mode 100644 source/es/tid/TIDorbj/core/policy/PolicyContextManager.java create mode 100644 source/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.java create mode 100644 source/es/tid/TIDorbj/core/policy/PolicyFactory.java create mode 100644 source/es/tid/TIDorbj/core/policy/PolicyManagerImpl.java create mode 100644 source/es/tid/TIDorbj/core/policy/UnsuportedPolicy.java create mode 100644 source/es/tid/TIDorbj/core/security/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/security/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/security/.svn/text-base/CSIComponent.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/security/CSIComponent.java create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AbstractInterfaceTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AliasTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ArrayTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ComplexTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/EnumTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ExceptionTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/FixedTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/NativeTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ObjectRefTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/RecursiveTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/SequenceTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StringTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StructTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TransparentAliasTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeCache.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeDumper.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeMarshaler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/UnionTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueBoxTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/prop-base/WStringTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/AbstractInterfaceTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/AliasTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ArrayTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ComplexTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/EnumTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ExceptionTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/FixedTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/NativeTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ObjectRefTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/RecursiveTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/SequenceTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/StringTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/StructTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TransparentAliasTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeCache.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeDumper.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeFactory.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeHandler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeMarshaler.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/UnionTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueBoxTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/.svn/text-base/WStringTypeCode.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/AliasTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ArrayTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ComplexTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/EnumTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/FixedTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/NativeTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/SequenceTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/StringTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/StructTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeCache.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeDumper.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeFactory.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeHandler.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeImpl.java create mode 100644 source/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.java create mode 100644 source/es/tid/TIDorbj/core/typecode/UnionTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/ValueTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/typecode/WStringTypeCode.java create mode 100644 source/es/tid/TIDorbj/core/util/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/util/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/AbstractInterfaceHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/BoxedValueHelperFinder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/CodeBaseURL.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaloc.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaname.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/Counter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/DestructionState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/EnumHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/FixedHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/FullUseTableException.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/HashedLinkedList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/InitialReference.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/LinkedList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/Mutex.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/OnlyOneThreadCanWait.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/OperationCompletion.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/RemovableObject.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/RepositoryId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/StringHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongLongHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/UShortHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/UseTable.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/UserExceptionEncoder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/ValueHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/WCharHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/prop-base/WStringHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/AbstractInterfaceHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/BoxedValueHelperFinder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/CodeBaseURL.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaloc.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaname.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/Counter.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/DestructionState.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/EnumHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/FixedHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/FullUseTableException.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/HashedLinkedList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/InitialReference.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/LinkedList.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/Mutex.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/OnlyOneThreadCanWait.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/OperationCompletion.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/RemovableObject.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/RepositoryId.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/StringHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/ULongHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/ULongLongHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/UShortHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/UseTable.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/UserExceptionEncoder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/ValueHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/WCharHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/.svn/text-base/WStringHolder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.java create mode 100644 source/es/tid/TIDorbj/core/util/CodeBaseURL.java create mode 100644 source/es/tid/TIDorbj/core/util/Corbaloc.java create mode 100644 source/es/tid/TIDorbj/core/util/Corbaname.java create mode 100644 source/es/tid/TIDorbj/core/util/Counter.java create mode 100644 source/es/tid/TIDorbj/core/util/DestructionState.java create mode 100644 source/es/tid/TIDorbj/core/util/EnumHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/FixedHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/FullUseTableException.java create mode 100644 source/es/tid/TIDorbj/core/util/HashedLinkedList.java create mode 100644 source/es/tid/TIDorbj/core/util/InitialReference.java create mode 100644 source/es/tid/TIDorbj/core/util/LinkedList.java create mode 100644 source/es/tid/TIDorbj/core/util/Mutex.java create mode 100644 source/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.java create mode 100644 source/es/tid/TIDorbj/core/util/OperationCompletion.java create mode 100644 source/es/tid/TIDorbj/core/util/RemovableObject.java create mode 100644 source/es/tid/TIDorbj/core/util/RepositoryId.java create mode 100644 source/es/tid/TIDorbj/core/util/StringHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/ULongHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/ULongLongHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/UShortHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/UseTable.java create mode 100644 source/es/tid/TIDorbj/core/util/UserExceptionEncoder.java create mode 100644 source/es/tid/TIDorbj/core/util/ValueHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/WCharHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/WStringHolder.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_CONTEXT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_INV_ORDER_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_OPERATION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_PARAM_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_TYPECODE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/COMM_FAILURE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/DATA_CONVERSION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/FREE_MEM_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/IMP_LIMIT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INITIALIZE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTERNAL_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTF_REPOS_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INVALID_TRANSACTION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_FLAG_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_IDENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_OBJREF_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_POLICY_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/MARSHAL_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/Makefile.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_IMPLEMENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_MEMORY_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_PERMISSION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESOURCES_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESPONSE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJECT_NOT_EXIST_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJ_ADAPTER_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/PERSIST_STORE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionCreator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionEncoder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionNames.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TIMEOUT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_REQUIRED_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSIENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/UNKNOWN_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_CONTEXT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_INV_ORDER_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_OPERATION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_PARAM_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_TYPECODE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/COMM_FAILURE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/DATA_CONVERSION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/FREE_MEM_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/IMP_LIMIT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INITIALIZE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTERNAL_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTF_REPOS_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INVALID_TRANSACTION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_FLAG_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_IDENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_OBJREF_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_POLICY_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/MARSHAL_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/Makefile.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_IMPLEMENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_MEMORY_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_PERMISSION_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESOURCES_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESPONSE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJECT_NOT_EXIST_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJ_ADAPTER_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/PERSIST_STORE_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionCreator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionEncoder.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionNames.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TIMEOUT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_REQUIRED_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSIENT_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/.svn/text-base/UNKNOWN_Creator.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/Makefile create mode 100644 source/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.java create mode 100644 source/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.java create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/entries create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/prop-base/ZIOP.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionEnablingPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionLowValuePolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionMinRatioPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressorIdLevelListPolicyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/.svn/text-base/ZIOP.java.svn-base create mode 100644 source/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.java create mode 100644 source/es/tid/TIDorbj/core/ziop/ZIOP.java create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/all-wcprops create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/entries create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyBase.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyFactoryImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyWithAny.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynArrayImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynComposite.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynEnumImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynExceptImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynFixedImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSequenceImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSingleton.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructBase.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynUnionImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynValueImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyBase.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyFactoryImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyWithAny.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynArrayImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynComposite.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynEnumImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynExceptImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynFixedImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSequenceImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSingleton.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructBase.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynUnionImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/.svn/text-base/DynValueImpl.java.svn-base create mode 100644 source/es/tid/TIDorbj/dynAny/DynAnyBase.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynAnyImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynAnyWithAny.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynArrayImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynComposite.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynEnumImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynExceptImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynFixedImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynSequenceImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynSingleton.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynStructBase.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynStructImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynUnionImpl.java create mode 100644 source/es/tid/TIDorbj/dynAny/DynValueImpl.java create mode 100644 source/properties.xml create mode 100644 tools/.class/es/tid/TIDorbj/tools/PrintIOR.class create mode 100644 tools/.cvsignore create mode 100644 tools/.svn/all-wcprops create mode 100644 tools/.svn/dir-prop-base create mode 100644 tools/.svn/entries create mode 100644 tools/.svn/prop-base/.cvsignore.svn-base create mode 100644 tools/.svn/prop-base/build.xml.svn-base create mode 100644 tools/.svn/prop-base/properties.xml.svn-base create mode 100644 tools/.svn/text-base/.cvsignore.svn-base create mode 100644 tools/.svn/text-base/build.xml.svn-base create mode 100644 tools/.svn/text-base/properties.xml.svn-base create mode 100644 tools/build.xml create mode 100644 tools/es/.svn/all-wcprops create mode 100644 tools/es/.svn/entries create mode 100644 tools/es/tid/.svn/all-wcprops create mode 100644 tools/es/tid/.svn/entries create mode 100644 tools/es/tid/TIDorbj/.svn/all-wcprops create mode 100644 tools/es/tid/TIDorbj/.svn/entries create mode 100644 tools/es/tid/TIDorbj/tools/.svn/all-wcprops create mode 100644 tools/es/tid/TIDorbj/tools/.svn/entries create mode 100644 tools/es/tid/TIDorbj/tools/.svn/prop-base/PrintIOR.java.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/prop-base/startClient.sh.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/prop-base/startServer.sh.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/Echo.idl.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/EchoClient.java.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/EchoServer.java.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/MyEchoTestImpl.java.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/PrintIOR.java.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/build.xml.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/startClient.sh.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/.svn/text-base/startServer.sh.svn-base create mode 100644 tools/es/tid/TIDorbj/tools/PrintIOR.java create mode 100644 tools/properties.xml create mode 100644 util/.class/es/tid/TIDorbj/util/AlreadyActivatedException.class create mode 100644 util/.class/es/tid/TIDorbj/util/AlreadyDeactivatedException.class create mode 100644 util/.class/es/tid/TIDorbj/util/Base16Codec.class create mode 100644 util/.class/es/tid/TIDorbj/util/Base64Codec.class create mode 100644 util/.class/es/tid/TIDorbj/util/CannotProceedException.class create mode 100644 util/.class/es/tid/TIDorbj/util/CircularTraceFile.class create mode 100644 util/.class/es/tid/TIDorbj/util/InvalidTraceLevelException.class create mode 100644 util/.class/es/tid/TIDorbj/util/NoFileEspecifiedException.class create mode 100644 util/.class/es/tid/TIDorbj/util/NotActivatedException.class create mode 100644 util/.class/es/tid/TIDorbj/util/OutputStreamWrapper.class create mode 100644 util/.class/es/tid/TIDorbj/util/SystemProperties.class create mode 100644 util/.class/es/tid/TIDorbj/util/Trace.class create mode 100644 util/.class/es/tid/TIDorbj/util/TranslateURLEscapes.class create mode 100644 util/.class/es/tid/TIDorbj/util/UTC.class create mode 100644 util/.cvsignore create mode 100644 util/.svn/all-wcprops create mode 100644 util/.svn/dir-prop-base create mode 100644 util/.svn/entries create mode 100644 util/.svn/prop-base/.cvsignore.svn-base create mode 100644 util/.svn/prop-base/build.xml.svn-base create mode 100644 util/.svn/prop-base/properties.xml.svn-base create mode 100644 util/.svn/text-base/.cvsignore.svn-base create mode 100644 util/.svn/text-base/build.xml.svn-base create mode 100644 util/.svn/text-base/properties.xml.svn-base create mode 100644 util/build.xml create mode 100644 util/es/.svn/all-wcprops create mode 100644 util/es/.svn/entries create mode 100644 util/es/tid/.svn/all-wcprops create mode 100644 util/es/tid/.svn/entries create mode 100644 util/es/tid/TIDorbj/.svn/all-wcprops create mode 100644 util/es/tid/TIDorbj/.svn/entries create mode 100644 util/es/tid/TIDorbj/util/.svn/all-wcprops create mode 100644 util/es/tid/TIDorbj/util/.svn/entries create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyActivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyDeactivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/Base16Codec.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/Base64Codec.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/CannotProceedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/CircularTraceFile.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/InvalidTraceLevelException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/NoFileEspecifiedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/NotActivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/OutputStreamWrapper.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/SystemProperties.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/Trace.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/TranslateURLEscapes.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/prop-base/UTC.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/AlreadyActivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/AlreadyDeactivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/Base16Codec.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/Base64Codec.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/CannotProceedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/CircularTraceFile.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/InvalidTraceLevelException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/NoFileEspecifiedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/NotActivatedException.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/OutputStreamWrapper.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/SystemProperties.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/Trace.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/TranslateURLEscapes.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/.svn/text-base/UTC.java.svn-base create mode 100644 util/es/tid/TIDorbj/util/AlreadyActivatedException.java create mode 100644 util/es/tid/TIDorbj/util/AlreadyDeactivatedException.java create mode 100644 util/es/tid/TIDorbj/util/Base16Codec.java create mode 100644 util/es/tid/TIDorbj/util/Base64Codec.java create mode 100644 util/es/tid/TIDorbj/util/CannotProceedException.java create mode 100644 util/es/tid/TIDorbj/util/CircularTraceFile.java create mode 100644 util/es/tid/TIDorbj/util/InvalidTraceLevelException.java create mode 100644 util/es/tid/TIDorbj/util/NoFileEspecifiedException.java create mode 100644 util/es/tid/TIDorbj/util/NotActivatedException.java create mode 100644 util/es/tid/TIDorbj/util/OutputStreamWrapper.java create mode 100644 util/es/tid/TIDorbj/util/SystemProperties.java create mode 100644 util/es/tid/TIDorbj/util/Trace.java create mode 100644 util/es/tid/TIDorbj/util/TranslateURLEscapes.java create mode 100644 util/es/tid/TIDorbj/util/UTC.java create mode 100644 util/properties.xml diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..f06da07 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,16 @@ +This is the list of people who have been involved in the development of +TIDorbJ: + +Juan J. Hierro +Juan A. Caceres +Pablo Rodriguez Archilla +Fabio Garcia Solero +Manuel Castro +Luis de la Fuente +Juan Pablo Rojas +Sergio Checa Blanco +Alvaro Vega Garcia +Irenka Redondo Grandados +Jose Alberto Garcia Daniel +Alvaro Polo Valdenebro +Maria Cruz Pajares diff --git a/BUGS b/BUGS new file mode 100644 index 0000000..e512e6b --- /dev/null +++ b/BUGS @@ -0,0 +1,2 @@ +This document has been moved to MORFEO Forge (which is online at +https://forge.morfeo-project.org/tracker/?atid=109&group_id=8&func=browse diff --git a/BUILT b/BUILT new file mode 100644 index 0000000..b6ad40d --- /dev/null +++ b/BUILT @@ -0,0 +1,21 @@ +This release of TIDorbJ was built on a machine with kernel: +Linux dacha 2.6.21-2-686 #1 SMP Wed Jul 11 03:53:02 UTC 2007 i686 GNU/Linux + +using the compiler: +java version "1.5.0_14" +Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03) +Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing) + +kernel source package used: +linux-source-2.6.21 i686 + +applied kernel patches: +linux-image-2.6.21-2-686 2.6.21-6 + +using the following libraries: +ant 1.7.0-6 +javacc 4.0+cvs20080403-1 +libxerces27 2.7.0-5 +libxalan110 1.10-3.2 +libjaxp1.3-java 1.3.04-3 +TIDIdlc 1.3.7 diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..4cacaf5 --- /dev/null +++ b/COPYING @@ -0,0 +1,390 @@ +http://www.morfeo-project.org + +Component: TIDorbJ +Programming Language: Java + + (C) Copyright 2004 Telefónica Investigación y Desarrollo + S.A.Unipersonal (Telefónica I+D) + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + If you want to use this software an plan to distribute a + proprietary application in any way, and you are not licensing and + distributing your source code under GPL, you probably need to + purchase a commercial license of the product. More info about + licensing options is available at: + + http://www.morfeo-project.org/TIDorbJ/Licensing + + + ******************************** + * GNU General Public License * + ******************************** + + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble +======== + +The licenses for most software are designed to take away your freedom +to share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have +the freedom to distribute copies of free software (and charge for this +service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone +to deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must give the recipients all the rights that you +have. You must make sure that they, too, receive or can get the source +code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent +must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed + under the terms of this General Public License. The "Program", + below, refers to any such program or work, and a "work based on + the Program" means either the Program or any derivative work under + copyright law: that is to say, a work containing the Program or a + portion of it, either verbatim or with modifications and/or + translated into another language. (Hereinafter, translation is + included without limitation in the term "modification".) Each + licensee is addressed as "you". + + Activities other than copying, distribution and modification are + not covered by this License; they are outside its scope. The act + of running the Program is not restricted, and the output from the + Program is covered only if its contents constitute a work based on + the Program (independent of having been made by running the + Program). Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any + warranty; and give any other recipients of the Program a copy of + this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange + for a fee. + + 2. You may modify your copy or copies of the Program or any portion + of it, thus forming a work based on the Program, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a. You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b. You must cause any work that you distribute or publish, that + in whole or in part contains or is derived from the Program + or any part thereof, to be licensed as a whole at no charge + to all third parties under the terms of this License. + + c. If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display + an announcement including an appropriate copyright notice and + a notice that there is no warranty (or else, saying that you + provide a warranty) and that users may redistribute the + program under these conditions, and telling the user how to + view a copy of this License. (Exception: if the Program + itself is interactive but does not normally print such an + announcement, your work based on the Program is not required + to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and separate + works in themselves, then this License, and its terms, do not + apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a + whole which is a work based on the Program, the distribution of + the whole must be on the terms of this License, whose permissions + for other licensees extend to the entire whole, and thus to each + and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Program. + + In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) on + a volume of a storage or distribution medium does not bring the + other work under the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you also do one of the + following: + + a. Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Sections 1 and 2 above on a medium customarily used for + software interchange; or, + + b. Accompany it with a written offer, valid for at least three + years, to give any third-party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + + c. Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with + such an offer, in accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete + source code means all the source code for all modules it contains, + plus any associated interface definition files, plus the scripts + used to control compilation and installation of the executable. + However, as a special exception, the source code distributed need + not include anything that is normally distributed (in either + source or binary form) with the major components (compiler, + kernel, and so on) of the operating system on which the executable + runs, unless that component itself accompanies the executable. + + If distribution of executable or object code is made by offering + access to copy from a designated place, then offering equivalent + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify + or distribute the Program or its derivative works. These actions + are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Program (or any work + based on the Program), you indicate your acceptance of this + License to do so, and all its terms and conditions for copying, + distributing or modifying the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program + subject to these terms and conditions. You may not impose any + further restrictions on the recipients' exercise of the rights + granted herein. You are not responsible for enforcing compliance + by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent + issues), conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot distribute so as to satisfy simultaneously + your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the + Program at all. For example, if a patent license would not permit + royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only + way you could satisfy both it and this License would be to refrain + entirely from distribution of the Program. + + If any portion of this section is held invalid or unenforceable + under any particular circumstance, the balance of the section is + intended to apply and the section as a whole is intended to apply + in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of + any such claims; this section has the sole purpose of protecting + the integrity of the free software distribution system, which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is + willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed + to be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, + the original copyright holder who places the Program under this + License may add an explicit geographical distribution limitation + excluding those countries, so that distribution is permitted only + in or among countries not thus excluded. In such case, this + License incorporates the limitation as if written in the body of + this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies a version number of this License which applies + to it and "any later version", you have the option of following + the terms and conditions either of that version or of any later + version published by the Free Software Foundation. If the Program + does not specify a version number of this License, you may choose + any version ever published by the Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted + by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision + will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing + and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU + OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY + OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs +============================================= + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YYYY NAME OF AUTHOR + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + SIGNATURE OF TY COON, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, +you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Library General Public License instead of this License. \ No newline at end of file diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000..c568364 --- /dev/null +++ b/CREDITS @@ -0,0 +1,299 @@ +MORFEO PROJECT CREDITS +********************** + + This is a partial credits-file of people who contributes or has + contributed to the Morfeo project. It follows a similar structure + to that of the Linux credits-file. It is sorted by name, and + formatted in a way that allows for easy grepping and beautification + by scripts. The fields are: name (N), email (E), web-address (W), + PGP key ID and fingerprint (P), description (D) and name of + company/organization plus snail-mail address (S). All the fields + are mandatory even if they are empty. + + Thanks, + + Juanjo Hierro + +------------ + + + +N: Juan A. Cáceres +E: caceres@tid.es +W: +P: +D: Juan is software Architect and developer of TIDorb, the Web Services and EJB +D: Container as well as some CORBA Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Manuel Castro +E: mcp219@tid.es +W: +P: +D: Manuel was software developer of TIDIdlc and TIDorb for Java. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Francisco Checa +E: franc@tid.es +W: +P: +D: Fran is software developer of TIDorb. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: Parque Tecnológico de Boecillo parcelas 118-119-120 +S: 47151 Boecillo (Valladolid) +S: Spain + +N: Luis de la Fuente +E: fgs07@tid.es +W: +P: +D: Luis was software developer of TIDorb for Java and some CORBA services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Rafael Fernández Gallego +E: rfdez@pegaso.ls.fi.upm.es +W: +P: +D: Rafael has participated in the design and the development of the original +D: Morfeo Project Web site. He is the Morfeo Project webmaster. +S: +S: Facultad de Informática +S: Universidad Politécnica de Madrid (UPM) +S: Campus de Montegancedo +S: 28660 Boadilla del Monte (Madrid) +S: Spain + +N: Javier Fernádez Mejuto +E: mejuto@tid.es +W: +P: +D: Javier was the first software Architect and developer of TIDIdlc for Java, also he +D: was software developer of TIDorb for Java. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Julio García-Otero +E: joulsgo@gmail.com +W: +P: +D: Julio has participated in design of the Web Services container and +D: performed some of the auxiliary tasks needed to launch the Morfeo +D: Project Community. +D: +S: + +N: Fabio García Solero +E: fgs07@tid.es +W: +P: +D: Fabio was software developer of TIDIdlc and TIDorb for Java. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Jesús M. González-Barahona +E: jgb@gsyc.escet.urjc.es +W: +P: +D: Jesús has provided advice during all steps associated to creation of the +D: Morfeo Project Community. He is the primary contact at the URJC. +D: +S: Rey Juan Carlos University (URJC) +S: ESCET C/ Tulipán S/N +S: 28933 Móstoles, Madrid. +S: Spain + + +N: Juan J. (Juanjo) Hierro +E: jhierro@tid.es +W: +P: +D: Morfeo project leader and chief software architect of TIDorb, the Web +D: Services and EJB container, TIDstateengine and CORBA Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Miguel Jimenez Gañan +E: mjimenez@pegaso.ls.fi.upm.es +W: +P: +D: Miguel has reviewed part ot the TIDorb documentation. +S: +S: Facultad de Informática +S: Universidad Politécnica de Madrid (UPM) +S: Campus de Montegancedo +S: 28660 Boadilla del Monte (Madrid) +S: Spain + +N: Pablo Jiménez-Mayor +E: pjm@tid.es +W: +P: +D: Pablo is software Architect and developer of TIDStateEngine. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Luis López-Fernández +E: llopez@escet.urjc.es +W: +P: +D: Luis has performed some of the auxiliary tasks needed to launch the Morfeo +D: Project Community. He has reviewed part ot the TIDorb documentation. +D: +S: Rey Juan Carlos University (URJC) +S: ESCET C/ Tulipán S/N +S: 28933 Móstoles, Madrid. +S: Spain + +N: Mario López-Gallego +E: mariolg@tid.es +W: +P: +D: Mario is software Architect and developer of TIDorb and some CORBA Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: Parque Tecnológico de Boecillo parcelas 118-119-120 +S: 47151 Boecillo (Valladolid) +S: Spain + +N: Genoveva López Gómez +E: glopez@fi.upm.es +W: +P: +D: Genoveva has performed some of the auxiliary tasks needed to launch the Morfeo +D: Project Community. +S: +S: Facultad de Informática +S: Universidad Politécnica de Madrid (UPM) +S: Campus de Montegancedo +S: 28660 Boadilla del Monte (Madrid) +S: Spain + +N: Andrés L. Martínez +E: almartinez@escet.urjc.es +W: +P: +D: Andrés has performed some of the auxiliary tasks needed to launch the Morfeo +D: Project Community. He has reviewed part ot the TIDorb documentation. +D: +S: Rey Juan Carlos University +S: ESCET C/ Tulipán S/N +S: 28933 Móstoles, Madrid. +S: Spain + + +N: M. Cruz Pajares +E: mcpg@tid.es +W: +P: +D: Cruz is software developer of TIDorb and some CORBA Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: Parque Tecnológico de Boecillo parcelas 118-119-120 +S: 47151 Boecillo (Valladolid) +S: Spain + +N: Javier Rayado +E: jrayado@pegaso.ls.fi.upm.es +W: +P: +D: Javier has participated in the design and the development of the original +D: Morfeo Project Web site. +S: +S: Facultad de Informática +S: Universidad Politécnica de Madrid (UPM) +S: Campus de Montegancedo +S: 28660 Boadilla del Monte (Madrid) +S: Spain + +N: Marcos Reyes +E: mru@tid.es +W: +P: +D: Marcos is software Architect and developer of TIDStateEngine. He also +D: leaded design of the original Morfeo Project Web site. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + + +N: Pablo Rodríguez-Archilla +E: pra@tid.es +W: +P: +D: Pablo is software developer of TIDorb and some CORBA Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + +N: Álvaro Rodriguez-Sánchez +E: ars07@tid.es +W: +P: +D: Álvaro is software Architect and developer of TIDNotif, the CORBA Notification Services. +D: +S: Telefónica Investigación y Desarrollo (Telefónica I+D) +S: C/ Emilio Vargas 6 +S: 28043 Madrid +S: Spain + + +N: Roberto Santos +E: roberto.santos@hispalinux.es +W: +P: +D: Roberto has provided advice during all steps associated to creation of the +D: Morfeo Project Community. +S: + +N: Javier Soriano +E: jsoriano@fi.upm.es +W: +P: +D: Javier has performed some of the auxiliary tasks needed to launch the Morfeo +D: Project Community. He has reviewed part ot the TIDorb documentation. He is +D: the primary contact at the FI-UPM. +S: +S: Facultad de Informática +S: Universidad Politécnica de Madrid (UPM) +S: Campus de Montegancedo +S: 28660 Boadilla del Monte (Madrid) +S: Spain + +N: David Velasco +E: samurai_____@hotmail.com +W: +P: +D: David was software developer of TIDIdlc for C++. +S: + + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..7af9999 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,198 @@ +2010-01-10 Alvaro Vega Garcia + Maria Cruz Pajares + + * TIDorbJ version 6.5.0 released. + + - Feature added [#924] IPv6 support + +2010-01-10 Alvaro Vega Garcia + + * TIDorbJ version 6.4.0 released. + + - Feature added [#797] SSLIOP layer for TIDorbJ + - Feature added [#798] Secure corbalocs + +2009-11-10 Alvaro Vega Garcia + + * TIDorbJ version 6.3.5 released. + + - Feature added [#1072] CSI support for PrintIOR + - Fix bug [#1070] Inexact UTC time + +2009-07-20 Alvaro Vega Garcia + + * TIDorbJ version 6.3.4 released. + + - Fix bug [#1038] Bug in Messaging.ExeptionHolder management + - Fix bug [#1026] Unable to retrieve the factory of a custom + compressor previously registered + - Aligned with GIOP Compression (FTF Beta 2, May 2009): changes in the + way of calc 'min_ratio' value + - Fix bug [#956] Invalid call to + org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI + +2009-04-16 Alvaro Vega Garcia + + * TIDorbJ version 6.3.3 released. + + - Feature added [844] ZIOP: GIOP Compression (FTF Beta 2) + - Fix bug [942] Server listener sockets don't set SO_REUSEADDR socket + option at initializing time + - Feature [916] Add support of QoS policies to printIOR + - Feature [842] Set TAG_ORB_TYPE requested to OMG + - Fix bug [830] recover_count at IIOPCommLayer is global, not per each + connection establishment (racecondition) + - Fix bug [544] After COMM_FAILURE ORB client doesn't retry connection + with a restarted server + +2008-06-23 Alvaro Vega Garcia + + * TIDorbJ version 6.3.2 released. + + - Fix bug [545] Interoperability problems with TAO and Visibroker due + to response_flags of GIOP RequestHeader 1.2 + - Fix bug [544] After COMM_FAILURE ORB client doesn't retry connection + with a restarted server + - Feature [419] Add dump of IIOPCommLayer properties in traces + - Fix bug [413] Java null pointer exception when creates an Any from + ORBSingleton.create_any() + +2008-02-22 Alvaro Vega Garcia + + * TIDorbJ version 6.3.1 released. + + - Fix bug [345] printIOR.sh doesn't work + - Fix bug [337] Problems with ServantActivator + - Fix bug [328] CORBA.INITIALIZE due to ClassCastException: + TIDorb.trace.level > 0 && -ORBInitRef ... + - Fix bug [282] -ORB_exhaustive_equal true doesn't have any effect + +2007-03-19 Alvaro Vega Garcia + + * TIDorbJ version 6.3.0 released. + +2007-01-16 Luis de la Fuente (ldlf07 at tid dot es) + + * TIDorbJ version 6.2.1 released. + + Fix bug [126] Problems with unsigned long long parameters + Fix bug [123] Client waits max_block_time when the server closes the socket + Fix bug [22] TIDorbJ doesn't compile with Sun JDK 1.5 + +2006-03-03 Irenka Redondo Granados (iredondo at tid dot es) + + * TIDorbJ version 6.2.0 released. + + - Implemented AMI (Asynchronous Method Invocation) + +2005-06-01 Pablo Rodriguez Archilla (pra at tid dot es) + + * TIDorbJ version 6.1.0 + + - Implemented quality of the service (QoS) management + +2004-12-10 Pablo Rodriguez Archilla (pra at tid dot es) + + * TIDorbJ version 6.0.0 released. + + * Released under GNU/GPL terms + +Thu May 20 13:58:15 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.2.0 released. + + - Aligned with CORBA 2.6 + - PolicyManager implemented + - Implemented QoS RelativeRequestTimeoutPolicy to manage timeouts of request. + This policy could be applied by reference, thread or ORB (see manual) + +Mon May 03 12:07:32 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.1.1 released. + + - Compatibility with J2SDK 1.4.x + - DynUnion.get_discriminator() already doesn't throw InvalidValue exception + +Thu Apr 29 14:25:10 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.1.0 released. + + - IDL to Java compiler has been extracted from the distribution + - New distribution of IDL to C++ compiler and IDL to Java (TIDIdlc) + - ORB API compiled with TIDIdlc version 1.0.0 + +Wed Apr 28 11:44:14 2004 Juan A. Caceres (caceres at tid dot es) + * TIDorbJ version 3.0.9 + + - New argument: + es.tid.TIDorbj.iiop.socket_write_timeout (>= 0) + Sets a timeout to avoid deadlocks in a write (caused by when buffer TCP is filled) + +Mon Mar 01 13:57:26 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.8 + + - Fix in marshall of TypeCode indirections + +Fri Sep 05 13:23:55 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.7 + + - Implemented a TypeCodes Cache + - Improvements in management of bidirectional connections + - Removed bug in ServerListener + - New arguments: + es.tid.TIDorbj.typecode_cache_size (v >= 0) + es.tid.TIDorbj.iiop.server_socket_reconnect + es.tid.TIDorbj.iiop.bidirectional (BOTH-NORMAL) + +Mon Apr 21 12:44:13 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.6 + + - Improvmentes in management of IIOP connections + - New argument: es.tid.TIDorbj.iiop.socket_connect_timeout + +Mon Apr 21 12:11:32 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.5 + + - Adapted to JDK 1.4: Dynamic Invocation Interface implemented + los stubs facilitados por JDK + - Remove bug about Multithreading in Any type + +Tue Apr 08 18:30:35 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.4 + + - Changes to warranty interoperability with GIOP 1.0 + +Mon Mar 31 16:39:02 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.3 + + - Last version with chages about bugs in IDL compiler + +Thu Mar 13 10:24:41 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.2 + + - Version with TIDAgent adaptations + +Wed Jun 26 08:40:48 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.1 + + - Changes to aligned with CORBA 2.5 + +Fri Apr 19 16:21:26 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 1.11.0 + + - Version with Objects by Value implemented + +Wed Apr 17 15:21:27 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 1.0.9 + + - First stable ORB version aligned with CORBA 2.3 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..d7e8e92 --- /dev/null +++ b/INSTALL @@ -0,0 +1,188 @@ +============ +INSTALLATION +============ + +1. INSTALLATION FROM BINARY DISTRIBUTION +======================================== + + +1.1 Prerequisits +---------------- + +For the compilation of TIDNotifJ next software is needed: + + * Sun Java J2SE SDK 1.4 or later. Download + * Subversion Client. Download + * Apache Ant 1.6 or later. Download + * TIDIdlc + +See TIDorbJ Compilation and Installation HOWTO where the installation of +all this required software is explained. + +Main Linux distributions (Debian, Ubuntu, RedHat, ...) have available +installation packages for this components. + + +1.2 Installation +---------------- + +Download the zipped binaries in the applications directory +and unzip with: + + $ tar xfvz TIDorbJ_X.Y.Z.tgz +or + $ gzip -d TIDorbJ_X.Y.Z.tgz | tar xfv + + +You can download directly the TIDorbJ installation binaries from MORFEO Forge +at: https://forge.morfeo-project.org/frs/?group_id=8 + + +1.3 Execution +------------- + +To execute TIDorbJ scripts in the shell, next environment variables should be +set. + +· For Unix + -------- + + export JAVA_HOME= + export TIDORBJ_HOME=/TIDorbJ + export PATH=$PATH:$TIDNOTIFJ_HOME/bin/ + + Runs with: + + $TIDNOTIFJ_HOME/bin/start + +· For Windows + ----------- + + SET JAVA_HOME= + SET TIDORBJ_HOME=\TIDorbJ + SET PATH=%PATH;%TIDORBJ_HOME%\bin + + Runs with: + + $TIDORBJ_HOME\bin\start.bat + + + +2. INSTALLATION FROM SOURCE DISTRIBUTION +======================================== + + +2.1 Prerequisits +---------------- + +For the compilation of TIDorbJ next software is needed: + + · Sun Java J2SE SDK 1.4 or later + · Subversion Client + · Apache Ant 1.6 or later + · TIDIdlc + +Main Linux distributions (Debian, Ubuntu, RedHat, ...) have available +installation packages for this components. + +Optionally, TIDorbJ can be compiled with the Eclipse IDE. + + +· Needed Software Installation under Debian & Ubuntu Linux + -------------------------------------------------------- + + - For Ubuntu Linux: + + $ sudo apt-get install subversion ant sun-java5-jdk + + + - For Debian: + $ su + + $ apt-get install subversion ant sun-java5-jdk + + Also, Other versions of Sun's JDK can also be installed from Java at Sun + MicroSystems. + + +· Java Virtual Machine installation from binaries + ----------------------------------------------- + + Download the installation zipped file from Java at Sun MicroSystems. + You should create a directory at your $HOME directory where the installation + will be done: + + $ mkdir $HOME/java + + Unzip the installation binary file (for examle, jdk-1_5_0_07-linux-586.bin): + + $ cd $HOME/java + $ chmod +x jdk-1_5_0_07-linux-586.bin + $ ./jdk-1_5_0_07-linux-586.bin + + Follow the installation program instructions to install the Java Development + Kit. + + Finally, delete the downloaded file: + + $ rm jdk-1_5_0_07-linux-586.bin + + +2.2 TIDorbJ Compilation +----------------------- + +· Source Code Download + -------------------- + + First of all, create a work directory where the source code will be + downloaded: + + $ cd + $ mkdir Morfeo + $ cd Morfeo + + Download the sorce code from the TIDorbJ Project's Subversion repository: + + $ svn checkout https://svn.morfeo-project.org/svn/tidorbj/trunk/TIDorbJ + + The Subversion client would ask for accept the server's certificate. In this + case, Accept it. + + +· Compilation with Ant + -------------------- + + Go to the TIDorbJ directory where the source code has been downloaded and + compile it with the command: + + $ cd TIDorbJ + $ ant install + + NOTE: Change the PATH if you want to compile TIDorbJ with other JDK version + + You can check the JDK version configured in the environment with: + + $ java -version + + +2.3 TIDNotifJ Installation +------------------------ + +· Installation from compiled code + ------------------------------- + + Once compiled TIDorbJ, from the source code directory (TIDorbJ), copy the + directory dist with the generated binaries of TIDNotifJ to the usual + applications directory (for example /opt): + + $ cp -r dist /TIDorbJ_X.Y + + In Linux, update the execution flags of the scripts to launch the compiler: + + chmod +x /TIDorbJ_X.Y/bin/* + + +2.4 Execution +------------- + + Idem "1.3 Execution" previous section. diff --git a/OMG_SPEC b/OMG_SPEC new file mode 100644 index 0000000..843abb0 --- /dev/null +++ b/OMG_SPEC @@ -0,0 +1,4 @@ +This release of TIDorbJ follows: +- OMG CORBA Specification, Version 2.6 +- OMG IDL to Java Language Mapping, Version 1.3 +- OMG GIOP Compression (FTF Beta 2) diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..74f8f54 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +6.5.0 on 2011-03-27 diff --git a/bin/.svn/all-wcprops b/bin/.svn/all-wcprops new file mode 100644 index 0000000..533444a --- /dev/null +++ b/bin/.svn/all-wcprops @@ -0,0 +1,41 @@ +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/bin +END +printIOR.sh +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/bin/printIOR.sh +END +tidorbj.bat +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/bin/tidorbj.bat +END +setup_TIDorbJ.bat +K 25 +svn:wc:ra_dav:version-url +V 69 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/bin/setup_TIDorbJ.bat +END +tidorbj.sh +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/bin/tidorbj.sh +END +setup_TIDorbJ.sh +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/bin/setup_TIDorbJ.sh +END +printIOR.bat +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/bin/printIOR.bat +END diff --git a/bin/.svn/entries b/bin/.svn/entries new file mode 100644 index 0000000..e60edeb --- /dev/null +++ b/bin/.svn/entries @@ -0,0 +1,232 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/bin +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +printIOR.sh +file + + + + +2010-04-28T10:48:01.000000Z +540c1e2faf0ad2b101534f75f39fcb94 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +356 + +setup_TIDorbJ.bat +file + + + + +2009-02-16T09:48:56.000000Z +7045e93f5346df6bc89e2eb7073b0a0b +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +652 + +tidorbj.bat +file + + + + +2009-02-16T09:48:56.000000Z +60e7f77ac2c08f51e501f73af85948fb +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +355 + +setup_TIDorbJ.sh +file +478 + + + +2010-04-28T11:57:18.000000Z +86f58548a00406ef23d5e116e2d1a25a +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +755 + +tidorbj.sh +file + + + + +2010-04-28T10:48:01.000000Z +4cd0250be5666b57a2ae031dc6b5c36c +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +93 + +printIOR.bat +file + + + + +2009-02-16T09:48:56.000000Z +5371297f2b69ed3cbe184a4fd0855f07 +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +205 + diff --git a/bin/.svn/prop-base/printIOR.bat.svn-base b/bin/.svn/prop-base/printIOR.bat.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/printIOR.bat.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/prop-base/printIOR.sh.svn-base b/bin/.svn/prop-base/printIOR.sh.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/printIOR.sh.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/prop-base/setup_TIDorbJ.bat.svn-base b/bin/.svn/prop-base/setup_TIDorbJ.bat.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/setup_TIDorbJ.bat.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/prop-base/setup_TIDorbJ.sh.svn-base b/bin/.svn/prop-base/setup_TIDorbJ.sh.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/setup_TIDorbJ.sh.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/prop-base/tidorbj.bat.svn-base b/bin/.svn/prop-base/tidorbj.bat.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/tidorbj.bat.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/prop-base/tidorbj.sh.svn-base b/bin/.svn/prop-base/tidorbj.sh.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/bin/.svn/prop-base/tidorbj.sh.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/bin/.svn/text-base/printIOR.bat.svn-base b/bin/.svn/text-base/printIOR.bat.svn-base new file mode 100644 index 0000000..1f87406 --- /dev/null +++ b/bin/.svn/text-base/printIOR.bat.svn-base @@ -0,0 +1,9 @@ +@echo off + +set PRINT_IOR_CLASSPATH=.;%TIDORBJ_HOME%\lib\tidorbj.jar +set JVM=%JAVA_HOME%\bin\java + +%JVM% -classpath %PRINT_IOR_CLASSPATH% es.tid.TIDorbj.tools.PrintIOR %1 + +set PRINT_IOR_CLASSPATH= +set JVM= diff --git a/bin/.svn/text-base/printIOR.sh.svn-base b/bin/.svn/text-base/printIOR.sh.svn-base new file mode 100644 index 0000000..50840e8 --- /dev/null +++ b/bin/.svn/text-base/printIOR.sh.svn-base @@ -0,0 +1,18 @@ +#!/bin/sh +set +u + +if [ -z "$JAVA_HOME" ]; then + echo "Environment variable JAVA_HOME must be set" + exit 1 +fi + +if [ -z "$TIDORBJ_HOME" ]; then + echo "Environment variable TIDORBJ_HOME must be set" + exit 1 +fi + + +JVM=$JDK_HOME/bin/java +PRINT_IOR_CLASSPATH=.:$TIDORBJ_HOME/lib/tidorbj.jar + +$JVM -classpath $PRINT_IOR_CLASSPATH es.tid.TIDorbj.tools.PrintIOR $* diff --git a/bin/.svn/text-base/setup_TIDorbJ.bat.svn-base b/bin/.svn/text-base/setup_TIDorbJ.bat.svn-base new file mode 100644 index 0000000..897a989 --- /dev/null +++ b/bin/.svn/text-base/setup_TIDorbJ.bat.svn-base @@ -0,0 +1,30 @@ +@echo off + +rem Comprueba si las variables TIDORBJ_HOME y JDK_HOME estan definidas +if "%TIDORBJ_HOME%"=="" goto error_HOME +if "%JAVA_HOME%"=="" goto error_JDK + set SRV_DIR=%TIDORBJ_HOME% + set SRV_BIN=%SRV_DIR%\bin + set SRV_LIB=%SRV_DIR%\lib + + rem Configura el PATH para los procesos del servicio + set PATH=%SRV_BIN%;%PATH% + + rem Configura el CLASSPATH con las librerias del servicio + set CLASSPATH=%SRV_LIB%\tidorbj.jar;%CLASSPATH% + + set SRV_DIR= + set SRV_BIN= + set SRV_LIB= + goto end + +:error_HOME + echo Debe configurar la variable de entorno TIDORBJ_HOME + echo. + goto end + +:error_JDK + echo Debe configurar la variable de entorno JAVA_HOME + echo. + +:end diff --git a/bin/.svn/text-base/setup_TIDorbJ.sh.svn-base b/bin/.svn/text-base/setup_TIDorbJ.sh.svn-base new file mode 100644 index 0000000..1bbb9a8 --- /dev/null +++ b/bin/.svn/text-base/setup_TIDorbJ.sh.svn-base @@ -0,0 +1,31 @@ +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/.svn/text-base/tidorbj.bat.svn-base b/bin/.svn/text-base/tidorbj.bat.svn-base new file mode 100644 index 0000000..e444c13 --- /dev/null +++ b/bin/.svn/text-base/tidorbj.bat.svn-base @@ -0,0 +1,20 @@ +@echo off + +rem Obtiene la lista de argumentos de la linea de comandos +set ARGS=%1 %2 %3 %4 %5 %6 %7 %8 %9 + +if not "%OS%"=="Windows_NT" goto Win9x + set ARGS=%* + goto endif +:Win9x + shift + if "%9"=="" goto endif + set ARGS=%ARGS% %9 + goto Win9x +:endif + +set JVM=%JAVA_HOME%\bin\java +%JVM% -classpath .;%TIDORBJ_HOME%\lib\tidorbj.jar %ARGS% + +set ARGS= +set JVM= diff --git a/bin/.svn/text-base/tidorbj.sh.svn-base b/bin/.svn/text-base/tidorbj.sh.svn-base new file mode 100644 index 0000000..f832782 --- /dev/null +++ b/bin/.svn/text-base/tidorbj.sh.svn-base @@ -0,0 +1,6 @@ +#!/bin/sh +set +u + +JVM=$JDK_HOME/bin/java + +$JVM -classpath .:$TIDORBJ_HOME/lib/tidorbj.jar $* diff --git a/bin/.svn/tmp/setup_TIDorbJ.sh.tmp b/bin/.svn/tmp/setup_TIDorbJ.sh.tmp new file mode 100644 index 0000000..3acd50f --- /dev/null +++ b/bin/.svn/tmp/setup_TIDorbJ.sh.tmp @@ -0,0 +1,35 @@ +<<<<<<< .mine +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist +======= +DEFAULT_HOME=/home/avega/morfeo/TIDorbJ/dist +>>>>>>> .r454 + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/.svn/tmp/tempfile.2.tmp b/bin/.svn/tmp/tempfile.2.tmp new file mode 100644 index 0000000..1bbb9a8 --- /dev/null +++ b/bin/.svn/tmp/tempfile.2.tmp @@ -0,0 +1,31 @@ +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/.svn/tmp/tempfile.tmp b/bin/.svn/tmp/tempfile.tmp new file mode 100644 index 0000000..1bbb9a8 --- /dev/null +++ b/bin/.svn/tmp/tempfile.tmp @@ -0,0 +1,31 @@ +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/printIOR.bat b/bin/printIOR.bat new file mode 100644 index 0000000..1f87406 --- /dev/null +++ b/bin/printIOR.bat @@ -0,0 +1,9 @@ +@echo off + +set PRINT_IOR_CLASSPATH=.;%TIDORBJ_HOME%\lib\tidorbj.jar +set JVM=%JAVA_HOME%\bin\java + +%JVM% -classpath %PRINT_IOR_CLASSPATH% es.tid.TIDorbj.tools.PrintIOR %1 + +set PRINT_IOR_CLASSPATH= +set JVM= diff --git a/bin/printIOR.sh b/bin/printIOR.sh new file mode 100755 index 0000000..50840e8 --- /dev/null +++ b/bin/printIOR.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set +u + +if [ -z "$JAVA_HOME" ]; then + echo "Environment variable JAVA_HOME must be set" + exit 1 +fi + +if [ -z "$TIDORBJ_HOME" ]; then + echo "Environment variable TIDORBJ_HOME must be set" + exit 1 +fi + + +JVM=$JDK_HOME/bin/java +PRINT_IOR_CLASSPATH=.:$TIDORBJ_HOME/lib/tidorbj.jar + +$JVM -classpath $PRINT_IOR_CLASSPATH es.tid.TIDorbj.tools.PrintIOR $* diff --git a/bin/setup_TIDorbJ.bat b/bin/setup_TIDorbJ.bat new file mode 100644 index 0000000..897a989 --- /dev/null +++ b/bin/setup_TIDorbJ.bat @@ -0,0 +1,30 @@ +@echo off + +rem Comprueba si las variables TIDORBJ_HOME y JDK_HOME estan definidas +if "%TIDORBJ_HOME%"=="" goto error_HOME +if "%JAVA_HOME%"=="" goto error_JDK + set SRV_DIR=%TIDORBJ_HOME% + set SRV_BIN=%SRV_DIR%\bin + set SRV_LIB=%SRV_DIR%\lib + + rem Configura el PATH para los procesos del servicio + set PATH=%SRV_BIN%;%PATH% + + rem Configura el CLASSPATH con las librerias del servicio + set CLASSPATH=%SRV_LIB%\tidorbj.jar;%CLASSPATH% + + set SRV_DIR= + set SRV_BIN= + set SRV_LIB= + goto end + +:error_HOME + echo Debe configurar la variable de entorno TIDORBJ_HOME + echo. + goto end + +:error_JDK + echo Debe configurar la variable de entorno JAVA_HOME + echo. + +:end diff --git a/bin/setup_TIDorbJ.sh b/bin/setup_TIDorbJ.sh new file mode 100644 index 0000000..1bbb9a8 --- /dev/null +++ b/bin/setup_TIDorbJ.sh @@ -0,0 +1,31 @@ +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/setup_TIDorbJ.sh~ b/bin/setup_TIDorbJ.sh~ new file mode 100644 index 0000000..c127c51 --- /dev/null +++ b/bin/setup_TIDorbJ.sh~ @@ -0,0 +1,31 @@ +DEFAULT_HOME=/opt/TIDorbJ_3.2.0 + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/bin/tidorbj.bat b/bin/tidorbj.bat new file mode 100644 index 0000000..e444c13 --- /dev/null +++ b/bin/tidorbj.bat @@ -0,0 +1,20 @@ +@echo off + +rem Obtiene la lista de argumentos de la linea de comandos +set ARGS=%1 %2 %3 %4 %5 %6 %7 %8 %9 + +if not "%OS%"=="Windows_NT" goto Win9x + set ARGS=%* + goto endif +:Win9x + shift + if "%9"=="" goto endif + set ARGS=%ARGS% %9 + goto Win9x +:endif + +set JVM=%JAVA_HOME%\bin\java +%JVM% -classpath .;%TIDORBJ_HOME%\lib\tidorbj.jar %ARGS% + +set ARGS= +set JVM= diff --git a/bin/tidorbj.sh b/bin/tidorbj.sh new file mode 100644 index 0000000..f832782 --- /dev/null +++ b/bin/tidorbj.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set +u + +JVM=$JDK_HOME/bin/java + +$JVM -classpath .:$TIDORBJ_HOME/lib/tidorbj.jar $* diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..f8ffe4e --- /dev/null +++ b/build.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/.cvsignore b/build/.cvsignore new file mode 100644 index 0000000..751b1d0 --- /dev/null +++ b/build/.cvsignore @@ -0,0 +1 @@ +build.log diff --git a/build/.svn/all-wcprops b/build/.svn/all-wcprops new file mode 100644 index 0000000..23ccb89 --- /dev/null +++ b/build/.svn/all-wcprops @@ -0,0 +1,29 @@ +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/build +END +Makefile.gcj +K 25 +svn:wc:ra_dav:version-url +V 66 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/build/Makefile.gcj +END +build.bat +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/build/build.bat +END +build.sh +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/build/build.sh +END +.cvsignore +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/build/.cvsignore +END diff --git a/build/.svn/dir-prop-base b/build/.svn/dir-prop-base new file mode 100644 index 0000000..1643502 --- /dev/null +++ b/build/.svn/dir-prop-base @@ -0,0 +1,5 @@ +K 10 +svn:ignore +V 9 +build.log +END diff --git a/build/.svn/entries b/build/.svn/entries new file mode 100644 index 0000000..b2d017e --- /dev/null +++ b/build/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/build +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Makefile.gcj +file + + + + +2010-04-28T10:47:59.000000Z +058f0a9058e94ad2f838f0bc6bc10077 +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + + + + + + + + +3408 + +build.bat +file + + + + +2009-02-16T09:48:50.000000Z +677aa2e2c4bd20515c697387ce22c41b +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1130 + +build.sh +file + + + + +2009-02-16T09:48:50.000000Z +6c62a70824b4c42b33aab291de7b8174 +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +2115 + +.cvsignore +file + + + + +2009-02-16T09:48:50.000000Z +d55ba6d60e31929c77c30ac8d0ac8022 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +10 + diff --git a/build/.svn/prop-base/.cvsignore.svn-base b/build/.svn/prop-base/.cvsignore.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/build/.svn/prop-base/.cvsignore.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/build/.svn/prop-base/build.bat.svn-base b/build/.svn/prop-base/build.bat.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/build/.svn/prop-base/build.bat.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/build/.svn/prop-base/build.sh.svn-base b/build/.svn/prop-base/build.sh.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/build/.svn/prop-base/build.sh.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/build/.svn/text-base/.cvsignore.svn-base b/build/.svn/text-base/.cvsignore.svn-base new file mode 100644 index 0000000..751b1d0 --- /dev/null +++ b/build/.svn/text-base/.cvsignore.svn-base @@ -0,0 +1 @@ +build.log diff --git a/build/.svn/text-base/Makefile.gcj.svn-base b/build/.svn/text-base/Makefile.gcj.svn-base new file mode 100644 index 0000000..95eb9fd --- /dev/null +++ b/build/.svn/text-base/Makefile.gcj.svn-base @@ -0,0 +1,97 @@ +DEST_DIR := ./bin + +# +# Java targeet dirs +# +IDL_OBJS_DIR := ./idl +TIDORBJ_OBJS_DIR := ./source +TOOLS_OBJS_DIR := ./tools +UTIL_OBJS_DIR := ./util + + + +# +# Java source code +# +IDL_SOURCES += $(shell find idl/BiDirPolicy/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/comm/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/CosNaming/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/DynamicAny/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Messaging/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/orb/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/SendingContext/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/TimeBase/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Compression/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Security/.java/ -name *.java -type f) + +TOOLS_SOURCES += tools/es/tid/TIDorbj/tools/PrintIOR.java +TIDORBJ_SOURCES += $(shell find source/es/tid/TIDorbj -name *.java -type f) +TIDORBJ_SOURCES += $(shell find source/es/tid/PortableServer -name *.java -type f) +UTIL_SOURCES += $(shell find util/es/tid/TIDorbj/util -name *.java -type f) + + + +# +# Java objects +# +IDL_OBJECTS := $(IDL_SOURCES:idl/%.java=$(IDL_OBJS_DIR)/%.o) +TIDORBJ_OBJECTS := $(TIDORBJ_SOURCES:source/%.java=$(TIDORBJ_OBJS_DIR)/%.o) +TOOLS_OBJECTS := $(TOOLS_SOURCES:tools/%.java=$(TOOLS_OBJS_DIR)/%.o) +UTIL_OBJECTS := $(UTIL_SOURCES:util/%.java=$(UTIL_OBJS_DIR)/%.o) + + +# +# Classpath +# +CLASSPATH := lib/bidirpolicyIdl.jar:lib/commIdl.jar:lib/dynAnyIdl.jar:lib/messagingIdl.jar:lib/namingIdl.jar:lib/orbIdl.jar:lib/SendingContextIdl.jar:lib/timebaseIdl.jar:lib/CompressionIdl.jar:lib/SecurityIdl.jar:lib/core.jar:lib/util.jar + + +GCJ := gcj-4.3 + +GCJ_FLAGS := -O9 --encoding=ISO-8859-1 -findirect-dispatch -Wl,--allow-multiple-definition +LINK_FLAGS := -O9 -fCLASSPATH=$(CLASSPATH) -findirect-dispatch -Wl,--allow-multiple-definition + +# objects in $(DEST_DIR) don't get linked into the binary +LINK_OBJECTS := $(foreach f, $(IDL_OBJECTS), \ + $(if $(filter-out $(IDL_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(TIDORBJ_OBJECTS), \ + $(if $(filter-out $(TIDORBJ_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(TOOLS_OBJECTS), \ + $(if $(filter-out $(TOOLS_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(UTIL_OBJECTS), \ + $(if $(filter-out $(UTIL_OBJS_DIR)/, $(dir $(f))), $f)) + + +PRINTIOR_BIN := printIOR.bin + +BINARIES := $(DEST_DIR)/$(PRINTIOR_BIN) + + + +all: $(BINARIES) + +build: clean all + +clean: + rm -rf $(BINARIES); + rm -f $(TIDORBJ_OBJECTS) $(TOOLS_OBJECTS) $(UTIL_OBJECTS) $(IDL_OBJECTS); + +$(IDL_OBJECTS): $(IDL_OBJS_DIR)/%.o: idl/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(TIDORBJ_OBJECTS): $(TIDORBJ_OBJS_DIR)/%.o: source/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(TOOLS_OBJECTS): $(TOOLS_OBJS_DIR)/%.o: tools/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(UTIL_OBJECTS): $(UTIL_OBJS_DIR)/%.o: util/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + + +$(DEST_DIR)/$(PRINTIOR_BIN): $(LINK_OBJECTS) + $(GCJ) --main=es.tid.TIDorbj.tools.PrintIOR \ + -o $(DEST_DIR)/$(PRINTIOR_BIN) $^ $(LINK_FLAGS) + + + diff --git a/build/.svn/text-base/build.bat.svn-base b/build/.svn/text-base/build.bat.svn-base new file mode 100644 index 0000000..0e5f882 --- /dev/null +++ b/build/.svn/text-base/build.bat.svn-base @@ -0,0 +1,19 @@ +@echo off + +rem Variables que deben revisarse segun el entorno de compilacion +SET JAVA_HOME=C:\jdk1.3.1_01 +SET ORACLE_HOME=C:\Oracle8i +SET WORKAREA_HOME=C:\workspace + +rem Variables del entorno de integracion +SET BASEPJ_HOME=I:\scib12\bases\mesa\SCIB12.pj +SET PLATFORM_HOME=I:\scib12\platform_v12.0.0 +SET TOOLS_HOME=I:\scib12\tools_v12.0.0 + +SET JWSDP_HOME=%TOOLS_HOME%\jwsdp +SET JAXP_LIB=%JWSDP_HOME%\jaxp\lib +SET ANT_HOME=%TOOLS_HOME%\apache-ant-1.6.1 +SET ANT_CLASSPATH=%ANT_HOME%\lib\ant.jar;%ANT_HOME%\lib\ant-launcher.jar +SET JAXP_CLASSPATH=%JAXP_LIB%\jaxp-api.jar;%JAXP_LIB%\endorsed\dom.jar;%JAXP_LIB%\endorsed\sax.jar;%JAXP_LIB%\endorsed\xalan.jar;%JAXP_LIB%\endorsed\xsltc.jar;%JAXP_LIB%\endorsed\xercesImpl.jar +SET JAVA_TOOLS=%JAVA_HOME%\lib\tools.jar +"%JAVA_HOME%\bin\java" -Dant.home="%ANT_HOME%" -Dtools.home="%TOOLS_HOME%" -Dplatform.home="%PLATFORM_HOME%" -Dbasepj.home="%BASEPJ_HOME%" -Dworkarea.home="%WORKAREA_HOME%" -Doracle.home="%ORACLE_HOME%" -classpath "%JAVA_TOOLS%;%JAXP_CLASSPATH%;%ANT_CLASSPATH%" -Dbasedir=. org.apache.tools.ant.Main -buildfile "%WORKAREA_HOME%\Build\main.xml" %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/build/.svn/text-base/build.sh.svn-base b/build/.svn/text-base/build.sh.svn-base new file mode 100644 index 0000000..c0c1fdb --- /dev/null +++ b/build/.svn/text-base/build.sh.svn-base @@ -0,0 +1,60 @@ +# +# MORFEO Project +# http://www.morfeo-project.org +# +# Component: TIDIdlc +# Programming Language: Java +# +# File: $Source$ +# Version: $Revision$ +# Date: $Date$ +# Last modified by: $Author$ +# +# (C) Copyright 2004 Telefónica Investigación y Desarrollo +# S.A.Unipersonal (Telefónica I+D) +# +# Info about members and contributors of the MORFEO project +# is available at: +# +# http://www.morfeo-project.org/TIDIdlc/CREDITS +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# If you want to use this software an plan to distribute a +# proprietary application in any way, and you are not licensing and +# distributing your source code under GPL, you probably need to +# purchase a commercial license of the product. More info about +# licensing options is available at: +# +# http://www.morfeo-project.org/TIDIdlc/Licensing +# +#$ANT_HOME/bin/ant -f ../build.xml -Dmorfeo.dependencies.home=$MORFEO_DEPENDENCIES -verbose $* +set +u +OLD_DIR=$PWD + +cd ../../MORFEO_DEPENDENCIES +DEFAULT_MORFEO_DEPENDENCIES=$PWD +cd $OLD_DIR + +if [ -z "$MORFEO_DEPENDENCIES" ]; then + echo Configurando la variable MORFEO_DEPENDENCIIES=$DEFAULT_MORFEO_DEPENDENCIES + echo Si el valor de esta variable no es correcto ejecute el script + echo $MORFEO_DEPENDENCIES/bin/set_env.sh + cd $DEFAULT_MORFEO_DEPENDENCIES/bin + echo $DEFAULT_MORFEO_DEPENDENCIES + . ./set_env.sh + cd $OLD_DIR +fi +$MORFEO_DEPENDENCIES/build/build.sh $* diff --git a/build/Makefile.gcj b/build/Makefile.gcj new file mode 100644 index 0000000..95eb9fd --- /dev/null +++ b/build/Makefile.gcj @@ -0,0 +1,97 @@ +DEST_DIR := ./bin + +# +# Java targeet dirs +# +IDL_OBJS_DIR := ./idl +TIDORBJ_OBJS_DIR := ./source +TOOLS_OBJS_DIR := ./tools +UTIL_OBJS_DIR := ./util + + + +# +# Java source code +# +IDL_SOURCES += $(shell find idl/BiDirPolicy/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/comm/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/CosNaming/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/DynamicAny/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Messaging/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/orb/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/SendingContext/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/TimeBase/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Compression/.java/ -name *.java -type f) +IDL_SOURCES += $(shell find idl/Security/.java/ -name *.java -type f) + +TOOLS_SOURCES += tools/es/tid/TIDorbj/tools/PrintIOR.java +TIDORBJ_SOURCES += $(shell find source/es/tid/TIDorbj -name *.java -type f) +TIDORBJ_SOURCES += $(shell find source/es/tid/PortableServer -name *.java -type f) +UTIL_SOURCES += $(shell find util/es/tid/TIDorbj/util -name *.java -type f) + + + +# +# Java objects +# +IDL_OBJECTS := $(IDL_SOURCES:idl/%.java=$(IDL_OBJS_DIR)/%.o) +TIDORBJ_OBJECTS := $(TIDORBJ_SOURCES:source/%.java=$(TIDORBJ_OBJS_DIR)/%.o) +TOOLS_OBJECTS := $(TOOLS_SOURCES:tools/%.java=$(TOOLS_OBJS_DIR)/%.o) +UTIL_OBJECTS := $(UTIL_SOURCES:util/%.java=$(UTIL_OBJS_DIR)/%.o) + + +# +# Classpath +# +CLASSPATH := lib/bidirpolicyIdl.jar:lib/commIdl.jar:lib/dynAnyIdl.jar:lib/messagingIdl.jar:lib/namingIdl.jar:lib/orbIdl.jar:lib/SendingContextIdl.jar:lib/timebaseIdl.jar:lib/CompressionIdl.jar:lib/SecurityIdl.jar:lib/core.jar:lib/util.jar + + +GCJ := gcj-4.3 + +GCJ_FLAGS := -O9 --encoding=ISO-8859-1 -findirect-dispatch -Wl,--allow-multiple-definition +LINK_FLAGS := -O9 -fCLASSPATH=$(CLASSPATH) -findirect-dispatch -Wl,--allow-multiple-definition + +# objects in $(DEST_DIR) don't get linked into the binary +LINK_OBJECTS := $(foreach f, $(IDL_OBJECTS), \ + $(if $(filter-out $(IDL_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(TIDORBJ_OBJECTS), \ + $(if $(filter-out $(TIDORBJ_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(TOOLS_OBJECTS), \ + $(if $(filter-out $(TOOLS_OBJS_DIR)/, $(dir $(f))), $f)) +LINK_OBJECTS += $(foreach f, $(UTIL_OBJECTS), \ + $(if $(filter-out $(UTIL_OBJS_DIR)/, $(dir $(f))), $f)) + + +PRINTIOR_BIN := printIOR.bin + +BINARIES := $(DEST_DIR)/$(PRINTIOR_BIN) + + + +all: $(BINARIES) + +build: clean all + +clean: + rm -rf $(BINARIES); + rm -f $(TIDORBJ_OBJECTS) $(TOOLS_OBJECTS) $(UTIL_OBJECTS) $(IDL_OBJECTS); + +$(IDL_OBJECTS): $(IDL_OBJS_DIR)/%.o: idl/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(TIDORBJ_OBJECTS): $(TIDORBJ_OBJS_DIR)/%.o: source/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(TOOLS_OBJECTS): $(TOOLS_OBJS_DIR)/%.o: tools/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + +$(UTIL_OBJECTS): $(UTIL_OBJS_DIR)/%.o: util/%.java + $(GCJ) -fCLASSPATH=$(CLASSPATH) $(GCJ_FLAGS) -c $< -o $@ + + +$(DEST_DIR)/$(PRINTIOR_BIN): $(LINK_OBJECTS) + $(GCJ) --main=es.tid.TIDorbj.tools.PrintIOR \ + -o $(DEST_DIR)/$(PRINTIOR_BIN) $^ $(LINK_FLAGS) + + + diff --git a/build/build.bat b/build/build.bat new file mode 100644 index 0000000..0e5f882 --- /dev/null +++ b/build/build.bat @@ -0,0 +1,19 @@ +@echo off + +rem Variables que deben revisarse segun el entorno de compilacion +SET JAVA_HOME=C:\jdk1.3.1_01 +SET ORACLE_HOME=C:\Oracle8i +SET WORKAREA_HOME=C:\workspace + +rem Variables del entorno de integracion +SET BASEPJ_HOME=I:\scib12\bases\mesa\SCIB12.pj +SET PLATFORM_HOME=I:\scib12\platform_v12.0.0 +SET TOOLS_HOME=I:\scib12\tools_v12.0.0 + +SET JWSDP_HOME=%TOOLS_HOME%\jwsdp +SET JAXP_LIB=%JWSDP_HOME%\jaxp\lib +SET ANT_HOME=%TOOLS_HOME%\apache-ant-1.6.1 +SET ANT_CLASSPATH=%ANT_HOME%\lib\ant.jar;%ANT_HOME%\lib\ant-launcher.jar +SET JAXP_CLASSPATH=%JAXP_LIB%\jaxp-api.jar;%JAXP_LIB%\endorsed\dom.jar;%JAXP_LIB%\endorsed\sax.jar;%JAXP_LIB%\endorsed\xalan.jar;%JAXP_LIB%\endorsed\xsltc.jar;%JAXP_LIB%\endorsed\xercesImpl.jar +SET JAVA_TOOLS=%JAVA_HOME%\lib\tools.jar +"%JAVA_HOME%\bin\java" -Dant.home="%ANT_HOME%" -Dtools.home="%TOOLS_HOME%" -Dplatform.home="%PLATFORM_HOME%" -Dbasepj.home="%BASEPJ_HOME%" -Dworkarea.home="%WORKAREA_HOME%" -Doracle.home="%ORACLE_HOME%" -classpath "%JAVA_TOOLS%;%JAXP_CLASSPATH%;%ANT_CLASSPATH%" -Dbasedir=. org.apache.tools.ant.Main -buildfile "%WORKAREA_HOME%\Build\main.xml" %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/build/build.sh b/build/build.sh new file mode 100644 index 0000000..10a6085 --- /dev/null +++ b/build/build.sh @@ -0,0 +1,60 @@ +# +# MORFEO Project +# http://www.morfeo-project.org +# +# Component: TIDIdlc +# Programming Language: Java +# +# File: $Source$ +# Version: $Revision: 21 $ +# Date: $Date: 2006-07-14 14:08:38 +0200 (Fri, 14 Jul 2006) $ +# Last modified by: $Author: iredondo $ +# +# (C) Copyright 2004 Telefónica Investigación y Desarrollo +# S.A.Unipersonal (Telefónica I+D) +# +# Info about members and contributors of the MORFEO project +# is available at: +# +# http://www.morfeo-project.org/TIDIdlc/CREDITS +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# If you want to use this software an plan to distribute a +# proprietary application in any way, and you are not licensing and +# distributing your source code under GPL, you probably need to +# purchase a commercial license of the product. More info about +# licensing options is available at: +# +# http://www.morfeo-project.org/TIDIdlc/Licensing +# +#$ANT_HOME/bin/ant -f ../build.xml -Dmorfeo.dependencies.home=$MORFEO_DEPENDENCIES -verbose $* +set +u +OLD_DIR=$PWD + +cd ../../MORFEO_DEPENDENCIES +DEFAULT_MORFEO_DEPENDENCIES=$PWD +cd $OLD_DIR + +if [ -z "$MORFEO_DEPENDENCIES" ]; then + echo Configurando la variable MORFEO_DEPENDENCIIES=$DEFAULT_MORFEO_DEPENDENCIES + echo Si el valor de esta variable no es correcto ejecute el script + echo $MORFEO_DEPENDENCIES/bin/set_env.sh + cd $DEFAULT_MORFEO_DEPENDENCIES/bin + echo $DEFAULT_MORFEO_DEPENDENCIES + . ./set_env.sh + cd $OLD_DIR +fi +$MORFEO_DEPENDENCIES/build/build.sh $* diff --git a/dist/AUTHORS b/dist/AUTHORS new file mode 100644 index 0000000..f06da07 --- /dev/null +++ b/dist/AUTHORS @@ -0,0 +1,16 @@ +This is the list of people who have been involved in the development of +TIDorbJ: + +Juan J. Hierro +Juan A. Caceres +Pablo Rodriguez Archilla +Fabio Garcia Solero +Manuel Castro +Luis de la Fuente +Juan Pablo Rojas +Sergio Checa Blanco +Alvaro Vega Garcia +Irenka Redondo Grandados +Jose Alberto Garcia Daniel +Alvaro Polo Valdenebro +Maria Cruz Pajares diff --git a/dist/BUGS b/dist/BUGS new file mode 100644 index 0000000..e512e6b --- /dev/null +++ b/dist/BUGS @@ -0,0 +1,2 @@ +This document has been moved to MORFEO Forge (which is online at +https://forge.morfeo-project.org/tracker/?atid=109&group_id=8&func=browse diff --git a/dist/BUILT b/dist/BUILT new file mode 100644 index 0000000..b6ad40d --- /dev/null +++ b/dist/BUILT @@ -0,0 +1,21 @@ +This release of TIDorbJ was built on a machine with kernel: +Linux dacha 2.6.21-2-686 #1 SMP Wed Jul 11 03:53:02 UTC 2007 i686 GNU/Linux + +using the compiler: +java version "1.5.0_14" +Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03) +Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing) + +kernel source package used: +linux-source-2.6.21 i686 + +applied kernel patches: +linux-image-2.6.21-2-686 2.6.21-6 + +using the following libraries: +ant 1.7.0-6 +javacc 4.0+cvs20080403-1 +libxerces27 2.7.0-5 +libxalan110 1.10-3.2 +libjaxp1.3-java 1.3.04-3 +TIDIdlc 1.3.7 diff --git a/dist/COPYING b/dist/COPYING new file mode 100644 index 0000000..4cacaf5 --- /dev/null +++ b/dist/COPYING @@ -0,0 +1,390 @@ +http://www.morfeo-project.org + +Component: TIDorbJ +Programming Language: Java + + (C) Copyright 2004 Telefónica Investigación y Desarrollo + S.A.Unipersonal (Telefónica I+D) + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + If you want to use this software an plan to distribute a + proprietary application in any way, and you are not licensing and + distributing your source code under GPL, you probably need to + purchase a commercial license of the product. More info about + licensing options is available at: + + http://www.morfeo-project.org/TIDorbJ/Licensing + + + ******************************** + * GNU General Public License * + ******************************** + + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble +======== + +The licenses for most software are designed to take away your freedom +to share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have +the freedom to distribute copies of free software (and charge for this +service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone +to deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must give the recipients all the rights that you +have. You must make sure that they, too, receive or can get the source +code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent +must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed + under the terms of this General Public License. The "Program", + below, refers to any such program or work, and a "work based on + the Program" means either the Program or any derivative work under + copyright law: that is to say, a work containing the Program or a + portion of it, either verbatim or with modifications and/or + translated into another language. (Hereinafter, translation is + included without limitation in the term "modification".) Each + licensee is addressed as "you". + + Activities other than copying, distribution and modification are + not covered by this License; they are outside its scope. The act + of running the Program is not restricted, and the output from the + Program is covered only if its contents constitute a work based on + the Program (independent of having been made by running the + Program). Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any + warranty; and give any other recipients of the Program a copy of + this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange + for a fee. + + 2. You may modify your copy or copies of the Program or any portion + of it, thus forming a work based on the Program, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a. You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b. You must cause any work that you distribute or publish, that + in whole or in part contains or is derived from the Program + or any part thereof, to be licensed as a whole at no charge + to all third parties under the terms of this License. + + c. If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display + an announcement including an appropriate copyright notice and + a notice that there is no warranty (or else, saying that you + provide a warranty) and that users may redistribute the + program under these conditions, and telling the user how to + view a copy of this License. (Exception: if the Program + itself is interactive but does not normally print such an + announcement, your work based on the Program is not required + to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and separate + works in themselves, then this License, and its terms, do not + apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a + whole which is a work based on the Program, the distribution of + the whole must be on the terms of this License, whose permissions + for other licensees extend to the entire whole, and thus to each + and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Program. + + In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) on + a volume of a storage or distribution medium does not bring the + other work under the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you also do one of the + following: + + a. Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Sections 1 and 2 above on a medium customarily used for + software interchange; or, + + b. Accompany it with a written offer, valid for at least three + years, to give any third-party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + + c. Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with + such an offer, in accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete + source code means all the source code for all modules it contains, + plus any associated interface definition files, plus the scripts + used to control compilation and installation of the executable. + However, as a special exception, the source code distributed need + not include anything that is normally distributed (in either + source or binary form) with the major components (compiler, + kernel, and so on) of the operating system on which the executable + runs, unless that component itself accompanies the executable. + + If distribution of executable or object code is made by offering + access to copy from a designated place, then offering equivalent + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify + or distribute the Program or its derivative works. These actions + are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Program (or any work + based on the Program), you indicate your acceptance of this + License to do so, and all its terms and conditions for copying, + distributing or modifying the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program + subject to these terms and conditions. You may not impose any + further restrictions on the recipients' exercise of the rights + granted herein. You are not responsible for enforcing compliance + by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent + issues), conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot distribute so as to satisfy simultaneously + your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the + Program at all. For example, if a patent license would not permit + royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only + way you could satisfy both it and this License would be to refrain + entirely from distribution of the Program. + + If any portion of this section is held invalid or unenforceable + under any particular circumstance, the balance of the section is + intended to apply and the section as a whole is intended to apply + in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of + any such claims; this section has the sole purpose of protecting + the integrity of the free software distribution system, which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is + willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed + to be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, + the original copyright holder who places the Program under this + License may add an explicit geographical distribution limitation + excluding those countries, so that distribution is permitted only + in or among countries not thus excluded. In such case, this + License incorporates the limitation as if written in the body of + this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies a version number of this License which applies + to it and "any later version", you have the option of following + the terms and conditions either of that version or of any later + version published by the Free Software Foundation. If the Program + does not specify a version number of this License, you may choose + any version ever published by the Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted + by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision + will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing + and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU + OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY + OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs +============================================= + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YYYY NAME OF AUTHOR + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + SIGNATURE OF TY COON, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, +you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Library General Public License instead of this License. \ No newline at end of file diff --git a/dist/ChangeLog b/dist/ChangeLog new file mode 100644 index 0000000..7af9999 --- /dev/null +++ b/dist/ChangeLog @@ -0,0 +1,198 @@ +2010-01-10 Alvaro Vega Garcia + Maria Cruz Pajares + + * TIDorbJ version 6.5.0 released. + + - Feature added [#924] IPv6 support + +2010-01-10 Alvaro Vega Garcia + + * TIDorbJ version 6.4.0 released. + + - Feature added [#797] SSLIOP layer for TIDorbJ + - Feature added [#798] Secure corbalocs + +2009-11-10 Alvaro Vega Garcia + + * TIDorbJ version 6.3.5 released. + + - Feature added [#1072] CSI support for PrintIOR + - Fix bug [#1070] Inexact UTC time + +2009-07-20 Alvaro Vega Garcia + + * TIDorbJ version 6.3.4 released. + + - Fix bug [#1038] Bug in Messaging.ExeptionHolder management + - Fix bug [#1026] Unable to retrieve the factory of a custom + compressor previously registered + - Aligned with GIOP Compression (FTF Beta 2, May 2009): changes in the + way of calc 'min_ratio' value + - Fix bug [#956] Invalid call to + org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI + +2009-04-16 Alvaro Vega Garcia + + * TIDorbJ version 6.3.3 released. + + - Feature added [844] ZIOP: GIOP Compression (FTF Beta 2) + - Fix bug [942] Server listener sockets don't set SO_REUSEADDR socket + option at initializing time + - Feature [916] Add support of QoS policies to printIOR + - Feature [842] Set TAG_ORB_TYPE requested to OMG + - Fix bug [830] recover_count at IIOPCommLayer is global, not per each + connection establishment (racecondition) + - Fix bug [544] After COMM_FAILURE ORB client doesn't retry connection + with a restarted server + +2008-06-23 Alvaro Vega Garcia + + * TIDorbJ version 6.3.2 released. + + - Fix bug [545] Interoperability problems with TAO and Visibroker due + to response_flags of GIOP RequestHeader 1.2 + - Fix bug [544] After COMM_FAILURE ORB client doesn't retry connection + with a restarted server + - Feature [419] Add dump of IIOPCommLayer properties in traces + - Fix bug [413] Java null pointer exception when creates an Any from + ORBSingleton.create_any() + +2008-02-22 Alvaro Vega Garcia + + * TIDorbJ version 6.3.1 released. + + - Fix bug [345] printIOR.sh doesn't work + - Fix bug [337] Problems with ServantActivator + - Fix bug [328] CORBA.INITIALIZE due to ClassCastException: + TIDorb.trace.level > 0 && -ORBInitRef ... + - Fix bug [282] -ORB_exhaustive_equal true doesn't have any effect + +2007-03-19 Alvaro Vega Garcia + + * TIDorbJ version 6.3.0 released. + +2007-01-16 Luis de la Fuente (ldlf07 at tid dot es) + + * TIDorbJ version 6.2.1 released. + + Fix bug [126] Problems with unsigned long long parameters + Fix bug [123] Client waits max_block_time when the server closes the socket + Fix bug [22] TIDorbJ doesn't compile with Sun JDK 1.5 + +2006-03-03 Irenka Redondo Granados (iredondo at tid dot es) + + * TIDorbJ version 6.2.0 released. + + - Implemented AMI (Asynchronous Method Invocation) + +2005-06-01 Pablo Rodriguez Archilla (pra at tid dot es) + + * TIDorbJ version 6.1.0 + + - Implemented quality of the service (QoS) management + +2004-12-10 Pablo Rodriguez Archilla (pra at tid dot es) + + * TIDorbJ version 6.0.0 released. + + * Released under GNU/GPL terms + +Thu May 20 13:58:15 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.2.0 released. + + - Aligned with CORBA 2.6 + - PolicyManager implemented + - Implemented QoS RelativeRequestTimeoutPolicy to manage timeouts of request. + This policy could be applied by reference, thread or ORB (see manual) + +Mon May 03 12:07:32 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.1.1 released. + + - Compatibility with J2SDK 1.4.x + - DynUnion.get_discriminator() already doesn't throw InvalidValue exception + +Thu Apr 29 14:25:10 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.1.0 released. + + - IDL to Java compiler has been extracted from the distribution + - New distribution of IDL to C++ compiler and IDL to Java (TIDIdlc) + - ORB API compiled with TIDIdlc version 1.0.0 + +Wed Apr 28 11:44:14 2004 Juan A. Caceres (caceres at tid dot es) + * TIDorbJ version 3.0.9 + + - New argument: + es.tid.TIDorbj.iiop.socket_write_timeout (>= 0) + Sets a timeout to avoid deadlocks in a write (caused by when buffer TCP is filled) + +Mon Mar 01 13:57:26 2004 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.8 + + - Fix in marshall of TypeCode indirections + +Fri Sep 05 13:23:55 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.7 + + - Implemented a TypeCodes Cache + - Improvements in management of bidirectional connections + - Removed bug in ServerListener + - New arguments: + es.tid.TIDorbj.typecode_cache_size (v >= 0) + es.tid.TIDorbj.iiop.server_socket_reconnect + es.tid.TIDorbj.iiop.bidirectional (BOTH-NORMAL) + +Mon Apr 21 12:44:13 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.6 + + - Improvmentes in management of IIOP connections + - New argument: es.tid.TIDorbj.iiop.socket_connect_timeout + +Mon Apr 21 12:11:32 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.5 + + - Adapted to JDK 1.4: Dynamic Invocation Interface implemented + los stubs facilitados por JDK + - Remove bug about Multithreading in Any type + +Tue Apr 08 18:30:35 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.4 + + - Changes to warranty interoperability with GIOP 1.0 + +Mon Mar 31 16:39:02 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.3 + + - Last version with chages about bugs in IDL compiler + +Thu Mar 13 10:24:41 2003 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.2 + + - Version with TIDAgent adaptations + +Wed Jun 26 08:40:48 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 3.0.1 + + - Changes to aligned with CORBA 2.5 + +Fri Apr 19 16:21:26 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 1.11.0 + + - Version with Objects by Value implemented + +Wed Apr 17 15:21:27 2002 Juan A. Caceres (caceres at tid dot es) + + * TIDorbJ version 1.0.9 + + - First stable ORB version aligned with CORBA 2.3 diff --git a/dist/INSTALL b/dist/INSTALL new file mode 100644 index 0000000..d7e8e92 --- /dev/null +++ b/dist/INSTALL @@ -0,0 +1,188 @@ +============ +INSTALLATION +============ + +1. INSTALLATION FROM BINARY DISTRIBUTION +======================================== + + +1.1 Prerequisits +---------------- + +For the compilation of TIDNotifJ next software is needed: + + * Sun Java J2SE SDK 1.4 or later. Download + * Subversion Client. Download + * Apache Ant 1.6 or later. Download + * TIDIdlc + +See TIDorbJ Compilation and Installation HOWTO where the installation of +all this required software is explained. + +Main Linux distributions (Debian, Ubuntu, RedHat, ...) have available +installation packages for this components. + + +1.2 Installation +---------------- + +Download the zipped binaries in the applications directory +and unzip with: + + $ tar xfvz TIDorbJ_X.Y.Z.tgz +or + $ gzip -d TIDorbJ_X.Y.Z.tgz | tar xfv + + +You can download directly the TIDorbJ installation binaries from MORFEO Forge +at: https://forge.morfeo-project.org/frs/?group_id=8 + + +1.3 Execution +------------- + +To execute TIDorbJ scripts in the shell, next environment variables should be +set. + +· For Unix + -------- + + export JAVA_HOME= + export TIDORBJ_HOME=/TIDorbJ + export PATH=$PATH:$TIDNOTIFJ_HOME/bin/ + + Runs with: + + $TIDNOTIFJ_HOME/bin/start + +· For Windows + ----------- + + SET JAVA_HOME= + SET TIDORBJ_HOME=\TIDorbJ + SET PATH=%PATH;%TIDORBJ_HOME%\bin + + Runs with: + + $TIDORBJ_HOME\bin\start.bat + + + +2. INSTALLATION FROM SOURCE DISTRIBUTION +======================================== + + +2.1 Prerequisits +---------------- + +For the compilation of TIDorbJ next software is needed: + + · Sun Java J2SE SDK 1.4 or later + · Subversion Client + · Apache Ant 1.6 or later + · TIDIdlc + +Main Linux distributions (Debian, Ubuntu, RedHat, ...) have available +installation packages for this components. + +Optionally, TIDorbJ can be compiled with the Eclipse IDE. + + +· Needed Software Installation under Debian & Ubuntu Linux + -------------------------------------------------------- + + - For Ubuntu Linux: + + $ sudo apt-get install subversion ant sun-java5-jdk + + + - For Debian: + $ su + + $ apt-get install subversion ant sun-java5-jdk + + Also, Other versions of Sun's JDK can also be installed from Java at Sun + MicroSystems. + + +· Java Virtual Machine installation from binaries + ----------------------------------------------- + + Download the installation zipped file from Java at Sun MicroSystems. + You should create a directory at your $HOME directory where the installation + will be done: + + $ mkdir $HOME/java + + Unzip the installation binary file (for examle, jdk-1_5_0_07-linux-586.bin): + + $ cd $HOME/java + $ chmod +x jdk-1_5_0_07-linux-586.bin + $ ./jdk-1_5_0_07-linux-586.bin + + Follow the installation program instructions to install the Java Development + Kit. + + Finally, delete the downloaded file: + + $ rm jdk-1_5_0_07-linux-586.bin + + +2.2 TIDorbJ Compilation +----------------------- + +· Source Code Download + -------------------- + + First of all, create a work directory where the source code will be + downloaded: + + $ cd + $ mkdir Morfeo + $ cd Morfeo + + Download the sorce code from the TIDorbJ Project's Subversion repository: + + $ svn checkout https://svn.morfeo-project.org/svn/tidorbj/trunk/TIDorbJ + + The Subversion client would ask for accept the server's certificate. In this + case, Accept it. + + +· Compilation with Ant + -------------------- + + Go to the TIDorbJ directory where the source code has been downloaded and + compile it with the command: + + $ cd TIDorbJ + $ ant install + + NOTE: Change the PATH if you want to compile TIDorbJ with other JDK version + + You can check the JDK version configured in the environment with: + + $ java -version + + +2.3 TIDNotifJ Installation +------------------------ + +· Installation from compiled code + ------------------------------- + + Once compiled TIDorbJ, from the source code directory (TIDorbJ), copy the + directory dist with the generated binaries of TIDNotifJ to the usual + applications directory (for example /opt): + + $ cp -r dist /TIDorbJ_X.Y + + In Linux, update the execution flags of the scripts to launch the compiler: + + chmod +x /TIDorbJ_X.Y/bin/* + + +2.4 Execution +------------- + + Idem "1.3 Execution" previous section. diff --git a/dist/OMG_SPEC b/dist/OMG_SPEC new file mode 100644 index 0000000..843abb0 --- /dev/null +++ b/dist/OMG_SPEC @@ -0,0 +1,4 @@ +This release of TIDorbJ follows: +- OMG CORBA Specification, Version 2.6 +- OMG IDL to Java Language Mapping, Version 1.3 +- OMG GIOP Compression (FTF Beta 2) diff --git a/dist/VERSION b/dist/VERSION new file mode 100644 index 0000000..74f8f54 --- /dev/null +++ b/dist/VERSION @@ -0,0 +1 @@ +6.5.0 on 2011-03-27 diff --git a/dist/bin/printIOR.bat b/dist/bin/printIOR.bat new file mode 100644 index 0000000..1f87406 --- /dev/null +++ b/dist/bin/printIOR.bat @@ -0,0 +1,9 @@ +@echo off + +set PRINT_IOR_CLASSPATH=.;%TIDORBJ_HOME%\lib\tidorbj.jar +set JVM=%JAVA_HOME%\bin\java + +%JVM% -classpath %PRINT_IOR_CLASSPATH% es.tid.TIDorbj.tools.PrintIOR %1 + +set PRINT_IOR_CLASSPATH= +set JVM= diff --git a/dist/bin/printIOR.sh b/dist/bin/printIOR.sh new file mode 100755 index 0000000..50840e8 --- /dev/null +++ b/dist/bin/printIOR.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set +u + +if [ -z "$JAVA_HOME" ]; then + echo "Environment variable JAVA_HOME must be set" + exit 1 +fi + +if [ -z "$TIDORBJ_HOME" ]; then + echo "Environment variable TIDORBJ_HOME must be set" + exit 1 +fi + + +JVM=$JDK_HOME/bin/java +PRINT_IOR_CLASSPATH=.:$TIDORBJ_HOME/lib/tidorbj.jar + +$JVM -classpath $PRINT_IOR_CLASSPATH es.tid.TIDorbj.tools.PrintIOR $* diff --git a/dist/bin/setup_TIDorbJ.bat b/dist/bin/setup_TIDorbJ.bat new file mode 100644 index 0000000..897a989 --- /dev/null +++ b/dist/bin/setup_TIDorbJ.bat @@ -0,0 +1,30 @@ +@echo off + +rem Comprueba si las variables TIDORBJ_HOME y JDK_HOME estan definidas +if "%TIDORBJ_HOME%"=="" goto error_HOME +if "%JAVA_HOME%"=="" goto error_JDK + set SRV_DIR=%TIDORBJ_HOME% + set SRV_BIN=%SRV_DIR%\bin + set SRV_LIB=%SRV_DIR%\lib + + rem Configura el PATH para los procesos del servicio + set PATH=%SRV_BIN%;%PATH% + + rem Configura el CLASSPATH con las librerias del servicio + set CLASSPATH=%SRV_LIB%\tidorbj.jar;%CLASSPATH% + + set SRV_DIR= + set SRV_BIN= + set SRV_LIB= + goto end + +:error_HOME + echo Debe configurar la variable de entorno TIDORBJ_HOME + echo. + goto end + +:error_JDK + echo Debe configurar la variable de entorno JAVA_HOME + echo. + +:end diff --git a/dist/bin/setup_TIDorbJ.sh b/dist/bin/setup_TIDorbJ.sh new file mode 100755 index 0000000..1bbb9a8 --- /dev/null +++ b/dist/bin/setup_TIDorbJ.sh @@ -0,0 +1,31 @@ +DEFAULT_HOME=/home/avega/TIDorbJ_IPv6/dist + +set +u +SRV_DIR=${TIDORBJ_HOME:-$DEFAULT_HOME} +SRV_BIN=$SRV_DIR/bin +SRV_LIB=$SRV_DIR/lib + +if [ ! -d "$SRV_DIR" ]; then + echo "Directorio de instalacion $SRV_DIR incorrecto" + echo +elif [ -z "$JDK_HOME" ]; then + echo "Debe configurar la variable de entorno JDK_HOME" + echo +else + # Variable de entorno del servicio + export TIDORBJ_HOME=$SRV_DIR + + # Configura el PATH para los procesos del servicio + if [ -z "$(echo $PATH | egrep "$SRV_BIN")" ]; then + PATH=$SRV_BIN${PATH:+:$PATH} + fi + + # Configura el CLASSPATH con las librerias del servicio + for LIB in $SRV_LIB/tidorbj.jar; do + if [ -z "$(echo $CLASSPATH | egrep "$LIB")" ]; then + CLASSPATH=$LIB${CLASSPATH:+:$CLASSPATH} + fi + done + + export PATH CLASSPATH +fi diff --git a/dist/bin/tidorbj.bat b/dist/bin/tidorbj.bat new file mode 100644 index 0000000..e444c13 --- /dev/null +++ b/dist/bin/tidorbj.bat @@ -0,0 +1,20 @@ +@echo off + +rem Obtiene la lista de argumentos de la linea de comandos +set ARGS=%1 %2 %3 %4 %5 %6 %7 %8 %9 + +if not "%OS%"=="Windows_NT" goto Win9x + set ARGS=%* + goto endif +:Win9x + shift + if "%9"=="" goto endif + set ARGS=%ARGS% %9 + goto Win9x +:endif + +set JVM=%JAVA_HOME%\bin\java +%JVM% -classpath .;%TIDORBJ_HOME%\lib\tidorbj.jar %ARGS% + +set ARGS= +set JVM= diff --git a/dist/bin/tidorbj.sh b/dist/bin/tidorbj.sh new file mode 100755 index 0000000..f832782 --- /dev/null +++ b/dist/bin/tidorbj.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set +u + +JVM=$JDK_HOME/bin/java + +$JVM -classpath .:$TIDORBJ_HOME/lib/tidorbj.jar $* diff --git a/dist/idl/BiDirPolicy.idl b/dist/idl/BiDirPolicy.idl new file mode 100644 index 0000000..892b7d3 --- /dev/null +++ b/dist/idl/BiDirPolicy.idl @@ -0,0 +1,23 @@ +#ifndef _BIDIRPOLICY_IDL_ +#define _BIDIRPOLICY_IDL_ + +#include + +#pragma prefix "omg.org" + +// Self contained module for Bi-directional GIOP policy +module BiDirPolicy { + + typedef unsigned short BidirectionalPolicyValue; + + const BidirectionalPolicyValue NORMAL = 0; + const BidirectionalPolicyValue BOTH = 1; + + const CORBA::PolicyType BIDIRECTIONAL_POLICY_TYPE = 37; + + interface BidirectionalPolicy : CORBA::Policy { + readonly attribute BidirectionalPolicyValue value; + }; +}; + +#endif // _BIDIRPOLICY_IDL_ diff --git a/dist/idl/CSI.idl b/dist/idl/CSI.idl new file mode 100644 index 0000000..dd035e1 --- /dev/null +++ b/dist/idl/CSI.idl @@ -0,0 +1,180 @@ +#ifndef _CSI_IDL_ +#define _CSI_IDL_ + +#pragma prefix "omg.org" + +module CSI { + + //typeprefix CSI "omg.org"; + + // The OMG VMCID; same value as CORBA::OMGVMCID. Do not change ever. + const unsigned long OMGVMCID = 0x4F4D0; + + // An X509CertificateChain contains an ASN.1 BER encoded SEQUENCE + // [1..MAX] OF X.509 certificates encapsulated in a sequence of octets. The + // subject's certificate shall come first in the list. Each following + // certificate shall directly certify the one preceding it. The ASN.1 + // representation of Certificate is as defined in [IETF RFC 2459]. + typedef sequence X509CertificateChain; + + // an X.501 type name or Distinguished Name encapsulated in a sequence of + // octets containing the ASN.1 encoding. + typedef sequence X501DistinguishedName; + + // UTF-8 Encoding of String + typedef sequence UTF8String; + + // ASN.1 Encoding of an OBJECT IDENTIFIER + typedef sequence OID; + typedef sequence OIDList; + + // A sequence of octets containing a GSStoken. Initial context tokens are + // ASN.1 encoded as defined in [IETF RFC 2743] 3.1, + // "Mechanism-Independent token Format", pp. 81-82. Initial context tokens + // contain an ASN.1 tag followed by a token length, a mechanism identifier, + // and a mechanism-specific token (i.e. a GSSUP::InitialContextToken). The + // encoding of all other GSS tokens (e.g. error tokens and final context + // tokens) is mechanism dependent. + typedef sequence GSSToken; + + // An encoding of a GSS Mechanism-Independent Exported Name Object as + // defined in [IETF RFC 2743] 3.2, "GSS Mechanism-Independent + // Exported Name Object Format," p. 84. + typedef sequence GSS_NT_ExportedName; + typedef sequence GSS_NT_ExportedNameList; + + // The MsgType enumeration defines the complete set of service context + // message types used by the CSI context management protocols, including + // those message types pertaining only to the stateful application of the + // protocols (to insure proper alignment of the identifiers between + // stateless and stateful implementations). Specifically, the + // MTMessageInContext is not sent by stateless clients (although it may + // be received by stateless targets). + typedef short MsgType; + const MsgType MTEstablishContext = 0; + const MsgType MTCompleteEstablishContext = 1; + const MsgType MTContextError = 4; + const MsgType MTMessageInContext = 5; + + // The ContextId type is used carry session identifiers. A stateless + // application of the service context protocol is indicated by a session + // identifier value of 0. + typedef unsigned long long ContextId; + + // The AuthorizationElementType defines the contents and encoding of + // the_element field of the AuthorizationElement. + // The high order 20-bits of each AuthorizationElementType constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the element type. The low order 12 bits + // shall contain the organization-scoped element type identifier. The + // high-order 20 bits of all element types defined by the OMG shall + // contain the VMCID allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long AuthorizationElementType; + + // An AuthorizationElementType of X509AttributeCertChain indicates that + // the_element field of the AuthorizationElement contains an ASN.1 BER + // SEQUENCE composed of an (X.509) AttributeCertificate followed by a + // SEQUENCE OF (X.509) Certificate. The two-part SEQUENCE is encapsulated + // in an octet stream. // The chain of identity certificates is provided + // shall directly certify the one preceding it. The first certificate + // in the chain shall certify the attribute certificate. The ASN.1 + // representation of (X.509) Certificate is as defined in [IETF RFC 2459]. + // The ASN.1 representation of (X.509) AtributeCertificate is as defined + // in [IETF ID PKIXAC]. + const AuthorizationElementType X509AttributeCertChain = OMGVMCID | 1; + typedef sequence AuthorizationElementContents; + + // The AuthorizationElement contains one element of an authorization token. + // Each element of an authorization token is logically a PAC. + struct AuthorizationElement { + AuthorizationElementType the_type; + AuthorizationElementContents the_element; + }; + + // The AuthorizationToken is made up of a sequence of + // AuthorizationElements + typedef sequence AuthorizationToken; + typedef unsigned long IdentityTokenType; + + // Additional standard identity token types shall only be defined by the + // OMG. All IdentityTokenType constants shall be a power of 2. + const IdentityTokenType ITTAbsent = 0; + const IdentityTokenType ITTAnonymous = 1; + const IdentityTokenType ITTPrincipalName = 2; + const IdentityTokenType ITTX509CertChain = 4; + const IdentityTokenType ITTDistinguishedName = 8; + + typedef sequence IdentityExtension; + + union IdentityToken switch ( IdentityTokenType ) { + case ITTAbsent: boolean absent; + case ITTAnonymous: boolean anonymous; + case ITTPrincipalName: GSS_NT_ExportedName principal_name; + case ITTX509CertChain: X509CertificateChain certificate_chain; + case ITTDistinguishedName: X501DistinguishedName dn; + default: IdentityExtension id; + }; + + struct EstablishContext { + ContextId client_context_id; + AuthorizationToken authorization_token; + IdentityToken identity_token; + GSSToken client_authentication_token; + }; + + struct CompleteEstablishContext { + ContextId client_context_id; + boolean context_stateful; + GSSToken final_context_token; + }; + + struct ContextError { + ContextId client_context_id; + long major_status; + long minor_status; + GSSToken error_token; + }; + + // Not sent by stateless clients. If received by a stateless server, a + // ContextError message should be returned, indicating the session does + // not exist. + struct MessageInContext { + ContextId client_context_id; + boolean discard_context; + }; + + union SASContextBody switch ( MsgType ) { + case MTEstablishContext: EstablishContext establish_msg; + case MTCompleteEstablishContext: CompleteEstablishContext complete_msg; + case MTContextError: ContextError error_msg; + case MTMessageInContext: MessageInContext in_context_msg; + }; + + // The following type represents the string representation of an ASN.1 + // OBJECT IDENTIFIER (OID). OIDs are represented by the string "oid:" + // followed by the integer base 10 representation of the OID separated + // by dots. For example, the OID corresponding to the OMG is represented + // as: "oid:2.23.130" + typedef string StringOID; + + // The GSS Object Identifier for the KRB5 mechanism is: + // { iso(1) member-body(2) United States(840) mit(113554) infosys(1) + // gssapi(2) krb5(2) } + const StringOID KRB5MechOID = "oid:1.2.840.113554.1.2.2"; + + // The GSS Object Identifier for name objects of the Mechanism-independent + // Exported Name Object type is: + // { iso(1) org(3) dod(6) internet(1) security(5) nametypes(6) + // gss-api-exported-name(4) } + const StringOID GSS_NT_Export_Name_OID = "oid:1.3.6.1.5.6.4"; + + // The GSS Object Identifier for the scoped-username name form is: + // { iso-itu-t (2) international-organization (23) omg (130) security (1) + // naming (2) scoped-username(1) } + const StringOID GSS_NT_Scoped_Username_OID = "oid:2.23.130.1.2.1"; + +}; // CSI + +#endif + + diff --git a/dist/idl/CSIIOP.idl b/dist/idl/CSIIOP.idl new file mode 100644 index 0000000..07128a5 --- /dev/null +++ b/dist/idl/CSIIOP.idl @@ -0,0 +1,116 @@ +#ifndef _CSIIOP_IDL_ +#define _CSIIOP_IDL_ + +#include +#include "CSI.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module CSIIOP { + + //typeprefix CIIOP "omg.org"; + + // Association options + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + const AssociationOptions IdentityAssertion = 1024; + const AssociationOptions DelegationByClient = 2048; + + // The high order 20-bits of each ServiceConfigurationSyntax constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the syntax. The low order 12 bits shall + // contain the organization-scoped syntax identifier. The high-order 20 + // bits of all syntaxes defined by the OMG shall contain the VMCID + // allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long ServiceConfigurationSyntax; + const ServiceConfigurationSyntax SCS_GeneralNames = CSI::OMGVMCID | 0; + const ServiceConfigurationSyntax SCS_GSSExportedName = CSI::OMGVMCID | 1; + typedef sequence ServiceSpecificName; + + // The name field of the ServiceConfiguration structure identifies a + // privilege authority in the format identified in the syntax field. If the + // syntax is SCS_GeneralNames, the name field contains an ASN.1 (BER) + // SEQUENCE [1..MAX] OF GeneralName, as defined by the type GeneralNames in + // [IETF RFC 2459]. If the syntax is SCS_GSSExportedName, the name field + // contains a GSS exported name encoded according to the rules in + // [IETF RFC 2743] 3.2, "Mechanism-Independent Exported Name + // Object Format," p. 84. + struct ServiceConfiguration { + ServiceConfigurationSyntax syntax; + ServiceSpecificName name; + }; + typedef sequence ServiceConfigurationList; + + // The body of the TAG_NULL_TAG component is a sequence of octets of + // length 0. + // type used to define AS layer functionality within a compound mechanism + // definition + struct AS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID client_authentication_mech; + CSI::GSS_NT_ExportedName target_name; + }; + + // type used to define SAS layer functionality within a compound mechanism + // definition + struct SAS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + ServiceConfigurationList privilege_authorities; + CSI::OIDList supported_naming_mechanisms; + CSI::IdentityTokenType supported_identity_types; + }; + + // type used in the body of a TAG_CSI_SEC_MECH_LIST component to + // describe a compound mechanism + struct CompoundSecMech { + AssociationOptions target_requires; + IOP::TaggedComponent transport_mech; + AS_ContextSec as_context_mech; + SAS_ContextSec sas_context_mech; + }; + typedef sequence CompoundSecMechanisms; + + // type corresponding to the body of a TAG_CSI_SEC_MECH_LIST + // component + struct CompoundSecMechList { + boolean stateful; + CompoundSecMechanisms mechanism_list; + }; + struct TransportAddress { + string host_name; + unsigned short port; + }; + typedef sequence TransportAddressList; + + // Tagged component for configuring SECIOP as a CSIv2 transport mechanism + const IOP::ComponentId TAG_SECIOP_SEC_TRANS = 35; + + struct SECIOP_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID mech_oid; + CSI::GSS_NT_ExportedName target_name; + TransportAddressList addresses; + }; + // tagged component for configuring TLS/SSL as a CSIv2 transport mechanism + const IOP::ComponentId TAG_TLS_SEC_TRANS = 36; + struct TLS_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + TransportAddressList addresses; + }; + +}; //CSIIOP +#endif diff --git a/dist/idl/Compression.idl b/dist/idl/Compression.idl new file mode 100644 index 0000000..18894ee --- /dev/null +++ b/dist/idl/Compression.idl @@ -0,0 +1,185 @@ +// -*- IDL -*- + +#ifndef _COMPRESSION_ +#define _COMPRESSION_ + +#include + +#pragma prefix "omg.org" + +module Compression +{ + + /** + * Exception thrown when an error occurs during a compress or decompress + * operation. + */ + exception CompressionException + { + long reason; + string description; + }; + + /** + * Exception thrown if a CompressorFactory with the same CompressorId is + * already registered with the CompressionManager. + */ + exception FactoryAlreadyRegistered + { + }; + + /** + * Exception thrown if a CompressorId is not known. + */ + exception UnknownCompressorId + { + }; + + /** + * CompressorId type. + */ + typedef unsigned short CompressorId; + const CompressorId COMPRESSORID_NONE = 0; + const CompressorId COMPRESSORID_GZIP = 1; + const CompressorId COMPRESSORID_PKZIP = 2; + const CompressorId COMPRESSORID_BZIP2 = 3; + const CompressorId COMPRESSORID_ZLIB = 4; + const CompressorId COMPRESSORID_LZMA = 5; + const CompressorId COMPRESSORID_LZOP = 6; + const CompressorId COMPRESSORID_RZIP = 7; + const CompressorId COMPRESSORID_7X = 8; + const CompressorId COMPRESSORID_XAR = 9; + + + + /** + * CompressorIdList type. + */ + //typedef sequence CompressorIdList; + + + + /** + * CompressionLevel type. + */ + typedef unsigned short CompressionLevel; + typedef float CompressionRatio; + + struct CompressorIdLevel { + CompressorId compressor_id; + CompressionLevel compression_level; + }; + typedef sequence CompressorIdLevelList; + + typedef CORBA::OctetSeq Buffer; + + local interface CompressorFactory; + + /** + * Compressor - abstraction of a compressor and decompressor. + */ + local interface Compressor + { + /** + * Operation that compresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the compression, it + * throws CompressionException + */ + void compress(in Buffer source, inout Buffer target) + raises (CompressionException); + /** + * Operation that decompresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the decompression, it + * throws CompressionException + */ + void decompress(in Buffer source, inout Buffer target) + raises(CompressionException); + /** + * The CompressorFactory associated with this Compressor. + */ + readonly attribute CompressorFactory compressor_factory; + /** + * The (implementation and algorithm specific) compression level + * associated with this Compressor. + */ + readonly attribute CompressionLevel compression_level; + /** + * The total number of compressed bytes read and written by Compressors + * that were created by this CompressorFactory + * (i.e. the "target" side of Compressor::compress and + * the "source" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long compressed_bytes; + /** + * The total number of uncompressed bytes read and written by + * Compressors that were created by this CompressorFactory + * (i.e. the "source" side of Compressor::compress and + * the "target" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long uncompressed_bytes; + /** + * This attribute represents the compression ratio achieved by + * this compressor. The ratio can be obtained with the following + * formula: 100 - (compressed_length / original_length)*100. + */ + readonly attribute CompressionRatio compression_ratio; + + }; + + local interface CompressorFactory + { + /** + * The CompressorId associated with this CompressorFactory + */ + readonly attribute CompressorId compressor_id; + + /** + * Create a Compressor instance with the given compression level. + */ + Compressor get_compressor(in CompressionLevel compression_level); + }; + + typedef sequence CompressorFactorySeq; + + /** + * Per-ORB interface to register and unregister CompressorFactories. + * Initial reference: "CompressionManager" + */ + local interface CompressionManager + { + /** + * Register a new CompressorFactory + */ + void register_factory(in CompressorFactory compressor_factory) + raises(FactoryAlreadyRegistered); + /** + * Unregister a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + void unregister_factory(in CompressorId compressor_id) + raises (UnknownCompressorId); + /** + * Retrieve a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + CompressorFactory get_factory(in CompressorId compressor_id) + raises(UnknownCompressorId); + /** + * Create a Compressor with the given compression_level from the + * CompressorFactory with the given CompressorId + */ + Compressor get_compressor(in CompressorId compressor_id, + in CompressionLevel compression_level) + raises(UnknownCompressorId); + /** + * List all registered CompressorFactories + */ + CompressorFactorySeq get_factories(); + + + }; + + +}; + +#endif diff --git a/dist/idl/CosNaming.idl b/dist/idl/CosNaming.idl new file mode 100644 index 0000000..2cdb8f7 --- /dev/null +++ b/dist/idl/CosNaming.idl @@ -0,0 +1,108 @@ +// File: CosNaming.idl + +#ifndef _COSNAMING_IDL_ +#define _COSNAMING_IDL_ + +#pragma prefix "omg.org" + +module CosNaming { + typedef string Istring; + + struct NameComponent { + Istring id; + Istring kind; + }; + + typedef sequence Name; + + enum BindingType { nobject, ncontext }; + + struct Binding { + Name binding_name; + BindingType binding_type; + }; + + // Note: In struct Binding, binding_name is incorrectly defined + // as a Name instead of a NameComponent. This definition is + // unchanged for compatibility reasons. + + typedef sequence BindingList; + + interface BindingIterator; + + interface NamingContext { + enum NotFoundReason { missing_node, not_context, not_object }; + + exception NotFound { + NotFoundReason why; + Name rest_of_name; + }; + + exception CannotProceed { + NamingContext cxt; + Name rest_of_name; + }; + + exception InvalidName{}; + exception AlreadyBound {}; + exception NotEmpty{}; + + void bind(in Name n, in Object obj) + raises( NotFound, CannotProceed, InvalidName, AlreadyBound ); + + void rebind(in Name n, in Object obj) + raises(NotFound, CannotProceed, InvalidName); + + void bind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName, AlreadyBound); + + void rebind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName); + + Object resolve (in Name n) raises(NotFound, CannotProceed, InvalidName); + + void unbind(in Name n) raises(NotFound, CannotProceed, InvalidName); + + NamingContext new_context(); + + NamingContext bind_new_context(in Name n) + raises( NotFound, AlreadyBound, CannotProceed, InvalidName ); + + void destroy() raises(NotEmpty); + + void list( in unsigned long how_many, out BindingList bl, out BindingIterator bi ); + + }; + + interface BindingIterator { + + boolean next_one(out Binding b); + + boolean next_n(in unsigned long how_many, out BindingList bl); + + void destroy(); + + }; + + interface NamingContextExt: NamingContext { + + typedef string StringName; + typedef string Address; + typedef string URLString; + + StringName to_string(in Name n) raises(InvalidName); + + Name to_name(in StringName sn) raises(InvalidName); + + exception InvalidAddress {}; + + URLString to_url(in Address addr, in StringName sn) + raises(InvalidAddress, InvalidName); + + Object resolve_str(in StringName sn) + raises( NotFound, CannotProceed, InvalidName); + }; + +}; + +#endif // _COSNAMING_IDL_ diff --git a/dist/idl/Dynamic.idl b/dist/idl/Dynamic.idl new file mode 100644 index 0000000..0c10554 --- /dev/null +++ b/dist/idl/Dynamic.idl @@ -0,0 +1,19 @@ +// File: Dynamic.idl +// CORBA 3.0, Chapter 21 + +#pragma prefix "omg.org" +#include + +module Dynamic { + + struct Parameter { + any argument; + CORBA::ParameterMode mode; + }; + + typedef sequence ParameterList; + typedef CORBA::StringSeq ContextList; + typedef sequence ExceptionList; + typedef CORBA::StringSeq RequestContext; + +}; // module Dynamic diff --git a/dist/idl/DynamicAny.idl b/dist/idl/DynamicAny.idl new file mode 100644 index 0000000..c588842 --- /dev/null +++ b/dist/idl/DynamicAny.idl @@ -0,0 +1,290 @@ +// IDL +// File: DynamicAny.idl +#ifndef _DYNAMIC_ANY_IDL_ +#define _DYNAMIC_ANY_IDL_ + +#include + +#pragma prefix "omg.org" + +module DynamicAny { + local interface DynAny { + + exception InvalidValue {}; + exception TypeMismatch {}; + + CORBA::TypeCode type(); + + void assign(in DynAny dyn_any) raises(TypeMismatch); + + void from_any(in any value) raises(TypeMismatch, InvalidValue); + + any to_any(); + + boolean equal(in DynAny dyn_any); + + void destroy(); + + DynAny copy(); + + void insert_boolean(in boolean value) raises(TypeMismatch, InvalidValue); + void insert_octet(in octet value) raises(TypeMismatch, InvalidValue); + void insert_char(in char value) raises(TypeMismatch, InvalidValue); + void insert_short(in short value) raises(TypeMismatch, InvalidValue); + void insert_ushort(in unsigned short value) raises(TypeMismatch,InvalidValue); + void insert_long(in long value) raises(TypeMismatch, InvalidValue); + void insert_ulong(in unsigned long value) raises(TypeMismatch,InvalidValue); + void insert_float(in float value) raises(TypeMismatch, InvalidValue); + void insert_double(in double value) raises(TypeMismatch, InvalidValue); + void insert_string(in string value) raises(TypeMismatch, InvalidValue); + void insert_reference(in Object value) raises(TypeMismatch, InvalidValue); + void insert_typecode(in CORBA::TypeCode value) raises(TypeMismatch,InvalidValue); + void insert_longlong(in long long value) raises(TypeMismatch,InvalidValue); + void insert_ulonglong(in unsigned long long value) raises(TypeMismatch,InvalidValue); + //void insert_longdouble(in long double value) raises(TypeMismatch,InvalidValue); + void insert_wchar(in wchar value) raises(TypeMismatch, InvalidValue); + void insert_wstring(in wstring value) raises(TypeMismatch, InvalidValue); + void insert_any(in any value) raises(TypeMismatch, InvalidValue); + void insert_dyn_any(in DynAny value) raises(TypeMismatch, InvalidValue); + void insert_val(in ValueBase value) raises(TypeMismatch, InvalidValue); + + boolean get_boolean() raises(TypeMismatch, InvalidValue); + octet get_octet() raises(TypeMismatch, InvalidValue); + char get_char() raises(TypeMismatch, InvalidValue); + short get_short() raises(TypeMismatch, InvalidValue); + unsigned short get_ushort() raises(TypeMismatch, InvalidValue); + long get_long() raises(TypeMismatch, InvalidValue); + unsigned long get_ulong() raises(TypeMismatch, InvalidValue); + float get_float() raises(TypeMismatch, InvalidValue); + double get_double() raises(TypeMismatch, InvalidValue); + string get_string() raises(TypeMismatch, InvalidValue); + Object get_reference() raises(TypeMismatch, InvalidValue); + CORBA::TypeCode get_typecode() raises(TypeMismatch, InvalidValue); + long long get_longlong() raises(TypeMismatch, InvalidValue); + unsigned long long get_ulonglong() raises(TypeMismatch, InvalidValue); + //long double get_longdouble() raises(TypeMismatch, InvalidValue); + wchar get_wchar() raises(TypeMismatch, InvalidValue); + wstring get_wstring() raises(TypeMismatch, InvalidValue); + any get_any() raises(TypeMismatch, InvalidValue); + DynAny get_dyn_any() raises(TypeMismatch, InvalidValue); + ValueBase get_val() raises(TypeMismatch, InvalidValue); + + boolean seek(in long index); + void rewind(); + boolean next(); + unsigned long component_count(); + DynAny current_component() raises(TypeMismatch); + + void insert_abstract(in CORBA::AbstractBase value) + raises(TypeMismatch, InvalidValue); + + CORBA::AbstractBase get_abstract() + raises(TypeMismatch, InvalidValue); + + void insert_boolean_seq(in CORBA::BooleanSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_octet_seq(in CORBA::OctetSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_char_seq(in CORBA::CharSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_short_seq(in CORBA::ShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ushort_seq(in CORBA::UShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_long_seq(in CORBA::LongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulong_seq(in CORBA::ULongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_float_seq(in CORBA::FloatSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_double_seq(in CORBA::DoubleSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_longlong_seq(in CORBA::LongLongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulonglong_seq(in CORBA::ULongLongSeq value) + raises(TypeMismatch, InvalidValue); + + // void insert_longdouble_seq(in CORBA::LongDoubleSeq value) + // raises(TypeMismatch, InvalidValue); + + void insert_wchar_seq(in CORBA::WCharSeq value) + raises(TypeMismatch, InvalidValue); + + CORBA::BooleanSeq get_boolean_seq() raises(TypeMismatch, InvalidValue); + + CORBA::OctetSeq get_octet_seq() raises(TypeMismatch, InvalidValue); + + CORBA::CharSeq get_char_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ShortSeq get_short_seq() raises(TypeMismatch, InvalidValue); + + CORBA::UShortSeq get_ushort_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongSeq get_long_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongSeq get_ulong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::FloatSeq get_float_seq() raises(TypeMismatch, InvalidValue); + + CORBA::DoubleSeq get_double_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongLongSeq get_longlong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongLongSeq get_ulonglong_seq() raises(TypeMismatch, InvalidValue); + + // CORBA::LongDoubleSeq get_longdouble_seq() raises(TypeMismatch, InvalidValue); + + CORBA::WCharSeq get_wchar_seq() raises(TypeMismatch, InvalidValue); + + }; + + local interface DynFixed: DynAny { + string get_value(); + boolean set_value(in string val) raises(TypeMismatch, InvalidValue); + }; + + + local interface DynEnum : DynAny { + string get_as_string(); + void set_as_string(in string value) raises(InvalidValue); + unsigned long get_as_ulong(); + void set_as_ulong(in unsigned long value) raises(InvalidValue); + }; + + typedef string FieldName; + struct NameValuePair { + FieldName id; + any value; + }; + + typedef sequence NameValuePairSeq; + + struct NameDynAnyPair { + FieldName id; + DynAny value; + }; + + typedef sequence NameDynAnyPairSeq; + + local interface DynStruct : DynAny { + + FieldName current_member_name() raises(TypeMismatch, InvalidValue); + + CORBA::TCKind current_member_kind() raises(TypeMismatch, InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) + raises(TypeMismatch, InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) + raises(TypeMismatch, InvalidValue); + }; + + + local interface DynUnion : DynAny { + + DynAny get_discriminator(); + + void set_discriminator(in DynAny d) raises(TypeMismatch); + + void set_to_default_member() raises(TypeMismatch); + + void set_to_no_active_member() raises(TypeMismatch); + + boolean has_no_active_member(); + + CORBA::TCKind discriminator_kind(); + + DynAny member() raises(InvalidValue); + + FieldName member_name() raises(InvalidValue); + + CORBA::TCKind member_kind() raises(InvalidValue); + + }; + + typedef sequence AnySeq; + + typedef sequence DynAnySeq; + + local interface DynSequence : DynAny { + + unsigned long get_length(); + + void set_length(in unsigned long len) raises(InvalidValue); + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch,InvalidValue); + + }; + + local interface DynArray : DynAny { + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch, InvalidValue); + + }; + + local interface DynValueCommon : DynAny { + + boolean is_null(); + + void set_to_null(); + + void set_to_value(); + + }; + + local interface DynValue : DynValueCommon { + + FieldName current_member_name()raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + CORBA::TCKind current_member_kind() raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + }; + + local interface DynAnyFactory { + + exception InconsistentTypeCode {}; + + DynAny create_dyn_any(in any value) raises(InconsistentTypeCode); + + DynAny create_dyn_any_from_type_code(in CORBA::TypeCode type) raises(InconsistentTypeCode); + + }; + +}; // module DynamicAny + +#endif // _DYNAMIC_ANY_IDL_ + diff --git a/dist/idl/GIOP.idl b/dist/idl/GIOP.idl new file mode 100644 index 0000000..263497f --- /dev/null +++ b/dist/idl/GIOP.idl @@ -0,0 +1,200 @@ + +#include "IOP.idl" + +#pragma prefix "omg.org" + +module GIOP { // IDL extended for version 1.1 and 1.2 + + struct Version { + octet major; + octet minor; + }; + + #ifndef GIOP_1_1 + // GIOP 1.0 + enum MsgType_1_0{ // rename from MsgType + Request, Reply, CancelRequest, + LocateRequest, LocateReply, + CloseConnection, MessageError + }; + #else + // GIOP 1.1 + enum MsgType_1_1{ + Request, Reply, CancelRequest, + LocateRequest, LocateReply, + CloseConnection, MessageError, + Fragment // GIOP 1.1 addition + }; + #endif + + // GIOP 1.0 + struct MessageHeader_1_0 {// Renamed from MessageHeader + char magic [4]; + Version GIOP_version; + boolean byte_order; + octet message_type; + unsigned long message_size; + }; + + // GIOP 1.1 + struct MessageHeader_1_1 { + char magic [4]; + Version GIOP_version; + octet flags; // GIOP 1.1 change + octet message_type; + unsigned long message_size; + }; + + // GIOP 1.2 + typedef MessageHeader_1_1 MessageHeader_1_2; + + // GIOP 1.0 + struct RequestHeader _1_0 { + IOP::ServiceContextList service_context; + unsigned long request_id; + boolean response_expected; + sequence object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.1 + struct RequestHeader_1_1 { + IOP::ServiceContextList service_context; + unsigned long request_id; + boolean response_expected; + octet reserved[3]; // Added in GIOP 1.1 + sequence object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.2 + typedef short AddressingDisposition; + const short KeyAddr = 0; + const short ProfileAddr = 1; + const short ReferenceAddr = 2; + + struct IORAddressingInfo { + unsigned long selected_profile_index; + IOP::IOR ior; + }; + + union TargetAddress switch (AddressingDisposition) { + case KeyAddr: sequence object_key; + case ProfileAddr: IOP::TaggedProfile profile; + case ReferenceAddr: IORAddressingInfo ior; + }; + + struct RequestHeader_1_2 { + unsigned long request_id; + octet response_flags; + octet reserved[3]; + TargetAddress target; + string operation; + // requesting_principal not in GIOP 1.2 + IOP::ServiceContextList service_context; // 1.2 change + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum ReplyStatusType_1_0 {// Renamed from ReplyStatusType + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD + }; + + // GIOP 1.0 + struct ReplyHeader_1_0 {// Renamed from ReplyHeader + IOP::ServiceContextList service_context; + unsigned long request_id; + ReplyStatusType_1_0 reply_status; + }; + + // GIOP 1.1 + typedef ReplyHeader_1_0 ReplyHeader_1_1; + + // Same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum ReplyStatusType_1_2 { + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD, + LOCATION_FORWARD_PERM, // new value for 1.2 + NEEDS_ADDRESSING_MODE // new value for 1.2 + }; + struct ReplyHeader_1_2 { + unsigned long request_id; + ReplyStatusType_1_2 reply_status; + IOP:ServiceContextList service_context; // 1.2 change + }; + #endif // GIOP_1_2 + + struct SystemExceptionReplyBody { + string exception_id; + unsigned long minor_code_value; + unsigned long completion_status; + }; + + struct CancelRequestHeader { + unsigned long request_id; + }; + + // GIOP 1.0 + struct LocateRequestHeader_1_0 { + // Renamed LocationRequestHeader + unsigned long request_id; + sequence object_key; + }; + // GIOP 1.1 + typedef LocateRequestHeader_1_0 LocateRequestHeader_1_1; + // Same Header contents for 1.0 and 1.1 + + // GIOP 1.2 + struct LocateRequestHeader_1_2 { + unsigned long request_id; + TargetAddress target; + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum LocateStatusType_1_0 {// Renamed from LocateStatusType + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD + }; + + // GIOP 1.0 + struct LocateReplyHeader_1_0 { + // Renamed from LocateReplyHeader + unsigned long request_id; + LocateStatusType_1_0 locate_status; + }; + + // GIOP 1.1 + typedef LocateReplyHeader_1_0 LocateReplyHeader_1_1; + // same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum LocateStatusType_1_2 { + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD, + OBJECT_FORWARD_PERM, // new value for GIOP 1.2 + LOC_SYSTEM_EXCEPTION, // new value for GIOP 1.2 + LOC_NEEDS_ADDRESSING_MODE // new value for GIOP 1.2 + }; + struct LocateReplyHeader_1_2 { + unsigned long request_id; + LocateStatusType_1_2 locate_status; + }; + #endif // GIOP_1_2 + + // GIOP 1.2 + struct FragmentHeader_1_2 { + unsigned long request_id; + }; +}; \ No newline at end of file diff --git a/dist/idl/IIOP.idl b/dist/idl/IIOP.idl new file mode 100644 index 0000000..cefadf1 --- /dev/null +++ b/dist/idl/IIOP.idl @@ -0,0 +1,37 @@ +#include "IOP.idl" + +#pragma prefix "omg.org" + +module IIOP { // IDL extended for version 1.1 and 1.2 + struct Version { + octet major; + octet minor; + }; + + struct ProfileBody_1_0 {// renamed from ProfileBody + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + }; + + struct ProfileBody_1_1 {// also used for 1.2 + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + // Added in 1.1 unchanged for 1.2 + sequence components; + }; + + struct ListenPoint { + string host; + unsigned short port; + }; + + typedef sequence ListenPointList; + + struct BiDirIIOPServiceContext {// BI_DIR_IIOP Service Context + ListenPointList listen_points; + }; +}; \ No newline at end of file diff --git a/dist/idl/IOP.idl b/dist/idl/IOP.idl new file mode 100644 index 0000000..e73d551 --- /dev/null +++ b/dist/idl/IOP.idl @@ -0,0 +1,134 @@ + +#include + +#pragma prefix "omg.org" + +module IOP { + + // Standard Protocol Profile tag values + + typedef unsigned long ProfileId; + + const ProfileId TAG_INTERNET_IOP = 0; + + const ProfileId TAG_MULTIPLE_COMPONENTS = 1; + + struct TaggedProfile { + ProfileId tag; + sequence profile_data; + }; + + // an Interoperable Object Reference is a sequence of + // object-specific protocol profiles, plus a type ID. + struct IOR { + string type_id; + sequence profiles; + }; + + // Standard way of representing multicomponent profiles. + + // This would be encapsulated in a TaggedProfile. + + typedef unsigned long ComponentId; + + struct TaggedComponent { + ComponentId tag; + sequence component_data; + }; + + + typedef sequence MultipleComponentProfile; + + typedef sequence TaggedComponentSeq; + + // CORBA 2.4 + const ComponentId TAG_ORB_TYPE = 0; + const ComponentId TAG_CODE_SETS = 1; + const ComponentId TAG_POLICIES = 2; + const ComponentId TAG_ALTERNATE_IIOP_ADDRESS = 3; + const ComponentId TAG_ASSOCIATION_OPTIONS = 13; + const ComponentId TAG_SEC_NAME = 14; + const ComponentId TAG_SPKM_1_SEC_MECH = 15; + const ComponentId TAG_SPKM_2_SEC_MECH = 16; + const ComponentId TAG_KerberosV5_SEC_MECH = 17; + const ComponentId TAG_CSI_ECMA_Secret_SEC_MECH = 18; + const ComponentId TAG_CSI_ECMA_Hybrid_SEC_MECH = 19; + const ComponentId TAG_SSL_SEC_TRANS = 20; + const ComponentId TAG_CSI_ECMA_Public_SEC_MECH = 21; + const ComponentId TAG_GENERIC_SEC_MECH = 22; + const ComponentId TAG_FIREWALL_TRANS = 23; + const ComponentId TAG_SCCP_CONTACT_INFO = 24; + const ComponentId TAG_JAVA_CODEBASE = 25; + const ComponentId TAG_TRANSACTION_POLICY = 26; + const ComponentId TAG_MESSAGE_ROUTERS = 30; + const ComponentId TAG_OTS_POLICY = 31; + const ComponentId TAG_INV_POLICY = 32; + const ComponentId TAG_CSI_SEC_MECH_LIST = 33; + const ComponentId TAG_NULL_TAG = 34; + const ComponentId TAG_TLS_SEC_TRANS = 36; + const ComponentId TAG_INET_SEC_TRANS = 123; + const ComponentId TAG_COMPLETE_OBJECT_KEY = 5; + const ComponentId TAG_ENDPOINT_ID_POSITION = 6; + const ComponentId TAG_LOCATION_POLICY = 12; + const ComponentId TAG_DCE_STRING_BINDING = 100; + const ComponentId TAG_DCE_BINDING_NAME = 101; + const ComponentId TAG_DCE_NO_PIPES = 102; + const ComponentId TAG_DCE_SEC_MECH = 103; // Security Service + + typedef unsigned long ServiceId; + + struct ServiceContext { + ServiceId context_id; + sequence context_data; + }; + + typedef sequence ServiceContextList; + + const ServiceId TransactionService = 0; + const ServiceId CodeSets = 1; + const ServiceId ChainBypassCheck = 2; + const ServiceId ChainBypassInfo = 3; + const ServiceId LogicalThreadId = 4; + const ServiceId BI_DIR_IIOP = 5; + const ServiceId SendingContextRunTime = 6; + const ServiceId INVOCATION_POLICIES = 7; + const ServiceId FORWARDED_IDENTITY = 8; + const ServiceId UnknownExceptionInfo = 9; + const ServiceId RTCorbaPriority = 10; + const ServiceId RTCorbaPriorityRange = 11; + const ServiceId ExceptionDetailMessage = 14; + const ServiceId SecurityAttributeService = 15; + + local interface Codec { + + exception InvalidTypeForEncoding {}; + exception FormatMismatch {}; + exception TypeMismatch {}; + + CORBA::OctetSeq encode (in any data) raises (InvalidTypeForEncoding); + + any decode (in CORBA::OctetSeq data) raises (FormatMismatch); + + CORBA::OctetSeq encode_value (in any data) raises (InvalidTypeForEncoding); + + any decode_value (in CORBA::OctetSeq data, in CORBA::TypeCode tc) + raises (FormatMismatch, TypeMismatch); + }; + + + typedef short EncodingFormat; + + const EncodingFormat ENCODING_CDR_ENCAPS = 0; + + struct Encoding { + EncodingFormat format; + octet major_version; + octet minor_version; + }; + + local interface CodecFactory { + exception UnknownEncoding {}; + + Codec create_codec (in Encoding enc) raises (UnknownEncoding); + }; +}; diff --git a/dist/idl/Messaging.idl b/dist/idl/Messaging.idl new file mode 100644 index 0000000..c1cde05 --- /dev/null +++ b/dist/idl/Messaging.idl @@ -0,0 +1,171 @@ +#ifndef __CORBA_MESSAGING_ +#define __CORBA_MESSAGING_ + +#include +#include "IOP.idl" +#include "TimeBase.idl" +#include "Dynamic.idl" + +#pragma prefix "omg.org" + +module Messaging { + + typedef short RebindMode; + const RebindMode TRANSPARENT = 0; + const RebindMode NO_REBIND = 1; + const RebindMode NO_RECONNECT = 2; + + typedef short SyncScope; + const SyncScope SYNC_NONE = 0; + const SyncScope SYNC_WITH_TRANSPORT = 1; + const SyncScope SYNC_WITH_SERVER = 2; + const SyncScope SYNC_WITH_TARGET = 3; + + typedef short RoutingType; + const RoutingType ROUTE_NONE = 0; + const RoutingType ROUTE_FORWARD = 1; + const RoutingType ROUTE_STORE_AND_FORWARD = 2; + + + typedef short Priority; + + typedef unsigned short Ordering; + const Ordering ORDER_ANY = 0x01; + const Ordering ORDER_TEMPORAL = 0x02; + const Ordering ORDER_PRIORITY = 0x04; + const Ordering ORDER_DEADLINE = 0x08; + + // Rebind Policy (default = TRANSPARENT) + + const CORBA::PolicyType REBIND_POLICY_TYPE = 23; + + local interface RebindPolicy : CORBA::Policy { + readonly attribute RebindMode rebind_mode; + }; + + // Synchronization Policy (default = SYNC_WITH_TRANSPORT) + + const CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24; + local interface SyncScopePolicy : CORBA::Policy { + readonly attribute SyncScope synchronization; + }; + + // Priority Policies + + const CORBA::PolicyType REQUEST_PRIORITY_POLICY_TYPE = 25; + + struct PriorityRange { + Priority min; + Priority max; + }; + + local interface RequestPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + const CORBA::PolicyType REPLY_PRIORITY_POLICY_TYPE = 26; + + interface ReplyPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + // Timeout Policies + + const CORBA::PolicyType REQUEST_START_TIME_POLICY_TYPE = 27; + + local interface RequestStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REQUEST_END_TIME_POLICY_TYPE = 28; + + local interface RequestEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType REPLY_START_TIME_POLICY_TYPE = 29; + + local interface ReplyStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REPLY_END_TIME_POLICY_TYPE = 30; + + local interface ReplyEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31; + + local interface RelativeRequestTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32; + + local interface RelativeRoundtripTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType ROUTING_POLICY_TYPE = 33; + + struct RoutingTypeRange { + RoutingType min; + RoutingType max; + }; + + local interface RoutingPolicy : CORBA::Policy { + readonly attribute RoutingTypeRange routing_range; + }; + + const CORBA::PolicyType MAX_HOPS_POLICY_TYPE = 34; + + local interface MaxHopsPolicy : CORBA::Policy { + readonly attribute unsigned short max_hops; + }; + + // Router Delivery-ordering Policy (default = ORDER_TEMPORAL) + + const CORBA::PolicyType QUEUE_ORDER_POLICY_TYPE = 35; + + local interface QueueOrderPolicy : CORBA::Policy { + readonly attribute Ordering allowed_orders; + }; + + + struct PolicyValue { + CORBA::PolicyType ptype; + sequence pvalue; + }; + + typedef sequence PolicyValueSeq; + + const IOP::ComponentId TAG_POLICIES = 2; + const IOP::ServiceId INVOCATION_POLICIES = 7; + + // + // Exception Delivery in the Callback Model + // + + typedef CORBA::OctetSeq MarshaledException; + native UserExceptionBase; + + valuetype ExceptionHolder { + void raise_exception() raises (UserExceptionBase); + void raise_exception_with_list(in Dynamic::ExceptionList exc_list) + raises (UserExceptionBase); + + private boolean is_system_exception; + private boolean byte_order; + private MarshaledException marshaled_exception; + }; + + + // + // Base interface for the Callback model + // + + interface ReplyHandler { }; +}; + +#endif diff --git a/dist/idl/SSLIOP.idl b/dist/idl/SSLIOP.idl new file mode 100644 index 0000000..d985dd0 --- /dev/null +++ b/dist/idl/SSLIOP.idl @@ -0,0 +1,20 @@ +#if !defined(_SSLIOP_IDL) +#define _SSLIOP_IDL + +#pragma prefix "omg.org" + +#include +#include + +module SSLIOP { + // Security mechanism SSL + const IOP::ComponentId TAG_SSL_SEC_TRANS = 20; + + struct SSL { + Security::AssociationOptions target_supports; + Security::AssociationOptions target_requires; + unsigned short port; + }; + +}; +#endif /* _SSLIOP_IDL */ diff --git a/dist/idl/Security.idl b/dist/idl/Security.idl new file mode 100644 index 0000000..b78dabd --- /dev/null +++ b/dist/idl/Security.idl @@ -0,0 +1,329 @@ +//Security Service, v1.8 - OMG IDL Summary File +//Object Management Group, Inc. +// +//Copyright 1995, AT&T Global Information Solutions Company +//Copyright 1995, Digital Equipment Corporation +//Copyright 1995, Expersoft Corporation +//Copyright 1995, Groupe Bull +//Copyright 1995, Hewlett-Packard Company +//Copyright 1995, IBM (in collaboration with Taligent, Inc.) +//Copyright 1995, International Computers Limited +//Copyright 2000, Object Management Group, Inc. +//Copyright 1995, Netscape Communications Corporation +//Copyright 1997, Northern Telecom Limited +//Copyright 1995, Novell, Inc. +//Copyright 1995, Siemens Nixdorf Informationssysteme AG +//Copyright 1995, 1997, SunSoft, Inc. +//Copyright 1995, Tandem Computer, Inc. (in collaboration with Odyssey Research Assoc, Inc.) +//Copyright 1995, Tivoli Systems, Inc. +//Copyright 1997, Visigenic Software, Inc. +// +//The companies listed above have granted to the Object Management Group, Inc. +//(OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and +//distribute this document and to modify this document and distribute copies of +//the modified version. Each of the copyright holders listed above has agreed +//that no person shall be deemed to have infringed the copyright in the included +//material of any such copyright holder by reason of having used the +//specification set forth herein or having conformed any computer software to +//the specification. +// +//This file contains OMG IDL from the Security Service, v1.8 specification. +//OMG regularly publishes a summary file that contains all the "code" parts of +//an OMG formal document. Every formal document line that is IDL, PIDL, or +//language code is included in the summary file. The reason for such a listing +//is to give readers an electronic version of the "code" so that they can +//extract pieces of it. Readers might want to test an example, include it in +//their own code, or use it for documentation purposes. Having the code lines +//available electronically means there is less likelihood of a transcription +//error. +// +//This subsection defines the OMG IDL for security data types common to the //other security modules, which is the module Security. The Security module //depends on the TimeBase module and the CORBA module. + + +#if !defined(_SECURITY_IDL_) +#define _SECURITY_IDL_ + +#include +#include + +#pragma prefix "omg.org" + +module Security { + //# pragma version Security 1.8 + typedef string SecurityName; + typedef sequence Opaque; + // Constant declarations for Security Service Options + const CORBA::ServiceOption SecurityLevel1 = 1; + const CORBA::ServiceOption SecurityLevel2 = 2; + const CORBA::ServiceOption NonRepudiation = 3; + const CORBA::ServiceOption SecurityORBServiceReady = 4; + const CORBA::ServiceOption SecurityServiceReady = 5; + const CORBA::ServiceOption ReplaceORBServices = 6; + const CORBA::ServiceOption ReplaceSecurityServices = 7; + const CORBA::ServiceOption StandardSecureInteroperability = 8; + const CORBA::ServiceOption DCESecureInteroperability = 9; + // Service options for Common Secure Interoperability + const CORBA::ServiceOption CommonInteroperabilityLevel0 = 10; + const CORBA::ServiceOption CommonInteroperabilityLevel1 = 11; + const CORBA::ServiceOption CommonInteroperabilityLevel2 = 12; + // Security mech types supported for secure association + const CORBA::ServiceDetailType SecurityMechanismType = 1; + // privilege types supported in standard access policy + const CORBA::ServiceDetailType SecurityAttribute = 2; + // extensible families for standard data types + struct ExtensibleFamily { + unsigned short family_definer; + unsigned short family; + }; + typedef sequence OID; + typedef sequence OIDList; + // security attributes + typedef unsigned long SecurityAttributeType; + // other attributes; family = 0 + const SecurityAttributeType AuditId = 1; + const SecurityAttributeType AccountingId = 2; + const SecurityAttributeType NonRepudiationId = 3; + // privilege attributes; family = 1 + const SecurityAttributeType _Public = 1; + const SecurityAttributeType AccessId = 2; + const SecurityAttributeType PrimaryGroupId = 3; + const SecurityAttributeType GroupId = 4; + const SecurityAttributeType Role = 5; + const SecurityAttributeType AttributeSet = 6; + const SecurityAttributeType Clearance = 7; + const SecurityAttributeType Capability = 8; + struct AttributeType { + ExtensibleFamily attribute_family; + SecurityAttributeType attribute_type; + }; + typedef sequence AttributeTypeList; + struct SecAttribute { + AttributeType attribute_type; + OID defining_authority; + Opaque value; + // the value of this attribute can be + // decoded only with knowledge of defining_authority + }; + typedef sequence AttributeList; + // Authentication return status + enum AuthenticationStatus { + SecAuthSuccess, + SecAuthFailure, + SecAuthContinue, + SecAuthExpired + }; + // Association return status + enum AssociationStatus { + SecAssocSuccess, + SecAssocFailure, + SecAssocContinue + }; + // Authentication method + typedef unsigned long AuthenticationMethod; + typedef sequence AuthenticationMethodList; + // Credential types + enum InvocationCredentialsType { + SecOwnCredentials, + SecReceivedCredentials, + SecTargetCredentials + }; + // Declarations related to Rights + struct Right { + ExtensibleFamily rights_family; + string the_right; + }; + typedef sequence RightsList; + enum RightsCombinator { + SecAllRights , + SecAnyRight + }; + // Delegation related + enum DelegationState { + SecInitiator, + SecDelegate + }; + enum DelegationDirective { + Delegate, + NoDelegate + }; + // pick up from TimeBase + typedef TimeBase::UtcT UtcT; + typedef TimeBase::IntervalT IntervalT; + typedef TimeBase::TimeT TimeT; + // Security features available on credentials. + enum SecurityFeature { + SecNoDelegation, + SecSimpleDelegation, + SecCompositeDelegation, + SecNoProtection, + SecIntegrity, + SecConfidentiality, + SecIntegrityAndConfidentiality, + SecDetectReplay, + SecDetectMisordering, + SecEstablishTrustInTarget, + SecEstablishTrustInClient + }; + // Quality of protection which can be specified + // for an object reference and used to protect messages + enum QOP { + SecQOPNoProtection, + SecQOPIntegrity, + SecQOPConfidentiality, + SecQOPIntegrityAndConfidentiality + }; + // Type of SecurityContext + enum SecurityContextType { + SecClientSecurityContext, + SecServerSecurityContext + }; + // Operational State of a Security Context + enum SecurityContextState { + SecContextInitialized, + SecContextContinued, + SecContextClientEstablished, + SecContextEstablished, + SecContextEstablishExpired, + SecContextExpired, + SecContextInvalid + }; + struct ChannelBindings { + unsigned long initiator_addrtype; + sequence initiator_address; + unsigned long acceptor_addrtype; + sequence acceptor_address; + sequence application_data; + }; + // For use with SecurityReplaceable + struct OpaqueBuffer { + Opaque buffer; + unsigned long startpos; + unsigned long endpos; + // startpos <= endpos + // OpaqueBuffer is said to be empty if startpos == endpos + }; + + // Association options which can be administered + // on secure invocation policy and used to + // initialize security context + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + + // Flag to indicate whether association options being + // administered are the "required" or "supported" set + enum RequiresSupports { + SecRequires, + SecSupports + }; + // Direction of communication for which + // secure invocation policy applies + enum CommunicationDirection { + SecDirectionBoth, + SecDirectionRequest, + SecDirectionReply + }; + // security association mechanism type + typedef string MechanismType; + typedef sequence MechanismTypeList; + // AssociationOptions-Direction pair + struct OptionsDirectionPair { + AssociationOptions options; + CommunicationDirection direction; + }; + typedef sequence OptionsDirectionPairList; + // Delegation mode which can be administered + enum DelegationMode { + SecDelModeNoDelegation, // i.e. use own credentials + SecDelModeSimpleDelegation, // delegate received credentials + SecDelModeCompositeDelegation // delegate both; + }; + // Association options supported by a given mech type + struct MechandOptions { + MechanismType mechanism_type; + AssociationOptions options_supported; + }; + typedef sequence MechandOptionsList; + // Attribute of the SecurityLevel2::EstablishTrustPolicy + struct EstablishTrust { + boolean trust_in_client; + boolean trust_in_target; + }; + // Audit + typedef unsigned long AuditChannelId; + typedef unsigned short EventType; + const EventType AuditAll = 0; + const EventType AuditPrincipalAuth = 1; + const EventType AuditSessionAuth = 2; + const EventType AuditAuthorization = 3; + const EventType AuditInvocation = 4; + const EventType AuditSecEnvChange = 5; + const EventType AuditPolicyChange = 6; + const EventType AuditObjectCreation = 7; + const EventType AuditObjectDestruction =8; + const EventType AuditNonRepudiation = 9; + enum DayOfTheWeek { + Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; + enum AuditCombinator { + SecAllSelectors, + SecAnySelector + }; + struct AuditEventType { + ExtensibleFamily event_family; + EventType event_type; + }; + typedef sequence AuditEventTypeList; + typedef unsigned long SelectorType; + const SelectorType InterfaceName = 1; + const SelectorType ObjectRef = 2; + const SelectorType Operation = 3; + const SelectorType Initiator = 4; + const SelectorType SuccessFailure = 5; + const SelectorType Time = 6; + const SelectorType DayOfWeek = 7; + + // values defined for audit_needed and audit_write are: + // InterfaceName: CORBA::RepositoryId + // ObjectRef: object reference + // Operation: op_name + // Initiator: Credentials + // SuccessFailure: boolean + // Time: utc time on audit_write; time picked up from + // environment in audit_needed if required + // DayOfWeek: DayOfTheWeek + struct SelectorValue { + SelectorType selector; + any value; + }; + typedef sequence SelectorValueList; + + // Constant declaration for valid Security Policy Types + // General administrative policies + const CORBA::PolicyType SecClientInvocationAccess = 1; + const CORBA::PolicyType SecTargetInvocationAccess = 2; + const CORBA::PolicyType SecApplicationAccess = 3; + const CORBA::PolicyType SecClientInvocationAudit = 4; + const CORBA::PolicyType SecTargetInvocationAudit = 5; + const CORBA::PolicyType SecApplicationAudit = 6; + const CORBA::PolicyType SecDelegation = 7; + const CORBA::PolicyType SecClientSecureInvocation = 8; + const CORBA::PolicyType SecTargetSecureInvocation = 9; + const CORBA::PolicyType SecNonRepudiation = 10; + // Policies used to control attributes of a binding to a target + const CORBA::PolicyType SecMechanismsPolicy = 12; + const CORBA::PolicyType SecInvocationCredentialsPolicy = 13; + const CORBA::PolicyType SecFeaturePolicy = 14; // obsolete + const CORBA::PolicyType SecQOPPolicy = 15; + const CORBA::PolicyType SecDelegationDirectivePolicy = 38; + const CORBA::PolicyType SecEstablishTrustPolicy = 39; +}; +#endif /* _SECURITY_IDL_ */ + diff --git a/dist/idl/SecurityLevel1.idl b/dist/idl/SecurityLevel1.idl new file mode 100644 index 0000000..ee46e4b --- /dev/null +++ b/dist/idl/SecurityLevel1.idl @@ -0,0 +1,18 @@ +#if !defined(_SECURITY_LEVEL_1_IDL_) +#define _SECURITY_LEVEL_1_IDL_ + +#include +#pragma prefix "omg.org" + +module SecurityLevel1 { + //# pragma version SecurityLevel1 1.8 + local interface Current : CORBA::Current { + //# pragma version Current 1.8 + // thread specific operations + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + }; +}; +#endif /* _SECURITY_LEVEL_1_IDL_ */ + diff --git a/dist/idl/SecurityLevel2.idl b/dist/idl/SecurityLevel2.idl new file mode 100644 index 0000000..dd3e11a --- /dev/null +++ b/dist/idl/SecurityLevel2.idl @@ -0,0 +1,196 @@ +#if !defined(_SECURITY_LEVEL_2_IDL_) +#define _SECURITY_LEVEL_2_IDL_ + +#include + +#pragma prefix "omg.org" + +module SecurityLevel2 { + //# pragma version SecurityLevel2 1.8 + // Forward declaration of interfaces + local interface PrincipalAuthenticator; + local interface Credentials; + local interface Current; + +// Interface PrincipalAuthenticator + local interface PrincipalAuthenticator { + //# pragma version PrincipalAuthenticator 1.8 + Security::AuthenticationMethodList + get_supported_authen_methods( + in Security::MechanismType mechanism + ); + Security::AuthenticationStatus authenticate ( + in Security::AuthenticationMethod method, + in Security::MechanismType mechanism, + in Security::SecurityName security_name, + in any auth_data, + in Security::AttributeList privileges, + out Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + Security::AuthenticationStatus continue_authentication ( + in any response_data, + in Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + }; + + // Interface Credentials + local interface Credentials { + //# pragma version Credentials 1.8 + Credentials copy (); + void destroy(); + readonly attribute Security::InvocationCredentialsType credentials_type; + readonly attribute Security::AuthenticationStatus authentication_state; + readonly attribute Security::MechanismType mechanism; + attribute Security::AssociationOptions accepting_options_supported; + attribute Security::AssociationOptions accepting_options_required; + attribute Security::AssociationOptions invocation_options_supported; + attribute Security::AssociationOptions invocation_options_required; + boolean get_security_feature( + in Security::CommunicationDirection direction, + in Security::SecurityFeature feature + ); + boolean set_attributes ( + in Security::AttributeList requested_attributes, + out Security::AttributeList actual_attributes + ); + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + boolean is_valid ( + out Security::UtcT expiry_time + ); + boolean refresh( + in any refresh_data + ); + }; + + typedef sequence CredentialsList; + + local interface ReceivedCredentials : Credentials { + //# pragma version ReceivedCredentials 1.8 + readonly attribute Credentials accepting_credentials; + readonly attribute Security::AssociationOptions association_options_used; + readonly attribute Security::DelegationState delegation_state; + readonly attribute Security::DelegationMode delegation_mode; + }; + + local interface TargetCredentials : Credentials { + //# pragma version TargetCredentials 1.8 + readonly attribute Credentials initiating_credentials; + readonly attribute Security::AssociationOptions association_options_used; + }; + + // RequiredRights Interface + interface RequiredRights{ + void get_required_rights( + in Object obj, + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + out Security::RightsList rights, + out Security::RightsCombinator rights_combinator + ); + void set_required_rights( + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + in Security::RightsList rights, + in Security::RightsCombinator rights_combinator + ); + }; + + // interface audit channel + local interface AuditChannel { + //# pragma version AuditChannel 1.8 + void audit_write ( + in Security::AuditEventType event_type, + in CredentialsList creds, + in Security::UtcT time, + in Security::SelectorValueList descriptors, + in any event_specific_data + ); + readonly attribute Security::AuditChannelId audit_channel_id; + }; + + // interface for Audit Decision + local interface AuditDecision { + // #pragma version AuditDecision 1.8 + boolean audit_needed ( + in Security::AuditEventType event_type, + in Security::SelectorValueList value_list + ); + readonly attribute AuditChannel audit_channel; + }; + + local interface AccessDecision { + // #pragma version AccessDecision 1.8 + boolean access_allowed ( + in SecurityLevel2::CredentialsList cred_list, + in Object target, + in CORBA::Identifier operation_name, + in CORBA::Identifier target_interface_name + ); + }; + + // Policy interfaces to control bindings + local interface QOPPolicy : CORBA::Policy { + // #pragma version QOPPolicy 1.8 + readonly attribute Security::QOP qop; + }; + + local interface MechanismPolicy : CORBA::Policy { + // #pragma version MechanismPolicy 1.8 + readonly attribute Security::MechanismTypeList mechanisms; + }; + + local interface InvocationCredentialsPolicy : CORBA::Policy { + // #pragma version InvocationCredentialsPolicy 1.8 + readonly attribute CredentialsList creds; + }; + + local interface EstablishTrustPolicy : CORBA::Policy { + // #pragma version EstablishTrustPolicy 1.8 + readonly attribute Security::EstablishTrust trust; + }; + + local interface DelegationDirectivePolicy : CORBA::Policy { + // #pragma version DelegationDirectivePolicy 1.8 + readonly attribute Security::DelegationDirective delegation_directive; + }; + + local interface SecurityManager { + // #pragma version SecurityManager 1.8 + // Process/Capsule/ORB Instance specific operations + readonly attribute Security::MechandOptionsList supported_mechanisms; + readonly attribute CredentialsList own_credentials; + readonly attribute RequiredRights required_rights_object; + readonly attribute PrincipalAuthenticator principal_authenticator; + readonly attribute AccessDecision access_decision; + readonly attribute AuditDecision audit_decision; + TargetCredentials get_target_credentials ( + in Object obj_ref + ); + void remove_own_credentials( + in Credentials creds + ); + CORBA::Policy get_security_policy ( + in CORBA::PolicyType policy_type + ); + }; + + // Interface Current derived from SecurityLevel1::Current providing + // additional operations on Current at this security level. + // This is implemented by the ORB + local interface Current : SecurityLevel1::Current { + //# pragma version Current 1.8 + // Thread specific + readonly attribute ReceivedCredentials received_credentials; + }; +}; + +#endif /* _SECURITY_LEVEL_2_IDL_ */ + + + diff --git a/dist/idl/SecurityLevel3.idl b/dist/idl/SecurityLevel3.idl new file mode 100644 index 0000000..e3251eb --- /dev/null +++ b/dist/idl/SecurityLevel3.idl @@ -0,0 +1,2041 @@ +//*********************************************************************** +// ORBAsec SL3 +// ---------------------------------------------------------------------- +// Copyright (C) 2001 Adiron, LLC. +// All rights reserved. +// ---------------------------------------------------------------------- +//*********************************************************************** + +//*********************************************************************** +/** + * @note Some interfaces in this IDL module have been altered from the + * original Adiron sources. + */ +//*********************************************************************** + + +#ifndef _SecurityLevel3_ +#define _SecurityLevel3_ + +#include +#include "TimeBase.idl" + +#pragma prefix "adiron.com" + +/** + * The Security Level 3 module contains the data definitions and + * the Application Programmers Interface for dealing with the + * ORBAsec SL3 Security, and the new CSIv2 Security Protocol, which has + * been adopted by the OMG. + *

+ * The SecurityLevel3 interfaces and its security data structures + * are based on the Principal Calculus. This is a mathematical + * model of representing principals for the use of access control + * and auditing. + *

+ * The SecurityLevel3 Security Service is represented by two objects + * that are returned by the ORB's resolve_initial_reference call. + * Those two objects are the SecurityManager and the SecurityCurrent. + * Other objects associated with the security service emanate from + * these two objects. + *

+ * The SecurityLevel3 Security Service has a Credentials model. This + * model, which is heavily based on the Principal Calculus, yields + * an API for accessing principal information. The credentials + * represent a principal's credentials, as well as the establishment + * of security contexts between client and servers. + *

+ * The SecurityLevel3 Security Service is currently CSIv2 Level 2 + * compliant: + *

    + *
  • + * It works over TLS and plain TCPIP. + *
  • + * It handles the GSSUP (Username/Password) mechanism for + * CSI level Client Authentication. + *
  • + * It has the ability to "quote" an identity, i.e. CSIv2 + * Identity Assertion. + *
  • + * It has the ability to "push" privileges, which it does + * ATLAS enabled servers. + *
  • + * It has the ability to install your own authorization + * token process that can allow for delegation. + *
+ *

+ * The Security Level 3 ORB Security Service does supports retention + * of CSI state. Client Authentication information and Identity + * assertion information is transmitted on each request. + *

+ * The Security Level 3 ORB Security Service does not automatically + * support endorsement at this time (CSIv2 Level 2 compliance), but + * does give you facility to do so. + */ +module SecurityLevel3 { + + /** + * The Adiron VMCID, which is used in Minor Error Codes, + * Policy Tags, etc. + */ + const unsigned long ADIRON_VMCID = 0xA11C000; + + //------------------------------------------------------------- + // Security Level 3 Data Representations + // + //------------------------------------------------------------- + + // + // A Principal Name + // A principal name always has a type, and a path of + // name components. They are ordered from least significant + // to most significant. For example, if a principal is represented + // by a single X.509 certificate, the first element in the path + // is the SubjectDN, and the second is the IssuerDN. + // + /** + * A NameType is used for typing a PrincipalName data structure. + * A NameType is a string that represents an ASN.1 + * OBJECT IDENTIFIER. Its representation usually of the form + * "oid:1.2.3.4". Other forms may be possible. It is used + * for encoding name type identifiers, which are ASN.1 DER encoded + * OBJECT IDENTIFIERs, in the CSI protocol. + * @see NameComponent + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef string NameType; + + /** + * A NameComponent is an ordered component of a NamePath. The + * least significant component is always the first component. + * It is the type of a wstring to handle international character + * values. + * @see NameType + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef wstring NameComponent; + + /** + * A NamePath is an ordered collection of NameComponents, ordered + * from the least significant to most significant. For example, + * an identity that is defined by a certificate that has a + * SubjectDN of "C=US,CN=Joe,O=Adiron" and an IssuerDN of + * "C=US,CN=AdironCA,O=Adiron" will have the following + * name components: + *

+     *  NameComponent[0] = "C=US,CN=Joe,O=Adiron"
+     *  NameComponent[1] = "C=US,CN=AdironCA,O=Adiron"
+     * 
+ * @see NameType + * @see NameComponent + * @see NameValue + * @see PrincipalName + */ + typedef sequence NamePath; + + /** + * A NameValue is the value component of a PrincipalName, + * which is a "type-value" pair. It is defined as a NamePath. + * @see NameType + * @see NameComponent + * @see NamePath + * @see PrincipalName + */ + typedef NamePath NameValue; + + /** + * A PrincipalName is a "type-value" structure. The type directs + * what the encoding and format of the components in the the + * value component are. For example, a type of "X509DirectoryPath" + * means that the value contains the DNs of the subject and + * subsequent issuers. + * @see NameType + * @see NameComponent + * @see NamePath + * @see NameValue + */ + struct PrincipalName { + NameType the_type; + NameValue the_name; + }; + + /** + * A list of PrincipalNames. + * @see PrincipalName + */ + typedef sequence PrincipalNameList; + + + // + // Attributes for privileges and other things. They are type value pairs. + // + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + *

+ * The type of a PrinAttribute is represented by a string. + *

+ * Privilege Attribute Types, that might come from X.509 certificates + * might be represented by OIDs. OIDs are represented as: + *

+     *   oid:n1.n2.n3.n4.n5.n6....
+     *             for an OID where ni are non-negative integers.
+     * 
+ * These OIDs are meant to be used to direct the "type-value" encoding + * of a GSS-API ExportName, which uses an OID as a type that directs + * the encoding of the value. + *

+ * Example Environmental Attribute Types + *

+     *   SL3:ChannelIdentifier
+     *   SL3:LocalAddress
+     *   SL3:LocalPort
+     *   SL3:TransportMechanism
+     *   SL3:TLSCipherSuite
+     * 
+ * @see PrinAttribute + */ + typedef string PrinAttributeType; + + /** + * A PrinAttributeValue is a wide character string that encodes + * or decodes the value of an attribute. An attempt is always + * meant to represent an attribute's value in a human readable + * string form. If the value cannot be decoded this way, and its + * native form is binary, then it is represented in a Hex encoding + * of the binary form. + * @see PrinAttribute + */ + typedef wstring PrinAttributeValue; + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + * @see PrinAttribute + */ + struct PrinAttribute { + PrinAttributeType the_type; + PrinAttributeValue the_value; + }; + + /** + * A list of PrinAttributes. + * @see PrinAttribute + */ + typedef sequence PrinAttributeList; + + + /** + * This is just a sequence of strings that make + * up the components of a ResourceName. + * @see ResourceName + */ + typedef sequence ResourceNameComponents; + + /** + * A ResourceName is the constructed name of a "resource". A + * ResourceName is closely modeled after CORBAmed's Resource + * Access Decision (RAD) facility's "Resource". It contains + * a sequence of strings. + */ + struct ResourceName { + ResourceNameComponents components; + }; + + /** + * A List of Resource Names. + * @See ResourceName + */ + typedef sequence ResourceNameList; + + + // + // NameTypes used in SL3 + // + + /** + * An NT_KerberosName is a NameType that signifies that the + * value of a PrincipalName is a Kerberos formated name. + * A KerberosName is a single string encoded in the + * familiar "name@REALM" format. + *

+ * From GSS-Kerboeros RFC 1964: + *

+ * 2.1.1. Kerberos Principal Name Form + *

+ * This name form shall be represented by the Object Identifier {iso(1) + * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + * krb5(2) krb5_name(1)}. + */ + const NameType NT_KerberosName = "oid:1.2.840.113554.1.2.2.1"; + + /** + * An NT_X509DirectoryNamePath is a NameType that signifies that + * the value of a PrincipalName is constructed from a chain + * of certificates, such that the end entity is the least + * significant position, with the subsequent issuers following + * in order of signature. + *

+ * The coding of the names is the string encoding of + * complete X.500 DN's, such as "C=US, CN=Joe, O=Adiron". + * There is no indication whether the last DN in the path is a + * "root", i.e. it's issuer is the same. + */ + const NameType NT_X509DirectoryNamePath = "SL3:X509DirectoryPathName"; + + /** + * The NT_Anonymous is a name type that specifies that the + * PrincipalName is representing the "anonymous" principal. + * Its value always as a single name component of "anonymous" + */ + const NameType NT_Anonymous = "SL3:anonymous"; + + /** + * The NT_StringName is a NameType that specifies that the + * PrincipalName is represented by a single NameComponent + * of name in a "scoped" name space. The name and scope + * are separated by a single "@" character. The escape character + * is "\". This string name as we call it is the same form + * used for the GSSUP (GSS-UserPassword NameType). This + * oid is the OID defined by the OMG CSIv2 specification. It + * is the value defined by the CSI::GSS_NT_Scoped_Username_OID + * constant. + */ + const NameType NT_StringName = "oid:2.23.130.1.2.1"; + + // + // Privileges + // + + /** + * A ScopedPrivileges structure represents privileges that + * belong to a scope defined by a principal. This structure + * is used to represent a principal that is a privilege authority + * that issues privileges. Privileges are represented as + * PrinAttributes. + */ + struct ScopedPrivileges { + PrincipalName privilege_authority; + PrinAttributeList privileges; + }; + + /** + * A list of ScopedPrivileges + * @see ScopedPrivileges + */ + typedef sequence ScopedPrivilegesList; + + // + // Principals + // + + /** + * A Principal comes in three forms, which correspond to the + * Principal Calculus. The forms are "Simple", "Quoting", and + * "Proxy". Simple is a principal that represents a single + * entity, usually "speaking for" itself. A "Quoting" principal + * is a "compound" principal that says that one principal is + * speaking on behalf of another, usually denoted by "(A|B)", i.e. + * "A is quoting B", which means that "A is speaking on behalf of B". + * A "Proxy" principal is almost the same as a "Quoting" principal. + * However, the security service has determined that enough evidence + * exists that proves that Principal A is authorized to speak in + * B's behalf. This principal is denoted in the calculus as "(A for B)" + * in contrast to the quoting principal "(A|B)". + */ + typedef unsigned long PrincipalType; + + /** + * The Simple Principal Type (A) + * @see PrincipalType + */ + const PrincipalType PT_Simple = 0; // A, valuetype SimplePrincipal + /** + * The Quoting Principal Type (A|B) + * @see PrincipalType + */ + const PrincipalType PT_Quoting = 1; // B | A, valuetype QuotingPrincipal + /** + * The Proxy Principal Type (A for B) + * @see PrincipalType + */ + const PrincipalType PT_Proxy = 2; // B for A, valuetype ProxyPrincipal + + /** + * A Principal is represented by a base value type, which is extended + * for the various principals, Simple, Quoting, and Proxy. This base + * type of a Principal may be sufficient for access control in + * most systems. + * @param the_type contains the corresponding identifier + * @param the_name contains the logical name of the most derived + * Principal. Such as if the Principal is a nested + * ProxyPrincipal (i.e. C for B for A) the name here + * is A. + * @param environmental_attributes + * The attributes name certain things that do are + * environmental, such as IP addresses. + * @param with_privileges + * These are the privileges associated with Principal A + * restricted_resources. + * This attribute contains a collection of resources on which + * the principal is authorized to perform actions. + */ + valuetype Principal { + /** This field contains the type of the Principal. */ + public PrincipalType the_type; + /** This field contains the name of the Principal */ + public PrincipalName the_name; + /** + * This field contains the attributes of the principal + * that are considered environmental, such as authentication + * mechanism, authentication channel identifier, etc. + */ + public PrinAttributeList environmental_attributes; + /** + * This field contains the list of scoped privileges the + * security service has determined belong to the particular + * principal. + */ + public ScopedPrivilegesList with_privileges; + }; + + /** + * A list of Principals. + * @see Principal + */ + typedef sequence PrincipalList; + + /** + * A Simple Principal represents a single entity. It is usually + * derived by credentials acquisition, authentication, trust rules concerning quoting, + * or trust rules and certificates concerning Proxying. + * It has one extra field over the base Principal, which is + * "alternate_names". + */ + valuetype SimplePrincipal : /* truncatable */ Principal { + /** + * This field indicates whether the principal was derived or is + * going to be derived from an authentication mechanism. + *

+ * If the SimplePrincipal is directly or indirectly + * (as part of a composite Principal) in the + * ClientCredentials.client_principal or + * TargetCredentials.target_principal field, + * the authenticated field indicates the authentication + * status of the SimplePrincipal in the client or target + * principal, respectively. + *

+ * If the SimplePricipal is directly or indirectly in + * the ClientCredentials.target_principal + * (or TargetCredentials.client_principal) field, + * the authenticated field indicates the target's + * (or client's belief) about its authentication status to the other + * party. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of the initiator or acceptor + * of OwnCredentials, the authenticated + * field indicates the expectation of being authenticated to the other + * side of the communication when the initiator or acceptor is used. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of a + * PrincipalIdentityStatement, + * the authenticated field indicates only the + * "best effort" of knowing whether the principal has been possibly + * authenticated or not. In other word, if this field is + * TRUE, it is for sure that the principal has been + * authenticated (or is expecting to be authenticated). + * If this field is FALSE, the principal may or may not + * have been authenticated. The reason for this ambiguity is that + * a PrincipalIdentityStatement may be created before + * the authentication of the principal being performed. In general, + * the authenticated field of a + * SimplePrincipal inside the the_principal + * field of a PrincipalIdentityStatement should not be + * taken as a definite answer for the authentication status of the + * SimplePrincipal. + * + * @see ClientCredentials.client_authentication + * @see ClientCredentials.target_authentication + * @see TargetCredentials.client_authentication + * @see TargetCredentials.target_authentication + */ + // For example, if a client uses the User/Password mechanism to + // communicate with a target, the client's OwnCredentials, created + // using a PasswordGenerator, will have the authenticated + // field in the principal in the initiator being true, + // although the client may not have been authenticated to the target. + // + public boolean authenticated; + /** + * This field contains the other name types, such as + * that appear in the X.509 alternate name fields. + */ + public PrincipalNameList alternate_names; + + }; + + /** + * A ProxyPrincipal represents a principal that speaks for another. + * The principal is proved that it is authorized to speak for another. + * The system believes this, either by trust rules of its own, + * or by delivered endorsement from the principal such as + * Principal (B for A) where the endorsement takes the form + * in the Principal Calculus as (T says B serves A) + * where T is some entity trusted by the security service + * to make those statements. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * speaks_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype ProxyPrincipal : /* truncatable */ Principal { + + /** + * In a Proxy Principal of (A for B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Proxy Principal of (A for B) the speaks_for field + * represents the principal B. + */ + public Principal speaks_for; + + }; + + /** + * A QuotingPrincipal represents a principal that speaks for another. + * The principal is not proved that it is authorized to speak for another. + * The system derives principals like this based on statements in the + * Pricipal Calculus, such as "A says B says r", which results in the + * quoting principal (A|B) says r, where "r" is a statement, such as + * a CORBA request. The security service derives principals like + * this from the CSI Identity Assertion mechanism. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * quotes_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype QuotingPrincipal : /* truncatable */ Principal { + + /** + * In a Quoting Principal of (A|B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Quoting Principal of (A|B) the quotes_for field + * represents the principal B. + */ + public Principal quotes_for; + + }; + + // + // Statements + // + + /** + * A Statement is a value type that has extensions which + * represent the different relevant data directed by its StatementType. + * There are two basic Statement Types, an IdentityStatement and + * an EndorsementStatement. An identity statement is a statement that + * asserts an identity. It may represent a the components of + * an X.509 certificate during an authentication. An EndorsementStatement + * may represent the contents of an X.509 AttributeCertificate or + * some other notion of an endorsement, such as a certificate in + * BizTalk XML. + *

+ * Statements are contained in the Credentials Objects. They + * represent pieces of evidence collected from which the security + * service deduces the Principal of the Credentials Objects. + */ + typedef unsigned long StatementType; + + /** + * The Identity Statement Type. + *

+ * A statement of this type at least extends to the + * IdentityStatement valuetype, if not truncated + * @see IdentityStatement + */ + const StatementType ST_IdentityStatement = 1; //valuetype IdentityStatement + + /** + * The Endorsement Statement Type. + *

+ * A statement of this type at least extends to the + * EndorsementStatement valuetype, if not truncated + * @see EndorsementStatement + */ + const StatementType ST_EndorsementStatement = 2; //valuetype EndorsementStatement + + /** + * An encoding is a sequence of bytes. + */ + typedef sequence Encoding; + + /** + * Statement encoding type. + *

+ * Statements carry their original encoding information, if + * they came from an encoding, such as list of X.509 identity + * certificates (i.e. a chain). The encoding type may be derivable + * from the encoding itself. For example, it's easy to tell the + * difference between a PEM encoded certificate, and a DER encoded + * certificate. Therefore, the encoding type may default to "Unknown". + * Other types may exist than the ones provided as constants in + * this module. + */ + typedef string EncodingType; + + /** + * The ET_NoEncoding type signifies that the statement + * has been generated solely by the security service + * and has no encoding. + */ + const EncodingType ET_NoEncoding = "NoEncoding"; + + /** + * The ET_Unknown encoding type may always be used if the encoding + * type can only be figured out from encoding itself. + */ + const EncodingType ET_Unknown = "Unknown"; + + /** + * User Exception for a bad encoding. + */ + exception BadEncoding {}; + + /** + * User Exception for a bad or unsupported encoding type. + */ + exception BadEncodingType {}; + + /** + * The Statement Layer is the layer of the protocol or security + * service from which the statement emanated, derived, or was collected. + */ + typedef unsigned long StatementLayer; + + /** + * Default type for a Statement Layer + */ + const StatementLayer SL_Unknown = 0; + /** + * The SL_Transport statement type signifies that the associated + * statement is derived from the transport layer, such as + * an X.509 Certificate from a TLS handshake. + */ + const StatementLayer SL_Transport = 1; + /** + * The SL_CSIAuthorization statement type signifies that the associated + * statement is derived from the CSI Authorization Layer in the CSIv2 + * protocol. + */ + const StatementLayer SL_CSIAuthorization = 2; + /** + * The SL_CSIClientAuth statement type signifies that the associated + * statement is derived from the CSI Client Authentication Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIClientAuth = 3; + /** + * The SL_CSIIdentity statement type signifies that the associated + * statement is derived from the CSI Identity Assertion Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIIdentity = 4; + + /** + * The SL_UserDefined statement layer signifies that the associate + * statement is derived or created by a user or some other + * entity than the security service. + */ + const StatementLayer SL_UserDefined = 5; + + /** + * The Statement base type contains the information common + * to all statements. A statement has an "external" encoding, such + * as an X509 Certificate. Some statements may not have an encoding, + * but its extension may carry the pertinent marshable information, + * such as a PrincipalIdentityStatement for anonymous, which is + * generated by the security service. + */ + valuetype Statement { + /** + * This field contains an identifier of the + * service layer that generated the statement. + * The layer that generated or delivered + * the statement, i.e. Transport, CSIv2 Authentication, + * CSIv2 Authorization, or CSIv2 Identity Assertion. + */ + public StatementLayer the_layer; + /** + * The type of statement, which indicates its extension + * such as an Identity Statement or an Endorsement + * Statement. + */ + public StatementType the_type; + /** + * This field indicates the type of encoding. + * The encoding may be contrived, at the encoding + * may not exist, however, the extension of the + * statement type may contain data that can + * be marshaled across the wire. See the Principal + * Identity Statement. + */ + private EncodingType encoding_type; + /** + * The bytes of the encoding, if it exists. + */ + private Encoding the_encoding; + + /** + * Returns the encoding type + */ + EncodingType get_encoding_type(); + + /** + * Returns an encoding of this statement. Some implementations + * may be able to convert. Using and encoding_type of + * ET_Unknown, will always yield the default encoding, + * if it exists. If the encoding does not exist, + * a successful return containing an empty + * sequence will result. + */ + Encoding get_encoding( + in EncodingType encoding_type + ) raises ( + BadEncodingType + ); + + /** + * This factory method allows users to create their + * own Statements from an encoding. The statements created + * by this factory method may have a type which is a further + * extension of the valuetype Statement. + */ + factory create( + in EncodingType encoding_type, + in Encoding the_encoding + ); + }; + typedef sequence StatementList; + + /** + * The Identity Statement further classifies the encoding + * as a statement that if verified asserts an identity. + */ + valuetype IdentityStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + /** + * The Principal Identity Statement is the minimal version of an + * Identity statement that asserts a single identity that the + * security service can translate into a principal. + *

+ * An example of an identity statement is an X.509 certificate in + * which its attributes are exposed into the principal, such as + * privileges. This valuetype may also be further extended by the + * security service depending on its encoding and the capabilities + * of the security service. + */ + valuetype PrincipalIdentityStatement : IdentityStatement { + public Principal the_principal; + }; + + /** + * The Endorsement Statement is a statement that is used for + * authorization. An Endorsement statement endorses a + * principal with certain characteristics, such as privileges + * or the authority to act on behalf of another principal, sometimes + * called "delegation". + *

+ * According to our research, an endorsement statement may be a + * complex entity containing matching rules for the endorsement. + * An endorsement may have the following general form: + *

+     *     I says Principal A matching [(P1 with [p1,...,pn]) or ....]
+     *        speaks_for
+     *          Principal B matching [(T1 with [t1,...,tn]) or ... ]
+     *        has [s1,...,sm]
+     *        on Resources matching [R1, .... Rn]
+     * 
+ * Actual semantic reduction of principals is directed by the + * the matching rules, and may depend on other statements as well, + * such as local trust rules in the security service configuration. + * Also, much of the capability of an endorsement statement is + * dependent on its encoding. + *

+ * This approach to authorization is a largely unexplored research + * topic. There are not many or well known encodings of endorsement + * statements. Therefore, we are reluctant to produce interfaces + * just yet, that go beyond the encoding. However, we do expose the + * Endorsement statement type, which may further direct the interpretation + * of it's encoding. + */ + valuetype EndorsementStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + + + // + // TODO: The following contruction is not supported by TIDIdlc + // + /** + * An X509IdentityStatement is one that extends the Principal Identity + * Statement. If one does get an X509 IdentityStatement, it is + * currently supported with IAIK in both DER and PEM formats. + */ + valuetype X509IdentityStatement : PrincipalIdentityStatement { +// Already defined in Statement +// /** +// * This factory method allows users to create their +// * own X509Identity statements from an encoding. +// */ +// factory create( +// in EncodingType encoding_type, +// in Encoding the_encoding +// ); + }; + typedef sequence X509IdentityStatementList; + + //------------------------------------------------------------- + // Security Level 3 Application Users Interface + // + //------------------------------------------------------------- + + // + // The Security Level 3 Credentials Model + // + + /** + * Credentials come in three types. OwnCredentials, ClientCredentials, + * and TargetCredentials. OwnCredentials represent the ORB instance's + * credentials. Each Credentials has initiating and accepting capability. + * ClientCredentials represent an established security context with + * a client. TargetCredentials represent an established security context + * with a Target's Server. + */ + typedef unsigned long CredentialsType; + + /** + * The CT_OwnCredentials CredentialsType signifies that the + * Credentials can be extended to the OwnCredentials Type. + */ + const CredentialsType CT_OwnCredentials = 0; + /** + * The CT_ClientCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_ClientCredentials = 1; + /** + * The CT_TargetCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_TargetCredentials = 2; + + /** + * A Credentials object has a validity state. Some credentials + * may be time or use dependent. + */ + typedef long CredentialsState; + + /** + * The Credentials with a CredentialsState of CS_Invalid cannot be + * used in any the initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Invalid = -3; + + /** + * Credentials with a CredentialsState of CS_Expired can no longer + * be used for initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Expired = -2; + /** + * Credentials with a CredentialsState of CS_PendingRelease can no longer + * be used for initiating or accepting establishment of any + * security contexts. It means that "release_credentials" has been + * called on the credentials. + */ + const CredentialsState CS_PendingRelease = -1; + /** + * Credentials with a CredentialsState of CS_Initialized cannot + * be used for initiating or accepting establishment of any + * security contexts. It means that credentials are in an initial + * state. This value is for internal use, and there is no + * reason a SecurityLevel3 user should see credentials in this state. + */ + const CredentialsState CS_Initialized = 0; + /** + * Credentials with a CredentialsState of CS_Valid can + * be used for initiating or accepting establishment of + * security contexts. + */ + const CredentialsState CS_Valid = 1; + + /** + * Credentials have system generated identifiers + * to which they can be referred and retrieved. + */ + typedef string CredentialsId; + typedef sequence CredentialsIdList; + + /** + * A Context Id is a system generated unique identifier for identifying + * a security context to the application. + * Security Contexts may be long lived and not established on + * every request. Therefore, an identifier is assigned. + *

+ * Note that this Context Id is not directly related to the context + * defined in the CSIv2 specification. + */ + typedef string ContextId; + + /** + * Credentials Usage + *

+ * Credentials Usage refers to the concept that Credentials may + * be used to initiate security context, accept security contexts, + * or do both. its values are used in the acquisition + * of credentials for the purpose of designating the abilities + * of the credentials acquired. + */ + typedef unsigned long CredentialsUsage; + /** + * The CU_Indefinite CredentialsUsage type is a value that + * signifies the default. Depending on some other acquisition + * arguments, the credentials usage may be able to be implicitly + * determined. + */ + const CredentialsUsage CU_Indefinite = 1; + /** + * The CU_None CredentialsUsage type is a value that states the + * credentials cannot be used to make or accept security + * contexts. ClientCredentials and TargetCredentials have + * this credentials usage. + */ + const CredentialsUsage CU_None = 2; + /** + * The CU_AcceptOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to accept the establishment + * of security contexts. + */ + const CredentialsUsage CU_AcceptOnly = 3; + /** + * The CU_InitiateOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to initiate the establishment + * of security contexts. + */ + const CredentialsUsage CU_InitiateOnly = 4; + /** + * The CU_InitiateAndAccept CredentialsUsage type is a value that + * signifies that the credentials can be used to both initiate + * and accept the establishment of security contexts. + */ + const CredentialsUsage CU_InitiateAndAccept = 5; + + /** + * A CredsDirective is a directive on a invocation as to the + * effects of the initiated security context will have on the + * the accepting side. Please see ContextEstablishmentPolicy + * for is use in context with establishing security contexts. + * @see ContextEstablishmentPolicy + */ + typedef unsigned long CredsDirective; + /** + * The CD_Default CredsDirective is a value that signifies to + * use the capabilities of the selected credentials. + */ + const CredsDirective CD_Default = 0; + /** + * The CD_InvokeTarget CredsDirective is a value that signifies that + * the selected credentials should only be used in a simple + * invocation fashion. They shall not attempt to endorse or embody + * the target to act on its behalf. + */ + const CredsDirective CD_InvokeTarget = 1; + /** + * The CD_EndorseTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to endorse + * the target. In other words, it gives the accepting side the ability + * to act on behalf of the initiating side. + */ + const CredsDirective CD_EndorseTarget = 2; + /** + * The CD_EmbodyTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to embody + * the target. In other words, it gives the accepting side the ability + * to impersonate the initiating side. + */ + const CredsDirective CD_EmbodyTarget = 3; + + /** + * A Feature Directive is a general directive used in policy that + * stipulates the of a particular feature. Such examples include, + * confidentiality, integrity, client authentication, etc. + */ + typedef long FeatureDirective; + + /** + * The FD_DoNotUse FeatureDirective means definitely not to use + * the feature. + */ + const FeatureDirective FD_DoNotUse = -2; + /** + * The FD_DoNotUseIfPossible FeatureDirective means not to use + * the feature if it is possible. Note, some mechanisms may always + * use confidentiality. + */ + const FeatureDirective FD_DoNotUseIfPossible = -1; + /** + * The FD_UseDefault FeatureDirective means to use or not to use + * the feature depending on defaults. + */ + const FeatureDirective FD_UseDefault = 0; + /** + * The FD_UseIfPossible FeatureDirective means to use the feature + * if it is possible. + */ + const FeatureDirective FD_UseIfPossible = 1; + /** + * The FD_Use FeatureDirective means definitely to use the feature. + */ + const FeatureDirective FD_Use = 2; + + + /** + * The Initiator Type of the Initiator Side of the Credentials states + * the kind of Initiator it is. There are three types that mirror + * the type of Principal, Simple, Quoting, and Proxy, that the + * initiator intends to represent to a server while trying to + * establish a security context with the server. + */ + typedef unsigned long InitiatorType; + /** + * The IT_None InitiatorType is a value that is defined for + * completeness, and has no real use. + */ + const InitiatorType IT_None = 0; + /** + * The IT_Simple InitiatorType is a value that states that the + * initiator is a "Simple" Principal. + */ + const InitiatorType IT_Simple = 1; + /** + * The IT_Quoting InitiatorType is a value that states that the + * initiator will quote another principal to the server. This + * principal is denoted in the Principal Calculus as (A|B), i.e. + * A quoting B. + */ + const InitiatorType IT_Quoting = 2; + /** + * The IT_Proxy InitiatorType is a value that states that the + * initiator will quote another principal to the server along with + * getting or providing proof to the server that it can act on + * behalf of the quoted principals. This + * principal is denoted in the Principal Calculus as (A for B). + */ + const InitiatorType IT_Proxy = 3; + + /** + * The CredsInitiator object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "initiator" side of the credentials. + */ + local interface CredsInitiator { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * client principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute Principal the_principal; + /** + * The supporting statements attribute contains a list of statements + * supporting the principal associated with this initiator. + */ + readonly attribute StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The initiator_type attribute signifies the intent of the + * initiator as to the principal it presents for the + * security context establishment. It should correspond + * to the type of the Principal. However, it might be slightly + * different, because using CSIv2 Client Authentication + * technically creates a "QuotingPrincipal" however, the + * initiator type will still be simple as no CSIv2 Identity + * Assertion will be used in establishing the security + * context. + */ + readonly attribute InitiatorType initiator_type; + /** + * The supports_embodiment attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to give the + * the accepting end of a context establishment the ability + * to impersonate this initiator principal. + */ + readonly attribute boolean supports_embodiment; + /** + * The supports_endorsement attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to endorse + * the accepting end of a context establishment to act + * on behalf of this initiator principal. + */ + readonly attribute boolean supports_endorsement; + /** + * The supports_quoting attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to simply + * quote another principal on top of these credentials. + */ + readonly attribute boolean supports_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + }; + + /** + * The CredsAcceptor object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "acceptor" side of the credentials. + */ + local interface CredsAcceptor { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * target principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute SecurityLevel3::Principal the_principal; + /** + * The supporting_statements attribute contains a list of statements + * supporting the principal associated with this acceptor. + */ + readonly attribute SecurityLevel3::StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The accepts_endorsement attribute is TRUE if these credentials + * supports and accepts CSIv2 endorsement information. + */ + readonly attribute boolean accepts_endorsement; + /** + * The accepts_quoting attribute is TRUE if these credentials + * supports and accepts CSIv2 Identity Assertion information. + */ + readonly attribute boolean accepts_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + }; + + /** + * This type is used to identify listeners for removal. + * A Listener identity will be assigned to a listener when + * it is assigned to a particular object. + */ + typedef string ListenerId; + + /** + * This local interface is used to notify the user when the credentials + * have been relinquished. When credentials are "released" they may + * stay around until their work is finished. At that point they + * will be relinquished. Also, if the underlying transport credentials + * are released, then the SecurityLevel3 Credentials get released + * as well. This listener will get informed of this event. + */ + local interface RelinquishedCredentialsListener { + void relinquished_notify( + in CredentialsId creds_id + ); + }; + + /** + * The Credentials base interface contains the common items for + * the different types of credentials. + * @see OwnCredentials + * @see ClientCredentials + * @see TargetCredentials + */ + local interface Credentials { + + /** + * The creds_id attribute contains a system generated + * identifier with which can uniquely reference the credentials + * object. + */ + readonly attribute CredentialsId creds_id; + + /** + * The creds_type stipulates the type of credentials, i.e. + * to which type of credentials it may be narrowed, e.g., + * Own, Client, or Target. + */ + readonly attribute CredentialsType creds_type; + + /** + * The creds_usage attribute stipulates the intended usage of the + * credentials. For OwnCredentials, it will be one of + * CU_AcceptOnly, CU_Initiate, CU_InitiateAndAccept. + * For ClientCredentials and TargetCredentials it will be + * CU_None. + */ + readonly attribute CredentialsUsage creds_usage; + + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + /** + * The creds_state attribute contains the + * validity state of the credentials. + */ + readonly attribute CredentialsState creds_state; + + /** + * Add a listener that will get notified when the + * OwnCredentials are finally done with any pending + * work and are relinquished by the security service. + */ + ListenerId add_relinquished_listener( + in RelinquishedCredentialsListener listener + ); + + /** + * Removes a listener. This function raises a BAD_PARAM + * exception if the listener is not registered. + */ + void remove_relinquished_listener( + in ListenerId id + ); + }; + /** + * A list of credentials. + */ + typedef sequence CredentialsList; + + /** + * OwnCredentials are created as a result of Credentials acquisition + * from the CredentialsCurator's CredentialsAcquirers. + * The Credentials have an initiator and an acceptor based + * upon its intended usage and capability. Some OwnCredentials + * that were acquired solely for initiating contexts (i.e. client side) + * will not have an acceptor, and visa versa. + */ + local interface OwnCredentials : Credentials { + + /** + * The creds_initiator attribute contains a reference to the + * local credentials initiator associated with these credentials. + * It is null if the creds_usage is AcceptOnly. + */ + readonly attribute CredsInitiator creds_initiator; + + /** + * The creds_acceptor attribute contains a reference to the + * local credentials acceptor associated with these credentials. + * It is null if the creds_usage is InitiateOnly. + */ + readonly attribute CredsAcceptor creds_acceptor; + + /** + * The release_credentials operation disables the credentials + * from further initiating and/or accepting contexts. + * Formal destruction of the Credentials object is delayed until + * its pending work is done, at which time it becomes Invalid. + */ + void release_credentials (); + }; + + /** + * A list of OwnCredentials + */ + typedef sequence OwnCredentialsList; + + /** + * An object of this interface represents the security context for + * a CSIv2 based remote client. It is created as the result of accepting + * a security context for the remote client. + * This object is only available during the servicing of a CORBA request. + * It can be retrieved from the + * SecurityLevel3::SecurityCurrent object, + * as it is thread based. + *

+ * This object contains only the information used from the + * OwnCredentials that was pertinent in establishing the + * context. There is a pointer back to that OwnCredentials + * object. Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface ClientCredentials : Credentials { + + /** + * The context_id attribute contains a system generated unique identifier + * for the context, + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service can deduce is the client from the + * information and mechanisms used. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the statements that + * delivered from CSIv2 protocol along with any from the associated + * OwnCredentials that are used to deduce the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains the names of the + * resources that the security service deduces from the CSIv2 + * information and information from the associated OwnCredentials. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service believes is representative of the + * clients version of the target's principal. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements that + * support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of resources + * on which the target is restricted. This information may come + * from the OwnCredentials. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * This attribute refers to the OwnCredentials that were used in + * establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * This attribute is TRUE if the target has + * authenticated the client, either over the transport, or at + * the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * This attribute is TRUE if the target believes that + * the client has authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * This attribute is TRUE if the context is providing + * confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * This attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + }; + + /** + * The TargetCredentials object is created as the result of accepting a + * security context for a target. It represents that context. + * It contains only the information used from the OwnCredentials + * that was pertinent in establishing the context. + * There is a pointer back to that OwnCredentials object. + * Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface TargetCredentials : Credentials { + + /** + * The context_id attribute contains a system generated + * unique identifier for the context. + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service believe is the target's + * ClientCredentials client_principal attribute. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the + * statements that support the deduction of the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains names of + * resources on which the client believes the client is restricted. + * This information may be derived from newly acquired endorsement + * information. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service deduces to be the target. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements + * that support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of + * resources on which the target is restricted. This information + * may not be available. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * The parent_credentials attribute refers to the OwnCredentials + * that were used in establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * The client_authentication attribute is TRUE if the client + * believes that the target has authenticated the client, either + * over the transport, or at the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * The target_authentication attribute is TRUE if the client has + * authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * The confidentiality attribute is TRUE if the context is + * providing confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * The integrity attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + + /** + * The target_embodied attribute is TRUE if the security service + * believes that the target is embodied to impersonate the client + * side principal. + */ + readonly attribute boolean target_embodied; + + /** + * The target_endorsed attribute is TRUE if the security service + * believes that the target is endorsed to act on behalf of the + * client side principal. + */ + readonly attribute boolean target_endorsed; + + /** + * The release operation indicates to the CSIv2 protocol, that if + * state is being retained for these credentials, they + * will be discarded with the pending next request that + * may have not yet gone out. + *

+ * Any objects references that are binded to these + * credentials after you release them will become unusable. + * + * This operation is experimental. + */ + void release(); + }; + + + //-------------------------------------------------------------------- + // Security Invocation Policy + // + //-------------------------------------------------------------------- + + /** + * The ContextEstablishmentPolicy policy object directs the + * establishment of security contexts with a target. + *

+ * The CredsDirective usage is the following: + *

+ *
+ * CD_Default + *
+ * This directive means to use the default set + * up by the thread, the ORB, the ORB configuration, + * available credentials, or other policies. + *
+ * CD_InvokeTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. Do not endorse or embody the target. + * Credentials may be IT_Simple, IT_Quoting, or IT_Proxy. + *
+ * CD_EndorseTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. + * The credentials must be + * IT_Simple, IT_Quoting, or IT_Proxy own credentials + * that supports endorsement. + * Note, a Initiator Credentials that is a IT_Proxy + * may have an endorsement statement that not only + * endorses this immediate client, but may very well + * apply to the next target. + *
+ * CD_EmbodyTarget + *
+ * If possible give the target the ability to + * impersonate the client, is performed using + * transports that can forward their credentials + * in the transport that give the ability to the + * target to work in their own behalf. Alternatively, + * the authenticator may be able to be passed on. + * IT_Simple credentials must have or have the + * ability to forward credentials. This is analogous + * to flipping the DELEGATE bit on GSS-Kerberos Forwardable + * credentials. IT_Quoting principals means + * that you can forward the transport credentials, + * authenticator plus the Quoting statement. + * IT_Proxy principals means that you can forward + * the transport credentials, authenticator, + * and associated proxy statements. + *
+ *

+ * On using Own Credentials. The creds_ids name Own Credentials. + * Also, they restrict the invocation to use only certain credentials. + * If the cred_ids list is empty, then the own credentials for the + * invocation are selected from a default, which may be + * set on the thread or the ORB instance. + */ + local interface ContextEstablishmentPolicy : CORBA::Policy { + + readonly attribute CredsDirective creds_directive; + readonly attribute OwnCredentialsList creds_list; + readonly attribute FeatureDirective use_client_auth; + readonly attribute FeatureDirective use_target_auth; + readonly attribute FeatureDirective use_confidentiality; + readonly attribute FeatureDirective use_integrity; + }; + + /** + * Type to be passed to ContextEstablishmentPolicy PolicyFactory + * through an Any. + */ + struct ContextEstablishmentPolicyArgument + { + CredsDirective creds_directive; + OwnCredentialsList creds_list; + FeatureDirective use_client_auth; + FeatureDirective use_target_auth; + FeatureDirective use_confidentiality; + FeatureDirective use_integrity; + }; + + /** + * The ContextEstablishmentPolicyType constant is + * holds value used to denote the ContextEstablishmentPolicy. + */ + const CORBA::PolicyType ContextEstablishmentPolicyType = ADIRON_VMCID | 1001; + + + /** + * The ObjectCredentialsPolicy object is placed on the policy list + * of a POA to indicate the own credentials + * that govern the accepting contexts for objects underneath + * that POA. The credentials listed here, only if they have Accepting + * capability, are used to created security components in the + * IOR of the object's reference when created. + */ + local interface ObjectCredentialsPolicy : CORBA::Policy { + readonly attribute OwnCredentialsList creds_list; + }; + + /** + * Type to be passed to ObjectCredentialsPolicy PolicyFactory + * through an Any. + */ + typedef OwnCredentialsList ObjectCredentialsPolicyArgument; + + /** + * The ObjectCredentialsPolicyType constant is + * holds value used to denote the ObjectCredentialsPolicy. + */ + const CORBA::PolicyType ObjectCredentialsPolicyType = ADIRON_VMCID | 1002; + + + //-------------------------------------------------------------------- + // Security Level 3 Credentials Acquisition Mechanism + // + //-------------------------------------------------------------------- + + /** + * Credentials are acquired by a Credentials Acquirer by some + * acquisition mechanism specified in the Credentials Curator. + * Acquisition methods are available on the curator. The + * specifics of arguments needed and the acquisition process + * are defined by the method itself. + */ + typedef string AcquisitionMethod; + typedef sequence AcquisitionMethodList; + + /** + * An acquisition of credentials may quite possibly fail as well + * as be a multistep process. A status defines the current + * state of an acquisition. + */ + typedef long AcquisitionStatus; + /** Acquisition has failed. */ + const AcquisitionStatus AQST_Failed = -2; + /** Acquisition has expired. */ + const AcquisitionStatus AQST_Expired = -1; + /** Acquisition is initialized. */ + const AcquisitionStatus AQST_Initialized = 0; + /** Acquisition needs more processing. */ + const AcquisitionStatus AQST_Continued = 1; + /** Acquisition has succeeded. */ + const AcquisitionStatus AQST_Succeeded = 2; + + /** + * The CredentialsAcquirer object is created by the Credentials + * Curator based on the selected method and initial acquisition + * arguments. When this acquisition is complete and successful, + * the created credentials can be retrieved using the get_credentials + * operation. Once get_credentials is called, this object is destroyed. + */ + local interface CredentialsAcquirer { + + /** + * This attribute contains the acquisition method + * identifier naming the method by which these credentials + * are being acquired. + */ + readonly attribute AcquisitionMethod acquisition_method; + + /** + * This attribute contains the current acquisition + * status of the acquisition process. + */ + readonly attribute AcquisitionStatus current_status; + + /** + * If the acquisition process is a multistep process through calls + * to this acquirer, then this attribute contains the current + * iteration. + */ + readonly attribute unsigned long nth_iteration; + + /** + * If the current_status attribute contains + * the AQST_Continued value, + * this operation returns, if necessary and supported + * by the acquisition method, any data that may direct the + * acquisition. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Continued value, + * a BAD_INV_ORDER exception will be raised. + */ + any get_continuation_data(); + + /** + * This operation continues the acquisition. The argument + * data is dependent on the acquisition method. + */ + AcquisitionStatus continue_acquisition( + in any acquisition_arguments + ); + + /** + * Once the current_status attribute has the + * AQST_Succeeded value, a call to this operation + * is used to retrieve the acquired OwnCredentials + * and, optionally, place the credentials on the curator's default own + * credentials list (for use with default ContextEstablishmentPolicy + * and ObjectCredentialsPolicy). + *

+ * The CredentialsAcquirer object is destroyed after + * this call. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Succeeded value, + * a BAD_INV_ORDER exception will be raised. + * + * @param on_list TRUE if these credentials go on the + * default own credentials list of the + * CredentialsCurator. + */ + OwnCredentials get_credentials( + in boolean on_list + ); + + /** + * This operation is used to destroy the + * CredentialsAcquirer object before + * get_credentials is called. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + */ + void destroy(); + }; + + /** + * The CredentialsCurator object is a single object per an ORB + * instance's Security Service. It has the ability to create + * CredentialsAcquirers and keeps a list of active default + * credentials. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     * 
+ * Or it may be retrieved from the SecurityManager's + * credentials_curator attribute. + *

+ * The following pseudo code describes the process of credentials + * acquisition using CredentialsCurator. + *

+     * // Resolve the Credentials Curator
+     * CredentialsCurator curator = ....
+     *     resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     *
+     * // Build up an acquisition argument (e.g., using SL3CSI::CSIArgBuilder)
+     * Any arg = ...
+     *
+     * // Acquire credentials and get a Credentials Acquirer
+     * CredentialsAcquirer acquirer =
+     *     curator.acquire_credentials("SL3CSIAQArgs",arg);
+     *
+     * // Get credentials and destroy the Credentials Acquirer
+     * OwnCredentials own = acquirer.get_credentials(false);
+     * 
+ */ + local interface CredentialsCurator { + + /** + * This attribute contains a list of + * acquisition methods that are supported. Method identifiers + * are defined in modules that signify their support. + * + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + readonly attribute SecurityLevel3::AcquisitionMethodList + supported_methods; + + /** + * This operation starts the process of credentials acquisition and + * create a CredentialsAcquirer for a particular + * acquisition method. It takes an initial set of arguments for + * the acquisition. The content of the arguments are based on the + * acquisiton method. Depending on the method, it is possible that + * the credentials may be immediately available from a call to + * get_credentials on the returned + * CredentialsAcquirer. + *

+ * If the process of credentials acquisition is not completed upon + * the return of the acquire_credentials operation, + * the returned CredentialsAcquirer object shall have + * its current_status at AQST_Continued. + * In this case, the get_continuation_data and + * continue_acquisition operations shall be used to + * complete the credentials acquisition process. + *

+ * If the process of credentials acquisition fails, it is up to the + * implementation to either throw a system exception or return a + * CredentialsAcquirer with the AQST_Failed + * status. + *

+ * The acquisition_arguments parameter is a CORBA + * any that is constructed according to the acquisition + * method used. The ArgumentFactory from the + * SL3AQArgs module is a local object that helps + * immensely with the construction of this complex argument. + * Extensions of that object are defined in their own separate + * modules that pertain to the particular acquisition mechanism, + * such as the SL3CSI, SL3TLS, SL3TCPIP, SL3KRB5 modules. + * + * @param acquisition_method + * The identifier of the desired acquisition method. + * A CORBA BAD_PARAM exception will be raised + * if the named method is not supported. + * @param acquisition_arguments + * The argument of the desired acquisition method. + * This CORBA any type is constructed according + * to the particular acquisition method. + * + * @see "SL3AQArgs" + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + CredentialsAcquirer acquire_credentials( + in SecurityLevel3::AcquisitionMethod acquisition_method, + in any acquisition_arguments + ); + + /** + * The Curator's Default Own Credentials list. + */ + readonly attribute OwnCredentialsList default_creds_list; + + /** + * The Curator's ids of the credentials on the default list. + */ + readonly attribute CredentialsIdList default_creds_ids; + + /** + * This operation retrieves Own Credentials by identifier. + * It is not required that the identifier name a credentials + * on the default_credentials_list. The Curator keeps track + * of all OwnCredentials it creates, until they are explicitly + * released. + */ + OwnCredentials get_own_credentials( + in CredentialsId credentials_id + ); + + /** + * This operation releases credentials from the default_creds_list, + * if there, and also disables the credentials from further use, + * provided that all their pending work is done. + */ + void release_own_credentials ( + in CredentialsId credentials_id + ); + + }; + + //-------------------------------------------------------------------- + // Security Service ORB Objects + // Retrieved from the ORB by "resolve_initial_references". + // + //-------------------------------------------------------------------- + + /** + * The SecurityManager object represents the Security Level 3 + * Security Service. There is one object of this type per ORB + * instance. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityManager");
+     * 
+ */ + local interface SecurityManager { + + /** + * The credentials_curator attribute contains the reference + * to the SecurityLevel3 Credentials Curator. There is only + * one instance per ORB. + */ + readonly attribute CredentialsCurator credentials_curator; + + /** + * The get_target_credentials operation retrieves the + * TargetCredentials that represents a CSIv2 security association + * with a Target. This operation causes communication with + * the target in order to establish a security context. + */ + TargetCredentials get_target_credentials( + in Object the_object + ); + + /** + * The create_context_estab_policy operation is a policy factory + * operation that creates the Security Level 3 + * ContextEstablishmentPolicy object. This policy is placed on + * the policy override lists of object references to direct + * the security characteristics when communicating through + * that object reference. + *

+ * If this policy is not put on an object reference, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the object references policy list, + * then the default credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ContextEstablishmentPolicy create_context_estab_policy( + in CredsDirective creds_directive, + in OwnCredentialsList creds_list, + in FeatureDirective use_client_auth, + in FeatureDirective use_target_auth, + in FeatureDirective use_confidentiality, + in FeatureDirective use_integrity + ); + + /** + * The create_object_creds_policy is a policy factory operation + * that creates the ObjectCredentialsPolicy object. This policy + * is solely for use with policies place on POAs with "POA.create_POA". + * It restricts the POAs use of credentials. If this policy is + * not put on a POA, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the POA policy list, then the default + * credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ObjectCredentialsPolicy create_object_creds_policy( + in OwnCredentialsList creds_list + ); + }; + + /** + * The SecurityCurrent object references thread specific + * data pertaining to the security service. It is used to retrieve + * the client's credentials during an invocation on the server side. + *

+ * There is only one instance of this object per ORB instance. + * It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityCurrent");
+     * 
+ */ + local interface SecurityCurrent { + + /** + * From inside the execution of a target object implementation, + * this attribute contains the representation of the remote client's + * credentials. This attribute is null if the client is not CSIv2 + * based, or the client is from a collocated call. + *

+ * The value of this attribute, if not null, represents the + * security context with a remote CSIv2 client. + * If the request_is_local attribute is FALSE, + * the current thread of execution is directly servicing a remote + * request for the target object within the target's implemenation. + * If the request_is_local attribute is TRUE, + * the current thread of execution is servicing an ORB mediated call + * on a collocated object. + *

+ * If the client is not CSIv2 based, there are no CSIv2 Client + * Credentials, and this attribute is null. In this case, + * the user should try the + * URLSeq; + typedef sequence < CORBA::ValueDef::FullValueDescription > ValueDescSeq; + + // Operation to obtain the IR from the sending context + CORBA::Repository get_ir(); + + // Operations to obtain a location of the implementation code + URL implementation(in CORBA::RepositoryId x); + + URLSeq implementations(in CORBA::RepositoryIdSeq x); + + // Operations to obtain complete meta information about a Value + // This is just a performance optimization the IR can provide + // the same information + CORBA::ValueDef::FullValueDescription meta(in CORBA::RepositoryId x); + + ValueDescSeq metas(in CORBA::RepositoryIdSeq x); + + // To obtain a type graph for a value type + // same comment as before the IR can provide similar + // information + CORBA::RepositoryIdSeq bases(in CORBA::RepositoryId x); + }; +}; \ No newline at end of file diff --git a/dist/idl/TimeBase.idl b/dist/idl/TimeBase.idl new file mode 100644 index 0000000..3574c0a --- /dev/null +++ b/dist/idl/TimeBase.idl @@ -0,0 +1,42 @@ +//File: TimeBase.idl +//Part of the Time Service +// Note: if your IDL compiler does not yet support the +// "long long" data type, compile this module with the +// preprocessor definition "NOLONGLONG". With many +// compilers this would be done with a qualifier on +// the command line, something like -DNOLONGLONG + +#ifndef _TIME_BASE_IDL_ +#define _TIME_BASE_IDL_ + +#pragma prefix "omg.org" + +module TimeBase { + +#ifdef NOLONGLONG + struct ulonglong{ + unsigned long low; + unsigned long high; + }; + typedef ulonglong TimeT; +#else + typedef unsigned long long TimeT; +#endif + + typedef TimeT InaccuracyT; + typedef short TdfT; + struct UtcT { + TimeT time; // 8 octets + unsigned long inacclo; // 4 octets + unsigned short inacchi; // 2 octets + TdfT tdf; // 2 octets + // total 16 octets. + }; + + struct IntervalT { + TimeT lower_bound; + TimeT upper_bound; + }; +}; +#endif /* ifndef _TIME_BASE_IDL_ */ + diff --git a/dist/idl/ZIOP.idl b/dist/idl/ZIOP.idl new file mode 100644 index 0000000..59f5120 --- /dev/null +++ b/dist/idl/ZIOP.idl @@ -0,0 +1,123 @@ +// -*- IDL -*- + +#ifndef _ZIOP_ +#define _ZIOP_ + +#include +#include "Compression.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module ZIOP +{ + + // + // Some attachments for GIOP messages, defined in OMG IDL: + // + + /** + * GIOP Message of a ZIOP message + */ + + struct CompressedData { + + /** + * CompressorId used to compress data + * Must be unique, not a list + */ + + Compression::CompressorId compressorid; + + /** + * Lenght of RequestBody or ReplyBody fields. Usefully for: + * - To checksum + * - To alloc memory at decompress time (in some algorithms) + */ + + unsigned long original_length; + + /** + * RequestBody or ReplyBody compressed + */ + + //CORBA::OctetSeq data; + Compression::Buffer data; + + }; + + + // + // CORBA Policies for ZIOP + // + + typedef boolean CompressionEnablingPolicyValue; + + /** + * Tag Id for CompressionEnablingPolicy + */ + const CORBA::PolicyType COMPRESSION_ENABLING_POLICY_ID = 64; + + /** + * The ZIOP CompressionEnablingPolicy. Has an boolean attribute indicating + * if compression is enabled or not. + */ + local interface CompressionEnablingPolicy : CORBA::Policy + { + readonly attribute CompressionEnablingPolicyValue compression_enabled; + }; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSOR_ID_LEVEL_LIST_POLICY_ID = 65; + + /** + * The ZIOP CompressorIdPolicy. Has an CompressorId attribute indicating + * the compression algorithms that can be used. + */ + local interface CompressorIdLevelListPolicy : CORBA::Policy + { + readonly attribute Compression::CompressorIdLevelList compressor_ids; + }; + + + typedef unsigned long CompressionLowValuePolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_LOW_VALUE_POLICY_ID = 66; + + /** + * The ZIOP LowValuePolicy. Has an low_value attribute indicating the + * minimun size of application data that has tp be send with in a ZIOP Message. + */ + local interface CompressionLowValuePolicy : CORBA::Policy + { + readonly attribute CompressionLowValuePolicyValue low_value; + }; + + + typedef float CompressionMinRatioPolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_MIN_RATIO_POLICY_ID = 67; + + /** + * The ZIOP CompressionMinRatioPolicy. + * + */ + local interface CompressionMinRatioPolicy : CORBA::Policy + { + readonly attribute CompressionMinRatioPolicyValue ratio; + }; + + + + +}; + +#endif diff --git a/dist/lib/tidorbj.jar b/dist/lib/tidorbj.jar new file mode 100644 index 0000000000000000000000000000000000000000..fcc9d489edafee1a148bfd0cf68cf91b59e01e0c GIT binary patch literal 1598012 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%0A& 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

jmVK`W6@GkZi>MWDqnB7V?qTxs_WkZ&9gN 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%0DIaE{1gPgJ& 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�_ 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%0Dh$8COY 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¸S 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

-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 z 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 Xkj)z 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찏*9!0TW&%yl*U0t#3j_d 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%0D})nih^4u2Qj{#D=h1gvV3S(xVt?wEJyRQl7@z`W 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%0DFqPZ$sCR$* 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 BVeP)8rj4Ml`G%cVuQ= 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/.svn/text-base/properties.xml.svn-base b/idl/.svn/text-base/properties.xml.svn-base new file mode 100644 index 0000000..688ba8f --- /dev/null +++ b/idl/.svn/text-base/properties.xml.svn-base @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BIDIRECTIONAL_POLICY_TYPE.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BIDIRECTIONAL_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..f2da85128edbfa1e380138dfaca481c0f669ac57 GIT binary patch literal 146 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gII1Q9yo9W^$#zlc$SkkgIcur@x=0PkeyCkEe5Fd`M(~DR%&ty8_;kDCZJ)A43Z4Y3@kvJ706>^U;~m20Kx7c&;S4c literal 0 HcmV?d00001 diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BOTH.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BOTH.class new file mode 100644 index 0000000000000000000000000000000000000000..bb6fedde86aae091b249a2fb83afed14b9f4d2ac GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gII1Q9yo9W^$#zlYfW@BZELzVp*boPGVlVzJF3yYH|r1&>RLPkUj=U S24)5pAk7NoF)^?KNd^FsKpI5= literal 0 HcmV?d00001 diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicy.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..b86960a5e5c4a69252020f929a7cf513d3243eb4 GIT binary patch literal 244 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2KD@+bp8C?bbY5xm&~Go{G80> zN+3HWvnVyWBr`uRF$W^X$RLoFSeB@tlbDyT@1K+flx1WvBvP|~L26MV$h2Zc1`(JZ zXa684M}3&-Xu>cX6i`(cN)TBtUJc?CeqIx?j!*fL-th!f(G`m-w6RI@7Y z+LmEfxf6zYs9QF}dUC*C&OFY#qP$TstnGTu(2nK2Q86rCvyHl`*4nZx4?xg=u`N|2 zuC-BI-FVI-qbMz1C7(-!JdL_#^O)pKvvFio5W0GhJrA+}iDlT7k~?FWOGkE>`dsk` zOx3dLPZ)B8%GbFZjUJiWLtT5USCkHIehlsYc@hv@)oQJ0C*du;Enru|96D>gYx9oS`YntfQ(eK#vW8&cc#`_67 zq5Bo%P*M4q9+B03N|jR8ZKa~u^ePpHVRk4=H=2T@M8kMOIqXASA9QROG)g)6+ma=I zgZDKiPq~^u7HC5F9bS@g1jD6xI{44zrV(C|i^@vjGCN6SU+A;ayiNq)S`DRaUYg#mW100XopsYQ>b~jNnl5t!5d@we7b32cKZA63>WMpFPv3O1Y^iYTF;r5vqRIrIbu= z)Zn1ZBl-EmOETsm%ZNb|u`Ocm=%*_2o;j_RAEu;vBIrhO@A=E=;$g+ZD0O4$mDn)t_UidSBUwyRNw*UYD literal 0 HcmV?d00001 diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyOperations.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..99d32fc0b26cb688c1bcfb62cfd2277832ce7648 GIT binary patch literal 161 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B*0RK$(o{wUW)00?Mh3(DqICWI+;n}XOqa}} zfc%`yTn*Y{7#0;*$Vkb@cH g>>uRhsE@9Pjgf(ofeDD2fzDxMVPs%oU@J$M@`RE(AKXA9D7b_q^wMZ_oSYpZ|XS1HiNRQN%fn@#RGk zb})zb0Y^8Lsm>Kfb|_vm)j&&t+LI zTj0kx`EF4}4oiIZmVo6Du7vQmfE5t~7z^PY4!X)My&J-NAzTeX7H~~~B4CXnAj{f% znW1}ic2n6_61rj(5;@z_jKTy%NG_`OhRGHB-1~~H>4~(Kw>8sHtR2z`PHKi`PcitS zL(2^QX>(oWxb}ud&tlP`S<@;c%wi#t($bo>VCq_ahxY55rMfV>DHQ zXqk8zfOc8Yby+iP)w-_aRdV2B19HK%Y-LSXbE>tiT8V{ha$+?#bY$Q`&Db`#D2~C# zbJrvH@uGU8qL%Fm9`VVXt>m}nl+qFh7m%mCP3CncD-vReOIQcVuS+OkgC8^r&mbyc z2*Uz4C2T<#P?TW6WazJ@%e9wErseFy<;CPuCOgmJN(`NiQe`OAf@(>)0b0ti1ym$# z^)0mk11r zOnP>lN;txOJEn}|qazm>2AW^Ek+@ZMue%)^4w+_@@`h6u22n1kw!E$A6_rOy-hGcB z$RS5ua)=|_J0&WMKW~R&aiX~kws)ns_ zmNSgj)Q`c=mQ>4mLbPj2Vs>qlh|VB6Eg_rU@l;c1cw~2Os143PpurhcCzI5I)QXmQ zlOfs4R@e4JwNUI3#(^GeakYi52fBkHY}Qi3&_nUIGK*sEX)vKNR%n7)Y+x{PHYa(d)2c6)K!KM1V+Z8a*xURluRR<5G@T@8K&3@%XS~NrO+>7RN|P zgGV#Us%6WS@&-*diY=Ps=wg|g$WqG{on(EjZg4oR)pnqtq#BfN8U>D&;W~#YTA$RX z4<^c$*ZJt8QKKDYy=BCEkldcHR3VqgnrrD*_v=kL(wEUUFuVu0OB>K}1PSlD$GZ;E^@+Ri{ZiMs;A!-di4!CZ56AZ4Z&Deh z|9;m-2Yr2{;=heR4d5c4b8nfC?gYC1_cnsDDugORbMe2?zK`$93hUaPRK=2;=1zfs^D2vDAJqY22dP#HyNC&tU z_#KfIU)Sl}iodHrcL#xe46N+o%pC+NS6z?oqiw~vhsUcJyut-%xxn8fc!CQ8O@b%6 KAm|C)YU6*V1%4j@ literal 0 HcmV?d00001 diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyPOATie.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..0ae2466e126b4929df03da6c75bba4c437fbea3e GIT binary patch literal 1052 zcmbVKZEMp|6n<{gE@>OLF4H=7ZqE7AWUg@z{jd#T-M$P8EsF?aA3~N~!uS{rx9^CumlnV!ezi?xtp=iYvI6n)|7F zkeY`w8VYm;hKx-ak7R5ylx>d(+;n^qEw&?j_mUxXrg&hV^piR}7IhT>u5QE^Wj z`Xv%DEZ9yE*dk1L{K|1T6}mI7q#MPFa~^Pu#{(Xl-Oj<@SxcYVNNL~%Z>bKcp<4{q z-bfrf8TPW+F%{}Yy&=Q$M4^YBlh%QmiAG|`9`7e{L?p^WtttC%Fp@`whBX!QSWr>J zqKakQP;nEtRIK2(idC#J)c%#1!8|@{@6y1U>EQk|wB7CIV}_N<8LUiB##b<7^9u?eC<;R7 zaV_U8l4lev8J|&jpTl)r&*2(*iK4}ikSl5yvsAtoThV1V-AgR rI%kgI;w_r;bdJoBHKX9pU(PCuqxZGa4=AUSR<=%yTE+SVDdXY~N!IZg literal 0 HcmV?d00001 diff --git a/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyValueHelper.class b/idl/BiDirPolicy/.class/org/omg/BiDirPolicy/BidirectionalPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..cf48d410ce3a35a7dd814f9c6f56a51bdea4bc52 GIT binary patch literal 1787 zcma)6ZC4XV6n=)hY_bdmf{KWuK+z<$M5(WY+7i%0iNzX9YhPTKWKKG|BsrUb%1`kZ z^a~%X?TMWBoF4t;IsPb*cXk&@7U=1ho!NWubLY8to;&Z}|NSq3X{?(V#FU8~E*rRF zB7$iXpW&*3YbN5jo+Qf+12?ttmWflCNzx~u#4JA7sN351h5me*z?`-e5|}r!fIBAc z;wuA-29_9NmfCIzhSSBmTg}xss=4`<2Zg!ZDp}|26_IC%&&rxqw;3Yo%o;;fn`yD? z?mENCbS8u(xCY5uQ@Dy@Fdg#G)wc5`oyZW+lxvqM=G0L!nG!=!N!jJ6_w2^1z3vDq zm(KP1o;h@G8{;lnVK_k%PwXu_=h(GsuB2R9s}ixOD{S&!3Ln|1yGkFDTdFlS6@?3X zBdJr`s}x}vNxwsXJk$ny4@?Q9B;pYSuo)un~v49Q?hGcCvk>H0CWKN>f4 zWr`H~3&$f^1|DRV;FcYbuk5l(3{0l-2YU zrFn!0W_mup{QDdEuqgukytw(piczTVf$>YZW+h>x2 zdovtBqoedH4$>>jVCq?+U6S@RsPsKcfBm#FT4UK)V1LjC6i6c!xcfXO5Zy)B3(uRx zd0Ys*Lx`e_tUcL(5P3NK3egr~ev%|cF&2asY1Lub>>I?NVR2re60CT;9`*ZCK1r=$6tcK#aSZx5yII1Q9yo9W^$#zpMQ|AqYop4KvrT|qJBEK0a3(|Ak9 zZM-{*_wc@$eIVmQ+!4Pe@mrR$f{!>>#o}WbpI}YGx{%%wi%kg`8C&?2j4#Op1&{ERg0F?*H&8jgRiNR7VYb_Dp;`0v>eiE@?s$f6DJY`E zp)2?f*BQorYmqn&@9R`e>b%#1cXC1nR^7HhCfVPby)6>bs7EHc z%}@hTXNguJ5BfTbPDy35Tjg-$zG0OZM!kw!uRW%y87}m+WFSMj2_jJ?IU8-X6SWNc?8%ZP&feh3&-7w){ZwUee%b26*b_R5R=##}` zLQgWMIlV3PpQF_Tjf}>4`d6@DXaZVZ#kKHwJUos)#n8{;>D#y-p6+89G1|SIP7JpY z%V(Y={uCoE@D`*@3#0VOEsX7C|ALhL1IkO + +#pragma prefix "omg.org" + +// Self contained module for Bi-directional GIOP policy +module BiDirPolicy { + + typedef unsigned short BidirectionalPolicyValue; + + const BidirectionalPolicyValue NORMAL = 0; + const BidirectionalPolicyValue BOTH = 1; + + const CORBA::PolicyType BIDIRECTIONAL_POLICY_TYPE = 37; + + interface BidirectionalPolicy : CORBA::Policy { + readonly attribute BidirectionalPolicyValue value; + }; +}; + +#endif // _BIDIRPOLICY_IDL_ diff --git a/idl/BiDirPolicy/.svn/text-base/build.xml.svn-base b/idl/BiDirPolicy/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..96d64dd --- /dev/null +++ b/idl/BiDirPolicy/.svn/text-base/build.xml.svn-base @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/BiDirPolicy/BiDirPolicy.idl b/idl/BiDirPolicy/BiDirPolicy.idl new file mode 100644 index 0000000..892b7d3 --- /dev/null +++ b/idl/BiDirPolicy/BiDirPolicy.idl @@ -0,0 +1,23 @@ +#ifndef _BIDIRPOLICY_IDL_ +#define _BIDIRPOLICY_IDL_ + +#include + +#pragma prefix "omg.org" + +// Self contained module for Bi-directional GIOP policy +module BiDirPolicy { + + typedef unsigned short BidirectionalPolicyValue; + + const BidirectionalPolicyValue NORMAL = 0; + const BidirectionalPolicyValue BOTH = 1; + + const CORBA::PolicyType BIDIRECTIONAL_POLICY_TYPE = 37; + + interface BidirectionalPolicy : CORBA::Policy { + readonly attribute BidirectionalPolicyValue value; + }; +}; + +#endif // _BIDIRPOLICY_IDL_ diff --git a/idl/BiDirPolicy/build.xml b/idl/BiDirPolicy/build.xml new file mode 100644 index 0000000..f5337fa --- /dev/null +++ b/idl/BiDirPolicy/build.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/Compression/.class/org/omg/Compression/BufferHelper.class b/idl/Compression/.class/org/omg/Compression/BufferHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8ab0bf9f4fa2944ef9ea77de521f88501c03c3e1 GIT binary patch literal 1506 zcmZ`(+fvg|6kUg2(uN>V?g$7d*rrMVuTVrOpdiI6Wteez=!Evr36{2|0pU~l0$=em z(9szOo}BTc9QSELp{=}}lkBzjKI`ngl0Scc`~onEbs3$wFJlavgmD=zOvn^|AmO15 zFCO_R@>s$X5qv7615g4gEQ2c;+F)>tFm1`axy8^C4Ao>(x=1o|MQ&PD zI9P+vE(3G(B)Q45Qu&!@qIo*{`wiWl*oqR=egOO%v zC&rGxuWMO7m(dcIY2-2_&24g>&|vMEg}iBrL$u{wVb3Bu*LNdj5uQ(`VbPt{Yg6KT z)@6=;JKszyTW*|!9`s6BRPYl041Lv&j;AbcCHTjsd^XKZ!F?rRNx?E+GqmucW*KQ` zCe%3vD~Ksr#T$mU%eyTeqOP&J?5EttGmq(Yj_nw}UNSD+%yFj&!D$6Dgq0yjzSrK0%O4i}Sc ztz?yLMGFl;w1un}v>R1Jp<7a#ZJ(q)1u+$d(QCVZ$%+VH1sq>hWslU^r84g;>7;63 z&+gG_4Z?kGDKde@lZJ3avRJl+5K`;;N~x>Xxqj46yPBQqde+d3Nh`&$5v(`te6vUv>rHxVrJd34QBT3X&;y7_mT};gG6=X!XgDsT zehlE2gZ99U28uSRKjC^GK85=P9=nJigBWsXG1>)9RnOr)!hm`P?+K(>_#CbyG=|UM z`VQamXSieP3FHzQk10bU5kqCQ!<6fTYk+=Tw}pPPwNrVL1PJy0U!nX)X9-O!CEO^X zInY9tTE9UdK#Zf&~D$`hkI4MB^Vw?LTniS09oEt+W-In literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_7X.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_7X.class new file mode 100644 index 0000000000000000000000000000000000000000..be13cd86e1536583fd4ad2e49aaded6778ec7e8d GIT binary patch literal 136 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243ge literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_BZIP2.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_BZIP2.class new file mode 100644 index 0000000000000000000000000000000000000000..ce105d54875a6ddfd6fe326a7253668ba65eeb90 GIT binary patch literal 139 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gj0}q03(AyR$^JAeokUuy1su> fR%&ty8_-Y&CXgWvk_^lYEI^tS$YWw)1Ck5?l-?e& literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZMA.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZMA.class new file mode 100644 index 0000000000000000000000000000000000000000..74538aa260bba183757ef4feb16c49ca9e5153de GIT binary patch literal 138 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g gR%&ty8_-Y&CZHjV43Z4Y3@kvJ706>^U;~m20F^Bst^fc4 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZOP.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_LZOP.class new file mode 100644 index 0000000000000000000000000000000000000000..9bac2b5bf308a5ff28e776e551d730732c251dcb GIT binary patch literal 138 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g gR%&tyP%k3`6VMPw21y2H1{NUA3gj^{umMR10GQhzzyJUM literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_NONE.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_NONE.class new file mode 100644 index 0000000000000000000000000000000000000000..56b195f43d3396247b4c3648336cc8dd15db3b95 GIT binary patch literal 138 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g eR%&ty8_-Y&Ca@Wj49pBHKprcQ$Hc$}G8h1olpdu3 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_PKZIP.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_PKZIP.class new file mode 100644 index 0000000000000000000000000000000000000000..006da5d340db6c2bbac8341549b417c38623e643 GIT binary patch literal 139 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gj0} gR%&ty8_-Y&CZHjV43Z4Y3@kvJ706>^U;~m20GUA^!2kdN literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/COMPRESSORID_XAR.class b/idl/Compression/.class/org/omg/Compression/COMPRESSORID_XAR.class new file mode 100644 index 0000000000000000000000000000000000000000..669751c43f91b1ec9ade3740b92aff7413e9dc6c GIT binary patch literal 137 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g gR%&ty8_-Y&CZHjV43Z4Y3@kvJ706>^U;~m20F*}_ssI20 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionException.class b/idl/Compression/.class/org/omg/Compression/CompressionException.class new file mode 100644 index 0000000000000000000000000000000000000000..c1d2d0d29e4b6f9416d6b31c593907ef10e19fc8 GIT binary patch literal 679 zcmaix+e*Vg5QhKlDLq83wFkAeR_h^+)}VN&2(}0o1VK^oGPFyGv`I*+_*!1H6$Kx_ zhZ1Ks)M5%=?Ck8!x3fF{e0;vX12}+^L=O2RQYa*l#G)`u5|)#Qq9{x$juo+&C9F!Q zFvMK0d$z^ES`4WU_u8)M^i2`TT-@uAy4KY#L%Z&~rez!ve{5Q2|AZl|)NUCfO}oPx z@=7ZRi@c%)<5N)yYckeRm667V3>h;rW--T5`1^^*gW2tHSAg>}HnBy2ugKU&m7cR* zL$iB^*0g($%RP@8ne@+|+T8E1I7Tn88mHQg$K8qS-Z=YDp>y7KxXTbSI}BN+7HpRx zH$?;?PE2A8^ MZ>S|vp+2sFFY?5l0ssI2 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionExceptionHelper.class b/idl/Compression/.class/org/omg/Compression/CompressionExceptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4409284d651da67458603f764a26304c4fdc338e GIT binary patch literal 2625 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 YkhG@TINhl}g*OH|tT72eA{{sW11V#s^8f$< literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionManager.class b/idl/Compression/.class/org/omg/Compression/CompressionManager.class new file mode 100644 index 0000000000000000000000000000000000000000..380fec7450d28cddf24f907c67df99a241f31a4c GIT binary patch literal 222 zcma)%I|{-;7=-8dwLTgTU}0su;thNifk?m`{0YBHLb4k+i{RBPJb;H1w-W7~X$FRG zV4ko01Hc9|g^_|%7%NN^ri7LAM!Ux7y=z)8T~|8$olk7ph$qY|zOt^_8lB~p6oIh* zkIh=~9O7!XhRupBLbm^e)Ist_$lfQ Dw<1C8 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionManagerHelper.class b/idl/Compression/.class/org/omg/Compression/CompressionManagerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b9da8d28f2b16f1c6f11bd8698e1d54b615eac9e GIT binary patch literal 2021 zcmb7ETT|0e5dKbYX+w}wK`UPIT2g2L?-bEeyr5JN5Jz7!A;elJX(t4cpQ674b*3^p z!uoJ!f~n-95YC`TghfR{*1UCgKQ&MT}rHf?iw}X}Q9et6^N@ z*Vn_i!Ou5Ej3LdJaelldVgk3hbVoo&z@&&Mh6Q9rOyRD8djjqYc)$=;?d`I`5T7Yo zd8M?TSF*G7lNn`^ZnLEoBh3&RFPH^;g2A5{SYin9YueP3wan0)7-;b%cXA5UVEgu{ zJ;0p{wx+M;wDO|1TqHWno`uvys}_h1vAf+D3}|DWiw19THWLQH_?NQO1v3Vag@T<`pT^ zW_i=55)5rUeE{6xmQ}FnJ?7d1&u-c-@sqT zj1{$xnrVaj;sDi$$Ms@$;3OPFpMYrz4{=h$QN$&j;8H)%GQ{?_SHdIAFr=oZX2xie zQ+%R5R$kc|h_R8>u!K`MEg&c1F=i#q;faJK1_jJZSg0LR440bdp^mDTl}4Mr-C#J{ zWT{MMrqsF2d?v@x->h-{t4}|@UM>n)l<*WZr578v|C~aG!T&RSU=+)S#SnG5RqHrI zcLSlyd|GIomKzp%zTruwH7qq1t+tf-Z`~(7l}Xw7m64X^BV-X6URDT&-s{ z(q@$0X>Ug5)IQ`;y8#m4^Zhtu&TzK5>P9m>oMq_X3~!*FYva<~f2qpehSRY&bqp*8 z`ssTurU_FR%RynR+4zNEKuH&A=c}Lkx_CE58$jMzq zDiCXlMQ{NZ9g{fiJh&uR&@n@1Qf{ygbP0(DkdGt|R6!>tcc^YM0NF8_ph!GcLjHlS zcj)+n=<`qL{+9fSSn>yAo+~+7!C{_Ct)>8cT`?+(i0oj+2#JRa$$n3)p?&mjE+YA- r9RFb_mp=Iyf^3H}>UoQ>{2e_z^|ZXvLmdc1X=){@$&+5c_G0)89}xMz literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionManagerHolder.class b/idl/Compression/.class/org/omg/Compression/CompressionManagerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ec0766f27a037cc9f13ff2944fd6044c7498631d GIT binary patch literal 856 zcma)4ZA-#X6n?I5F4rn8wX#<$NVj0rS0gCD6jVkXXq;%c&Jr=19_$f1n$|;T|k0AL=B;B}Vkh@~+P?}Tfy731|g^Cr1%I|Fq z*4b&VC8n+=Lf7t!=`3`j$P+;tpYwpbPS`rI_Ei)UwIvlzY%$mgi`ePuG+r=!V#NIp zk4R=?$>?8nPVApf|7PNhVurnC?_V7Z*^w^-T2|AIltJ?~ZF!fR&4Zkzmr3-J_Zh-u z0mU-?c910mXyyx;DZe3eC27*&3GxF~LA_N}7PC#t$!yttg#3)`2Xb`psY2%)*|u>S literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionManagerLocalTie.class b/idl/Compression/.class/org/omg/Compression/CompressionManagerLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..991b4723b36b55d816e6a6d2a4c9a8ba952380e3 GIT binary patch literal 1127 zcmb7DYfsZq7=GSvP}d!a%6D69MU`&|ug%70Jj!om}Sx!rUe+7xg zj1T?*e-z<8w#$gr>C*H)m-l(z`}uWw@e{x%>JBQnSHUgZui^n78nI%;BO@Lgv1;Rq zji-dlL0fiY7^IT0xubO0P={e-TOD?_Op-{&*Y_WSI0&Ww*p)g+S(j`P#$QHpl)fUo za7U+mdxY|~YP0j_t~WZLFs)@6C8^X0UxHSu^eMp~9*ENKGUS%=?z}x|$?orDY^)Jx zkK&sa%Wl)#v*8k|p-iuPY7P&2;EOP6sI9!PN)uMy=0E9N;E93DNG2vdZ+~c|22KS8 zJOKw)8@|9aW(4LiFR+LufjhV>P{T6e+5h!@N40{^r-+-?7=iF6NSLu+#K;@*x}#;# zKHbebDcgj#BKYU{Ypjmr{%|V&o{=Tjv~i;d-v{!f-k4mh@bjqfb0Ju!K)kbgFEGJ! zl1~eKZ}IB*KR|x{JFIg)8N7q395cf!@!gpJ4c1w%<|;GMm{`nBRE@gcL&-vBW0sX= zX5QwX`%wh1^-%s3zQAzq++W~h7P1if)(xC{oWqw;;tvoenA&m=XJ8g27%q$eN5xYP%bD<46CR2Y-M+O5AAF zQj7MqJC8T>X5M>!dwv0MfGr;#9~*>@VVT*2&GoHF3T-BY-QY|c8R@Z%j`TP;Y;C61 z_g|ZnPi8M15E{o%3Fn0)SRY+N_g?*;=ml{&@Ucl~N-n0A;&4GNLc45Ds)e*6YzOhb z?L9*4M>1nuo)=y%EV}=f6Yl79p@d}9&)J9%6P%+%@gSm+P%`S@3^^$Xd-JALE*_2y zi*#~P#lR_HXCD1h-6{R3z7o;qG_4Z|OD<2K<`I_Rxw_`6@~u0>$I2A4>W~JSGsqfR KGe{fj<;Zt}X`p%l literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressionRatioHelper.class b/idl/Compression/.class/org/omg/Compression/CompressionRatioHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..74b9c5ae4ed2e8649df83e2df346234076e24e8e GIT binary patch literal 1760 zcmaJ>ZBr9h6n-vw*<@J?1QoFs#Z*leOVqwuLah*_P-0P_wDxVggl%RuWHXx!)t}-o z=r^Xdoygdkj(&2cKdRH`ZWfX(&@cDyo^zgapL6bW?mz#&{2RbcZ0Z=rl#T+fYq+5! zhMPLx#|Iid)RDwTX<9zka7!6K(QyXTX)eVyX7H&(-Bz~G)N&_FTcXce_ za}A3cmIM-(eA;jX&XzsDTJW~3h0@CE+-zZ;){?j76a|tqZrzo)1!B4UhCp1IxmljS zDR4TMk01$GAh+Ihd?_%Ri}+{jPm2pGk>)&+zFlF=nd4&e3jzac(ylzdXE)aE&6>k< zd2XBUxg+OxG46A>1WqyHk-cjdYIeO^Sd+e6uaa2YcWipEMvrWGzEp=4mg+Lq(1z_NyW z2EN3Kz>w1{NOvo|47SX`eLOI*iZy|ePFZ)KRGfx%y}E&Qd}SaH)4*AbY1lCEHNG+M z5Z@Yj2jd2=BFDrfZ@b|;%_cFcHjxIt!}kK$mgdXTy#6W0uq&qfJBXjYF-1lGVBkks z8h$chqby(^7S>6B1iI+d8jep69sVnuj~u0d;X{0&J}$f|)j@8#prw%rwuGp*$gK8l zsoN8{a^f|0qKZm>nNWT`=*vfBb*PIjI7P8**LHZCpg=|{)QWU0R|&^z2Fg)9qJwdm zsas*xX>aN4rDeBHfu`hR>u048jz?sI+9A~PP}PxE!*{n`>Fzp~tO#6>mLCR3$#hN2 zV94LDxpp&1vXMJFImcKc#1CGK|2gVXFXXt62xz;#caKz}f)ZDf3c zPv0n?Qsz?w!LKyGIgMP;^KY2D;GQsFK>W@RFpzT+x`zTM5Z_1NZ-Fzej{d8WREAEU_uX#^*G=tN35Wl`!)y5>V{3&tbg5d6ImNffn9c-pAlRhBCv< zm-zz*-HJUs$TbFWfm!$tgjoiI9CTzx4r=5B5;{k?EAkpsotn??@l$b_#I-OWL$?Y@ Xn%Ndkx2sR#y`By$OhS-I+l~JK{tKlE literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/Compressor.class b/idl/Compression/.class/org/omg/Compression/Compressor.class new file mode 100644 index 0000000000000000000000000000000000000000..8d6857af95764c55181579685a134a784ba5b4ac GIT binary patch literal 206 zcmaJ+I|{-;6rATL>!*Qf03J%*Dq!PGGcX^R z_viTnu*Xs%QBVpqg}K6lun}*yv{s*_?Y!yxO5C8u6IM0fSvTyg&WqZVfw24E$vfjY y#GRh79-{g6c+i=Y+@vlTf8){+w!d~KK5)?(ou0Fc3sra|1i}d8$O)$LL&O*HojaTW literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorFactory.class b/idl/Compression/.class/org/omg/Compression/CompressorFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..ec6c529f4d47e313d1a58c650be2e80b9a090505 GIT binary patch literal 220 zcma)%OA5j;7=$Oj;$!0hT)1)lgE#OAg+jp_{0*_RwE0UKgkH^s2k=m0Rt0y?YzBsJ zVBVkS3&0*LjhTklm}@LFmI^!Z1xZuTNt)K%t}De2S^Skv5Z^1TD}FH5>`|-Tg4R>DJc-Zogz}e1*H}Nar7k(F`raN`;@|k2*kGL}xs#Kx2;1ABt^#gd zb~Jq}rR7$%wJbq;GV2VTtb|8cU>KgCTbLjUk8moN zjE-c&#MsEFgtIs&ASK~3(h?T&L_!=x0+u8!7cV0W12tozj;mLca)YZI!O&A=^jOiHmOHDUaM`xIdHO^(Dq^jHX|43a#np=j};#jMttj3zKs6z8v zR6fxs+=(uOL>oRGm*5N+YO5}{qH0zdTKHs_(JnS|sqMa07~8Vb$tHCSuKN1uQ|_kE zok8TxrjtZxB0R09=+;gtiB2p!i<9T%OREjnE;Ax9cQ8dObR)mmvxPa`fiZy(MzLJYb{v)pcsGCc# ldga(M1fkTllGNl$uU~vI`~{ia_T&Hn literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorFactoryHolder.class b/idl/Compression/.class/org/omg/Compression/CompressorFactoryHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bd35d3b4935f1139653847059e3dd74cb11bbea3 GIT binary patch literal 850 zcma)4T}uK%6g{J^o3@pfTG^)+r0c^{uSQTp6cj>5ud?bQ%IYlZX!x%Rilm2rKtC$F zqw7~7$+DN3d(XKaXYTjU=NEue9EG7G9zqa_FxIgl&89R-6CCvdewjz| z%eHeG7NKbfA*^Co!yfiEq;R0&5HW`AT#{UKyJEQvk-FJ24cly1jY6qzl?6j;lwf+g z!C-RGxrY;{X5v literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorFactoryLocalBase.class b/idl/Compression/.class/org/omg/Compression/CompressorFactoryLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..9ba3005bc19bea17323fa641fe5d51ea825dbfa9 GIT binary patch literal 471 zcmaJ--%A2P5dQY=bWgp^POY>EdI(g=s~$CiG=e}75`ySKw(~en^j7YU!2hbC9}pBh z_eVu@8WJHbyEC&h^UZ$yeSW>Z131EV8amcEOda_YI0|VLvCfg<*x=aYC^4k^(RAYU zy+O#3zv&Fcov=p2cdcF&c)r_YNFIB>7o9MumFg9P)|LZ@+#FJ@RF{AZ7+7J*{hh|J ze{t4n$gx|OforwpcoH~a=t+MO%ivttkqoAd!}@`NbWAp5po}es8Hm7(=B2=nw8f|; zLLym;Uzq{Am#tH4R_Wdj9Xn#!Th#tz!H}>=(x+L4O7)jI^C?Yjmt@sJGSX3Ewj{hl zG5w!xmTo&pPz0E@7qFW42IX2c)!q}d2g-tKtH}NImdVGx+1ewtXCyw5qJ+A&PJlh0x`{k zp_tB#v@CNm`?E!H8^x6<9`EL95mgM81A=yy&+_V;aOtj`?L83Gp-8y(h3l=HPUysP zPEmw;LTI_(n9$AADqJFjBX|5?^??loyEb&J>DaT;LD$AQHV7w;ZZZ;aG`Y`tlhfw> zo2cXj9-8kEG)h~Z9*6u-jsHtf>Z#dM**0LZwAgbvuCO-!caVSl2IYmlnyR%&ty8zTcF0~64V3=B*xK<6;9FfagVRt7eZ5CB+2HXZ-~ literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorFactorySeqHelper.class b/idl/Compression/.class/org/omg/Compression/CompressorFactorySeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f217700837ea50c4d406bfd0f72136c207e57182 GIT binary patch literal 2336 zcmb7F-%}e^6#i~Du*q@}2(7jl5ZY3cU1cd%YY9++wvsk9wL!F2jZ0YLV#ubOO)c;J zC;IA3U#U82Mn|T7a>l<#Umd6R+|81NK$!Tl_s2QsyWjb_f4=;655Nqz6pUa-!9~0$ z<9!7ZK2UH8AIi9_pck`Yx=F~G6PNP}PGccVpDSYbk%C1m3Dae9yc)taakw7B#|l=E zlyO67+*FXls@UC7CeCRrKW|%(;D&8#?Lx09Ka^J5Sr8Q%tU{WN>i@NtChrDR&ha&}94a)5 z{h`7j3LM|SV3oqEBmf?KI zl51*ty&3U)^MLi_p=N4yLyI{T_yeO*q1T3U)E%ywwM46A%U-Vt4()@bfzsMj6oN){ zjw{*~KNAuEv9fu;Vit2|*3B_oj3t``>EQTlC($w&27D-^U>Ri(XFYa!MjUa|Al&s+ zXAYVi6$u7K%%W_iU>Eb=tWGklc1&bz3|o9WE`&7h&UWC@I*AziyveoCBp6GI+Dmt& z(rTP&=HXZ>@%7*Y{pd#M$4QQh=|Q_N?P;FT_boaN(aLD;QJ;Z5r42}tCX6p0^n^gL zhQO{T4dV>X`qI+~B0#tO>Ti(lYR?d?qNffL#yL#-YAITUnyS7)?_-Rq&(T|joYG!E zdW=5pIiz0@+I@mxO07bvp>LNgWMVntu{}?=AxL9OGTs*aY4G{Tmx+L2f9@ynKQLND zzf{9(RSevuZ4HBwAp(s23{G-EpBjd~64*Gw(A4x{20RcFM27dBq;cyDuaJI_ti}oI z#C-I3oJ>gzqtPERsEw*Myq(G64d@$_xJoaotz&CYK?vX^l+QFvq-PKA5-BzA^Nvyog^z`v{_srMx=kJ$q04DH6L=VP9jAJ5%Zd?{=xx$yLL0seN z>p|S$=SdM$NbzNwA8(47!7VP`7LXP&DrmMwcn zv37Tqxz+XAw6aOsIcwWUF$AVFX2zLe@WvC58GKw#n`+rx4BhcWT_lB5kgo{ad(2z~ z+`i#x`l}T!x2bJq3DT3LQPxxIXSmdl0S2-1ToUeMnPGToetC)*Im($?verKA z)cEL_gg%@Tup;3BRwbytfa*IFv^g{xiK&1D5_N_YffTVL6?A)6S6{_n78WOIhi5U$KZ@dX*W%8`XhrG==; zZRcIxTfkU>wkc{j5Ki!?ZtsqOI3|Gp-6?bwWxd~ zJKT{hgT#(~7cOlX25P%5Uw+lhF|_dsEu#%K38{T=sW64*pi@oyNIdrS(|6iK-!hSv zvzH`^WFj@Kr|Hy1JEPq%AA)@(0pv&wcg^8~5%3+sb5O8`ICWj?2)qSd>=V4d(RIY# z{ELv(#l z{z4@A6Ok&FoXq0{FQwR%51!5lHARE#Vnqmvrwhp5s$3%t?3G$XiXV03$J|Mld7g9c_s{1SfD@EO2*@UpKu*Law%D@Gmb`!+0lNbB2>7994s?RT zwe5CPyVp_ccF%G3e&4XI>E3p01c_6_GQ2Z_xLmm>;Ocgp5=-(TCIj;=SJ&DEM|0@r z&BeLu*siBNn7VppIRo$3qp)6$F%qpO*YIcoIg-*Gcwr9T@}3<^$;*{lQ+}B{8fX31 zBrHRckc22;U%~+j5{fvKP(p^F{J#ke+idGDL8_|_HPzItj@o?a>W>~lamoyjHJ*q~ zxL92`9j4BWt-6eyJ7m>t(5QRk10x%ef*~Up3Ho=>e8w?-S^@}`=ueoX^x5%rM;)f? z3O%L$42>!uAg?q4KfM~HbBNIo5LsHOz9TlltRWR(vH>QkR7Z%gHa UR5p+aAWV(WO56zi3u^=T1$gYosQ>@~ literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorIdHelper.class b/idl/Compression/.class/org/omg/Compression/CompressorIdHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..345f360698159826af1ca13fd836aa535c74ed05 GIT binary patch literal 1751 zcmaJ>ZBr9h6n-vw*<`sC2r42Li};cROVqwuLRE;iAW>R__||q^lAX93vYE|7^{4m? z`h^dzbt2Qwbo5ha`lC91?q&(e0)Dx7_nh;b`rk3jo%qz=60tFp6a8t*( z_)f#3h9!ZR;k|5F0>_JvTg^Ee)m&la?!tU-mDYk&vGM}(IlFFqR|O*J%$h({nYkH` zyDo4voe3ccS0KCIv|LYMG#&EK*I(vKDv@Tr@LaRZm}3XUWJ&@9CC@BBzil>F&Gnka za(Ql>?}>fqb}{a=D*{It@yy&Zb2YPG&6PaYu2)Gc>RKkf=fg)f9M@BaDZD{0u|G z6A2SVfpeXLg0x}SqE%~HE(_Y@yt4kxQnxZyUh-wSVXy1^! zF|s)HYWAY?N^+?{ay{s?`=r#-LKmDu*fMLIJWZ%8C{rJvW!OqAM$=b|;t?K(PNr^E zQJcM`uNIc=Iz^fEo*SD@B?`_&Xl&Xs6!1{h@{ERSZ`hu_Wf@*s;9|J`AUMpXYeWWv z0?e9iHvJ@P>HXt!fF;Cy_nG*>QKx$$2em|?UyWs_c)m1j^3)-~?s=o4{rL=_(Mi5| zqkKUHbTtS3O7fdS$n_-uhPeywvFuxj-}wOsay$a}knaSdJLvn(_a<=)p9J19MA1j< zK=v<09*)07w1rqZNfMJd9fTFRtFUbLJ>su0k$s1F3tDmdJtD8rKm87oH%M&%ifA$0 zg1&?PZ6Y+%nDp6B5t~3{VnM?h#s4hM1(~mqfMP%O8uA~UB+1tpXyK#f9SrVZC^gJ{ zsXrj;R_xhAt`Ue+%);>xvJCn;=tzz1*2s4waE@?S`>PsL#x7lMEk-6|lS W9dF@iyZQt^?dh<>!~}`7-S{8R;-S|7 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorIdLevel.class b/idl/Compression/.class/org/omg/Compression/CompressorIdLevel.class new file mode 100644 index 0000000000000000000000000000000000000000..ade5ffffe281860cbd65a465078cf1433ce2b230 GIT binary patch literal 317 zcmX|6!D_-l5Pf4zqiL+B?adzALqT&{=(z~3?LiQP2E0l%OIV3nSr?(7-DFE`cUVR;P=wBKaCLLGD3hxgeDqj9_~4CDW8|THBDuND pPT^e`BYwrq#OxR(8%x@HC$tIyEf9=0h$8B`B*%0i$*!9Xwm+r6 zz^~ZWz{u#dpPcb8Ipg@A&1SO+l)(?2b9gV$dw(~7|NHx&0Pet%aRu+mcpo1~_)ta& zGcvN6m2g+aAnwJ8@{xp(1#wQsIObz?W{Nsl3BBC-e?$R zJ(Kg^roB|o^Icxe3Ud;F|wF|=bJJrYA8 z`T?WNaE>Il^<6zv)$5f^(Xowsg@O#*Tqo{ozhjnZJHkk2sctnL66bm?dwNeJKih^w zDK5Mcx6pLD!2cte(b-bfEvABNxGrHs!8e#>Nc+V4L>N*LEUk-o3zD8C2l!XX9Xpc72L)h1#jRg!>DiE?L10Xv*fJu+7`E| zY9+rbG@~qmEBFx=1rK2eN46Of9SOqLs-kZcOkh$$2DgZNq^lI{pvrJ_X(2yD{XQ+M zcZ7~@!TN#pA^_=oI1(8YKg$(-P9Gfwz(L9gztiz zC_1PGML8MNK&zbOpF2{0I8-yjZqKXMZdTE}43hy+*P`FoT`3nZ>CI@5_Qa8?I!>K7 z(5_x>lC>MB>|^Sx5)G8YHA767)^Nv5cpI3oUU!3INWCJ7pW~n6CbZ|N3(3BW;n(!*PIf=t^O=|!u{R^cFIEP=r-xM*xA2*bn03G=6d4%( zU4MmgaF;PC?(Xx|!>QubdiW}R*sjoLlR*|MgI+Ou(*~pSP5LiEH={eE?t}eG50D`3 z0FNDanLzje1A8tvh8swE+=~cffT+XjAwnDJeS}+xv_WE+g6fIo=@w$D`VxarFs{D9 zU<*<{{Su)k7)rlD=sBW$zaX4fTaXVhv_~2e#>ijcZJKnW2#wE6cuV+y6Vo2DPEx}A z<)={oLN4+LhF8?kA%-`SuaU=3ai)bh+ef0PhFxm1mwJG+2RN5JPi8MXgF+}G$hO4@ z*gy1RAtsigXYPz^3qc$Z5cZZQct(KoZ+}? zyA925HMFwba$Mf&n09-7w%v+RlkCJ-E{?sDCr zqEn>W&E;#`tk*_OdwhD1~E>6)dt8(Qt5$saw2+&DpS zy5V4A(7B6n%MnE)L*cGxst^!vGWI`jD*5WxX66m3J7?a(dWbi`2`!-vh6VbWkee1% zq7$i4c8PAuL4>^O2iPk)FbFUE;S56b0dWyli|+`HFe^y-n6!_Hsl`6RQ;;N9|3ZrD Z8$x|VMp@R7@*yG{qe_uJq!-Z!@C)7B*RcQq literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHelper.class b/idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..44c719715529320816332def3a7fad8e354fcba0 GIT binary patch literal 2340 zcmb7F-%}e^6#i~Du*tFrgjQP&2yLm!uCj%ywFIa@tHg$;7R3Hg=EUW^g40+C({e?eK2orVC1JWOKCgywO?-SD!Y2w= zkd*PM(73K3g;jC7AtNp0CPPogeNf^Ir&6|)H|*`av7ElOv}ml;?XsQY35MP|t7y3k z3{ott)Lk{5OFM-F+>;(x%(F`OWc zEpx{-3T82HthtU=%#)izhnpn5(ax-7JFa-dNES;Km(;nro#>jXjL#@DKRT96fxg)h zJ6&;`;N6BngfujlEqFOqF^Vx6w^XcQg28Ciz;RhgS!H*{F66i)%-3anu3`gUFbwjt z;aWMrf+)`_ZsU%MyTYB}X7sMz&+?K>8CP)+U#fTq@2YqcQ5EBuknxp@7~(3vMn;7O zor>&GWe5%`zJbXwoxGZwrNW&O1bxqPc4kMC3% zu>M!5c%j4{icT{C>CG)J3Od$p(inysOuhD`g^Ew)kU{SnM&!N?h_Xa?^=8e~>r~V& z!}*S7*VOX*GvfE>0qe;_4b|v~7IP}{9kWoO*M_syAui8YqFpj&uU`a*_Tkb%Y3(Zt zK_fcH74C|kiHQGLng3AX#VpUbS%!5f!djT6m097`p>5uBi(-3a|W$#F42=oF?i%`{ryqOT#^8SOpVQ?Ms=04dUt@x_Cl z5D3-~*!84goWWUNdKy6l=(b<`9nu~BDS}n>)Iq{Hhe=;8MY~YbwCCu3gfZ3Wx+k!vMJ|Foq5fJRp{S5U_ zjMmUE)$m#s1J~(T!(e2H03*LZCApwa4MVF0Hcl`!IDMD_4}=7f;e97*;`+iXq#q=! zae_KAAN>O-Q_{j{^d}7JqgoBGuRWC52DFhI?*r!{~<&m5%PcfK+Z@9J&Zi7ha0Z|XZmyn literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHolder.class b/idl/Compression/.class/org/omg/Compression/CompressorIdLevelListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..6daa366bee92a3ad0924d3ec5f90e49d29f55de7 GIT binary patch literal 913 zcmb7C%TB^j5Iq+t1+0n>Q1FS00$nt^#h54?Nr)IVZd{NeH>9M{rd%-ol_naAiGF|| zWxN+E0trc7bUK}!b7p#GzP{f-0UTjJf)L^|R>F|68bJa{5!OUlm$4yZQ^pp7)YZ)n zCCJ>BET^tn&AL{wnzlpRZNq8}bIU2#O0-MOJVEf-Xc_E;z@N$95(ElXjSHxr6$DAD zI8?6@9Ay65maooEHQRESUNxy!Y}p-l%{Z)?7mQ%#!7-SabSkCXVdEUB!X9l-NoKMW zZEkp7%$--DV3r{5>E{(hFe77IK?*wxcCn`*jTnLEiC!|=?A$VI)FFsA^scU%daJIL zs||Y32vS3laVG{Q2vh#mh?=%&6c`wNG1av(qrG2&{BT1c z2=j*stusDbLcrDV0sUw&u7FxB1i^o$;0Fkb zXMdD9u@Y3e?9R;2yf-`hK0aUG032dlK^|)yS{{`GII0S2Sm!8mY;bIH)ENrn_;&7$ zy-CDSxiY8Ljb->&;2NVi^a8iXkUR1MFFt0->a7a~X&@#Jxdo-Bx0aAps90er|L?}I zdvUB@os<(a#v7q;)9a1n4QjAU}nU6HiP)uJXTcTSN uGDU#aegl3(gi;FS(tB+uB@(YiNTi}ds8S?a^@WGXwYO0uH=Ej~YX7Mq zkU*$B@Bw@jV%BjID$)>HK0CW}=ImVd*Y6)c0X#?5LJ`XaSXe1y6>A#SHEd|u)Uc(& z*5H_MO_T|RMj%7k^b$#M_f^!as?%n5SDkhu8OJTv?%OJ=cVy%xd=~EzCSSDLt>h(P z+a5p6IU?kDRlt{3Y-jv9!jzw-L|C)m*9M{WcePj5x}V78K%Tu(VIZR&eU0_{!k3*i zTN4%D2XY`$>X|BPoOphsqDzAF-;DOURIYxmC&1lkgz{X5gq-ah5N3NG88nVB6B(zD zw}jG%_P?$hI%#uL`kufvwgm+4n0O{o!d-y{4fnAq@Bj}5mhed6v4$sjO4uAdyM5(* z;bDs#zcmK2=EcmkM=`nZeuvYXx#uGT{(e7L;b&UpXG<`2k!%&%p2iI0EbkWh+~C!6 zzk}TJHyB@dr}+YN8Aq?gXA|yM7@spYcZvhG#3FM10YbaWm22d3=!(qqX`Vyx@y|`Y zjh`RJ=l*k4H^uJtme#+<1fiD$k7qb%l5myf$N MxsgwS@F~^79|MW%Hvj+t literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/CompressorOperations.class b/idl/Compression/.class/org/omg/Compression/CompressorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..6f9e2015be3f9cf05535e8b3ab12ef8e32eb6c6a GIT binary patch literal 452 zcmah_O-sW-5PhSyso!bzA9zVl3toG&#UdgEEO_w{(qs&lG#fW-v472jKfoU)PGiy{ z6+FF}d2ipmozJiL4*-`qchGm>5qgQ9mxil~aN$1=@3hI3o@Z(l-Vd)-m{_(Ge!025-#ntE-D9S(x<$!@Y+(F=qXODHcLX_2OHaFn><&erq*WsBOMU>t$_%l zoEMxEcKu*Na9f7cXu7m4frYpwc(27a^~=Y^61SF*3I6(re?|#QuH}XJyR&!^t2{0; z6;5ZI*neJ2=Jj#91j3Ho8gM$Y8y)HQq+4NECeGHRhkc>tqByMa2*)*^G6ivxJp28#Ynw&+^iWf`;`R0)MM9`fXz zkh7aZLcT9NMyS}=5AKue1a9a%w~6GT-)RnY>{{4E&4P&{q57NBd*p$~WIA56P{%%j z4lNv@MmQGIcf{Ct`eGbO7ROwK&ZRp_gq(B($y{$TU_Or%CYeX5XY`vvuj|~!OkO;X zSd=Ikp`A_tvFwTk5t9UstG#8rx$I1(;6@P()%@fy<4cN#(GI~##7{gpg`vVuj|NH; xP-v;HJnsRc^$MCndzo`mMsdMtssGT_Yoqm!-2DuBMVw-#R8VlF?i6~a!#9TUa>@Vz literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHelper.class b/idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..818283d9143ccfad921eb0f4fe21bfce696971b7 GIT binary patch literal 2205 zcmb7GZC4XV6n=)hY_cpBA_!7TLDYssv!d3vgla?3LJiUaMG-Y_veR^J$flc#m7ik& zK)=$~1DtZ|%cq{xAJx-4n>E=4IVXJC+1xw#xzF5r?%n+R-(Rl)T!E$H46drUhEEk- zR}sKxDn7>-3T9M7Cjctgd9xEZC#R|+!n$DDj*Bbb)}w<5T$;%h9ZSj0C9 z?nIDNF@z-rcU6qYEX(*-!FLK)7(#imUF8fTIom1e_Et&HF0agG^fj_(ZIh=N!n0Pz z5;qtE@u_u&pfuBxx19pRP<*N*lEP(>RjF}DFwDn0{F%yjx@EGrst&K!EW4uLHj2V_ zwligi8|L;3FIhFg9d4#&R)s$o4sBq_z7Nnxq8mhpzExoqe_ArCYeu2Wsj_sUMkPiM zoyb><9?N7Hq#aLwzxhCH4yTw9#a&5*`Z5-!`tab~7dmlYTq3b>@8sKEqX!B9J!rOe9e zLMF#>YO(UnC|l;Z!>e}9l42gW%#^Ig4-6NZQC%cfP}1RzX8spH9>)K{c#6g+Rq*38%3-jt+$?b*)S-@~nN{!Y1hQDoSRA07{f zEt@T_ZVJDs{o}!P`bN;%_KR#5#K(-GSI#1N9vV$;a-b}(Da?Pa8|9iD;67>%v81OS zbl4kF?mbN&k={Rj7&LcUc?5zJ^m#f%-#G?V_A|Xj>7AwwJtyeb0IiJHP+|}4cX|PB zq_+0l{jL)T?xSbN^+s_H=RNOf1kpp*zQh3n8_7KccM)oUL~#M1c-wNc%590nTZCU= zEb#{6T`0NaTLfO9H~9vEmx%2AhF~tS3w0m8I~1W1-wBs(oMIygjLj*SlKc}$ddOFa zfMh@R2ef}M9QYf3clPnYK2F5?32NX^XylQ^86-*oY?J_KVtD{3+;DQlV(*SeqtA0* zr~Q)m1VNo7%v}urioOF3ZNyIPVfgg{MmF|vI+tuqFiZ(9W7@+QBm{{ONw@%`jp{_` Qe~14DXahow*f!kwAEEtBQ2+n{ literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHolder.class b/idl/Compression/.class/org/omg/Compression/FactoryAlreadyRegisteredHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..84df24f16b4593110ad8345ae9510c8421575922 GIT binary patch literal 892 zcmb7CZA-#X6n?Hcmur=lTG^`=G!+{9)d(zzfP!uUWbCk=^PK0L^PKbb{qYGPhcg8-Vj%<(SFnv8VRnT{$k>yyFXMnf>Kj&%5?nmk zZd140P5s7hJ1*^ZO}nGt8g*v7gM#H!qcJGarrBlGrHwp6@Y3vnzlG9Q|5lreO|>XR23m8G7eQ7;aEiyCn`=6CCDu!(4B2Hs7nxT8GS>yj80Q8 z)>^dA2$H`%^Fxm36Z0-xi&~DT6&TA{UZ}~Oj8hT*w{OXlyt0sfPV(jGM;9dagDgK+ z83Zf*C1Mr)lqLSfH^c23|BH+w+?##}dEpL>!s}i*4j+F2MTFCtH~1!)4TL>R%)^Az knIZf$kO(&aLNe)B_=X5fShf)LAcBqXN`WDyXVC`m0}(ms-v9sr literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/UnknownCompressorId.class b/idl/Compression/.class/org/omg/Compression/UnknownCompressorId.class new file mode 100644 index 0000000000000000000000000000000000000000..9590535e5019741faf2152a493bc21d81f8a8f29 GIT binary patch literal 471 zcmaJ;+e*Vg6r7XRCdSlDO|77qHbatD<&4Ps$f{7xb@>|lrkK%yIj9#)(!#06- zE$pC5*b_4J#31xKVvtBS97ckBU4F;KBmZd$c^(jIGv(z~`^4)GnLK^EWl5?WgyxL> zf6f_;6DA2-q(<6~JD*2o_mhNi#W(+oJLj0jYY~i8d@ltDFw}~(qk*#A3N2OHlNvA@ pFQ75B=ZPj$6sL-Y`UOpO>y0<$ZpO$f;Rp+*f`WZ@N6=?Jd;!1TZv+4U literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHelper.class b/idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d1818bccb5c1f3d69b188a3ba6ab1b9ca28b22af GIT binary patch literal 2150 zcmb7GZC4vb6n=)hY_cpC0u+iBq1ZMgg>9`?B}fglN^EFapjC<*H^~^c4ZCr(Y0FQk zf55L;J;0G;Up{$`Kg#2s$&zfsOUsv?&AoG<`^+=<-p#-N{q+LChcH!~#Z?s_;bR5Y zR0Qyeicj&Gf*BQIq@rY*Rq(km&Z&48*Q50KLP1*mm=}+Q2yO^~n-P4e;wvnw$lz-Q zw<5@@7{ro-+bV`dmK^RVxT|29A(VGFtDIptYddA#-YDw}x#jt^zDm{wyTnrr;aSr% z-8qIpeDXd+P?%}S+fIRDFh1E4N#P>Mv})XO8Lr1W{Ap`5)iT)|RfpGVrfuo>tVfpp z#9Hu7wv#EPL_&o>bseKfSaXMA`SQO3jG<@6HHwdxjOwaUsBqGg&e1sk$bobC6zDQb z3|q4C(zD~46pS6s)m%5>16!wvH0I;mA{#}!HRj8(0>w4ECpsgrOGJ#kEzguZ(u za<1;Spid-eWVTq5m#X1?j44>ru!;$Wsb&!zFXf_LDRD;x-&1g3!#DVrp_kWm*DQGj zMAxig4G%P|<2#1_mUK6t7J1dB8`tnXe$X%tUBi1AWf*Cumo-SD)r;;D-zbP&=P;q+ z5~c|2kV?^z$Bztp=0`LJ!v!C#%-O8+)-DMc^Ln-|`uu?& zJ1m@L5(!JGkweT@x=oaHeoQI}OTMPDp|Cb5rNqeN1Z4?66P zD0xK_N2K>p6$VXCA&)?CoW3(>>4U|fijJkXD817Nq31aL>Z6s>8cOVd{Z22SjnufF zyH`4a;4Zqhq&JEWaNhHtK@eSJ?Mdt*u$J6Ga2ufpNE8=v(c6}#RcuQnUL*Vrqls4t zZ$rr@UnB4g-N{!7{E5icZwO`++faAWy+siU@g0|J;}jb~V02!=q~M=G(nG#V1O)rh z=g|JaP~dO$+}g!EyEql=C8)kXppi!qXAmd>un_{FndAYSlHuft#rBU!!_9MEqy2*S zI6?Ij<~9a?Mb91v*J7u4F!XW{!)rS@lTEfI7@`E1amB+JAOwLCNl1W^hB^`Y1L3~` M+JF!vwhcG_2j|;2kN^Mx literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHolder.class b/idl/Compression/.class/org/omg/Compression/UnknownCompressorIdHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d1c41913f80eb70431e46e0a5ed888faaf376dfe GIT binary patch literal 862 zcmb7CZA-#X6n?Hcm$phvt?bnb@}(H{)dW0G*YieChH8rcQR%%V-!DYz& zN{sh6Xic>Gk1~d7i!z~sd6kJyjF~s}U}!A9$5#`T$2^`|*;^Db3mnlx%3zqGmkHZx zSta_SDbP7be{nBE(fm8u3kBe%=lygF0eXO_NaqW02n;a`i20bLkBQ_9eFR4!aV-9Y b6!NbK^bs1WEFs}Tgc_qtp+2N%aSh-H1FGGP literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/COMPRESSION_ENABLING_POLICY_ID.class b/idl/Compression/.class/org/omg/ZIOP/COMPRESSION_ENABLING_POLICY_ID.class new file mode 100644 index 0000000000000000000000000000000000000000..ee83b666d60ea2e56c33bc66afa7a2ac8180e77a GIT binary patch literal 144 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 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyLocalBase.class b/idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..1d947d3e3fcd37f55b11fa5d0d1d808ee856ed17 GIT binary patch literal 513 zcmah`T}uK%6g{K6u4|i_ADL!>1hM+yR*xD%S`UJtBm~xjtn0F@tUKZ^f&Z$Y4+x5$ z`%%%|Op=HiX6D|xXU>^>@4US~y#P4GP7E@V5>ip5qsYjJVk3quHYF$$auV_qwix8T zKbx3+d+0Hwu397gTGt%iwY083wOy;m5IM44+dpOqtECGDp}~hHnK>n+mVO~ASVf#6 z@l%bV(mZWd`Pi!Psij>u+a0aJ$CIh)c{X>?Tz%lsqaE(p#;kf!*=Hy$6B_OF`ib@p zD_9ANQ4|!g&7cLMB>s5vNToei|B3*P-Vl#w5nh8lZ{U;X+is-@* z@T0^V8>x#f+RdGrd(YvVIWu41AD;jksHiAlTY-$Sh8^rCWiKiFNjZ>lDC3Ah8QR?A zjumr;Mn{B>DaMXDXm@*NON@h%N0BT1Ti<%{T;J&l&mB#=0S~R1+R-IL{>t^;_?qFO zx;(wsXUMjMP2%U(+VXsc(rD&#$P=5~X2?`)0|qVlwL6R_0SQpAO==?%Oc=`l)LPxU z=8ZYM8eK@Xc@&3&K*Z?l&|v6LpvpMbv4(XWMQrFOVN=Hz42ILiQtOD3<=wmF#9V^V zv?5}hEykEV3@Y^S1^NgKQevKVdD?5xsjkq;puR+_T7LtppS(hPrc;7fu$p3uv@+`D u>MxL<(lI5Fj*WDzCgXQx7#>p$1vDR%ona`y`IsETpBBYCACqU8+QknW@~TMy literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyOperations.class b/idl/Compression/.class/org/omg/ZIOP/CompressionEnablingPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..85cf4e377dbb2786f65954a68ae6c053b9a877f6 GIT binary patch literal 174 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B;pF_>f}+&o;>`TK_|&|_q@2_gMh0dL%_v3& zgZ!d&{ruc?{U}fW0DWhKLRXNw%)In~{G80>O88m=gq zRuRKh71!{&f-h7g@nxDUUn#gQjbE!ciJ3Glr8H*ojYQp$wwrRfmBO5~%%@ORaT^ON zzQr8{iwc$)61unB6bz>-j@!_jt%g>v-k+b-*2r3RHbsdcIcwUccY`68FRU}frI|L} zacc}G@`VVJ;1XooE#Z0$WBG`G&fYC;$V7^G>bXXpVon|wQ`le_T=k6llY2&U&8S&| z%B6DyzGn`c+rxOk++;XT5s!@>L$eIKp{;tZX*Y;i+!Y3SFGr7TI<6-V(U$DywnyQ@ z*eXd5iQin)qk;=ZBC6Y77vh(enyp)Y(>Tr`tKcrjGI9*r{wB{mjwK9x(Xlp#D?=*^ z?s0sFD#Ng7X`Zh2_s?_LsK2 z-|$ETwTn=J1ohx9<=rw|I`R^`Q6(wPOeoGi^u+_Bd#{=vI7wzlc9MaSd`9b}Bv0t3 zl$GA{btQR3$L4*eUj31Z`%7OdFPk>WSM{FgwLm>IK9LCvf=KJb4dLlc*W5Bab4Tc2 zo#9Hf0by{IPR}$Ag%uc-mF|b%-TGz4M}c;HV4zki&Yyz~uyYtEX3q+B|Ut zvUfJ=J@IF`gN={V^EgJ&E%j5541J~PnXBDDnD|JbM!hFdpT6D(WAkIsiZYsXjJIMgYZfwIEfcq$0i-MZ4o@`~TpaoZ4+Y|}lP7y8OQZ2Ru;^<2zgox3SbV3mMDf%l=XDXvJ zE-yOck8(V>O;@bS%U#a$opbIv-~IXP<7WWlcqHNgMn#NaJc53l7iqb`my2Os;^NC; zT;cbtA|{aL%Ot;E6ETJB{B%P=M!>X)C`JX$h?vDq0k;I)7I23lsJdGvgCU-?omItN zTUBQA^V1n+k)$*BijigrO`4YJPBHis$t8vW7t^NN&N4%PBH89i?&K7x!Vd0IHvxAq zxSIZAPAe^H%SD3pnJWx^?5~j6oI4;9fqAgy=+Dg|&PqO)f zGGnim9Akamw5^=Ixug|0jDlS>^{q6|Uoc*|j;0gTwLd{M%J~Nt)#w-+WqiLKrer%V zuSm&Sr45%#FtoMw9&m%3j_J~S6gmRuH{1sDUWyM{n&a4;3^&@b^UKc--Q7!?(G5#~ zX6P@B6}5(%>45rV57mb!^Wyyh2gAV@ zOJzDUs}?fznK_1`R!zgd^7z@cQc=L7gomIxJyWy&`y4V1|DWLIb)t)o- z))1=PCkE4S^Byql*J*lPLp3eeaGq+qp}Km7gbfsrqq|w#X!@={r7a?Hn4!B$akZA! zSchS%&wCpxC-**&+;x!nt`Eo?bcPeHRo9!*#9D?f&ha|h$qp{9{g*2Itvd~Ls3W-) z7@`mQ0DbffBA;(MNpz;Mr}YrsdTD302jvf7Z|MLsBo27$XhjJGcHrBtXd`@-J?%O8 zE3)`I_5nCFF1D zd4sM`h(7*+-Y==|h^4+E)+CZsW$fpvRBH;r*At_nh{zsRjF5P^knC@Yb?y)PMlK@x sk9hv0UM_?34+PmZWz_c?VficiwrgoMM-O!&45g)&q$W>#{pyS1H_~nQX8-^I literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyHolder.class b/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..6255ca00d3faa855f23b205c09f7fbeb15104c38 GIT binary patch literal 856 zcma)4T}#4X6n~a$YlDCITim^L6LOP59mil z@2k^NkYwzzo%5XMob#OX_5JY)-~uNhNQeayKs1 zPo26(n|19eS14*(+O!>`-8N|}PkSYfDN@U<_A>;5OS5IVR|Ni4x9ccm3d@--gidEGGrM+ge2_CIKZKdB#vYpBT8_#m?*c@su>PJxS@A-&C*+Stx#zg zRhJ++W|$doG#Q_C@hXO8^D4qfy1ThLOi4Ex{NKHbp1{Sq#8Uz45Wn3#tND(V3K gKadF4XCbQc3f}<2m}LV|55n09t0W8{KJzw!ALU2b5dZ)H literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalBase.class b/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..90b78f73f62bfdafa8742b0511fb8ad1bc4fd767 GIT binary patch literal 508 zcmaKpT}uK%6o%i?-PX0u%#Td7AcAncaH~s=AnisFlmx-LkZoO-m32qlt?*wJ^Z`N9 zbw4UPt4SYJ!_1sBbI$uP=gjNd<1>JLY(^m?At4z-DuT3(2v(!WU`>J|AuAy#VVyzl z`IC{^v-=)H@~kn?FLlk)T}x~GW81YV3=0RgYx{=`;ey&>5Nf<{l9@@;1@#w^f+fTl z;y-B&YW=uT=0mH*$Cg&(!_nCEJe#`>e$~;P3$w)?+nAL1O1ljCZ@JBr>XG&tRgFy>;#MMsg&DP)G1~+u4s(VyGcCM&R$6rT|4h7;j-S4ar$JBT+F0wu(; Y@*&8P4Fs{`EyQ~)yg;IPO*b^&0S)?iVgLXD literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalTie.class b/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..6c2e0e20b28e144d6a7ea58083f54f649de74ff4 GIT binary patch literal 736 zcmb7B%TB^T6g{^*N*_K@L44~DFtLW{N@F6dNJt>Yuy8{fXh@U7G;NjePcAgk7+v@Q zew6W!)Zl^zY|hNwd(O<6bHBbnJ^@s4s3U{C1{IqI3fPjcEn!E(u8KVs`vk4ib3CVS zM-HLV5JBG(gT8fFZ?>$O82Et`hOQVk#Hek1_fAWAZg<@DoxqN`99|I8m+sJwt_bJF z#pR_oAz2eWe*COhT3pZmJu&J$NN)R#_mpxbu2-iqrWN z(?Q^f2c6-;6BKElcWK@mFd3Kll;^s_t6qKsm5*PcJo8ENH7v)REU(11RQUzUQ{3hR n;&wi6>$3fh1mQ8}a6q#;$tj2Po6SiP{@&tvXLHhoiCz2vc+aK5 literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyOperations.class b/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..5c53b4fb055aae8ec7f0085c2e133eebc09cb4e1 GIT binary patch literal 164 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B&Yb-6__D;D(o{wUW(`eGMh1iYqICWI+;sgY zPyYaY=ltA)qSWHz%=|o`{PHl6!hrmo%;ZY{g4CkK5}W(y3`{`G40I7A3nK#y11pfl002+CEL8vi literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyValueHelper.class b/idl/Compression/.class/org/omg/ZIOP/CompressionLowValuePolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b11e4223cff0a86b71e71e18c584a7734284437a GIT binary patch literal 1781 zcmah}ZBr9h6n-vw*<`sC2r4QXi&RZQOT^YULbVWWNr?u9(rRC}OSqF+U3N2@3(8ON z7xW7ss_jIk&N%w1GyW*2=k9JKS-^hTd-t64oco+}pL5^6|K~M;OIXt}iYXmMT+}eF zBZf;lzQk7=F6&6*N}4QJHC$81>pG5MCQYAG8ngIXp>8PKP4)REg*j!JPob>i7H;eK z7T;-D&`@DW7;?KQ7>-w6uTgY28pU$${`_2Vg{)D++t$$jT`G48Y08IDlIBXi3v+NRSeE=$jH8bmDa36s1RqDMAePpU(T6{oo=DO{Kv zCB-4}#Iqz7oIey%+mw3{zqHhB-S(TtaS~%1zUNp(mYUJq8 z7=}cvD6RGIDyU%`OSs2zAIl6Qdqv%TS{F@exemt)e&EQXz;PTWG^}#`h@Utf;33Cp zWH~M%$B-?%8%(PgYHPQ!Kf*Rp0iv96#e1hN;S}>I_L?O0oSoVrF`Z^!Y2t zZ!k3c&S9d;Fx@HhVWqb8KN%K;-4q_xyjNCj?U7Kj81AGABuT=e>r-u|CFl1!5<#6J zRG>T~xI%TM4CfEMyS=EA(qtyoWDok>KCOKaOBbA!vZeaTz(_SCbrO&ihNaYGw0t=! z9?@y}kf~dCB;MZASIUc)L#j>5$Hu1ZIt`kc$XEp-B=DhzkVez9HY{mv2}9NyE=J1_ zgQH}+MrbhPZ`zjG@{_FQ_K(v6mI(3AGxCw6&h|nM>Ij3b#MRQ*%PQH0^0b>3fR)hG}KACJHaXp3?>tNaGW_hkPdx-$mb_zBi3C z_%!sMKpcH!9Vom)?7`Se#M?*&Nzxd{*)Xh1s|qU=-Xi%7*}@wn+t8|$ZxMTj{>e9p z{f*SlABa~AZRoq`-ywuXG{$|l6NF76mYvt|nc{yA=flj`h=5{0@dEr`oFbAhFwn*) zi@O-y#ZYFL@@4)4C%0lx9i(pz>E8&$&omUK<9?hrppPDj>_Z~Ad)GOhycguU}j5N!K(Wvt_=5-d1} V7wx2LJOY9NMi{mp!)yPx`T}7nNFe|K literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHelper.class b/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1100e4b0238f5f700279a055b1116bcd50471eb2 GIT binary patch literal 2023 zcmb7ESyR(c6#j0vv>`~TpaoZ4+Y|}lP7y8OQl+#4>gY=*gox3SbV5-1Df%l=XDXvJ zE-yOck8(V>O;@PO%U#a$opbIv-~ILb(-#2acqHNgMn#NaJc53l7iqb`my2Os;^NC; zT;cbtA|{aL%Ot;E6ETJB{B%P=M!>X)C`JX$h?vDq0k;I)7I23lsJfdagCRa=JFAMl zwyMnJ7p61H5=m$56(h|Mnlvrbonr7Ok`EaITuhs4JIf6HiDa86xsy|%3Ol$%-2~jd z=xX|loK{-WmWu@GGglb;$m6;8Qd5eWwW=(-j%ls(Bus1Fa9oC|L|eR!wVAGqo@Da{ zWyW4BImY_BX?2rXgWb%+YPEw&OflIM#s=7 zA|-2;He4#f(ALs>zzx1~OqbrH&=EMl;Wm)>QhdnL9LIjeaHAbNzx>?L-Myq4-LUj$ zhW^4>QERA~4yaG|Pug?_MD-& zhEU}`F_?y%_kdx)PSfies%g1~^HkFf)zvE`Y@m1?-O1WU(|7zSZ4rsX4Bb_VtF^4g zIt){N-rG<)x%YYGu7kvPd_dlyGn{Cxy55W?)-rT)j@Qvnc5rF!zf|FG-D#jh9m$7* zA^M;X&_~Z8^7*EdL}wa%S`X2!mv%;bQ2q$^jt(G0;((`)R+KuV10;iUU{xP9Jh&v6(KSbAQf{~gbQXy^kdICrsElq(ZePtL3E4B5qDVYeLjI1P zx9Iwe=;M#*{hIoLSn4}sO(Ho}#(thkwWa`kJuxbZi0om-2#JRa$^NET=XTLIauLaY s#Pc8Zav79=BFMHVqrNu?%iqwqRZFWmdZ-IwC@rldHF?tOS6>W&0B76w?*IS* literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHolder.class b/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8fe4542e6579424063be668e650de337cd292147 GIT binary patch literal 856 zcma)4T}uK{5It92H*G5|wX#nuNY`MgS0gB25-O#lhhAjWMON0m%X&5ZR|Q4VLqDJ& z72T_=r69?&!|u$PGc#xA>-*yqzzGh*kP#0dh(s8xSQBPln52vi8JjY;2&9f~wGD#w z6?N+xZPvBNLb0UfY146yR?DRJwQ1k#%%ml1nbmHNAb4upCOaeWr!x-(fjq5og6zx; zB1tN{hF&8${LRW2Z!gX@hq_F!ScX=xoi@8;9M;TpDCo zna+&H8?1~SG@B@w)T$XSL8PH~bj{N3x>l?- zj4C5Y4H+iJ8%!o9oxO@-IigBnAl=PW9mb>^4gT+5B~ReeRN^s#XC?06h}Z*;`6J3P{s3VSRMMLb1codthH*Y{eiWDIpa_I*N>pDAr=gVqJnFAtxa(VS_>L z`_r-6w+9|W>Y_Q+uXN4PT}$iw6Wg__43R_Iwf!T8a8W&D5bAtjl9@{~MfDevf@Q=R z5`%7K-|eJd3n0ho<2(>@H&e(-=g<;V!|_MfFST z=9sFmO+A;v5Tg|e-b)`7BA=Q=`wE?QAd&}UOAlZr@d=?`I2rEtgrv~DgLp$BP(lK$ XAA&sDKoBq8LcB-h1rp6`x}ot7>@j#g literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyLocalTie.class b/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..0e668f2d12c43a901c6a1ed23e6901a6dd0b671d GIT binary patch literal 738 zcmb7B%Syvg5IvJV(mZ_BN33tVYbzKjx>5vN5DJx+B3-yCp$#F>=7uDj{*#D;BD(Mc z{3vnKMs(3dyP11u=A60bp85Lz_ykZzQAG}03S<;CY-1-5yK&fy!@i6I8HWU=H?W7c zV?{Qh+7y9fijia9H(G78E=GP}hoLLHTi5GYkt^C_==R4g-wxu;3oi)SOV@LwE5dnc zaeBE+NY}-HA3rOV7v~c)6D5RHseD7w{E5I`H1>HU*BU&(FZ?l~@Na&-)u~;Z)6ei1 zf}!ykbTMfvm)`ME#t^ymWp4q^#8B5=I6& jm?_TwK~9eP=z7=~85kLufS4KR8b%gI1{MZZAd3M2OWP`w literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyValueHelper.class b/idl/Compression/.class/org/omg/ZIOP/CompressionMinRatioPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d2b85d54ef46f5bf4a9e322ca26cc1f3dbf7a7d1 GIT binary patch literal 1783 zcmah}ZByGu5PlB7$QDNdlZ23_PKleuHZ2b6TZ(B~FriRPOn}lReNlzEdXxysBOf&U zl>CBzW7;(1Fv(0O`P7;Is807JIoJZyFL%=JK6}sZJ$wKB`}{8eH?XB+6q7nixUOMJ zM+`S~e29-Ue5@mhPts)hRKrbW{7lC=Os8onr!j-i73!909)s9}jAVaWZaU^riOy++C1X_P9pwYk~S23afawkR_sXDr8(w-{pi!X`spnQ1dz zZ;Rnr<6e)TL#1s6_5)OO_jy1Q@8!5aa_RL8ouUOMwVf$x5*2(Ysy8}-WHw;tZG={ zxPuzQkZ6^pwH;mtwTxpGcRALu&M zh5pF#6ATSMbC{?yOmzyqzf@cOpA3t_ZVHcTJ}RrW^*|_L40qB5q9ke21**o;r3+44*;7qqV5FOoI!QF3rL*o}E8=9KPU_d-tU2!pN$w^KVkMbzTlDY))| zWa#$?I6%h7=|vo+7nbs=IiasKebbQAdXfHyX=k)2iqF9Qpbtcxplo`A8C}yE4Ypa|ymOq4Qloq-3vC(Is5>>8Ms#`rK5GVAn%obUU9|KffQw!lY93$}9VnsUkQG>)Kc^6RjA( Wh->9@-_8gKMwnpSd5T&0xzi7_*GZQE literal 0 HcmV?d00001 diff --git a/idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyHelper.class b/idl/Compression/.class/org/omg/ZIOP/CompressorIdLevelListPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..482e326a96ebbfa8735269e59ba745c98da6bcae GIT binary patch literal 2043 zcmb7EZBr9h6n<{rHdz)45j3K$#n-S=7O>h%C>nxFG?)meqhEHGZf04u{FM4D zu$_raJ5%+G&iJF8o||mmi40%v%XxXuIrp6Be*N~(e*k9iRK^KR$(Y7W45PRv)AF-e zu19f0h<}OVS8=~7V-^{)%!%u7GUjnhoNi0VN?4E)$CQMej78j$a96@T2}=xN-P^5j zhGfBUH#KK#Q_B@s7P8tJNpsEy&oD&hEZg$t8G@;aCk!DWrcHO;b%xQ@M3*PIlT)Y; zJJzFa10G!U4D;2pQCTzA%LEy)HW)_8eWaSG=sf zn`w%k=ZhsR=WJD6zP;_Z`Hcd9&C3OA+bcO`%iPU~3MBrA=Ncw~-8u-YRnVbmRHw@g z%DU7IRB>ESRHfzZ%8o~6aAPZTB;@cL*YfC9R{BC0cf1z%(Vie;8?NiTVOZ!!FRs7j zrgyYd<2$zbJ2zkP4ZVSz>x29JNN*6GGt0H%Q*a7n67mY};|B#NkyLO-oW^mE;q-Sp zuHXR*4C(x0VV1^wQjGa`%x9-3rxg5%vl5mSJVa4J36B({aYe$4g4OzElHqa(Ve}dO zn$~Q3duJF5WH*Dc%Q?hC`@x@R)Xr+RtYD`~aA=b!0{ zNW5kktkYg^WHsGqteVr`g(~QN%%^)3B-!&R`9sfeuCwZ9L)uu(Fd#VJL_6QdrE><9 z8k?I=r~1?}@gy`(pY{p*{2631=X6r&Oyf`MX}S&5&S(#-@4?>D0c1#A@YV5}5(w=h zuvgQ@#5nufs|eO)$-fZ%g5iB(7EVN}kp4!HWWs~tCt8DGBZvup`L07ga4->V;GV|? zUpY$l0rHBe>3zhikn4%Xa1ob$lO*jTxT01uP#`m9`AP%mGEz;T0G$L-6@!%Av4+V6 zRNrKtB8gZj^%I8PV&GrIpS{QMhxBJ8(w~rM6RGJcj*C?4HH8ouN>EWmW*;j-NFrQB z4YtL)dVs!_i%kBLzWnqK%U8YwpsufyJhutv_Yvx2ou=3=ZjF(E!OeuBPWR6r} zJ%^_x)0uI5!!q~WFFMaDScIY=gs_ZV1$)?6kivn2L&OM9=N0D0whZbLL>hWm*DSqN z*Gkm}tucbsh+}HN;cQ~o|J0$DBkBZ(@|9<5F(Kc0_&N3~c{1P5q@Iv@e(J%sh<)IU zpQQ|f1^yBtJwI8AfALLlyTt#Zg9!Jk?;tPSfkAlL3n$>?4-gh%HTwqN2(yBShlzWb lkecno{|6Gq>NF&)zQWf>V8pV9mWvqk`P!gWX&-qbCYcdeyf5WASim> zhl4B)rz4x4Z&-wqj=iJw~$7cYC*hxS{T0ka_Y#cceacm@z$EE;DKtVuJz!rlz z2xb#wU=4kS%%wWgrkY}Fj;Ztl&vMKLL+r?Mtl*d-Dwoe0xRyIK$Sfo|x%`Vr!YYys zsh>24{r0I^cgJSc^-QJZjwhbs`>xj>s>al?Rm%^$u5IbFdaZiEQ2LhLIcuIMpJ53r zVI`7;61Ev?A(6<+MZ44e3$41kW;ZpTiYP2KtvP!h>0FHrJz$WRvHy4syl%S=;j(i1 zO9L062DeL{7r~IA6$#%=-xDF9T15LAo%XeBi6UwC2gA7Y}yKTQM)bB|JJD%x=QImUaXVCDSz=~Yn56>BL7jEB; zE*Z|$c?7f;L#D=UGH|MD^C&PZcE(=Yt{pPys&+S)8Vy2z{|-e1NdC`I?P%bWiL|QK z$x(;<1BTKsN43Uv^~x9qKrF#_!YJSbB1TJw1Vu&xqJRS#OIVgs#EOhntjSo1!f-Te zx+d>f-i=FMj{ileS|M>NvvMYnh%$YXJbfF6R6GLhaYn5JVg3=fG8r8pgvo#;@=(=j=Q HpnA1}zQEXrKI|bp8C? zbbV*2WM+OIoSk3fnc|aLmYQSD$Y2Ch80G07fT_YKv$!N6KPNM}(!U_JD6s@+4A2IF zti-ZJ{hY+SbbbG%tkmQZMg}>UInMq;PLBHMde|5l7#Wy=m>KAPMixc}76w)ziva+1 C_da6) literal 0 HcmV?d00001 diff --git a/idl/Compression/.java/org/omg/Compression/BufferHelper.java b/idl/Compression/.java/org/omg/Compression/BufferHelper.java new file mode 100644 index 0000000..ea422b0 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/BufferHelper.java @@ -0,0 +1,57 @@ +// +// BufferHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class BufferHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, byte[] value) { + any.insert_Streamable(new org.omg.CORBA.OctetSeqHolder(value)); + }; + + public static byte[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.OctetSeqHolder){ + return ((org.omg.CORBA.OctetSeqHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.OctetSeqHelper.type(); + _type = _orb().create_alias_tc(id(), "Buffer", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/Compression/Buffer:1.0"; + }; + + public static byte[] read(org.omg.CORBA.portable.InputStream is) { + byte[] result; + result = org.omg.CORBA.OctetSeqHelper.read(is); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, byte[] val) { + org.omg.CORBA.OctetSeqHelper.write(os,val); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_7X.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_7X.java new file mode 100644 index 0000000..0ae2e7b --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_7X.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_7X.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_7X { + short value = (short)8; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_BZIP2.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_BZIP2.java new file mode 100644 index 0000000..0d4465f --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_BZIP2.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_BZIP2.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_BZIP2 { + short value = (short)3; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_GZIP.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_GZIP.java new file mode 100644 index 0000000..5b9f95e --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_GZIP.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_GZIP.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_GZIP { + short value = (short)1; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZMA.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZMA.java new file mode 100644 index 0000000..e011d92 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZMA.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_LZMA.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_LZMA { + short value = (short)5; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZOP.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZOP.java new file mode 100644 index 0000000..70ede3a --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_LZOP.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_LZOP.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_LZOP { + short value = (short)6; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_NONE.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_NONE.java new file mode 100644 index 0000000..dbb4091 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_NONE.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_NONE.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_NONE { + short value = (short)0; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_PKZIP.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_PKZIP.java new file mode 100644 index 0000000..c33043b --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_PKZIP.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_PKZIP.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_PKZIP { + short value = (short)2; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_RZIP.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_RZIP.java new file mode 100644 index 0000000..5974979 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_RZIP.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_RZIP.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_RZIP { + short value = (short)7; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_XAR.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_XAR.java new file mode 100644 index 0000000..056b661 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_XAR.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_XAR.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_XAR { + short value = (short)9; +} diff --git a/idl/Compression/.java/org/omg/Compression/COMPRESSORID_ZLIB.java b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_ZLIB.java new file mode 100644 index 0000000..7191ac6 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/COMPRESSORID_ZLIB.java @@ -0,0 +1,12 @@ +// +// COMPRESSORID_ZLIB.java (const) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface COMPRESSORID_ZLIB { + short value = (short)4; +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionException.java b/idl/Compression/.java/org/omg/Compression/CompressionException.java new file mode 100644 index 0000000..72b262d --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionException.java @@ -0,0 +1,34 @@ +// +// CompressionException.java (exception) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +final public class CompressionException + extends org.omg.CORBA.UserException { + + public int reason; + public java.lang.String description; + + public CompressionException() { + super(CompressionExceptionHelper.id()); + } + + public CompressionException(int _reason, java.lang.String _description) { + super(CompressionExceptionHelper.id()); + + this.reason = _reason; + this.description = _description; + } + + public CompressionException(String reason, int _reason, java.lang.String _description) { + super(CompressionExceptionHelper.id()+" "+reason); + + this.reason = _reason; + this.description = _description; + } + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionExceptionHelper.java b/idl/Compression/.java/org/omg/Compression/CompressionExceptionHelper.java new file mode 100644 index 0000000..2fc2ac4 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionExceptionHelper.java @@ -0,0 +1,65 @@ +// +// CompressionExceptionHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressionExceptionHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, CompressionException value) { + any.insert_Streamable(new CompressionExceptionHolder(value)); + }; + + public static CompressionException extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof CompressionExceptionHolder){ + return ((CompressionExceptionHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[2]; + members[0] = new org.omg.CORBA.StructMember("reason", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_long), null); + members[1] = new org.omg.CORBA.StructMember("description", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string), null); + _type = _orb().create_exception_tc(id(), "CompressionException", members); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/Compression/CompressionException:1.0"; + }; + + public static CompressionException read(org.omg.CORBA.portable.InputStream is) { + if (! is.read_string().equals(id())) { + throw new org.omg.CORBA.MARSHAL("Invalid repository id."); + }; + CompressionException result = new CompressionException(); + result.reason = is.read_long(); + result.description = is.read_string(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, CompressionException val) { + os.write_string(id()); + os.write_long(val.reason); + os.write_string(val.description); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionExceptionHolder.java b/idl/Compression/.java/org/omg/Compression/CompressionExceptionHolder.java new file mode 100644 index 0000000..a5af2b6 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionExceptionHolder.java @@ -0,0 +1,33 @@ +// +// CompressionExceptionHolder.java (holder) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +final public class CompressionExceptionHolder + implements org.omg.CORBA.portable.Streamable { + + public CompressionException value; + public CompressionExceptionHolder() { + } + + public CompressionExceptionHolder(CompressionException initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.Compression.CompressionExceptionHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.Compression.CompressionExceptionHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.Compression.CompressionExceptionHelper.type(); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionLevelHelper.java b/idl/Compression/.java/org/omg/Compression/CompressionLevelHelper.java new file mode 100644 index 0000000..cfc69ce --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionLevelHelper.java @@ -0,0 +1,57 @@ +// +// CompressionLevelHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressionLevelHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, short value) { + any.insert_Streamable(new org.omg.CORBA.ShortHolder(value)); + }; + + public static short extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.ShortHolder){ + return ((org.omg.CORBA.ShortHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ushort); + _type = _orb().create_alias_tc(id(), "CompressionLevel", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/Compression/CompressionLevel:1.0"; + }; + + public static short read(org.omg.CORBA.portable.InputStream is) { + short result; + result = is.read_ushort(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, short val) { + os.write_ushort(val); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManager.java b/idl/Compression/.java/org/omg/Compression/CompressionManager.java new file mode 100644 index 0000000..54bb420 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManager.java @@ -0,0 +1,15 @@ +// +// CompressionManager.java (interface) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface CompressionManager + extends CompressionManagerOperations, + org.omg.CORBA.LocalInterface, + org.omg.CORBA.portable.IDLEntity { + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManagerHelper.java b/idl/Compression/.java/org/omg/Compression/CompressionManagerHelper.java new file mode 100644 index 0000000..1375541 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManagerHelper.java @@ -0,0 +1,70 @@ +// +// CompressionManagerHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressionManagerHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().create_interface_tc(id(), "CompressionManager"); + } + return _type; + } + + public static String id() { + return "IDL:omg.org/Compression/CompressionManager:1.0"; + }; + + public static void insert(org.omg.CORBA.Any any, CompressionManager value) { + any.insert_Object((org.omg.CORBA.Object)value, type()); + }; + + public static CompressionManager extract(org.omg.CORBA.Any any) { + org.omg.CORBA.Object obj = any.extract_Object(); + CompressionManager value = narrow(obj); + return value; + }; + + public static CompressionManager read(org.omg.CORBA.portable.InputStream is) { + return narrow(is.read_Object(), true); + } + + public static void write(org.omg.CORBA.portable.OutputStream os, CompressionManager val) { + if (!(os instanceof org.omg.CORBA_2_3.portable.OutputStream)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + if (val != null && !(val instanceof org.omg.CORBA.portable.ObjectImpl)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + os.write_Object((org.omg.CORBA.Object)val); + } + + public static CompressionManager narrow(org.omg.CORBA.Object obj) { + return narrow(obj, false); + } + + public static CompressionManager unchecked_narrow(org.omg.CORBA.Object obj) { + return narrow(obj, true); + } + + private static CompressionManager narrow(org.omg.CORBA.Object obj, boolean is_a) { + if (obj == null) { + return null; + } + if (obj instanceof CompressionManager) { + return (CompressionManager)obj; + } + throw new org.omg.CORBA.BAD_PARAM(); + } + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManagerHolder.java b/idl/Compression/.java/org/omg/Compression/CompressionManagerHolder.java new file mode 100644 index 0000000..797818d --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManagerHolder.java @@ -0,0 +1,33 @@ +// +// CompressionManagerHolder.java (holder) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +final public class CompressionManagerHolder + implements org.omg.CORBA.portable.Streamable { + + public CompressionManager value; + public CompressionManagerHolder() { + } + + public CompressionManagerHolder(CompressionManager initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.Compression.CompressionManagerHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.Compression.CompressionManagerHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.Compression.CompressionManagerHelper.type(); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalBase.java b/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalBase.java new file mode 100644 index 0000000..d5165c9 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalBase.java @@ -0,0 +1,20 @@ +// +// CompressionManagerLocalBase.java (LocalBase) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public abstract class CompressionManagerLocalBase extends + org.omg.CORBA.LocalObject implements org.omg.Compression.CompressionManager{ + + private String [] _type_ids = { + "IDL:omg.org/Compression/CompressionManager:1.0" }; + + public String [] _ids(){ + return (String[]) _type_ids.clone(); } + + } + diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalTie.java b/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalTie.java new file mode 100644 index 0000000..9e55327 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManagerLocalTie.java @@ -0,0 +1,58 @@ +// +// CompressionManagerLocalTie.java (tie) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public class CompressionManagerLocalTie + extends CompressionManagerLocalBase + { + + private CompressionManagerOperations _delegate; + public CompressionManagerLocalTie(CompressionManagerOperations delegate) { + this._delegate = delegate; + }; + + public CompressionManagerOperations _delegate() { + return this._delegate; + }; + + public void register_factory(org.omg.Compression.CompressorFactory compressor_factory) + throws org.omg.Compression.FactoryAlreadyRegistered { + this._delegate.register_factory( + compressor_factory + ); + }; + + public void unregister_factory(short compressor_id) + throws org.omg.Compression.UnknownCompressorId { + this._delegate.unregister_factory( + compressor_id + ); + }; + + public org.omg.Compression.CompressorFactory get_factory(short compressor_id) + throws org.omg.Compression.UnknownCompressorId { + return this._delegate.get_factory( + compressor_id + ); + }; + + public org.omg.Compression.Compressor get_compressor(short compressor_id, short compression_level) + throws org.omg.Compression.UnknownCompressorId { + return this._delegate.get_compressor( + compressor_id, + compression_level + ); + }; + + public org.omg.Compression.CompressorFactory[] get_factories() { + return this._delegate.get_factories( + ); + }; + + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionManagerOperations.java b/idl/Compression/.java/org/omg/Compression/CompressionManagerOperations.java new file mode 100644 index 0000000..996cf4e --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionManagerOperations.java @@ -0,0 +1,27 @@ +// +// CompressionManager.java (interfaceOperations) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface CompressionManagerOperations { + + void register_factory(org.omg.Compression.CompressorFactory compressor_factory) + throws org.omg.Compression.FactoryAlreadyRegistered; + + void unregister_factory(short compressor_id) + throws org.omg.Compression.UnknownCompressorId; + + org.omg.Compression.CompressorFactory get_factory(short compressor_id) + throws org.omg.Compression.UnknownCompressorId; + + org.omg.Compression.Compressor get_compressor(short compressor_id, short compression_level) + throws org.omg.Compression.UnknownCompressorId; + + org.omg.Compression.CompressorFactory[] get_factories(); + + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressionRatioHelper.java b/idl/Compression/.java/org/omg/Compression/CompressionRatioHelper.java new file mode 100644 index 0000000..6020b49 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressionRatioHelper.java @@ -0,0 +1,57 @@ +// +// CompressionRatioHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressionRatioHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, float value) { + any.insert_Streamable(new org.omg.CORBA.FloatHolder(value)); + }; + + public static float extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.FloatHolder){ + return ((org.omg.CORBA.FloatHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_float); + _type = _orb().create_alias_tc(id(), "CompressionRatio", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/Compression/CompressionRatio:1.0"; + }; + + public static float read(org.omg.CORBA.portable.InputStream is) { + float result; + result = is.read_float(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, float val) { + os.write_float(val); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/Compressor.java b/idl/Compression/.java/org/omg/Compression/Compressor.java new file mode 100644 index 0000000..750e87f --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/Compressor.java @@ -0,0 +1,15 @@ +// +// Compressor.java (interface) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface Compressor + extends CompressorOperations, + org.omg.CORBA.LocalInterface, + org.omg.CORBA.portable.IDLEntity { + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactory.java b/idl/Compression/.java/org/omg/Compression/CompressorFactory.java new file mode 100644 index 0000000..b876afd --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactory.java @@ -0,0 +1,15 @@ +// +// CompressorFactory.java (interface) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface CompressorFactory + extends CompressorFactoryOperations, + org.omg.CORBA.LocalInterface, + org.omg.CORBA.portable.IDLEntity { + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactoryHelper.java b/idl/Compression/.java/org/omg/Compression/CompressorFactoryHelper.java new file mode 100644 index 0000000..5fd2f0c --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactoryHelper.java @@ -0,0 +1,70 @@ +// +// CompressorFactoryHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressorFactoryHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().create_interface_tc(id(), "CompressorFactory"); + } + return _type; + } + + public static String id() { + return "IDL:omg.org/Compression/CompressorFactory:1.0"; + }; + + public static void insert(org.omg.CORBA.Any any, CompressorFactory value) { + any.insert_Object((org.omg.CORBA.Object)value, type()); + }; + + public static CompressorFactory extract(org.omg.CORBA.Any any) { + org.omg.CORBA.Object obj = any.extract_Object(); + CompressorFactory value = narrow(obj); + return value; + }; + + public static CompressorFactory read(org.omg.CORBA.portable.InputStream is) { + return narrow(is.read_Object(), true); + } + + public static void write(org.omg.CORBA.portable.OutputStream os, CompressorFactory val) { + if (!(os instanceof org.omg.CORBA_2_3.portable.OutputStream)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + if (val != null && !(val instanceof org.omg.CORBA.portable.ObjectImpl)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + os.write_Object((org.omg.CORBA.Object)val); + } + + public static CompressorFactory narrow(org.omg.CORBA.Object obj) { + return narrow(obj, false); + } + + public static CompressorFactory unchecked_narrow(org.omg.CORBA.Object obj) { + return narrow(obj, true); + } + + private static CompressorFactory narrow(org.omg.CORBA.Object obj, boolean is_a) { + if (obj == null) { + return null; + } + if (obj instanceof CompressorFactory) { + return (CompressorFactory)obj; + } + throw new org.omg.CORBA.BAD_PARAM(); + } + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactoryHolder.java b/idl/Compression/.java/org/omg/Compression/CompressorFactoryHolder.java new file mode 100644 index 0000000..4248865 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactoryHolder.java @@ -0,0 +1,33 @@ +// +// CompressorFactoryHolder.java (holder) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +final public class CompressorFactoryHolder + implements org.omg.CORBA.portable.Streamable { + + public CompressorFactory value; + public CompressorFactoryHolder() { + } + + public CompressorFactoryHolder(CompressorFactory initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.Compression.CompressorFactoryHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.Compression.CompressorFactoryHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.Compression.CompressorFactoryHelper.type(); + }; + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalBase.java b/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalBase.java new file mode 100644 index 0000000..2622466 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalBase.java @@ -0,0 +1,20 @@ +// +// CompressorFactoryLocalBase.java (LocalBase) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public abstract class CompressorFactoryLocalBase extends + org.omg.CORBA.LocalObject implements org.omg.Compression.CompressorFactory{ + + private String [] _type_ids = { + "IDL:omg.org/Compression/CompressorFactory:1.0" }; + + public String [] _ids(){ + return (String[]) _type_ids.clone(); } + + } + diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalTie.java b/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalTie.java new file mode 100644 index 0000000..c4a1b0f --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactoryLocalTie.java @@ -0,0 +1,34 @@ +// +// CompressorFactoryLocalTie.java (tie) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public class CompressorFactoryLocalTie + extends CompressorFactoryLocalBase + { + + private CompressorFactoryOperations _delegate; + public CompressorFactoryLocalTie(CompressorFactoryOperations delegate) { + this._delegate = delegate; + }; + + public CompressorFactoryOperations _delegate() { + return this._delegate; + }; + + public short compressor_id() { + return this._delegate.compressor_id(); + } + + public org.omg.Compression.Compressor get_compressor(short compression_level) { + return this._delegate.get_compressor( + compression_level + ); + }; + + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactoryOperations.java b/idl/Compression/.java/org/omg/Compression/CompressorFactoryOperations.java new file mode 100644 index 0000000..1f1f195 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactoryOperations.java @@ -0,0 +1,17 @@ +// +// CompressorFactory.java (interfaceOperations) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +public interface CompressorFactoryOperations { + + short compressor_id(); + + org.omg.Compression.Compressor get_compressor(short compression_level); + + +} diff --git a/idl/Compression/.java/org/omg/Compression/CompressorFactorySeqHelper.java b/idl/Compression/.java/org/omg/Compression/CompressorFactorySeqHelper.java new file mode 100644 index 0000000..f9f5b03 --- /dev/null +++ b/idl/Compression/.java/org/omg/Compression/CompressorFactorySeqHelper.java @@ -0,0 +1,64 @@ +// +// CompressorFactorySeqHelper.java (helper) +// +// File generated: Thu May 19 07:31:43 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.Compression; + +abstract public class CompressorFactorySeqHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, org.omg.Compression.CompressorFactory[] value) { + any.insert_Streamable(new CompressorFactorySeqHolder(value)); + }; + + public static org.omg.Compression.CompressorFactory[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof CompressorFactorySeqHolder){ + return ((CompressorFactorySeqHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = _orb().create_sequence_tc(0 , org.omg.Compression.CompressorFactoryHelper.type()); + _type = _orb().create_alias_tc(id(), "CompressorFactorySeq", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/Compression/CompressorFactorySeq:1.0"; + }; + + public static org.omg.Compression.CompressorFactory[] read(org.omg.CORBA.portable.InputStream is) { + org.omg.Compression.CompressorFactory[] result; + int length0 = is.read_ulong(); + result = new org.omg.Compression.CompressorFactory[length0]; + for (int i0=0; i0 + +#pragma prefix "omg.org" + +module Compression +{ + + /** + * Exception thrown when an error occurs during a compress or decompress + * operation. + */ + exception CompressionException + { + long reason; + string description; + }; + + /** + * Exception thrown if a CompressorFactory with the same CompressorId is + * already registered with the CompressionManager. + */ + exception FactoryAlreadyRegistered + { + }; + + /** + * Exception thrown if a CompressorId is not known. + */ + exception UnknownCompressorId + { + }; + + /** + * CompressorId type. + */ + typedef unsigned short CompressorId; + const CompressorId COMPRESSORID_NONE = 0; + const CompressorId COMPRESSORID_GZIP = 1; + const CompressorId COMPRESSORID_PKZIP = 2; + const CompressorId COMPRESSORID_BZIP2 = 3; + const CompressorId COMPRESSORID_ZLIB = 4; + const CompressorId COMPRESSORID_LZMA = 5; + const CompressorId COMPRESSORID_LZOP = 6; + const CompressorId COMPRESSORID_RZIP = 7; + const CompressorId COMPRESSORID_7X = 8; + const CompressorId COMPRESSORID_XAR = 9; + + + + /** + * CompressorIdList type. + */ + //typedef sequence CompressorIdList; + + + + /** + * CompressionLevel type. + */ + typedef unsigned short CompressionLevel; + typedef float CompressionRatio; + + struct CompressorIdLevel { + CompressorId compressor_id; + CompressionLevel compression_level; + }; + typedef sequence CompressorIdLevelList; + + typedef CORBA::OctetSeq Buffer; + + local interface CompressorFactory; + + /** + * Compressor - abstraction of a compressor and decompressor. + */ + local interface Compressor + { + /** + * Operation that compresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the compression, it + * throws CompressionException + */ + void compress(in Buffer source, inout Buffer target) + raises (CompressionException); + /** + * Operation that decompresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the decompression, it + * throws CompressionException + */ + void decompress(in Buffer source, inout Buffer target) + raises(CompressionException); + /** + * The CompressorFactory associated with this Compressor. + */ + readonly attribute CompressorFactory compressor_factory; + /** + * The (implementation and algorithm specific) compression level + * associated with this Compressor. + */ + readonly attribute CompressionLevel compression_level; + /** + * The total number of compressed bytes read and written by Compressors + * that were created by this CompressorFactory + * (i.e. the "target" side of Compressor::compress and + * the "source" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long compressed_bytes; + /** + * The total number of uncompressed bytes read and written by + * Compressors that were created by this CompressorFactory + * (i.e. the "source" side of Compressor::compress and + * the "target" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long uncompressed_bytes; + /** + * This attribute represents the compression ratio achieved by + * this compressor. The ratio can be obtained with the following + * formula: 100 - (compressed_length / original_length)*100. + */ + readonly attribute CompressionRatio compression_ratio; + + }; + + local interface CompressorFactory + { + /** + * The CompressorId associated with this CompressorFactory + */ + readonly attribute CompressorId compressor_id; + + /** + * Create a Compressor instance with the given compression level. + */ + Compressor get_compressor(in CompressionLevel compression_level); + }; + + typedef sequence CompressorFactorySeq; + + /** + * Per-ORB interface to register and unregister CompressorFactories. + * Initial reference: "CompressionManager" + */ + local interface CompressionManager + { + /** + * Register a new CompressorFactory + */ + void register_factory(in CompressorFactory compressor_factory) + raises(FactoryAlreadyRegistered); + /** + * Unregister a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + void unregister_factory(in CompressorId compressor_id) + raises (UnknownCompressorId); + /** + * Retrieve a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + CompressorFactory get_factory(in CompressorId compressor_id) + raises(UnknownCompressorId); + /** + * Create a Compressor with the given compression_level from the + * CompressorFactory with the given CompressorId + */ + Compressor get_compressor(in CompressorId compressor_id, + in CompressionLevel compression_level) + raises(UnknownCompressorId); + /** + * List all registered CompressorFactories + */ + CompressorFactorySeq get_factories(); + + + }; + + +}; + +#endif diff --git a/idl/Compression/.svn/text-base/ZIOP.idl.svn-base b/idl/Compression/.svn/text-base/ZIOP.idl.svn-base new file mode 100644 index 0000000..59f5120 --- /dev/null +++ b/idl/Compression/.svn/text-base/ZIOP.idl.svn-base @@ -0,0 +1,123 @@ +// -*- IDL -*- + +#ifndef _ZIOP_ +#define _ZIOP_ + +#include +#include "Compression.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module ZIOP +{ + + // + // Some attachments for GIOP messages, defined in OMG IDL: + // + + /** + * GIOP Message of a ZIOP message + */ + + struct CompressedData { + + /** + * CompressorId used to compress data + * Must be unique, not a list + */ + + Compression::CompressorId compressorid; + + /** + * Lenght of RequestBody or ReplyBody fields. Usefully for: + * - To checksum + * - To alloc memory at decompress time (in some algorithms) + */ + + unsigned long original_length; + + /** + * RequestBody or ReplyBody compressed + */ + + //CORBA::OctetSeq data; + Compression::Buffer data; + + }; + + + // + // CORBA Policies for ZIOP + // + + typedef boolean CompressionEnablingPolicyValue; + + /** + * Tag Id for CompressionEnablingPolicy + */ + const CORBA::PolicyType COMPRESSION_ENABLING_POLICY_ID = 64; + + /** + * The ZIOP CompressionEnablingPolicy. Has an boolean attribute indicating + * if compression is enabled or not. + */ + local interface CompressionEnablingPolicy : CORBA::Policy + { + readonly attribute CompressionEnablingPolicyValue compression_enabled; + }; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSOR_ID_LEVEL_LIST_POLICY_ID = 65; + + /** + * The ZIOP CompressorIdPolicy. Has an CompressorId attribute indicating + * the compression algorithms that can be used. + */ + local interface CompressorIdLevelListPolicy : CORBA::Policy + { + readonly attribute Compression::CompressorIdLevelList compressor_ids; + }; + + + typedef unsigned long CompressionLowValuePolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_LOW_VALUE_POLICY_ID = 66; + + /** + * The ZIOP LowValuePolicy. Has an low_value attribute indicating the + * minimun size of application data that has tp be send with in a ZIOP Message. + */ + local interface CompressionLowValuePolicy : CORBA::Policy + { + readonly attribute CompressionLowValuePolicyValue low_value; + }; + + + typedef float CompressionMinRatioPolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_MIN_RATIO_POLICY_ID = 67; + + /** + * The ZIOP CompressionMinRatioPolicy. + * + */ + local interface CompressionMinRatioPolicy : CORBA::Policy + { + readonly attribute CompressionMinRatioPolicyValue ratio; + }; + + + + +}; + +#endif diff --git a/idl/Compression/.svn/text-base/build.xml.svn-base b/idl/Compression/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..ba1ffbd --- /dev/null +++ b/idl/Compression/.svn/text-base/build.xml.svn-base @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/Compression/Compression.idl b/idl/Compression/Compression.idl new file mode 100644 index 0000000..18894ee --- /dev/null +++ b/idl/Compression/Compression.idl @@ -0,0 +1,185 @@ +// -*- IDL -*- + +#ifndef _COMPRESSION_ +#define _COMPRESSION_ + +#include + +#pragma prefix "omg.org" + +module Compression +{ + + /** + * Exception thrown when an error occurs during a compress or decompress + * operation. + */ + exception CompressionException + { + long reason; + string description; + }; + + /** + * Exception thrown if a CompressorFactory with the same CompressorId is + * already registered with the CompressionManager. + */ + exception FactoryAlreadyRegistered + { + }; + + /** + * Exception thrown if a CompressorId is not known. + */ + exception UnknownCompressorId + { + }; + + /** + * CompressorId type. + */ + typedef unsigned short CompressorId; + const CompressorId COMPRESSORID_NONE = 0; + const CompressorId COMPRESSORID_GZIP = 1; + const CompressorId COMPRESSORID_PKZIP = 2; + const CompressorId COMPRESSORID_BZIP2 = 3; + const CompressorId COMPRESSORID_ZLIB = 4; + const CompressorId COMPRESSORID_LZMA = 5; + const CompressorId COMPRESSORID_LZOP = 6; + const CompressorId COMPRESSORID_RZIP = 7; + const CompressorId COMPRESSORID_7X = 8; + const CompressorId COMPRESSORID_XAR = 9; + + + + /** + * CompressorIdList type. + */ + //typedef sequence CompressorIdList; + + + + /** + * CompressionLevel type. + */ + typedef unsigned short CompressionLevel; + typedef float CompressionRatio; + + struct CompressorIdLevel { + CompressorId compressor_id; + CompressionLevel compression_level; + }; + typedef sequence CompressorIdLevelList; + + typedef CORBA::OctetSeq Buffer; + + local interface CompressorFactory; + + /** + * Compressor - abstraction of a compressor and decompressor. + */ + local interface Compressor + { + /** + * Operation that compresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the compression, it + * throws CompressionException + */ + void compress(in Buffer source, inout Buffer target) + raises (CompressionException); + /** + * Operation that decompresses data contained in the source Buffer into + * the target Buffer. If an error occurs during the decompression, it + * throws CompressionException + */ + void decompress(in Buffer source, inout Buffer target) + raises(CompressionException); + /** + * The CompressorFactory associated with this Compressor. + */ + readonly attribute CompressorFactory compressor_factory; + /** + * The (implementation and algorithm specific) compression level + * associated with this Compressor. + */ + readonly attribute CompressionLevel compression_level; + /** + * The total number of compressed bytes read and written by Compressors + * that were created by this CompressorFactory + * (i.e. the "target" side of Compressor::compress and + * the "source" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long compressed_bytes; + /** + * The total number of uncompressed bytes read and written by + * Compressors that were created by this CompressorFactory + * (i.e. the "source" side of Compressor::compress and + * the "target" side of Compressor::decompress operations). + */ + readonly attribute unsigned long long uncompressed_bytes; + /** + * This attribute represents the compression ratio achieved by + * this compressor. The ratio can be obtained with the following + * formula: 100 - (compressed_length / original_length)*100. + */ + readonly attribute CompressionRatio compression_ratio; + + }; + + local interface CompressorFactory + { + /** + * The CompressorId associated with this CompressorFactory + */ + readonly attribute CompressorId compressor_id; + + /** + * Create a Compressor instance with the given compression level. + */ + Compressor get_compressor(in CompressionLevel compression_level); + }; + + typedef sequence CompressorFactorySeq; + + /** + * Per-ORB interface to register and unregister CompressorFactories. + * Initial reference: "CompressionManager" + */ + local interface CompressionManager + { + /** + * Register a new CompressorFactory + */ + void register_factory(in CompressorFactory compressor_factory) + raises(FactoryAlreadyRegistered); + /** + * Unregister a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + void unregister_factory(in CompressorId compressor_id) + raises (UnknownCompressorId); + /** + * Retrieve a CompressorFactory with the given CompressorId from the + * CompressionManager + */ + CompressorFactory get_factory(in CompressorId compressor_id) + raises(UnknownCompressorId); + /** + * Create a Compressor with the given compression_level from the + * CompressorFactory with the given CompressorId + */ + Compressor get_compressor(in CompressorId compressor_id, + in CompressionLevel compression_level) + raises(UnknownCompressorId); + /** + * List all registered CompressorFactories + */ + CompressorFactorySeq get_factories(); + + + }; + + +}; + +#endif diff --git a/idl/Compression/ZIOP.idl b/idl/Compression/ZIOP.idl new file mode 100644 index 0000000..59f5120 --- /dev/null +++ b/idl/Compression/ZIOP.idl @@ -0,0 +1,123 @@ +// -*- IDL -*- + +#ifndef _ZIOP_ +#define _ZIOP_ + +#include +#include "Compression.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module ZIOP +{ + + // + // Some attachments for GIOP messages, defined in OMG IDL: + // + + /** + * GIOP Message of a ZIOP message + */ + + struct CompressedData { + + /** + * CompressorId used to compress data + * Must be unique, not a list + */ + + Compression::CompressorId compressorid; + + /** + * Lenght of RequestBody or ReplyBody fields. Usefully for: + * - To checksum + * - To alloc memory at decompress time (in some algorithms) + */ + + unsigned long original_length; + + /** + * RequestBody or ReplyBody compressed + */ + + //CORBA::OctetSeq data; + Compression::Buffer data; + + }; + + + // + // CORBA Policies for ZIOP + // + + typedef boolean CompressionEnablingPolicyValue; + + /** + * Tag Id for CompressionEnablingPolicy + */ + const CORBA::PolicyType COMPRESSION_ENABLING_POLICY_ID = 64; + + /** + * The ZIOP CompressionEnablingPolicy. Has an boolean attribute indicating + * if compression is enabled or not. + */ + local interface CompressionEnablingPolicy : CORBA::Policy + { + readonly attribute CompressionEnablingPolicyValue compression_enabled; + }; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSOR_ID_LEVEL_LIST_POLICY_ID = 65; + + /** + * The ZIOP CompressorIdPolicy. Has an CompressorId attribute indicating + * the compression algorithms that can be used. + */ + local interface CompressorIdLevelListPolicy : CORBA::Policy + { + readonly attribute Compression::CompressorIdLevelList compressor_ids; + }; + + + typedef unsigned long CompressionLowValuePolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_LOW_VALUE_POLICY_ID = 66; + + /** + * The ZIOP LowValuePolicy. Has an low_value attribute indicating the + * minimun size of application data that has tp be send with in a ZIOP Message. + */ + local interface CompressionLowValuePolicy : CORBA::Policy + { + readonly attribute CompressionLowValuePolicyValue low_value; + }; + + + typedef float CompressionMinRatioPolicyValue; + + /** + * Tag Id for CompressorIdPolicy + */ + const CORBA::PolicyType COMPRESSION_MIN_RATIO_POLICY_ID = 67; + + /** + * The ZIOP CompressionMinRatioPolicy. + * + */ + local interface CompressionMinRatioPolicy : CORBA::Policy + { + readonly attribute CompressionMinRatioPolicyValue ratio; + }; + + + + +}; + +#endif diff --git a/idl/Compression/build.xml b/idl/Compression/build.xml new file mode 100644 index 0000000..ba1ffbd --- /dev/null +++ b/idl/Compression/build.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/CosNaming/.class/org/omg/CosNaming/Binding.class b/idl/CosNaming/.class/org/omg/CosNaming/Binding.class new file mode 100644 index 0000000000000000000000000000000000000000..ccbcae660d4611d89af06d9903b6af838c559665 GIT binary patch literal 429 zcmah_O-sW-5PjP;#n?eir~Q? z;ExhtXc0l7mwCH0@6DT;&#(6n02kP=!bQD;G8#o_df4%>>tRp8k5WBOb@HfH77Ls{ z49qN%CQD>!o^Msgk|e~T$#SD(Z7+Xm>^!ID=pRXM+4Y_T3N|{aPHk7fX|+cJ<$ldMt!dpJ`KZD7;bGH91yzBAzw@t#5ok=*i;`2torcjQezF3`KlI^U?@H!oW>qwe z2%11%0VS80RB;8@IUX+8g M1xmsB0?v|%Zz4NoegFUf literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a3ed44a133321e0d5a7e89cb283501d768dd8039 GIT binary patch literal 2372 zcma)7ZCBf57``6Tk~T|S={DtMz}OtNsZyBEDMb_tQbrlNB8sRrZ6k)YNey9cKV`qb zujn@Dk)vn(1|gZ+UX1JD21uV&&8|lWbX4wo=$$)&$c$#frnY$0v zx^8S|=5?b=YnDTZ+7sJSD`Y)+lC=-9%bX!rwAIR^Rkg9MmTMXnlVWYi)4k?}Tei`bI!9g+;AUNeIQ%A2*SW^wiJMf@P6gdZ8=+HS_yt8VM5 zK{8a7WmG^}UuhR)@kvE%*t%)R(D0Lt_wj*@o4Ca==m9$Hp;GKs>{YE^)+`3O-0E$~ zQ0vr?Z5bI%@(_OZ$#{!I=rZ0xQpObS5Di>T$k@RnhOy;^!Za~-f@9@^iA_&UOfn33 zaRlW&+M0|d)cKAwSb-_yE*kvv%b6w9Y7L%7yj_U3@{Y#o+2_GIY14)TzNKgpctz+<(xM`%N5FpjuT zA&T2tN#}eo?K*_#5&Aga8KVDTFkJV_kZS;44dZB&5I~4UJS3DjR)te7J-ePt8xESq>fp3e$agOFI~*pIYFg1LSyt_9HYN3 zgT!YP?V_}&F-hNXI`z@YXbmfeV87D_q)5ZZ6~`SR5Ne`l-;qXr`D~fQ0*k#EVME zIrlY@aL!F!Y2s?)8bQ7J95Pw*#9Al<*fasq+;ssiJMIA?@z!zrH11vDIAz828azV( z<{<_OX{Cw5ml)#f^_LhGRSD9_dWV*4Y(Z4Dvk{Ilb08eI8JCex~ef8%>bL% z^_pT^j;pp!UAgGn1NX)ySg*<%(bl75xTG!5r8Ea_kR!C*Cz~i)xisy^+vb+?yw$3N zWk?cYh>OTeC}2-Q5&IGjkYXsz9sS%gHQixIbk(7%m@1jlY%g5py_!3oRQ!=*O;pnaBhK?cf{ON9Mk0y!LURx(cl3J8ll3&EgAdr<B%k>(c8vbE~dvew$xDh;9x7&V48A)aWzXi7sf z>&ljG8D^b}Fw8yOvKek>eesIs^Fn{Cxp!CFC5We)ZMSed%J4JGu;~EqjO5(dxBH~W%r;_b zmeqX5Q1H`kRG#Qn`>>b>G-vCJ?vXzAlS2VL52H3a-5LB-Er z-%;8HXc8)@GF)_dU0>CADqHq`MM4d_gh!}*({Uj_#BIIN(k+H$zspTK9 zP`&f3VmMi)g0^+lFsY*+X;oddN#JsJxLJpHJZ0g3TznC!nHk2qy{`6D&5bCxejg07 z@>W0Lw7N@@8G4DFE?_u6n6-O*oq3r6bnwF^2kA`h-NJxJI~J**mg zs>Yw$BTjXPj!LcTwp!C0dYvwZVR|S_H=8xbi5}B2b#DN5!7pqWl)E3AqMytp{j3;7 z-m0{cXiXhV==R2Ap!>-YmE1&W4(-EXD{zD{mZd8S7+gUc>afL5HSjWH5;qUSOT#c^4tNIX_neuuB;76Au@WgPvIPN7(yXM8YpP_y>gNN!^m) zBg_s+QThd<^4~}wOuj@yrqg|ci2z<8^A@K_=IQbbSyOFf+Bh?F(9`Zpj35+=C(?-G Q>cEYY0|lT<>K-iq2dytQZ~y=R literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..0586a31d5134ab06ec6c9c58505beb07f58de8e1 GIT binary patch literal 826 zcma)4+fKqj5IqZ&O05bCsCY$;LV0NP6=Nd4NHmhD@s$+Ykdi`4T`>NYCK`zket;ik zoP{D_f|6#Z+nICbayp-1?;ijTv8zBvB7!iI3YM`V%&IUc8EZ1uWo$4=9m8o`44Dhp ztLbi|rk}d^mqx>G*7Ty?H0fR9mS=F+D=>tQ?553+8G_l|Eko$kHHo{Ioq{azQpK|j zlVN{^P`)aj=q=adM%A(OQnS_O*PLLDf?$Lz51!4bMs^~l+~(sPslp#yL`h|H!@hcD zZpbfME~uD=sv-hK#-@rbY^z9PM@0s4YVThu&RoZ|Jcel9=oq?VkXYqv-MZrp=^yg= zWc{JUkW&?~oR%mM>I+tyIQ^Jl!*T!khmx=8`NW)KicXQUw+cdY9MH1KV3?u9guJwf z65U8`vUBtm>qW?`y@5TG1HJIPA5J1b51@#!mVZTHfLTD)$0U4AM9X&(9D&5J_#2Yf ZUJ&RaG{~}qxDOH87*z^&Aw7vUfN%Ap%vk^c literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorOperations.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingIteratorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..65accb3742d4ff67bdf465958f93e7933f006441 GIT binary patch literal 238 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 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingType.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingType.class new file mode 100644 index 0000000000000000000000000000000000000000..3e6fdc4f85e2fa89c2dec7f89e86e13a1d986c1d GIT binary patch literal 802 zcmah{%Wl&^6g?9svEw?lh0u~dXh}**%)=5}3K9)nL<&@Dt4OROH*q5u#}g$()P55z zLU|N{#0T(Eh%?4Shy^TspL5SWXFT73eEA08As!T9qN>f7Hn(jQux&HCqfO03U3=HW zT@&{NtWGSCPlK)!5KVz%L&js}$Exi|uLFaK5HM#)Hd=Dj_vE1OHRSk(KM3Q#w;RSi z`lIt<@JOK0iMujZ!I{#-f(w4<0{PBFqYC6wZ`A7CnQh1(i`L0V4mx2>CY4&V{@+c- zL*;j0J@Iv~U-4>V|1%B@!7|UqFZmCvpo%$2si+pn4Pb8DBy?53P zhAO0L6Zc7CryHd(B-eIOg5zKw3l6SnvxsWGd17(5re_n?^z9z8n_g;a`+1&oY z?o)3lM@ozEn$KE$u?p2Wp_8dlrd$sdgc+By z_(%OJb81M=P!)ZSGt@%6%xsZf=&Jhx;w=Mk0ad2$$7y?eEj}Y&eX^3^)WJj|prRyyB6LO!C*MMBW jFU!s*EZ#sR#j7HDs963A^QCbK>pe0$%qF4n3miWIy2O>Y literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d6d1275871acdeda89c46d8e0ce66d19ab72bd3a GIT binary patch literal 1939 zcma)6SyR(c6#g!4Ng9Ge1s7DbY?f3hC~g!NK-6jlrHCSG4Q=cM+oThM%TMta_=?Na zj*gB#IpdFVJU0z(x;Xf9Z*tb}ob#Rg`_Gr}08S$(p$`)heVq|7DZz)c63*egfD01Z zaWP1eDFJaVoR)A1mx6R$7H~zxRS`2>G|P`U5!ZN_c@fto+`vr<3EbkxZ3#)-5wIX& zks*+_-xM{5gGtlM#mqu3Hn+GmI}=+b>71F>;tcK6x}n>b8GMn^6$U>S)0H-@b%x%^ zXoDxYb0^){)GV9fY@|UyW4wviMCRs#TF{MLY*sh2bo0D%o<`7K+m@Q42$QWMc(S$( z!O)qq)y#`KYH?Xz&ui2(!d$7fuL-lK+BQAQ&_fm*>Pt12R|#6mwg?&bw=|Ws^NoOt zre*Uav4m0FvdLUi3-R3%23}dZO|87~&v=Vlb}it4G)W3fB#`kKPZ)+1*OF62%Q0TT zTr2cb6Jz57p2|q$nE+MBIx-w4{bXfmc)n}-TE3`Rb$AzDl-qRxA`iO;RvY1dz>`7O$JY!@cc zd^1F0TTAPl&*@Ev&>W?Q)AcaD#An#!x@*Q(A#GXS=530*;GsR zKw${-jZNoGBj-F{35KIpw^malVm`Ob0u}CzIN{0P%ADSW+G^Ez#Jjo-lC$bA5Pu{w zy5bMhE8RzrJ}LRW&{vSYX>I8|Mt|LOGr9xHXR!D50Wzdran)Up67ZMNw(V$x7{H*b zJp@16NZP4Nz@^Hg5!^1)Qx0s%%~Dr)=%>9FRx literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/BindingTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..cceaf17e0dcd010248c357de4405df564ca65e57 GIT binary patch literal 802 zcmah{ZA-#X7(G{=%e6{Nt?b3rAe|pZeKmrVs2~z5`YN*xnM@~Z8vUz+BI!dvpdS@I zcg}2q$=JQyea<=eIp^NbulElC2iTP$A{9dvX$h-XL=o5C)pnHyE-P zw$oDWPD`!X_m^77?6%aZ+0|*jdF&Y#hUlT$HQghIaItjD5UJTZ@$$tPM2;02j-lxc zd%wW-tLm}ZvmIA!T84Vw?e*PjmtdU=XG9whj_HzqaVn+WcY_?E;ZmmznPO?uleZ0b zz}v0Jn1?JQ21&%Wj4XC!TTMkn|y3jnPh#A%rL12Jj7+$-+?p literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/IstringHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/IstringHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bda665d78e753d99b8bb3fc4af27e3f38d011c52 GIT binary patch literal 1829 zcmaJ>X;TwH5Pd_AO_o6*c%p)UXh@U=Pb7FiJU|vuLA;Gi*h;O2B()h(e+s|AuZUKl zw93*?R{5hWdp1jsP4LUi?sWH?*WIt@&);u909=5f;s}OSXc$p2s=|j0DlX!Zg3Bs` zxDuw5s|v>C;WZV9F&?HR5yk|r%cvXj?5139g)k{krb0-nxQ#n1?&6+;X$3P3ft2`I zFd2^Oc{`)!*D_ji;nCEjwnV4N{HmE?2u@fzOWa`aMTeFd{PLK#RNh`;I20Z7L{hj6 zvT{Y!77Wp-$3B_+n9$!E8-|uOav5z=*j6r+kjRSpLD)u`g3dMz8fuJUXj>FU`rVvS zSTa_!CKZI3l{4yYU{;e;i?zydkUScQP`qs#WF7NzDCBJ+FVSXlg>^x^O=B(56d~~5 zwglB^d|!x#by3A=Bq6I2nn-7z!gF-vxPto}v*=;yu5VPie$)Bvs%cA4UBMj3JQf%_ z%%Uc&Rkx#5ca8^m$ngk^3|-aC?|ev`1!3iL97}l2F@zY$Q5;jS%<%+IIiBG;$4T^X zoJEuxHB)rD#_<9#8Tw{!>*FMyVaY6+FU}il)KblL8Xp}d3BTfaji`bY#~bJjy_GDy z{?lf*VA{mKN^oK2ttn;ESqXA9N(*&M)=28Gc@;e&R0M)4Yco}Dp=>F`nSEPT^>RcS zaYb4eJ=mbNidbsGY1%f7>^j{RX(US>Nt2?4nX;t3QdD8mmn7yLunKgo4oS`R#aT+u zS~-$&SiF;1)DVWlo>46O(6n}BOpz+s)|w@(4KpRu3?trxxXxZSHAB_zCSYVOqv(Jv zH|a`a>RwiRPtSj@>aS0>SxFdLUAo0$zYyF+PwXdxB`A9Q7kry&jsJx2D?(eJ;MZd%sJm$0q6md(^f_z? zC^iIN&y<4GlK&vixX5EfK(Zg$2LFu{L~u~o literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NameComponent.class b/idl/CosNaming/.class/org/omg/CosNaming/NameComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..f35f146575dcf739dce989e75b69380e2ec1fc5b GIT binary patch literal 356 zcmZWkO-sW-6r7jTq-mpV=7_yhb= z;@eR4(91mDycuTR_s{1SfOG6M5TI2@JHiG!4w4YtA$CIS5MM--!hh;V4iT$myksaZT^ z1*ZufGBw5AXsIos{aJ(SGb!$G2Y1>k`-WrwEC3;d$H;N~ yJ-I}lj^QGVo4g%VJJ9KWfclBIgkNFposZ7c#MVl>&r+YcRwX@k%CjX_Li_@q)J6LM literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NameComponentHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NameComponentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fd112efa69061bc88bc1498bd80c21a0ff894857 GIT binary patch literal 2258 zcma)7ZBrXn6n-vA*kswXAuW~C0@4;5HcDvK))K5j=u1i{S`bClxJj;YA=!<~g|uFFE6Q?q*3gA&h*vcXM8z^PF?fIr;nF-~R+~6OM{e+){BHA1k<{ zB7hkcY0N74L`5&|Mo99hg3qLIPQ?i3BXndGEQFDY;2!Qv-v=t9co;@jT0D}+Vi-B8 zSqkH^f@KwhGRo)pB0^tJ}BV>?N)~f9YGUrA$eHxCTr;aJ8pxF}< zmv=-9@>Hb@&lW50qiMK;s|vo>u#O3a@#Z6UFWE!8QsRzu`bNQqhHvp5LyT{ygjw<$ zgPu>r_sDDb0S3dlR*CLCEApB!ZA(J|MGZG_Q^UI$V;E|Nb$g47vr`mHyjtLnf|3S~ zA2pQmlMHN9iMLFPq~n;-kis-QV_S1**u)mY_3T1!h8lKCf@iwtGjn5#+((u$$@nfUV&7D@ou2I>cXk-7|g47m8>VLuW zrW}U+wmS`yr*9zIiTbC8X0N?;tC>aW2!@E*l2|l|3>R7~T%?8#4QQ;)MZV^kRa2O| zJTHn2)1CG4j62!*R=`5y`0#f|JX(<*a_UP7U)qz-3%e!PYx*@l^hh9uBnvD)n z5;teYzg8N#A2DIL(q6gdOZw`|&?k3Tvy$=SnKE2G0mr|K7&LcxHIW9oq&B%09HalG zQTo?oP~|?LuLyn9VxsdJ{pzQi(H+wF!Cuk_$dIPrQ^#B-5IjK7o~w=EIuf4tB7*24 zX;eQ%U_H5yU>%_bNCcD6J+mC$(oEOiqW1+x^f&0OL&+uIBJcuz$u|hRMtJWR1ao>F z>H+%p$V0&}@s(_oFPP-K#gh#|0laG%1_8uY@Qb%Ozc_&Z0%phfE` zCn!gm<pyuP0yQQXRwczD#$ch+%xx_E3b5 K5F?@uHU0xKcSsTd literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NameComponentHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NameComponentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..31030c3cdc1561490edbc9443fbf8406f1daa457 GIT binary patch literal 814 zcma)4ZA-#n6g`hRm$phvt?bn@^5w&*uSQUQs2~z5`YJPrOy)M$qtU-AD3U((1Nu?X zeRQS^hB0=x-Fwct&po?e-yfd<4v~*TMmmNlGI1P`30A_Cg5^%JW`1gAiRnT$D@YH-tu*1tdI7+QY<3>m1vY!D6QHyUBWh98g|po#_GHO zgs*+^728hCv{Oc(I@7#kqo}vd-tAmzWbe@`}d3A_W{gcN5u$cRGh~L z3O-aJ;Ug8ZxS-&oieAh`=q9CLUR*AyIF7{#EtkaUV--tS7N#rW^Kuwh#K$LLTvf4( zw1R6w zWRT*CO$J$9)0TDIErz4JlmvLB@GHtw9#O=H)x^GVw1#oeM~ zo3@t{FDd4I&oy!cGTR9xaX1P?|GH=7ez;*2H;k=B%2hXaWGv_VjC>8{o|*;@UGdSW=;wI~`|e#bnP3jPR`fk(vrt|idKWT zM}ucd=8t95&Y4*+$8bKLZj6T3LDc?yQ@0KTP)5NrN+NRQB`KZEoe z!h4S)XS52`D*E=wLLrtDKHJk|8-_Httl&Mtp9WNbe31wU_NRUU{|lp4^h;H|Rl&e@ zI#w|l9U{Q!uizvX^r<~)mB7XchNfEpGvI@eAUgcoNg9iR@Dl0EWHnAuM;2m#;%G)% z9F6^qL48!K;_dZ^5_|meU%i3fkI)Nn1=EcEM*)t|csm<_%@UYIU@=YKuizbNA*SyW olBUOIsyOyAL`eUL0M>{`5c(fs0*R9U=UQ?`I_P2KSuNan1;KDRr~m)} literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NameHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NameHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..751fa5d601fe4641b217ad854f809726c14e15c5 GIT binary patch literal 845 zcmaiy+fKqj5QhH+N(HOp0Teu-c&c#G=q<)Xxj|zjQR9slq)J0dO54;$<6CK>k(lTM z_)x}Ks7j3u7oFWszJF%t-~IS}eFw0EjU+~pkujTqjJYJT$cZp7!h(!N8A~$q4AQM` zbqt2W<+0;6HK*OwD$dP`-Zt%~MvGB#+OA_8HZL>8cTL;mdkj%^>w+OxaT+9DSBGl_ zF4a9lZ!m1CzpZMg2m6}qcwE1-4DHZ%JN%3j)-DT0yng4IoLZ=%l3IrcHBz15yClh} zTYuV|Q(m07tU$pSLw?A>3X&L=v8-SP1qG{EQ?QOS!@~c*o2Q|2#ZiI*~3Z$ObU}ellGZJ lvD8Iu0GYz{U!+ugLbMC%yVDHPK9ZtU94OXB{6QQ8_yWM(&tU)n literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContext.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContext.class new file mode 100644 index 0000000000000000000000000000000000000000..3220d869c2a7f807fe9768f361d08000c69366d0 GIT binary patch literal 200 zcmX^0Z`VEs1_mPrZgvJXb_RBK1`c)xPId+^Mh5x(qICWI+;n~C{9?bv+|0ameF){8 zpI4GvQNqX|kd;`LsGpMvl<`l>N=*g|X%f)nUyxdqSdy8aSIo#D0$1xF_!1fsuiUff)!{7+8U>2Lb@{usCl3 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExt.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExt.class new file mode 100644 index 0000000000000000000000000000000000000000..38df790199e1bcc771943830436227c9c3df69b0 GIT binary patch literal 245 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2BrL>bp8C?bbaUiV!y=P%)E4c z2<4ogSCU#$;#yI{$RLoFSeB@tlL(abPs&P71`6pA*5_Z4T9jClnV(n8$RJNZIU|Dz zT!nv-lOx<71ytdJ{GyV?q?}ZJPZuB8ypqh4N;XCYMg}GZ76xV@W@TUldKCx&5bj3q literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..46633cc3aa1a46b0a40cfb1f27e4971e99f2e91c GIT binary patch literal 2269 zcma)7Yje{^6g}&gY+1pHalnwiLZCQuh)7b}5{FR7p(WHNGzqWtp~|u_2FLa&N`apO zzanjCOeixge1Vz%s7~+NvMkB*kT1Kdz4xAb?rZh$e}DZAU>*-eOyH7;FY#3jr}4E& z%VoYSMv>#!OHo|m-^(Jd;v2r?`R9s=0#^Cynt*Qwd?#WQmjqlFv4$H0zK^4bl7O2c zPH_Ar*7VSQsIuWZq6p;<9<43VW;qh>8L1T)ij z7()D-HnnM%8OAfyK1(tuqfi(2^nlm}JhEwN`s0$;+S1B(f(+Cu3@NgBr2VETb*)iV zHZ8N(sB#ju#;##n42v0`zkK6au7B0sy{YYxiPGH)&4y(>wXQw2a-6$BXH(M&=JH`M zu26>KP;9255z`xfh*s0IcqGbNqqS!dbwk_99T7A9#H?AAgW^!o^*yVPdend;4b3#0 zPZ*Z`xa;LdhE7>I3KGNUUPFIq=#Pzx+C#iD1abR_kkKW*-f1iepWssgn-aEgM#4w< zSi&SfeU9_w*QNk3?3b-rb9_~xn#*Y#%VotzM z5`OM}EHIq+41hYXE+|ex-MMEt>CseH@~i5t{6@aSFzJ=_?K{a{+iBGW{31ccuMB4# z-J#?KXcEfM-Q*l))t{J6Yp*P!0z<+BR2ecKc5vOOw+xe#+@H8^Uoeb0)}8l&7HWK6 zFNWhfb+%=wHJUB+fub za5B<{@F#+F$1NDn(HaCxA;#Yc+caSV2b0krZU)n~aGdl5WEGRM2Z*&Hc8SFxBWtUq zY3I%*xs7;{)TGi(4`>D#9H0Q5I8YlSMDAEmWfqF9vP_=1uZ;W_i5G~!#_0W*82cyt z4$16WBwbf>wvFSQN;jqu0*NFAMGusXl_VtYE+PkAzUB{+_qm8Xk literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9ea42745191e2f1bf8d13fdd47ce0e49594b91db GIT binary patch literal 832 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 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPOATie.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..78c4cf4a92b4a7c5d150b749ac77de503e11cdf3 GIT binary patch literal 2752 zcmb7F4O1Ic6g`gwHYD4YQblTO{ixUkD1lND309Ld*k~jXDvGFa$v!iw%PzB75dM{) z86n0YhTEjOQb~St}Fy1t!CEJE41r}kt*!{_9Nrt!F_up__&)B!* zwseoBn{U*Mg}qWPGW>DRX?ArR^1RQ8h?cPFnJ?S1%2F0ve6l z#sM>1$-b=5Kq5O3^1`yx#F1+WtVURfu=(RldGeD(36^ zPh`t0X!u^k5A4u>$2J8DLzJeURoGB&M?;hOxYD04u||>z6#HGMq(IviHuZ zKq9Mp@gsX`b-JFwR<;^}FR?w`>>5=bIhHBiLcCIy+h=%=8z`zaq}E$jj}Ua+#K$_O zab3sjxS``6+}80P?&!!Or(+KDI`UZ5NrV*3xUb`VC06i(j#Yf9V+{oz>-b2=17)g+ z5-W9{f;iRHhqX2G*@D`tcureeT38ggGla6QnT=dhmZndWB$me=Zu!hmssi(a_4>>! zaBqNm!)X0%v}L|(9~)N3B#ASY)d3)~`#D_EG`T8d(EI@CbKIumZ8%4Y7VZy;C>yrz zcn#NSNlDo9kg%fVO2a%Y`OYp7UghA>JH^}ls7^ufqd3ApP9nd$X*G;ICwYGpZ&2Ri ze^WgTzRvy)F+2AcMtm;+vS@nc!{mcO;&_a^z`P zIq*XOG73C*hU5r*rFRvC&>8-?95L#nQR-ZyKz*8?m2bUgef|t%iIDj*YR&c>aOYwi zXkiB_8oP^y9)uej=OmSYUnP}8npyamC1%2vjzf)yQDIMHfH+J#jCs)$DI*S*38TWE z$S?usd|ULmGLVmAAeTl$RS0__d$AJ!borB$R_!^%Wf3$-C~}K2dnFu+pYl@B5|Uv6 zQp2rAGB7+LLZPUk`h-8SCZ!7FI$MZBr9h6n-vw*<`sC2)s!+$xszE9yP3^};!p7x z^eeTU$h0$#esZQis?&3Kmym2izudcf&pFS1&NSQ5>qK?~G)bRuE zXjsy)%#bL_*LA^g%5=S|;ciup;_9P?d1IYUi*7{}7?N|gW6K*1vFzjqLtGuxR&u>f zhU3}ENF;@;AlqpOPcme)5&OLJx?sMvb}XZ2IaOm#dbU$7C}d6SO3x}&(4}5Mlig7a z18dSMzq)7D*R9Q(pn?#yAfwSPW^Fn3*%gLkbekoeWJCDmy5NQl*Kd5F?qZp;{hIWJi;2o$YJJ-yJb z37&F%fiaFt$Wo)`D-};P8XV8?oMC$TwmD1EnNrM(ZsWeSMJ+Xgt>`+E`ntF)jWBBV z+7xN}1;@|GYAA910+Zo-E3G2|9#E&PsyM(|61BSUD9yu6RySV?rJvyzm@j5psI97) zO0d1l9SNao5lkTBQqXJFdxncg_Vm!pS92y*b4T=rE>X5r)fP@;xntF~>9$NaS!!LG zq$fqmRyr&-d?6}g(MfDUw+ohJ-&vgX;)?B%-qZ4x!lKSGoQTY9;6r0QR28yR_v|fO z+B>2o%M4ee1qq#_Y}%%8FigOz*;c~`+33-g?$o2K4&JE$x$1mpvb{>e(61)GmHfmJ zA?-8E!2KBygW}`#(4M4+n?YBTLtkn7rn#l{4E+t$&S+2M-hus2A0S5>sL(v*8-e&f z`u2Ql8fS4Xw4O#BeRMjI`x~(*`FDsnkqAK27{~e0&7@tq<#Hd9e1oyv2PB)&%=|~h z-k?AK0kJ=k+WQT0GuMQ^kN!Q1(1^yk&vt@hQ;3Z%X!ug`zkrJ&@(dAB>?huWf5I6e z`4$6Be73TW!F>#6h6yk82RNA(djM`%~%HG(>3 i<_{e5xEwlU$gCWaxqK7HgX~kd(otbDBf*GBV8(y)q0dnO literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.class new file mode 100644 index 0000000000000000000000000000000000000000..1a0279e6c44230fd4e73b6a97c447b9a1b80a67b GIT binary patch literal 505 zcmb7BT}uK%6g_t}ciYxJOtZA4M>S%or@#K}%$A*bjZ0guDkwPwkZ3FqF7If_BC=xQ~uJ6hw zAyuvQ23qqlK^~8sqdE9r{y^LJnY1Dc;b}j6oWWhw1Q2Z@vzqp<)qJ&W=y%ly2Y?nhW-ygD->^iin`OHX&cFE&o`h!^2Scia-7T!a!5{|Kw%P2TfcMN^u F!w)t*dmI1& literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..59f4c978c8f08d3ada92ce120107042aa622984a GIT binary patch literal 2308 zcmbtWTUQfT6#fpmOfn1#5d^745HBH7qP4Y3kTygt)LQmS1kLq%tnK79JctBs~O!hwe+uy!U{`>#s-vB;>sp2edsQ4J4D7dL2 zfKOH2!fgdpD#A!dNiwbAjug(Q_yC_p>G8ROjQlYxAK3`*N`Sct?y2|!^C}kbrGonr zQ`!9TY$mlz(yV3hG(&jWteRqm zArPN<$PkobItrFuWEhA~bXbzPG%~AoZVQH`c!xey-AcDaR{ep#VOGm2_sCjR!8gU+ zrdZNTKj~$jTBttLE2fb#44c>MX~{sL8@65|@cd!mK0?PuXXsfGrMC!{?muWEc(~YP4Gd)$&DWDZ$Q(Tmapv`sCKI!CIvuq)qP>8jLpzB=UNWT~P z&@Z+rs5ZqTUF931b5ScDjoW{^_4xGs`RUnHCS{>>A@KI4v*6^c*c=w9%N{!o8 zgjSyO#iv|OUSE@zlT~_9qsw++xZ~@-V{&%Jy91hPPVU@wQgEk4P7T8)pC5-rbD&zc z9Ke{jFWRgx9vJ7t%xOW=`e~52sdt|iYSa=9x8Ma+PI{s4jJgcKH|^~a_*X*9oWE`I zf+#Vp#}96sgOc?YZ^wnd|NYy>QTjI8`St=gljCE?&@ES+jE6Q|TbqyX%igsd zo$^{D@fzXh7)iWBcn3-@`5J-e=uW;u;7>%he?u^r*nzr-?rpMAi0_!gHcqw?1V&~R zOi2C-Bt7ICL_o41c>(QT3EjJI~q+?Es zSnO?hv?V>|O}a06j}g=F`Uyc| YL=q0bu$!F-{k`#5fG!}!h^?!}8)qwT6951J literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f063848173242b8bc7ed29d033829cd91a9e3f64 GIT binary patch literal 964 zcmbtT%TB^T6g>l!3RVRbd_PbV5f+UuMNO2LXkx^uaf<_ONU=~-1|NT=iALhW5AdUm zcc6%vun^Pqww-(KIrr6%&$o8~TUZN2MJ$9M;$ci-TACSYW>w6om{+mDpxko1VKQu= zIBrRIDkVMZ)K7WEs+RQjBkNR!c`pv{#ThT&@RF$?S1HIc_6@@|>-7vnaL1}zVvoU} z+_+*0WF3Pjcawv2N*X2an%rPm|G|?xKiJo6jw^VIT~Fz3$tqp7wT|^Y{Hwys;GeO7)Co zaH-bz$$4Uv)?Nj}5Zz3Uj(!P+-e{6!N9Zfs^3ZAO73_%)&~lG@?l^pO0b%J*rC;Fd tV8#&fFfk7kN~N3d|A0g>{u`1`J;T>Tpu;kONe?2~7%2ssP#$F(z!&>S0ptJx literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d40485440690e9232a408647f906bc8874dd301e GIT binary patch literal 1879 zcmaJ>ZBr9h6n-vw*<`sC2)gauIY&3 zx{j~$jfNXKlK3`FC*Nt9QitE`IDzRjErm2@@PmrFsm^Yx<#r0Q>SQj3qK-S5*Krs3 zG%RRXWJr|ctD0aqWx8I)aJMQ(apm#ctg%L?MR!va7?Lx#W6PTivFyY;LtGuxR&u=! zhU3|ZNF;@;Als=6Pcme)5&Nw3s$jmbb}XZ6ITd47dbU$3C}d6SO3x}&(4}rc6P-~E zeXG(czg)IzYt}|pP(g@UkkN1lvzDBC>`jJabfkoeuRCDmy9NQjkfd5Fa}T|IS!Y67w?&V4sIw`rmT;QS9jm%cw`DrXQV+|d zK`BbM5@f0FD^d}Qj${+MRk@`9_TsD+mu!cGpO!Bb7WI$eL}YjaADZuhijbw6XK&fk z-Vr5PX1E$HNa!48(=vwrVFFgww(35}dY7(rrXFQ=@K}B3s`Ks1b}I=(uNwVk@?%GY zv<@!=_lG?UijUHZdy-yo8WJ@^^p&P>8em$_(BB~KjP^wCE!dy*0dl0t3e5w)5s2@j zXV15$aTe!7>uJQ%L#KVYe-V3{e~Wkni2x*xQJfFmOxl%OF82Y+*BHsYN3sFU%zr@a zHG1>!5&Ijdy+05)a}DVG=-s0TjcAPeY{w`zh1kfPh6{@SI4*|BQ$#?qAA1A-5od_x z8}v2s#nL|d_c4$eB)rUD;AB?p85C3u>@1Yg5}s6g`U{vc*!s27(e2Amr875oX7u#7G`_q2#CJ z7xXJlI}Ve~bdpb<>5uC4t|a`BO~33)d+$Aa?!D*kKmWe}3&2%aI!8uHhRUNqn28lkYT4tHT>QPGBZYOCgO}e6ONzszZIVWx8I)aJMT)ab`i6tX7vq-T{W=wh#+$?hnI zfi-EBU){56>(*vfP(g@UkkM!tv$mZ2>@9|4A>i?d!_wjEM^TE0?P)IEk1k;x5wXt;+eLY8Wty=_Z- zSCnL#;c~Pfp>vc?+YAnd30PIzs{0@tJ-X7JdX&}SOZ7ijo$E}tS4kN9)!a9epEx3< zeR3JNKj~pme4L)!lk|Ku=xToGD^1@ty|kX8zhT-L?TOqwu;1we4)F#O0Z1C-I2XE^v@5qWCNO+|Ag2Z z^yfb!_9s&Nzaehs8qg2WzfTbw(HQsHPEc$Lv9Wm#Un&0QaUn#WCIX86#9Q#cafV2~ z#Xtj}EgxX;07IE!!pr;tPG-fPK|#g9&Jqee8zIV|k3oja$YGB3-h{>x+7)??ppKdO hLx(&rg$@}qD~Dt*-@x%8`xL(Js4$t4U_>M^<3Ib_(L(?L literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4ee7f27bd87f4c185affe5e57b5cba99b6ddf3e1 GIT binary patch literal 2236 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 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPOATie.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..090f75e8cb197e68a6c7cba3c8d6aa818c9d6b12 GIT binary patch literal 2121 zcmb7F=}sC^6#g!tgE;Q3OYN#vL6mXpCe~I^D=k%{jY;DVGQuqxJI*!3X!WhSrlCpu z0DY*Y=Q7hW8VDG|x#6Dko$sud-+zAm0x*Zy5%l0;8@lmGipTBf#S86=8C{FvGp63+Ue3f}y*p7Z+@?CD9a$DQpT1oDwVl@K~9T--DAsOAT zP0!Qf=vY|Xa*|bpt)0}0wsmmG^G;Ic5Lr9R^W#dT6l^HSD0r#h6_v&2u76b?xx8Cf zhV?7a)$UG(xzi=6dRA;+66PsYbg>BzU(NkFQQ#+*8~9i=UZ@1^7XMI(^I$kL#hM#*8=iDqixQ`8=sRD(*`$hH(`WQbZ9`F^RZ}DNL(K zKvOXzVe?p^s$5<#hKbB-c99k}As4pJvM$ahW*EjAtTe5{8-s>pq_G`CtbtMWePGZU z*lz3j_j-|Qo5EQaCvxQ$nna{^%M#AEE%KZbY_3UI#yZtaqd*TDr90mwXvMU-UN}#= z5ndsuwWDL_9QWvz?g68hH$Wd60(!Zpx#T@-n&D9_W%| zmH9#m5#=0x=>;Gu8#qKQ3enji!x)~LE~6vl0m67dPOD~QMarM(d>icT+Wmr{+i3g+ DJ1_g+ literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBound.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBound.class new file mode 100644 index 0000000000000000000000000000000000000000..8ddc4dfb7349aec9d58971e63911cea1b174a724 GIT binary patch literal 495 zcma)3T}uK%6g_t}ciYxJOtZA4M>S%op27%Jf*zuxNa%5Jhh=NsS=Ke|XZ4~{&=2TG zMKdZsR1Xczz1+FyoXb7)`Stbz;1CrX%UH3oh*cA7Hd4sxux=r*bHT)hi6S9$;)i~6 zN=Q{}9YVS-T|p>RFCO?4X8{jAcALb0=rw8`6PpgUP;y`+ODO(?v<80QideUo9F(z5 zpj`($C=rfi>@nH%SX=flc~1$lX==+b5yRw~cOSVYSTl$Pcb{8w5W0l&oON~6YO=e& zh|h*y5hcD13CHv9|25A=5Q&&z_)0!st^M9pdBUSe=<)l1+3<@oTf0H95;-*s2e6d& z`WPVXhl-A>@{<~{>aUX>W*N}dH4p$ CYIh0% literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..92c553b14bf04af192cbeffcaf38cf6961397573 GIT binary patch literal 2256 zcmbVOZBr9h6n-vA*koBML=dEwg7^YSWwoePLTy8|f&{TZZIRk^lf6yXhTU{?W96sV zKhUq#c7Q3P)lZ%2kLvW?-8I>SIHP>oySe9_=RD_i^Y4Fuy#VkrEET6PqvA5ID7dO3 zf=^Uj!*vC-D!P$L(9N8JPvzwe74PG-1U)`ikd;5?BVAD04kqak*h`&pUP7%t+@730u!(OOjyKbL>q&`Mh2_{99^yL<)6g}1fKi5#1{JS=DY5mESms+r z>FYEmG<<{$3|hFQG!*bX!{x=B`B`fHX$g_*97#(n&R&|nsKC%r#03Q<4JN1vgRKmf zv#V8k5m9&sdATc z-c0LC@e!9p)!!iFC6OM~$g=PZ*Fr7!_DsE@Z9}E%k|%#Z6#M~@1Ho`E<4thFi&p2fb;|Uw3jr zl)N?3tOi9ZcgW$bve~5Uxgf?00$rDbkn+;yzCZMEB9P<4F@ZgR_D3B%jHX_qdlyPR{R)w%=t;jsXrFn3DWcNC(I>L_o41eFp6x3`L%!cWEE*?c-RokD&VhfJPEYoI#>Qz(xpwHdp{~ z%rhrJGWj|@T7`k|D(Oq!;{@&0X+H0MC`TG9&1h9#<2sBKD5kfqINlZyIEzOLESq*a<<{8u)w>*)3HihEpjSS?B(QSITzDXdYR|7UrWk<%K(5GL3!9HF@#r!13&2h9R_Dw##CVA(%*B zGALQ6NNn4QzUU-_nwR_x>m3xivx9x3>bQd6Sf+7gS3Pkq2v*6+j8Oi;Eeldj^i0Wl zqB}>;i>E53%p{WSn>J)F$S;e?=oo~qBaDcK1s#i6(y@#c9jk~j?DWyDL&qwbE<^N| z*SKMEYH{x7)+`8yy-Hs+HL^qWH`<7hH}wwoLJl;-!+to906joNhEwS`1X`F8 rM19PJj|r#Jbp$&gqZs=ONvB>Bs6%P7j3eelBpV|or4IF3UIX|63g-2n literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceed.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceed.class new file mode 100644 index 0000000000000000000000000000000000000000..f63c9cc56cdd2a2a18d19bdbd2ff429e943eb474 GIT binary patch literal 845 zcmb_aT~8B16g|@|-L@=HYHJm=P%5}AG#d?1Vn|?v@u5+Ik!XA%lXhrU+nLRFH2qsV zv^ARW1Nc$KJ5oymoAAQJ-a9*cJ~rpx%Rj#^0K9~oM;Qsozyd(U8 zOR4lxtXe{}8J4HC_s0kO{>Q$E4+kv~=}<|ASJSV_lS&kQE4q=08B!tXm)ymeM2;8h%!*tC`>ht>G*!XbQAOn4=RjaZ;L|U(e+Cor4!bL)95o?3y#K{DqS9@=N zg8c)1rL96%S#9;HYxPHUb)QK{CLvh@FLTbEefIwLeV>2-`{OSFZ{jBz=WtENJ9t;Z zhzu7-WrQ&%;kt|l-0;%LO$p=Ta6(2eZh7f5DIwy)l#FT2$Y{c>2e)O+iJx9X#b@4w z_k`3158jvY0TyN4!IFf#9(*XH9rq-}WSkbz)A-0sJ5>l+7Q48N1h^pF7iTLHK9-;{ z)W@uiG-qgw80JdQNUa3JGjpRO!Ff6j8wnm_Xc*RX&AP_m>g!)%aEoJFVurcQ(Aw8u z!Ab0bNz*gjv=}0N74#8(BUCyvGSg~G(^rD|C2Z&xU$TbI8R%ep)0VERd5wU3i{B`&|cKVPGa(HHf~Mv)G{|IedFtvgf#^haY-OQVo*$; zv0}#kn69QM=<5pJz<`3wxI!6GmV62}@Cn1kiLuBKRmp$=3RgF{JZpyr2hL0QRKaJs zBH?odU*JnBn{q{`M&_d9BN2w<6Z)E()DoR0Pa7G{GR%!mEkP>z@tEO4k*hj#)v^)( z`AWeQz81T06x_zQ624RLJsv9v;Ro^g@vw2^$+Ylob16DA%d1?}XG>98I~Mezk`M{R zaMh8k2e8C$02N{>O9(38Y-0IZ61Bz9>%g!TD3)F6mMzd%=qP2}J$s728auU5idL4; zE*-9}D6QjE{uYmEq8G$6b~6ylJNiMn_Rglk&{K4Bbw7?5;xpE_w?mawwh@Y5t>TQpwL%Ax){73T$&#XP!MGtHcVazwLwoM>Ehl^js>&iMY& z9KLjlqJf@D8#>o5g6rPTr8700>l`W6MePw(bniq>C7o<9eFNADcWZyLUT#bOg1d{J zQ0M4@#vqGnK|3$)X_nFVb^2?emC;)7-v;}YHlT|%4+`XFn+UjbsN1xuUIcNzKs^aJ z>gcq|zXR7|U>oi&)aQkGF-VWXJVu08an0|4frcmO@IObx7Nkhv1zbgf}BI+CUHpgfa|igeT#TKaCMAIxFGbWQC5%~rCUP#YrjGH2bb&rMAM|-wS%Tb z-zzyBVcTeq`rY<_OAbE!KZm0^9P_mj)bZb;5T`JVL7=$6h6sR0VFBQXEuILz6T9Zq z;4Khu(0yUoAc<-tnOivdGn#hLzUX^(8>jx>!Rf_qbVLIF9A0~dPO)}9LwBGI@B{&d sFkFy%mLv+9ZFH9ep795sqBDoHV(reMC+}Sk-Y$zEF`%B2HF+}r2Sd3$tN;K2 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b94fbcb9039a5a5e35abb64fc8e37c1f71448a8b GIT binary patch literal 940 zcmbVKTT22#6#m9sH*LG$?S6qwAC`Iu$_UDrg2<@oDUwkKvDO{g#xDP=ph$Y?2lS(& zGwW6w_>e4nX7`-$eBYeQ$LHHSfORa#U}7|i2*zR<$AmVM+QdyvnV2>)!(iNUrzRLS z4y9MJWu;_i607G7 z;fyR2-DaXQK22fdJi&_$D@`2Plf7NLDm}&Xj<65hYE7Lgf>qKwBa*xG%8FzYZBw!} z)tY1E)I*h0;)&JYtNJo$T))JB?^jR;fJra*hZbY?oKs@Q`MT`Mq4l1_Nb+;zfJkyJ{Z9$F5AkqjG{9c zf7A5*utw``f}xvUrbk7qZ_pP_j%+Xe4f+xCCSSpx$N@jx7lg+Uq6diSa5D9R&^M+Z r0|90S%|r@#nOf`X_h5_%lmVVPQImvs~WRxcU_{eXT{ zG^^r6_RzrG%bj!1<=!)2-|wFQ8mQP<#hQ&}tee=dkwPvBn-=m(E|}OdQ6yweq>}L| zAyut)26n|4%FVc5Kl)x(v%Gf2) zzJooK2#p}}SkUuWJLq5Yo^HsdsU4_T4C7ngedeBEmukR$>1s@mQJ#x#?pkN;p)aEI zVONB)3>4vbj{dvlh44cW5e(@P^3~enmf8^>hC*rl@Glb<6tkt91S<}vR^bSiHaT ABme*a literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fd5e40a22a18597100cf27152aa3d605f89f6d4a GIT binary patch literal 2245 zcmbVOZC4XV6n=)hOtLH$A_!7TL8=W&B`Q`ep|&B~f(B7QTfjEmB-3-ipe$2#ZdOJQ zMd!;)k6B_Eq!W*gCq}AbP!OxqrdTNape+otZgi@wS+-Op6j`ky>9{bq(#Mn?`qefi z-Nd7Jk}Nl5i{-dEkIWS-P66on5aS%HI@U1BaJ^YDN6z(vRVfKu;XL4YsN)-a%g`_C zDQT9xx})mQv5pNLn|Q=PUFt2=L(9^feJ_(?e*C;6gM6E@|$mD1(H zW1*U9pee;kAU&vp)txh3^A*>TbvnJ;0ZJE3MDA3`yM?bBf#JN5!J%*VNb8gX81tIH z&HLP;4(;YnbB+c{gV?SdrwynMi`1!7vOBTa)jg_s=8--I-yYfZzmu#?H|9kU>+OO>a?pr>R5F3HmiaE2A}(*aQ26 zUO)$_!98=oV+4Zx=-F|sQGA4Rp7k_>=%L-d!~p{9$vp&j5pqGIIFFCLV>w#Yu|(nx z!p|_4c#ZHbcrN({foJGVzDD40M0S2hFqhbcwvXN&^5CR*!ciM1-v|O@^Bhx3e*#Gl zd4>ci^<#fR{|Cc?7wEgQkN5U*BGyk(1Ajp$ixSSDPy%411VFRP132NhlOYy+8y*co z&v=#2E8PG8#hi+H6$=c?J+~SL z!`89wly$pW)^qmV39p*9vfes!c1;+M;*{Uq^0J{H)hNR(QOw9P1b5AvDfSrr$s<`_vx9xTZaab(Eva8`h;u=(YF1_h3lEMdNHp0uCEpOe zIZ8o1)hQ*OOm!~m%3P3N){xaO3{67_VHJxSmawcLffWs_m}1!Zf3ps4t7JF~;}w3- zb&FGf^TmpBBN!6DY`vwns+3g^rf67osTgRr^r~-vdRp3P$ba@g@rH2SSEOeMgNV5M zCFh0>T4@ywL-aB^B3gHazGz}(N9Zr&M#!6f2YVq0-0-Luj=@I{5SHO|<_*3!W(?yV pChB2A=}Z&;E=U9ue<7LlD|}4^+ANcp@*t9pky4-u_yNA+^6dZs literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmpty.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmpty.class new file mode 100644 index 0000000000000000000000000000000000000000..f26cba7fee65c8c47307c3d993effd87166949f8 GIT binary patch literal 487 zcma)3T}uK%6g_t}ciYxJY|YY=9@U7UpeG|p5qb!VBB94Yhh@v%S=K4+XZ4~{&=2TG zMYAeCWDgC@x!k$uTsUXGzTZCq9HVSw6>Bz@v2J3+MhdwEHZ8bG&70UVQ6OYa{m@ru zgjA*4A*7qKCkXk<H5%P$V!JdrSr%Ysx{J2YMl!mZl7q7^-XDedL~CZK+y8q+ST6x#H@kan9}rB5n=4 zB2vB#2`BUE|Mp#oek5Xo;r9q`rMl=(XThULgnEAXm;D9B%x;}vDLD-ZN3e9{$uU4l y4jLWZxsx8SYHy%1jMoV#VPt2Fn*J3-zm{tsNZpT-*2EE(av2Q=`i@}Eb@%}U)N~F2 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7ad8cb46a345c0cc7e17869756c547ff2b1a6bd0 GIT binary patch literal 2212 zcmbVOZC4vb6n=)h>}FXkq);eUgwmIgSQhMyO0XJITCf3Hpsgut+$3Y%nq=c((o}pQ81?=jAVo?^9nwd#+w@6#b*(Ee6AoRe=NvHTE#61u&Cm;hC5i&u#7Jh z+*Og$FoYEas~SdRmNnc{a9_bXLntS>0ou9S@Q+WJDu*d%M(F7hNpc;2d7 z;wD2NHuaDpD9yCwY$wk!6r1Xbq;MHzRqNal40mE({#124**4krRkLDMOGa}^+f~7z ziF;<@2eZVDRa-1pYGOMn6D#C!%mQKFJ`U5zZVw;9U+q#%hg&#&~|QCl5fK~^pj%= zx`6C!Gpsd4JH=a-TAeSH-AmW;KE@Sn=-9+0!}XR(PFCV2yIkas1bLv~p^iuRlA)j1 z4Pg~Mp^+SPWbs(X7QSLQ-7e|kvjVRP%dYD98sF%chN0sZ!!*FJ~`qV62#c_w%?7AgvXM5Z#PRo;j$6&Ogj!)VxcLgOK-^<81E;ujOxI;B= zmvJrsgv+KGXpwM>Mh_CJykv%JJ}I4yq1%vMh;);brP=qnrog4(87}$Y-Q2BSXzy|X zqh5!1L|;78iN}T0B%=#xP`24ORy?V$KEtGmr9dHedaleoW$+u{6Bu{lv- z*oqyU4@WIqZMtp>znJ~=!FBp((D}~mY}LfajGEQ@&oLH%iSRCzOyU&+&(WKBiNNnrcYZ-I6W@ilkKP@MP>An@%Qi-_Dgt8*3Z^9g zI1(Q6RU#nSkG+8Y4~7GOqVMiL-r2{gXg@&>{05yok~o7z34o0f08J_n;FKFqj%f7o zcr@}n=MCB~c~213X~Nva;Lqqgz)&`NW)H)EA7CWAhqIYPM}lEWFoRhSV~`Leh8lMP VMw``9>F)j(`)rD~|5yTkpo04mY z-W(+_S~jIb1@HfS`&+4NF+o5W|XwRZKE$4=B^2WtI$wAynl} zuA7`>%@wLfQ82{5O7-^HZBe%T4?4rNC7rJ;=4D@Hdc^#e;?J{JTpdS5%MOV!5+wgPI%M}Pr*YE5R~C$>It4t%osv0 pCgNfO$y6KOACNG{e?wBqM|j%seO8&kqzjSN7%}cqHEUoCWm24mqA0Q^uKzL}1Dba*L(oEW+uC_Cq?V$Lx zd;p9l{s4cJ@eXZj0u3JzJnX%*v*(<9_uTvE@6X==R^g_R!=p4tF*SlTrcHQk<4GC` z%$P8n!ko$THlEtZGgx0geq(rDQBliRot9r#-74<{vgP+uSxGHU^gG`8%v-{*D!r|a zWwR!DSIKn-ClXy=$^?D{EgHt?#EglQEjp236f^Xe zy+8md?+4g9V&Cb`U?=ggkC-QfMR%D#!YiG^@?M@I{vVs|V_y+6PFUCbg~a|jk|cTt UJCmYNqUQ`FRKt)hZ+W1AeDAub zpJ4w$Uumn5RaRSl>RSC#UEOCAl1T`wftNXF&OUp8`@YXV|Nj0bfYI8%@ebY< zFebuF;v&v+=vjQ^qn*M9Ec0DLL=q||+~;R20v-s^ z7(8)nGov!JMGSK#WTaO@6La(9W1$5)oiLJWn4xh*(=}_9!PVQh$l&J3w8RZ_nW43} zuZok{Ig_SmRnua)-djZ<(>KHABO^Pjq&0mdR9Geq-BLHKTT0@gvZ97&4QtZK>B%q$ z7KmUf36eQkOQu7QI)yU$qZT2}D47LiIi*ra$gYAv+V|Pz@JNG}WH>=LR+Tj+lu}6j zsAZBBWVqW@6{6m$Rxx9k76%DU>zSNI*HtAQK8ntsbyKq_0I>rR=5kgU;z+LcjwDic z&?U$S3Rso!5d937OG#3ni>HiKQZ>1dlz_AZ9R@?QnhjZ6vY2R;4iYkWB*8?M;dt4l z*ESMr#?lO3f`y!fw=gWB7kv!vB{l3^C1>Um){L57R!z#%^#_{*)+AiUn;dzaK{C~> z6*un3btO$v-jMJb`XvnE3WIkq$0TgxV}^n0tC3-ZO7&*O=A%<%5r&h~`kIo`lAWfSF|wLvn46tik`$5gm?2c+stsCQ6Wk$R zN|?b{eD}44+xSMnw-Ua?V+mn=&p$sLA!ceS!~NJ?j>O#Zs>T2))R#djZ#x1q4 zs&h(rPO_bMrlu0=9?G7H>Rw^StpvkTE$njcP<(h}T&jYl<5JB!+hC=x4BaJ_4)h*F z6Ysg)=Y&*|xCL;UM(U%SlA`v~>QuIn*5SUpRp&*O`OLX@VBR^y=ZNuPqDRwWsO*+Q za!%E!nZxf+0GjRTjG?Q#MM`wnbLrdxfp88R>a_N7Dup6`pps6uLq7)!$#19ZjrtJ& z-@?8{cNe{}F47B*LF99Wc0StE0Hp7$^w&Zwqtzqtfc-)n&_$XgMRK!E1l)NvY}r&F zLKrAgPs5D{I`zxDaK(ZSz0=@9MY;E5lUN2l7;{q;m{b>jmB}eHN*M9U@NPlC<^9TGl zW!EnJvA|1t9Ai6Zj>>NPza@`={h!D2JWd2!3F_o;kcg8T#=ucrV8aAJL$nBR%ob0C zz^Og+X=E3PlXRckHAte`Nai+9{{;Uo+GBy2cW~yfU7U^Wpd%8L^LXVMI{Di54Bf#B wz*7Vm#z;}-d6LLww$WV@cuo#JMQ0x8`P!Ywg@Sjzc)KEk!~hQ?YYJri2V}iS?f?J) literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundHolder.class b/idl/CosNaming/.class/org/omg/CosNaming/NamingContextPackage/NotFoundHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7df727e1809d504053430a747c95df93d8778873 GIT binary patch literal 910 zcmbVKTT22_5dMz3ZrWDbJ-c5ZFAqymPexEe6huZv(UTl=5pCTg+tKP@6%{-31Th}Q1SXZ4QYNNjTE~ozSq81n?V81~ zb|~DUDJn%XBW{j(rQ{UN){zm8wC?0Fzq;l{%RCZtPt=@3njyGVa!PWW!5>eYGXyfC zK$SM)J(p71TF$k2fnl{RJ$tgdV^)PLdEU0n1E*S(r;=cmw8{wPZrze3#(3A1Y)y9N zXgPUbrIc7a@pH>2%^CSs18D>OFbsqc)-h*b9t#E*v1DKwqYRrp%Cs-+g5@$q%Dm1^ zo0F{BeA&8^42$2TI{R$3s9OF9on==QU7#iAMOS4y#Qc%s&$HJ&?Jv7BbZFl*Lvx|j ztguE4tb?JCUZ%!E%dOEDO^NIP{Y9G*@+M!v9?5}bc+d-v!$%JgR^epo8NM&f5F#FC o%)^9|sRsOQkSKiaX;Q&}Y2s6JC}T6&&S~01gTG{a zK)hfy@dNxQ<2us`sXp>B`@YxSYtPK@KR#}_qSj2{a_ix>!n(DQD)oJ+^)!&jG zBKSkaW*r>qSF-s|wgP`k=@;rS+TRIeUqw#{#7Vl*999`{Auu))q8C@Fy@Q~sO+iY) zH3h?nK&CM;iwUF?Z52yg+pfe6vTu8;(+DFi@VHnloqNyxt|o<-vin-@wK*)a9!8;l z$~i=>bIV>J$*Ql~17-`wQtdzvq~Dgj#CE(p$-0|I&7iA89@N2_Kz6;^PGGon-NQBH zJ&a?*L&1ovM$BW`!xW}H%wkU9;khntU={?%|6fXA;S6tkXXBaQRXuGO`qk&P%}9s( zy}(@D6{>{Dt|r&c85Jz@3v&5QjKSfa9`dv=m=}eM^vQGJf4IJXi@vk2n$dFmS{NFATR;$t6+ zV@3q7Q)Xb#T9yUd94f(^WT)wM%cmSU^A+L~J=3v>C1%V@g=A*7{0*7!a10`+@UfY> k$&a%XQ!R`=38v0Js2K#tB@I@gY7EaZyGB zmtW>CMYn1d7*fl&WBXSa64~4~ zgTTpj>8`iKFq6#A^wWZeY}NxXD44~2A~qFNFwaovfoDHOzv0%amd8zPiTF~%Hojt*v|5^P zS0fk_SQLDXy9&O+J%%IwB42xKT20?}9R=UwzJjw@RPYYoB@2C_uoDbQ!)~>xC%O}0 zcieG(-3+0|AoG{I^UyMV1#_5JkjDoMhX%o?;5+CHmr7U5OEe~nJmcct*$%;W>HOk3 z5#K8?up`1$P=&?wp~nLSHT-bk`dRg+_%?7ze|TPb^_1Qn#FTL-$RFJK51aFiN>MN*Z<;+c5Kkz3i1D779a} zuNuAXI<;U=ml!Vg)b`V52I+z4HmD#0R7$b9_G5;Y-^rf;!3xHA5e;9kyQ08_Y$>-b z%+c@b1pN?+$p@Og()3OHhR*ltHAOe0JE=Yc`-MJ0f;6`gdoo}GLKkDZ0XL14I2Cb^ zLBJSMC)7WYxSM|lp@U>-B#qNph{Vctb1_wYh165bsxOi1KrH89A@LOB`Ikui4r%vi z2xYYcxr^~#(hw=yxggpzq$?pYyDB2fZ0Liq~|sppuur6w|mDyon< zTv3ym$x0VfU1Tyx$nx}WP)LyH!N83sz;a}dHdJKqaA1uXnVHww(khIY({yuZ5}A6d ni??4(XgC*1%ut#<(X^WH;AjWO!dgf;KTvOyK$1}~Ashb!>BCSjK}JwQ6huZvZy`rLh&IlV>DcA33W}tMKA?|^ z_R%pj@F5vy&&=LyuXXliKEK{S0Bm6`0uvKqgfJPw6sEPA(Pq}foQZi83k=2`cWQ!R z`$T$0TULs8THc=WO35wS%|}|gN<64Dp1VONHXUK`*u}&isu|*AG_6>x=;kGq;y6od+(JL>BhUJ zWNNB2$H=P3Dy7WEH`-@y$Xt?NmyxnC0Lwxc5fh6RmauFgh7}8|7-vZJ)UqS#6okhR zE%Q5WJDeJw$(2Q3F~oidJF9ILstfN~R5(>F8f-T9x@(s@8ryEmKX=0Lr;+Wd(=m-6 zbsFoYXNXN&auW>wbTd6J`T-1jqv??yq_2@iguID2uxE0h5gzixlL*iSM07Zjd_|yz t8AjB{O!$~^B3Vb@FUSZ+|3Z?97X<1Ewphk6?n5*iBc)&+#*;n<@C|OT`pp0U literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/_BindingIteratorStub.class b/idl/CosNaming/.class/org/omg/CosNaming/_BindingIteratorStub.class new file mode 100644 index 0000000000000000000000000000000000000000..679d4d910ea81e8e3602ea35f9df1c2f68663daf GIT binary patch literal 2308 zcma)7U0WMP7(Ek`OcEDK0<=vjR@&Mo5D2KP3Ro=^OKboofVNoIO|qs7$!@yY1n{G^ ze)|)=@E>@g^=ahsc@(|rh5yOwJDacx38ELfv$O9z=bZOrX8wHq%WnXl#Ww+*!3%y2 z;YA-t0yMr9z$B*pn8wTE>v90E;8h>4h;b%>SzHZZ4zG#nHSwAcAc@yGu5+Zsd_kBO zh2xSRZ{STICVW^Hmb9>}_^=wlnm}2@TYkKa8$Mj*xaq?>$2%OiINoLO$g-9zGxV;f zHk7K8C@6Y9k+w`t&rdOUr!`%(E;DpRV`~iVStF;?P+!s?jUBqkr>onRZ0O{9E}AmT ze8MQ^6SGEnQ7IB^Vn)+*G|n4^oN7+RZZdSIEhW3Tpp;gWOhM(4Io{(?h~I|N8Di1o zzayozvgM%Jv1J%|PAyxevBTh-&KB%2B%H?u3Fq*Pge-C#s)YBE=eR9F!-j-S6o_0x z5k$!{5)70$?np3ECP`w{C0GKaf-1+Bgl!PR87Ii4<(VsqRee)8w)EAqYR+wE)sm$d zgg1E5DZNv+)S_dT@Bu!Q@DV|5tR%aBnj5dzsOON>J35a8tZbC18(xYJQ1o4LTF1iQ~xHTN^s=>Vw--YJ^yfyF| zeDScqhQQ+JE}p1Cir3Ih&yzLuOu8fPM>r92|AFAQ2t?e!BRJ_1Luij&!Zq|>@{G{B zzK7`V_k3?l8l`s+T#qr!F~*VL826Bh3A)(pfqX|=eB`7LhmVmK!Q0d_8a`gb2|+wi zLu533l9UmpXBRY=MoAkzwl;6XE3|nV+Pp#=kI)d>BNtm6kBfz;9%8VcH^mLY^*7Ss z9M3V1=l4|#p_E+`dC|%FHMrm=sj=bkQzSJtLj3dy{)PA>^u=v*U!1rX=@r@&bzu-G kkl^|YXKnCtH^qC&0gc#@K)3r>oW9W&emeaVT=jzDAHC&Hj{pDw literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.class/org/omg/CosNaming/_NamingContextExtStub.class b/idl/CosNaming/.class/org/omg/CosNaming/_NamingContextExtStub.class new file mode 100644 index 0000000000000000000000000000000000000000..876d41cdc2e6a1c5710e0fa6c15fd614c50d4155 GIT binary patch literal 8368 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 literal 0 HcmV?d00001 diff --git a/idl/CosNaming/.cvsignore b/idl/CosNaming/.cvsignore new file mode 100644 index 0000000..9890ac7 --- /dev/null +++ b/idl/CosNaming/.cvsignore @@ -0,0 +1,2 @@ +.class +.java diff --git a/idl/CosNaming/.java/org/omg/CosNaming/Binding.java b/idl/CosNaming/.java/org/omg/CosNaming/Binding.java new file mode 100644 index 0000000..9ca354b --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/Binding.java @@ -0,0 +1,24 @@ +// +// Binding.java (struct) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +public class Binding + implements org.omg.CORBA.portable.IDLEntity { + + public org.omg.CosNaming.NameComponent[] binding_name; + public org.omg.CosNaming.BindingType binding_type; + + public Binding() { + } + + public Binding(org.omg.CosNaming.NameComponent[] binding_name, org.omg.CosNaming.BindingType binding_type) { + this.binding_name = binding_name; + this.binding_type = binding_type; + } + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingHelper.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingHelper.java new file mode 100644 index 0000000..5958a5d --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingHelper.java @@ -0,0 +1,61 @@ +// +// BindingHelper.java (helper) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +abstract public class BindingHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, Binding value) { + any.insert_Streamable(new BindingHolder(value)); + }; + + public static Binding extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof BindingHolder){ + return ((BindingHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[2]; + members[0] = new org.omg.CORBA.StructMember("binding_name", org.omg.CosNaming.NameHelper.type(), null); + members[1] = new org.omg.CORBA.StructMember("binding_type", org.omg.CosNaming.BindingTypeHelper.type(), null); + _type = _orb().create_struct_tc(id(), "Binding", members); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CosNaming/Binding:1.0"; + }; + + public static Binding read(org.omg.CORBA.portable.InputStream is) { + Binding result = new Binding(); + result.binding_name = org.omg.CosNaming.NameHelper.read(is); + result.binding_type = org.omg.CosNaming.BindingTypeHelper.read(is); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, Binding val) { + org.omg.CosNaming.NameHelper.write(os,val.binding_name); + org.omg.CosNaming.BindingTypeHelper.write(os,val.binding_type); + }; + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingHolder.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingHolder.java new file mode 100644 index 0000000..00ee57e --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingHolder.java @@ -0,0 +1,33 @@ +// +// BindingHolder.java (holder) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +final public class BindingHolder + implements org.omg.CORBA.portable.Streamable { + + public Binding value; + public BindingHolder() { + } + + public BindingHolder(Binding initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.CosNaming.BindingHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.CosNaming.BindingHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CosNaming.BindingHelper.type(); + }; + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIterator.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIterator.java new file mode 100644 index 0000000..1875295 --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIterator.java @@ -0,0 +1,15 @@ +// +// BindingIterator.java (interface) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +public interface BindingIterator + extends BindingIteratorOperations, + org.omg.CORBA.Object, + org.omg.CORBA.portable.IDLEntity { + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHelper.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHelper.java new file mode 100644 index 0000000..e485e42 --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHelper.java @@ -0,0 +1,76 @@ +// +// BindingIteratorHelper.java (helper) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +abstract public class BindingIteratorHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().create_interface_tc(id(), "BindingIterator"); + } + return _type; + } + + public static String id() { + return "IDL:omg.org/CosNaming/BindingIterator:1.0"; + }; + + public static void insert(org.omg.CORBA.Any any, BindingIterator value) { + any.insert_Object((org.omg.CORBA.Object)value, type()); + }; + + public static BindingIterator extract(org.omg.CORBA.Any any) { + org.omg.CORBA.Object obj = any.extract_Object(); + BindingIterator value = narrow(obj); + return value; + }; + + public static BindingIterator read(org.omg.CORBA.portable.InputStream is) { + return narrow(is.read_Object(), true); + } + + public static void write(org.omg.CORBA.portable.OutputStream os, BindingIterator val) { + if (!(os instanceof org.omg.CORBA_2_3.portable.OutputStream)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + if (val != null && !(val instanceof org.omg.CORBA.portable.ObjectImpl)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + os.write_Object((org.omg.CORBA.Object)val); + } + + public static BindingIterator narrow(org.omg.CORBA.Object obj) { + return narrow(obj, false); + } + + public static BindingIterator unchecked_narrow(org.omg.CORBA.Object obj) { + return narrow(obj, true); + } + + private static BindingIterator narrow(org.omg.CORBA.Object obj, boolean is_a) { + if (obj == null) { + return null; + } + if (obj instanceof BindingIterator) { + return (BindingIterator)obj; + } + if (is_a || obj._is_a(id())) { + _BindingIteratorStub result = (_BindingIteratorStub)new _BindingIteratorStub(); + ((org.omg.CORBA.portable.ObjectImpl) result)._set_delegate + (((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate()); + return (BindingIterator)result; + } + throw new org.omg.CORBA.BAD_PARAM(); + } + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHolder.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHolder.java new file mode 100644 index 0000000..c30b7f7 --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorHolder.java @@ -0,0 +1,33 @@ +// +// BindingIteratorHolder.java (holder) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +final public class BindingIteratorHolder + implements org.omg.CORBA.portable.Streamable { + + public BindingIterator value; + public BindingIteratorHolder() { + } + + public BindingIteratorHolder(BindingIterator initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.CosNaming.BindingIteratorHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.CosNaming.BindingIteratorHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CosNaming.BindingIteratorHelper.type(); + }; + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorOperations.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorOperations.java new file mode 100644 index 0000000..a79fd18 --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorOperations.java @@ -0,0 +1,19 @@ +// +// BindingIterator.java (interfaceOperations) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +public interface BindingIteratorOperations { + + boolean next_one(org.omg.CosNaming.BindingHolder b); + + boolean next_n(int how_many, org.omg.CosNaming.BindingListHolder bl); + + void destroy(); + + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOA.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOA.java new file mode 100644 index 0000000..4e11b3e --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOA.java @@ -0,0 +1,85 @@ +// +// BindingIteratorPOA.java (skeleton) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +abstract public class BindingIteratorPOA + extends org.omg.PortableServer.DynamicImplementation + implements BindingIteratorOperations { + + public BindingIterator _this() { + return BindingIteratorHelper.narrow(super._this_object()); + }; + + public BindingIterator _this(org.omg.CORBA.ORB orb) { + return BindingIteratorHelper.narrow(super._this_object(orb)); + }; + + public java.lang.String[] _all_interfaces(org.omg.PortableServer.POA poa, byte[] objectID) { + return __ids; + }; + + private static java.lang.String[] __ids = { + "IDL:omg.org/CosNaming/BindingIterator:1.0" + }; + + private static java.util.Dictionary _methods = new java.util.Hashtable(); + static { + _methods.put("next_one", new Integer(0)); + _methods.put("next_n", new Integer(1)); + _methods.put("destroy", new Integer(2)); + } + + public void invoke(org.omg.CORBA.ServerRequest _request) { + java.lang.Object _method = _methods.get(_request.operation()); + if (_method == null) { + throw new org.omg.CORBA.BAD_OPERATION(_request.operation()); + } + int _method_id = ((java.lang.Integer)_method).intValue(); + switch(_method_id) { + case 0: { + org.omg.CORBA.NVList _params = _orb().create_list(1); + org.omg.CORBA.Any $b = _orb().create_any(); + $b.type(org.omg.CosNaming.BindingHelper.type()); + _params.add_value("b", $b, org.omg.CORBA.ARG_OUT.value); + _request.arguments(_params); + org.omg.CosNaming.BindingHolder b = new org.omg.CosNaming.BindingHolder(); + boolean _result = this.next_one(b); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_boolean(_result); + _request.set_result(_resultAny); + org.omg.CosNaming.BindingHelper.insert($b,b.value); + return; + } + case 1: { + org.omg.CORBA.NVList _params = _orb().create_list(2); + org.omg.CORBA.Any $how_many = _orb().create_any(); + $how_many.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulong)); + _params.add_value("how_many", $how_many, org.omg.CORBA.ARG_IN.value); + org.omg.CORBA.Any $bl = _orb().create_any(); + $bl.type(org.omg.CosNaming.BindingListHelper.type()); + _params.add_value("bl", $bl, org.omg.CORBA.ARG_OUT.value); + _request.arguments(_params); + int how_many; + how_many = $how_many.extract_ulong(); + org.omg.CosNaming.BindingListHolder bl = new org.omg.CosNaming.BindingListHolder(); + boolean _result = this.next_n(how_many, bl); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_boolean(_result); + _request.set_result(_resultAny); + org.omg.CosNaming.BindingListHelper.insert($bl,bl.value); + return; + } + case 2: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + this.destroy(); + return; + } + } + } +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOATie.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOATie.java new file mode 100644 index 0000000..d49e80c --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingIteratorPOATie.java @@ -0,0 +1,49 @@ +// +// BindingIteratorPOATie.java (tie) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +public class BindingIteratorPOATie + extends BindingIteratorPOA + implements BindingIteratorOperations { + + private BindingIteratorOperations _delegate; + public BindingIteratorPOATie(BindingIteratorOperations delegate) { + this._delegate = delegate; + }; + + public BindingIteratorOperations _delegate() { + return this._delegate; + }; + + public java.lang.String[] _all_interfaces(org.omg.PortableServer.POA poa, byte[] objectID) { + return __ids; + }; + + private static java.lang.String[] __ids = { + "IDL:omg.org/CosNaming/BindingIterator:1.0" }; + + public boolean next_one(org.omg.CosNaming.BindingHolder b) { + return this._delegate.next_one( + b + ); + }; + + public boolean next_n(int how_many, org.omg.CosNaming.BindingListHolder bl) { + return this._delegate.next_n( + how_many, + bl + ); + }; + + public void destroy() { + this._delegate.destroy( + ); + }; + + +} diff --git a/idl/CosNaming/.java/org/omg/CosNaming/BindingListHelper.java b/idl/CosNaming/.java/org/omg/CosNaming/BindingListHelper.java new file mode 100644 index 0000000..e494699 --- /dev/null +++ b/idl/CosNaming/.java/org/omg/CosNaming/BindingListHelper.java @@ -0,0 +1,64 @@ +// +// BindingListHelper.java (helper) +// +// File generated: Thu May 19 07:31:39 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CosNaming; + +abstract public class BindingListHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, org.omg.CosNaming.Binding[] value) { + any.insert_Streamable(new BindingListHolder(value)); + }; + + public static org.omg.CosNaming.Binding[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof BindingListHolder){ + return ((BindingListHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = _orb().create_sequence_tc(0 , org.omg.CosNaming.BindingHelper.type()); + _type = _orb().create_alias_tc(id(), "BindingList", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CosNaming/BindingList:1.0"; + }; + + public static org.omg.CosNaming.Binding[] read(org.omg.CORBA.portable.InputStream is) { + org.omg.CosNaming.Binding[] result; + int length0 = is.read_ulong(); + result = new org.omg.CosNaming.Binding[length0]; + for (int i0=0; i0 Name; + + enum BindingType { nobject, ncontext }; + + struct Binding { + Name binding_name; + BindingType binding_type; + }; + + // Note: In struct Binding, binding_name is incorrectly defined + // as a Name instead of a NameComponent. This definition is + // unchanged for compatibility reasons. + + typedef sequence BindingList; + + interface BindingIterator; + + interface NamingContext { + enum NotFoundReason { missing_node, not_context, not_object }; + + exception NotFound { + NotFoundReason why; + Name rest_of_name; + }; + + exception CannotProceed { + NamingContext cxt; + Name rest_of_name; + }; + + exception InvalidName{}; + exception AlreadyBound {}; + exception NotEmpty{}; + + void bind(in Name n, in Object obj) + raises( NotFound, CannotProceed, InvalidName, AlreadyBound ); + + void rebind(in Name n, in Object obj) + raises(NotFound, CannotProceed, InvalidName); + + void bind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName, AlreadyBound); + + void rebind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName); + + Object resolve (in Name n) raises(NotFound, CannotProceed, InvalidName); + + void unbind(in Name n) raises(NotFound, CannotProceed, InvalidName); + + NamingContext new_context(); + + NamingContext bind_new_context(in Name n) + raises( NotFound, AlreadyBound, CannotProceed, InvalidName ); + + void destroy() raises(NotEmpty); + + void list( in unsigned long how_many, out BindingList bl, out BindingIterator bi ); + + }; + + interface BindingIterator { + + boolean next_one(out Binding b); + + boolean next_n(in unsigned long how_many, out BindingList bl); + + void destroy(); + + }; + + interface NamingContextExt: NamingContext { + + typedef string StringName; + typedef string Address; + typedef string URLString; + + StringName to_string(in Name n) raises(InvalidName); + + Name to_name(in StringName sn) raises(InvalidName); + + exception InvalidAddress {}; + + URLString to_url(in Address addr, in StringName sn) + raises(InvalidAddress, InvalidName); + + Object resolve_str(in StringName sn) + raises( NotFound, CannotProceed, InvalidName); + }; + +}; + +#endif // _COSNAMING_IDL_ diff --git a/idl/CosNaming/.svn/text-base/build.xml.svn-base b/idl/CosNaming/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..92b9ba8 --- /dev/null +++ b/idl/CosNaming/.svn/text-base/build.xml.svn-base @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/CosNaming/CosNaming.idl b/idl/CosNaming/CosNaming.idl new file mode 100644 index 0000000..2cdb8f7 --- /dev/null +++ b/idl/CosNaming/CosNaming.idl @@ -0,0 +1,108 @@ +// File: CosNaming.idl + +#ifndef _COSNAMING_IDL_ +#define _COSNAMING_IDL_ + +#pragma prefix "omg.org" + +module CosNaming { + typedef string Istring; + + struct NameComponent { + Istring id; + Istring kind; + }; + + typedef sequence Name; + + enum BindingType { nobject, ncontext }; + + struct Binding { + Name binding_name; + BindingType binding_type; + }; + + // Note: In struct Binding, binding_name is incorrectly defined + // as a Name instead of a NameComponent. This definition is + // unchanged for compatibility reasons. + + typedef sequence BindingList; + + interface BindingIterator; + + interface NamingContext { + enum NotFoundReason { missing_node, not_context, not_object }; + + exception NotFound { + NotFoundReason why; + Name rest_of_name; + }; + + exception CannotProceed { + NamingContext cxt; + Name rest_of_name; + }; + + exception InvalidName{}; + exception AlreadyBound {}; + exception NotEmpty{}; + + void bind(in Name n, in Object obj) + raises( NotFound, CannotProceed, InvalidName, AlreadyBound ); + + void rebind(in Name n, in Object obj) + raises(NotFound, CannotProceed, InvalidName); + + void bind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName, AlreadyBound); + + void rebind_context(in Name n, in NamingContext nc) + raises(NotFound, CannotProceed, InvalidName); + + Object resolve (in Name n) raises(NotFound, CannotProceed, InvalidName); + + void unbind(in Name n) raises(NotFound, CannotProceed, InvalidName); + + NamingContext new_context(); + + NamingContext bind_new_context(in Name n) + raises( NotFound, AlreadyBound, CannotProceed, InvalidName ); + + void destroy() raises(NotEmpty); + + void list( in unsigned long how_many, out BindingList bl, out BindingIterator bi ); + + }; + + interface BindingIterator { + + boolean next_one(out Binding b); + + boolean next_n(in unsigned long how_many, out BindingList bl); + + void destroy(); + + }; + + interface NamingContextExt: NamingContext { + + typedef string StringName; + typedef string Address; + typedef string URLString; + + StringName to_string(in Name n) raises(InvalidName); + + Name to_name(in StringName sn) raises(InvalidName); + + exception InvalidAddress {}; + + URLString to_url(in Address addr, in StringName sn) + raises(InvalidAddress, InvalidName); + + Object resolve_str(in StringName sn) + raises( NotFound, CannotProceed, InvalidName); + }; + +}; + +#endif // _COSNAMING_IDL_ diff --git a/idl/CosNaming/build.xml b/idl/CosNaming/build.xml new file mode 100644 index 0000000..0730ca3 --- /dev/null +++ b/idl/CosNaming/build.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..03a2cd213ae847ffae88d6248887d2e5a6c08ee4 GIT binary patch literal 2121 zcma)7U31%15Ixs&EL%~CL6yki4k3vmc0(A(K0z$EcQDV!kEQjX3 zf1F%K6Qp)1FsBI*el7kBRd@)tSj%`J@@R{-K#%d{B{Ij7BvYMa8<(F zct^y$5(He6a2oH4cwa&Ya}ly+M9g#Jf`s!}jL>6=zkLwFGFEu#Du1kT+x0L$D7%}E6eFkvaVK(dWIo1 zZz2)+Bz*hJ=6>c*4;#l8^?SCZ6(}s( zD=gV7j$t5gYlYpLT5VI?F6$%{v2(LJ-^H#YuYgfx7$J`xZBI*=HM5k?+m>OLha?z&dV^rR)?7ODHAW!NOv{E0Xl4Z980D?Khtc)n0}Y9M0_ z7e(Y{Y+{1pVyk9r`=(Yg3M6fsetG@wjcU25TipF~8C&>*A*$EYwo&xTOI|X*#BCX0 zah}6%39jEO=r!A@nlkR-YZ-50T1FhBGR83>;u{&?LY46yG#T3{$VlN$Dz|&Aj3OxA z@$6b|j(TaD^XuX^cV&7;#P>2v_<>=lm4n-N4lx5eB6ekzQITPy`pQi8a!t1=zjg{6 z+dDe%p^;vCcAZH5O7-UQGMq{D3gIOfa{F0zOU_$>Vd})Hw!JbuIOetWvFOWPz4@}a zI>M=k_OxsdNlm%wu2I?>2O^;No0OWc{bMuANsv4SG;o z+0g0^pRGjq4EM136!;%UO&kyDB`t%*?+Ue1u9_w1j?B`)IwnWg?hBGyoMfFm0lM=- zVCZ))kQR6_k>%|aagA=-{H5UN$*tfxeFiSjw}t5O>7};_z0>VM&r9@gh*m~xpYj;& zXL_#w&*S+0y2qHk%0p)iHw^NT1Y@*KviQqD(JhvRJ+)YuQ zA@l%a%2R}z5Ob+#5FVgE^%TOd2p>E|FsC#j9isn$B1B?4?y!A>V#5%|RzxH?|0EO- zd5H*c_R1s3&oOz30fC4WGk(RD8CHbN2&;^e30mB^p8CAA|`cMk>r6s~q{D Kk5Oi>==cu-Yzc?} literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/AnySeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..02d35d8ebaa411905821167b3b160562d4a84d96 GIT binary patch literal 781 zcmaKq%TB^T6o&tSmI4+96%cQT*IE{hF2$I5S!iNHBF2piQlKG_(qdCEyp<*ziHSad z4`n<9#Q=hfo=zv!l z_Gc&=Va!O_kdeWrj4f=-*g>2jJwPuymfon9NdT8nFdi;#vtl?5(YoH&HB+~$TE0{_ z$}U4@kkps!vQw@wro8+F%dm4|Y78%hvsYve+bF(<0OA`b` zh#tm;(VY@$MNTQs(pL&TS^*LD4NUca!1oIOGi{)U&3RaYFdyxOdsudei6Z7PagPb9 k*)D`3WF8CSNLGD;zYB42(jwv>5~Vk9Na!N)#M=OV0NqNm=>Px# literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAny.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAny.class new file mode 100644 index 0000000000000000000000000000000000000000..b497892973e01737b9a84e62584d016e724b1508 GIT binary patch literal 196 zcmX^0Z`VEs1_mPrZgvJXb_RBK1`c)xPId+^Mh40JqICWI+;n}H%Dlwf%w)&BN)QuB zF)|2bC6*=X=OpH(>-#5Vr6!j!GAQFz?q85vlvt9PpI6MtAOln7>>uRhsPB`XoS5U8 zSCU$kmYAH%$e@5KU65Z?l9-f}s_*IIDv literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..146691dc102de52e1bcec9df27c25a71a3dd47fc GIT binary patch literal 1962 zcma)6*-{fx5Ir~BB*P#{Sd6&h0$~CSiwhEr22cS(5D-gWriNj}NHR%{gUF}oSD;o! zN~=^}w91dN?3+w>Qs(6@y`1j8efs|S`}I43aXb^zgHaJ<7!RNu6Cy3w`EtXLn_PU$ zk4b*NEn*6BzD)D$9T5rK<)?cBk^*K#1TiXLR>U0c3wR*lp@4Y?uWBFU42H;3*4k0B znH^;#|yKTf7eA6j2WhWTi(ZNjy4;Ry>X00uT?&x5hC%Kc8rwH5IpsoUL zU$-@VcUjAAXj^H5bfvZ#y2#_T_EuBUnz^H_+g8fl;Yp;-H-=?1Oh)VCCC!6)Su}TG zYMGQyGKG$`J1q>m-m$Ax%-JF3Zp;%lUeMT-LIA70QB{+p{Tc zL(9ZlLiFxiDVwTaYzn!uXIC&=E7fOemX+OSn5suz*?Mj0c5A5x_e}kjq3;^oY6&mi z1n)&lwfd*^bb(9~&Y)Mof`mn!mv9;p3Fr8!50@F*YkDW)5tbOD3v)|TM9>jV)Mg!; z8XFmvZ~+$uEK7Kd6$z_&A|Zw$0c#T0iS}T= zxy;a4tEu=G-gqICOAFYL@DxP8OC{T8sWbHd&t%?6=M0M>SQ(IFI~hVH-{Sbv5E57U zQ!{kxL`K_CQ>JZLFE!mzZJi+zZ5*>kNu{d|-$GqPnl)-%aZ1%vR%1=rQYLX7DxcC* z&XkrxA`O3t!(oQYwN;lJP&I@MZG2?QXjhuJ)b?B|3}xBrOp`hWH$8py$M(=)%^-3b z(@CN;v76SjbPLhWX!purz&_FeWJpwZ)WL!h@EpN)SkMMIeI4yE+yzo@Qj;gWe(}Zd5AciLVgLXD literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7f4888e134c2c31673f4c64b749de3e62b1a61d5 GIT binary patch literal 820 zcma)4ZA-#X6n?Hcm$phvt?X5M)A?c4S0gYZECQjTuQGLrGB+7l!+%v!Bz@=y^rND4 zby^B$jGf(`^E~I}x##oi{R6-W_JfcS4Zx3B5UW@dW?h)Lj13u^GPW3`j&8OMhUAUy z)HJ(U(=NJ}-mF)0R#zP9bE#Lj?R2vY{?ocu=VuJwRQiFzm$$1#JxI;w3b<5q486*5 z^n=eAZ_jgD%XYY4HVy5{YPIUu!ji4;VdBvwpleChEPNA=$ffpHLX}~7!}Tt7;+~D z8_XnT{7-(vY>E87fn0^DvyaI&8upL-lUzBkr=}c}b9T!976`p@Olu~CVUAuVq@@*< z=tN4BU7){kKSEyh4eXg5=!X~Ga10)LfS?GgnOAs*m?eZ|4@@Mty8W=mkLt6f6khLs`=hQrbk)AmpzUynvwi z>_>?cYeB>=yEC&h=giKYkI$Dk07uwWk;R4rJ&RHf3d$-f*i?{Lu%%#IL6splijy06 zZD^9q#GR}ospClD5ejS yEzoTbGDU#icm``ouMjRpT^v3_x~D9twvOTtwnje178(zbo*=&?L;H?0w7vit>u9q8 literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..34f9e3c0ed6b6f555bea82c0f7fb3a82f4472cd6 GIT binary patch literal 789 zcmb7COHaZ;5dOA2Dy5?M0AC!um13+h@dPme)Wn1YV~E#gQ`V*tT2gwj|4I{$(Stw0 zA7z|H3{fMnO;psA5CKCPT*Vik@(JBpCKu zLFigR-?dI+pZ7hd?#EIkamJk}2;=rZggo*Be^_Nm*F4{gju|Xt9>?+(L$VokDdE0R zp2w3R=Y)c&+TGZ$;-bY!rtL&buM9UY6v>BwV+!I;(KR^aen$D{U?{{?OEAz^E?uov99 z;jXaGeTT;94I|-4UzIQ<3^^8aR*=d3u}k}uru|}2WR;{PNzXu|J4>$u{VOCj^9jtX zJVLprm&B{k$Cx}xMt>>u0m|LjOsyhE8KO82k(K7kGZG3uK}%$m*_P>0Q~!V`f5Y(s D^PbFt literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..d81905d668e450d518db3e986f5c5ca3a06885ba GIT binary patch literal 365 zcmah_K}rKb5Uh?dt5L)ccvmkI1W$U2Q6V6#i1(p0X_t-e%rY6o`I-kG;G@KjkYMzX zQ+HL-UDf^h_5K0i4EqIk3-k#GE(#~H)9fw#Oc)&Bg;<%;RAy8@Tn)|8=ZljScbz>q zwNuh)yU+;zn>QzIs)L^w*drXR@3c=bG&bc{tP4{iod30WRBfcv2A|Vquzw+L*`*M3 z*-GS}9E8Iezp{B@Uzu_;6PE~=o96G?J#!^y?490H&y)DH%+@0iI{G}I(lE$J>P4fVAJC7A zX8q_Pdum|rojd28%gni-UvD1(4p6eOj1?P;ST(U`BY{jD)-7b?oHMauB2SQNaKY6f zL84Oa5G32O%LsCn^LzS4-5wRbd#yq){Cc%xV$;DE3Jz?f3G%-wtw-MLvM`3192Bul zK*|nwP#|c?(066ucaI`L``l}aC_d_RLOmtJ=#qL5)MxIQ@T3^3JFYwp4pZ;%QYaKFLa{X@mb6x@5{d?B1skLitWwlCnViO{VJ1#aYWXSk z5BQ4J1uR)=`{Y{wD3|-pOftEE5AZT)viI40fBW`L{`vR!KLNZAQ^h6RRPhepRd7p1 z2=A$QA0H@~QxQcrPLg>Ax214F#jE%*PLGci`1XBf-dP9fIHpyhl7t)^Zz#m0X_T!m9N|ubSmahu7@7DVJl?EYHf4JYtw{TAhU8{}xF>MZ>QjTFEu3waXoL--0Kto<cYyWDNb10A)VJhaKZWU2sKF{zF5r z*5y~F4VpJh*_nr3a?i@`+w=+H+bNDgb1BgW5T2rM<|X?0GN_Ui=q*m~L|ycpqF+OF zGCCuv1F&D{1$2?P!B-EuN+5iQzCBkP#~ZlfYcC>L+u@)3y3g6>#6Y{9EO7y literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..71220374b916773507bf48b5ab42762f4b377b88 GIT binary patch literal 988 zcmbtT%TB^T6g>l!3RVRLd_PbV5f+VZF(jZdnwVhJxFth7l45B|88rNrCK`zgKfsSN z&OkviVIygJJDq#(IrlO1`Stz*;1Ih}s7OW-MkBQi36uwFw;4g< z!u4vp+o}i2qTX~pPOG*|soCb&T)-N684<2LdKMS* znXw_|HXn^qDqIvpu#(vyrrehq7O7zxnuZ9XDmFB1VoO6B+ZuL|ASg}Jz%$o2nMV+- z(+8^C)T!y^YMmLJAU)vyQ*^&xS^uQk%x+5UP`}OQ*q)8FdDx_Xo)^U*(cM_Nkr7QM z*E^ANzBmxqK?T8-c!?aPxGIWRiOC8(BmUw&kJ!z=fjo;1^xU()JB5IFfT(n5bFT;t tFms6cn52)1WOH2ve?j7y{|m`wUl8abG+`|-uYwN*R7xtOfKNcQfC>tNfI9jm6GFsdNjov9{1p8as56z( z8I>`Eqmb?w+$}@7>Lxzu$fU7{fCWok)oo#aIL#7#C@|!k4RIT;t~J zVcg*7n<6GK$(Jd9yd`29xB2dlfV6-a5mBTB%!-)9T>)J+^D1DhthIT@1Yi~6rtC?HMnr&swEiNKszA-GDVKh;fFKzBkmQ8be zrnZyO$)?bjySQY*cyC*pPUzHe=t>1%I8|a98tF>cBl9`S=DL*yGrwz-P($09{6AIj zot3ev(AkDu%e!`k?1ZX9re;~WcMRk8bjusthHjrACc10tuMGXQv8k4bt~4Ne@&B^I zQ+l@8A`-gMBVa+o1Duu6g}8(>eAkD5dP3(#Bs|0-L*K&O;so{E2=6=3y-$peq$Hd} zuYe^9kFYFZ1&<{paaq8sgf-_d!Z29Vx9XTWu9RP<`ZgK5Y9f`H^qjhqUQI8NmRe5* zU%bbKoqSfnx`Zd7Ug|EzdNeciHuTLK*}P#fL@TZBJQ71|3FHhOjSux4zfOiWotnxv z)Qo8x)=Nz{R9k15PIw2zYpFb$XQ1mc(v&bXJM*QMRC&hC?WuB4*0J(2JLQg9nI!I+ zewT%zzqab~l~)ZDLlYmpGTT4{NbM_2#ThGux*N3g(9=L4{T(~$FUuhER;8Upd+K0X zPt&QDzKp&>`778b+JFM7on3dd=mY`>@a-495#F$_cNqSnE&dt)BeWjyuwX1yfba!= zvT+2%d0PEo?TGLZaiJ|Pu|F0r@ebgE>+GO-AE6?0@&J(nL`PTz7jelAiPM)Sm*fJP z7AZ_xx?Ca}M50XOqa7zIpqa#-DuoO|c0;Bq6VH{957F`wP2UlH{uQl1lfMy59wJs{ zl9L6raVbts0r*;CR1}S?%M~Lgo-QQ&t8xt=TT4`xk(3}sWUX8%)p&$?{dX=d|l)1^c8vd(-BI%(Y(2t7F z)oCdyV`q2geBXD^`R@Jt{`drNhT{knB*F+G8NoJoMA#J}r68?fPr*Ke+&Ar>#gM*r zy{6%In#R?@F*~h#$r*?xeTodB^On=%7Ysoy|HvSf-3DnrPj9UoFO+M%}q2OMhv%9 z*s{AqSQ;BtS~%^DLDTX6J0sb5uDnod#6r0)`cOnXr#8mP{*hlj0iv z#YPp%>hEALl)$LG?w6AY&;vw7SueaHFu`mf>SGcyY@usIJY=&uM2Ax%`a S5ceTMjnPih5c0EV1NZ@{ow$(z literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..34539fe38711d3dd84b837cf0b536cc50fb7902d GIT binary patch literal 435 zcmZutO-sW-5Ph4ECQW0lX{)x1(4LYU8ui$U(2t7{C|D50Ly2h!DQO~Y5c01S`~X4m z?2i&BR-ssz-I>{$_jcdR$LGr%fMe_{kg+8}lTpq?LPbFp+Y$;Ab|mads4?WnNqXar zgUN!Sd}U9aTgM8W$hStxJc#@bL+&Jqg5;Ee*NqDXp&w5?a!X28H~t~1P_e;K`uiF~ z<7{BJN9z!z&5@8)|$F39hoCS%g{et?# z^Iq5bt_-iIo|~-H)_!9U-7t=bU(t<~&X>%N(4djYpb^pGGF3EGj$-PKY>{pU5GevQ q^BK$(Ucp`R8b5l3a8FrKZ4;#*Y@K|DEt(Gyo*=#>NBfR4w7vi*LtqvF literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..77a01eaef274e81d18828bbd58675d194dee5bbf GIT binary patch literal 6626 zcma)A2Y4LC6@DwpI!hW`mW$l5jctt2a)=VrV?tudKuioa$Z-;zL|L8I=d(|{^4-a{ zNUxL>AiY;e1p*0#h$N&Zg!JBfAieiS^8d55dwcR*Vtt=}>E8VRls9kQytzB>zV$W{ zIo;dbExY6!U9wZY*(2YQZxg;l_%7jlgzpo6K=>iyM}!{}enR*u;ZDL`gr5<9PWT1k zmxNyteogod;kSg}5q?kj1L2Q^KN0>+_zU5$gufB~PWT7mpM-xA{!RD~;cmiz0iF;% zLK~r-&_S3(=p+;fa|vC9ZbA>i5ato)6M6{?2z`WwghhnKge8Q2!cxLA!g9h2!b-wP zgjIyqgf)bd32O=K2gWfCnSNOF+B;vii}`* z=Y>OC2Y18H&NvajUayoxPgdW-op?*3XdG3tlYp7b}h@c>vZ zGzD)H253YvX~}WZAj^|E!Qm;t`u`@d*OS6{P;b;CjMrYY{wPJ0_^>L|?{Q8?|MM$h zJ*YKC$D*hj_*iL2aWCb@*`rb;XwW)DYmc**4)`@1hqKiBfv9GwBec$Q)G239q}3=a zQ@TAXor^gCjw$;#Vsd`|yrkLQgr!Y$(D3;n78# z+e}!75TUfh6MEcCD}mBkJo|L?T+tu&UWv%4XtN8ZL(!BZF8n%t&0(u z$L$xwhC^nyYFQ?JE%h+K5P->={o2nxT=l*n^&k zY>cE$_O$o8!QxzC3vN4ph?fFmoj)N&}vq@l)8#meawACKL z#mTH%o0G9@9K?!V?tY7>I*Ob2VJ~ewX1qi*4v*b}riW<739{sjcWA~jn$OO&o=HPB z9-K6sC#%l5#D32BgESm0+gsKbwBvLw;3%yNWeW~LpB=xo$#$MPz{rRMMlO&G3*LZ{ z$H-%iJWlo+dAvNq$P>jkGA1P><7DlZvXKK)F>+828L7&Ikx(KdlZ3-kGg2osWXi}9 zIcnsXOdGjao@C_7@)RRam8ThbI^h}AK9jA_;y};lkk66l8o5L+HFB9;Zsd9Ld?PQA z7aF;OaHU*jt`H+0r$VUhtCHZ6WaU-9QPa64@+-~I4a)*)65I!rPGxB-D7vzgZz9e5Z z@)h~2k*^WHF1LHKHn&9D5taPv?h5X&b@$8}^6Ma-mP^{@mk#;mz!o~^Rq7Ldqjcaz z_}fF|!OHj^zdD8f*XQ=%tmR}a%J5w%%ROmhbm71A@&AbI20j{}`eARw-|m51#2eUr zv$WlaPvl=9dmN_^e?8dd4BRAbH@IemsB7+b&E0ICk#zOA&qzlb zww6Ep@Y{h7F2XNjJ%>IgOYa2fA{m7M=K>fnBc7t0LuYdiI5v(mdk%#*xz^6Xi*_4yCq&l{3<cyk0xbODldD#)y1&5ZQxYd}KJ5iHdONdBoHvuH%?GJQ(8C^P}i^KxB)OC?9J zLKoly$`P#81-Pto1SjbNTx?D-D{rmxTsmM%YDNa`K%Ku@=i|E6`D=7OZdRRtvd+gP ztn=6EeB9SMf1S?9)voi`>wHuJI{y?;uD9v6)t@LBQhpl}Dz6@UZ*1^z<@2YNkJ=*T zx8(R!leF8)M;W5?@l{BCFSYVfvFLn!hoJFM+@$=L`Qyuk>y-JU4$}DpIv*ud%5Pck zX5Ig&u5|vr^!cL@)A^_AeAH|@|K2(u<(`!?@q z6p}jU^u%!<>r9<0Ht`2;GwzzWqXcbi!MNkpCdR!7vMRNBY2oDz|$c|aHcN6 zGb2ava9w~WNsizVx&Y6Y9KlvyfTvE5U`Q9>S>yz>?!I9?_V9wz`FQPWxe<>ooqv|j z$Gc4DwK${QVkUAf4evOakrp|wq&d1AC=kL(@ Tc*N@b^K?GmyE^}TjW7QLd;$JH literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..a003dd88cd264784231b703cb1b9464be89060d4 GIT binary patch literal 3397 zcma);X?xp55XVR0+G*0}Xp_=|mZKaFP|SUWD{&e~NJ*(nfCLC@dE+RtwT>hwak=mB z#0x$EABu)i>@eE!OTLud9|^@SrT>IB16+T&rfH1!h{RZt3l33|D?46HS*ioiNnj6Oo4XqBP!9 z5lI`Go;A|G!FFp$g>AicwYasPQX6!)qXeC_Qaq`p`pph@tW;etV$3?wN6uB(_r;N@ zbwt>%H3(8?rp-knxho?X`gp>n(T;31_obhZe9FkRJA8D32UkYbnL+e5tX^keb6e93 zHZJ8hoZoR;KU@1_o5Hw>O}4SCtwESt#I7D`KVS-!ZJ=rm83m#f+!I(GN@1cc3k^j( zpgm4&W}1m)2_33QdJzP5BQf1V(m+#diESY1(>!o>)#y#<=y=mMTwO7HZOafX8)S2x zMPsslp>1@?LaQzo{F_dX=@nX3OY=6-Yu*J6xn_p=YG2W(QQ?VaRVPj* z*H>}Y94#43d62pqYh8}yaS*ofJ(MTt<0)Ttdn%M6)?4*MBr|?LLNDrfvyvN0G_gd& zN7ay{3l^nJbJ=huv+|rXW-^n#6U#&VIjL^bcw2LlBeEr$acgL8jckPm-EJa}WJ@&d zGbUJSmUPV?q@-s0De2G{p%baiKaI;}}iq!;6*4teOVbGMp#cT__2? z7wVy9I9POAu@;)+bWQ6h!-?t@9D*5&KfFYT7YcCQegoM@VxuP`K_51Zkxy*uGY@Y3 z>&Dx{KM-w6-_u(`+!cwx_kZ-OA&y(n+7z9>EPLR=efZ%9STEtH4N3s`JOyRs6{ID6 zjv+Y>xvVpJAD+j5yV7pu z>_vEqv6tZ$#$JWj7<(PwU~Iv`-h{W9?rjHq2i|46MOb324$F+)gcZi#BUfs7=J~!4 zt4z1%U>`X0U3bL2h29>m>4)g+QMLiM8T$zCkpCNI9`0f<^i+L}wb9Sb>>N8?pTMW= zl+R#`v2FOAu`l3D#&+N<#soAO^Bt@OlIeCGtPOii7r;Ja2hd@x>tLbd&I)>L?;%8t p#gH)8ha<+09qa@KOn1-0zJ_m@?pyedvG3sr#(s3LpGNNt@DE|!k@5fl literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValue.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValue.class new file mode 100644 index 0000000000000000000000000000000000000000..8694b9224fc28525914c40df003d5f4d34ff3c32 GIT binary patch literal 483 zcma)3T}uK%6g_t}ciYxJOtZA4N7s<0dNcyHpdcuUgdPWXSf@5>mv+ zgjCh;5Yp|y<%B}@;+_qd<1^_wH*qAS*RVS}HZ5$SWWhw1Q2b44^@Z>9D1nzOl(9{q zT?;!X5$ZwYIYG~JPKJ{8M7Jr2$x)>%)_q_ech2R2`NHimzpq|Up7Gn4*R7^=`^cly zr!Eg;5lF(}4E@)%Gwz2xB51-T`s;j zN<2`}QdNFZ14iuyG=}y(;UtXglu=VZqN&?T?G35BG17`S!a^>i!k*eA=s$h<0x~;t A761SM literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2d1c7a3a255035fdf83a71de3d5664c79ea4887b GIT binary patch literal 2196 zcmbVOZBrXn6n-vw*<@KPq);ff6pF1Ok!)LPRf5&#!rcf)QHIs<;$yE*5c=REh^=bX*I|GoSRzzrBOE?`Q=O?)Wf zmW&WSlJPM%aPi;%n332{7M4!dUAQ^hrY|6E))z-CQg;Q)NOQ%!N4sJM$}rNk`(abLoQf(Q79 zp_kWH+bDVRqMKH*iH8cd@GZkxznBY8bzZX#v#Q`be6Jt_Rl!A!Fbp?IxC*5*HgtQL zZx=3;X+A$q;?4+&jx)4~ZTfoVngmTj5t9;h1tn0)2U>G4 z=T_Gib9shyUb0b(*UY+Mo7T>#QObz3|Hv@ejOs{voXjPZ6+9Agrz|(G)VM_z_KUbu ze9T3w^fd{%C8O3Pk%|juxZ#WFMC_aC}QYFBqa93w5U<1#7=2+h_+H*AM4Strl#ZVJq1= z6FMzhM`Sx?9GD5NGcb29w_fE@MFPwiy2Stz=b?GjA_ywGV~X;h8(O6<=5~OZE0^rV z!#2Acv-dM4_7?zd4$nL)}GWMLYwJ*g!d3}LE^ZI_q}a-TE(_h>NTRz zFp_$O=pLke`ZYq&(4BsT&>x8H{)%uuwFmhC-MbVa5#KR~ZIWVR2#w52m=OF^NPEar zL_n|~c>(1g42J$h&)oyObAU66UV`fT9SV5_aRz}B0vjd(no%CW87G_^iA3{wH0(U* zE!r=5j}g>a!rVjubMzcyU^8)UAA^4%VrX+8=kw{71cQ{|8m@a7{e&PeVkrk;*sV^C Q{%!-$xDgXcg literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b162b337b18dd5e890f9dbc60d6430703b563a03 GIT binary patch literal 898 zcmb7C+fKqj5IqZ&3RVRLRJ@`la(QUPM~n&LgC-^zFZf6nXh^ZNq$wEwN)wI52S31% zGR{IlAt8}8-EMczIWv1^zP>*`0c3Fygp6nae#C-U#hO^w#S)jXA!Ad<7K7B`Mq6W0 zuPnQ+TFtt8-Zgnsujb9J*wW{kS08y@Q!h=z>a~&}J31HT=M>CCQ4l~-#?%lLPr*JS497EBbYU4a&1MKSc!#S7H|uJ# z($K07Lt-d2am&F4#f4{1rWq}f%r`LdeyS^DMviRwZ_g#y^@pkYW3JDr-yb8lb3(3ka>pK-+hNjoFXKo^zgBLUSaYzByaO9)!s>5H<3V)VJks=>g90`P zwB=wEc|tXad^hO&?qOfDuJG!zuaBynGw+`H+`a0D{8aS1EcR{*g^9j-cG0N2*F7E` zJ$XEgMIZ@#6ZT)P9rI4eBZ48?glwri?M>yt!jMbFSO2m;H8HkYBUo|p9T0Y4skrqr zKsp13j_R_b9`|Nw}K4za07;nOPG`KF5Z)H zQ$`5y%lH5vN|=`sMK(^B1qmMs<1HDl{uy@0wc8(8;FKD=l|4 z{RgeW-TVckQPUj#VOFG-_!Gz0bV6J{2{B-CI!K0rO^0$7wEC7-s&c9=oyn`kc+Z*I zs?leZ8HQ=cBki%KRyDJtZaTJMR_M@Sn``8~+fA@;*^Wq}u9@|wL)*Dl%buNaRz^jH!&$;Q^6Ld8RlBzI8||1t!kOu0^+WOdkXI3D~3Vd zP#vS}%ZqMW!8RT!*umEf=YwLdJkfdGF)UNTH~3aT2C9NLFu^e1BH<~N%GlJM0Z{XXp^y{PoN=37UcuW+mtf%Ak^ubmlJP zHa1std4>yX=3}jDlqYRow;G0H*}IcQIU~;gJ;Q7(swd@1GM7+M@KD5^vD~~`=QdS1 zDB^nQ5f`m8)FR-Oj9QaKDlVAeMj)b7v2&ZS3y*G*a(JCy^kgk$&TusV_c9-MK(NaN zO!!^h5q+hn|4s_0*+r#qQa1IBN+-SP)PfE#8loSI4Ywf$>!2sQXty_R5YAg#Ejl{G zPO^6<^jda~$@a>)Z64riMf&!ML%rutD4#%hioQyh=<~)Piw>r@IK9(gq30C+8lsia8c7|1 z{Yo#Ojnv4#d(d?P;Y0N8x!yS5!WG|p5n=R^bs%+w(02L&;eA9rkT|a5ZGT&yRai^rv4S^ao;lzaX4X?L$69{~kq1#COVNo21wnLKBM;W(5Bf z(mwJW5fJPreuMHiMnlgraQhIi9pYSKkf4Tshe94foI#+3z{UxHW|R+b&J8C=BGEb? z4Ljd?llBYVQv`LMF!wS1GX{<@vYohafYHB>Ft&Ywi}`d%f>BCv4cC2)VL}iXv6Kri U?o}s7e>d81fHok)h^^O4x?uP#O*9f8`~W}7 zxC;e^ghbMGy4^W*X6DR%eSdrc$Y3W38PNdzhy}5TC1I9@iOX1#u_|MYKx$F5sS{{t zwo}#YdR04aTeNPJb5>g%`R9U`A81wAuG?_zw)rV21==HF-e!G%lMTm6 zMaDZIh^xs#jlDFYGf{q4!88;F0R&~NE7-uMf&{h{Y$HOjKaoTywpq~~f>4dNsAf{D zsufB#z03#_eWH;rdku<)Cr+lD4Ux>(6Y^%PDnmjJWccsQC0F&kvHU}-Psrb0BQYcF z@uihPFvVXY#=#d_;wL^GZfE#kxa;A!sdtbUeu1ug)^*3=;SUfL?o|2>o<3#{Ar}*M nF@aRN1MeS581ti$bm|qJ4t#x<1w>qkU?V(}uLJ2>lmYwze^lo? literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c515ebdbeb9849bde15da985c2854e47e0256d33 GIT binary patch literal 2169 zcma)7TUQ%Z6#h;oFv)Nb2(1G(E4WhMb9Ksj}!z7(dYI*OU z=&LV%#mh>wbjfO;x>kRUzPeo1eP$*X5)yrxIkWfK-~RS>p1=6@2*5n{6pUkD!DYND z<1Gae-d1o0@5s2SpdSlik|bp;3gME1F)WAaaZQ}wRj`6pVY((h*F(52KHdxAeFYmx z$@oCrxS=48o8t7Lj7=FIG4y4fgOb5;CSA1iiQ;}fv9@_@btSPy(zW8Qk!0v!G%eFv zW{_g>ZHAx_(<@uFcNk8`;%$~>E{sg8Y}gLNe5_5sVjU#!G-T@smcDQ1NSL6b&ktf^Ov# z8OJuQJcSdq4V|>B?QBX#+YwF@DXUa*=(?frCwtP9@iArnd)ssci{;at6@9a+v8cQ=ZKUBea@TQWZ3*v6*}!$vvbn7e)xP&qh0 z!)=bw1?$mfVy@rM870RoS{!%q1;^`ngX2|1Ii@fz<4cYh;v8Qg%b`MJ2z%8fzZ_pf zXP8N?rx&Q-W(CKS_$|!MUXroHkppFZtZOL3ITiUEjy%5QNWlEBz>Px5uqoDNIGa0r zhUm6vuS_$H)Jb?VLY+>XArjAUHrC5j6sgUaa!WFAO0r(#h(=<#*tI8`x7;C#_(O8c z`a(yCH(IpCoI3EHUZ{|_(Hym`V`NRyzuB_ez=A{jR5wss8=bc2cRiC2&Atu!)=&wRfYfm9P#DMk$(k}=d zK0+|9R-x1|a7Y$1v7C0Xgx^Ufxhw@-4Bx06hWO@ivEt%X=!;P z`U8fw3AKioGY=&8=$}8eCjKA-FTiEYGWHiGI81Bok`H!;z$5~Ts@hQ%uSiQ#?TC<6 mEjnMrnFj$v`a>kpBN|5FZ-fXWLh;WXs~O!vAEU^;bmLzD$|^em literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynAnySeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..357499bc0bd6c2cba83690c09c92835f6fdff451 GIT binary patch literal 827 zcmah{+fKqj5IsvNg<2IapdgCit-wR0uNV_A51N>esPV-IQl%k~(qgk<_$y5`5)=IZ zKgu`@)d)%Pp|jJ;IcI0i&ga+L2Y@|ntB4}0U?~O#%PLYxi?AX>M!~9rH3eA)xog@T ziy?D!?s|2@ZPksFo@2HecZW_-q;!-SBKr-e!4DWDy>QJCK6YzF%IcF?0w`BK%d9c% z=)dyEm5ZZ8qwRX!ytOUk%xQP{B_~*`EEtjMgV*3Bt_M;o9X`sDtGw4HN?I?BU2{cs z(Q8?QhG~XW;E)1~xTpA;FLjq+D9}r>`J$!Rd0>wtmog_Bc1K~S%X~m*oh|$M{ zjkJL>W#l-;8Tv~hL>Vw$d<82??+Cp>dZGdbuvs6LBv^=Q>Ht>ygNb9#$0U4AtXS$J i{0B0Rg>gu!_zbBJ`RArZBz#DmPSH@fkI18F1Na8_*2m%i literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynArray.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynArray.class new file mode 100644 index 0000000000000000000000000000000000000000..26f2d2c66f3d4e1b5f6e2aa377f44d8bf7ea9ff0 GIT binary patch literal 233 zcmaJ+OA5j;6rA{J{DNE2g&WraZ&0m^LZRRdUPCM`ZBk+oay1toz(a{~;lhOu3=GT% z=JCAU0qij6;2a~4F~@{s$}wYD8Cwd|mLl<*+DgXSzh!JKd4@$zR}u~BQshOgq+{6r zDde59aGfBm;`L;V_9TkldX_6hatDKJ*7 LA2>u5?ghL6+W|q@ literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e2fa662e3cfdbb7ac70ba427ac9a91cf3663f772 GIT binary patch literal 1912 zcmah}Yg5xu5IwiAv>`w#pcQ-}DkW9I!zaaRp(<4n1k}+lnGhmYOWKJ+>`&2OfjUzd zo$>KSXZ%r)d)uV%4qtBW-Q9C`_ujMl`|s;_0MmFT;ut1HOkp~NLClD>T;a>rAg*!q z^&oEW^Gy-6NbqHjA8(0B;x^yi5s(rvFCvUd0ShA1xGUhEfcpX#8T_hUEEo*YrM$JR zsqb7+b1Kb*%%{ zi=&zg&gr?bTqK;pkbsPY2RJ3+IHD3x^4$o|F$CS$k?;^p45OL!(k!WOf~&C28_Z5k zOiDP7GXj<+Ji>~ERXmmu$0Y%464on+35Kx-9jnvoj8c82`g>(K-VmwGr_$pl?P+!b4e@1NFzlWyUj5I(D-IbYB-KwTKh@z^{CRRRpJHaSl?vhfpCoeuz*BVx_PUF5sdQ5~VLs zF3BZyEm4@Xe90vmL##^Vp&chGp__{9aYM!-J0VHR#B;^uU+Ddau5SoGKS1A)_-{nw zzYwW2$?+2Uc`22ieDL%}s3{s*hbux%JY7Kc*5$g~#$T&NB>aSfpLA*&lK;TZ_Nk(Q d4+zRXF|hBJRi8c3g&>rMrzAHa>Gmr(hX0SxH5n)$^q>Mco`!Ws~q%Jo)8pFZ8 zMJW*aW zTTrkHML`H*8HWmvkW!Gwv4RuC7}86|FIz@Ka~L8m-sP&n&8AwZwY0iBL7SOrIF1-^ z0yD?ivS!#qIxsY;v~c1nlg1;?QKY+)JpXPNs!jQ~RBdqC!dslvLz2O;LO&BW(j${- zMXpj@qg`}Rp=|CG?2Qr_l-Ip-0zUeHuqfy9AMlMZ8;E$AxQ7Yl@_qOxAW>}2Lh`wH Y`1%NpRJIWFAVQ7NNr673SJ4LW2jlv^rvLx| literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..fd0f2ad38d42552e99c0b01b862984842840d3cf GIT binary patch literal 485 zcmaJ;T}uK%6g}hay1TZi`H`s=h&`weZuO`U`0)}5LP8)t$h69`qO-9s!Tzg)J|HN1 z?ngy;H6cP8X6D|Rd(Pp`na{7+cL1k2j6p|AMOs5fLso}|-57G%Q(>sct0<@_GUy{e zxSfog@q!_J-J9||ZqB%{&4KSZ!frA|&m7_S=L}M%dc`1j-0_6Miju8VH;@c$BhHZg ztHw~i==K`!+^)NxZFU2}=Z@79L728Yj|YvD`Y}W4ACy>P3~YtZFbwSDfZ-^VBiT)o zJ=fy1HeXQF`8BN5zihY6Wu<>Jomf6Yab4Tc6@y~UTtNz%O7)jVD{fORk-0h;VzeS* zXY>OR%E<-V6Lcy=p$y2?UchR~8zMs~B@KphN*+8xd7u&qki^app+GSt#A}aGo)P_k KO7os>XnX^&F>et7 literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..919532d98af793a589493b866befbec7318d35ab GIT binary patch literal 7048 zcma)A2Y3|66@DuT2}uJ&6p3QM7%(ScEE|{D#&Lp#NpNs*5XK24kyoch9GrH=-3gG> zi=Ezk@4eZH9Y;>$^yc)$>Am;fo0I>ao!#4$-p1(r^y_Zs|KH5Kd2i;8?zro=+eKun zx2;3=$&cD)Sbp3oKarmjen$8?;TMEo5`IPaHQ_ge-x7XD_&wndgg+AgMEEn|FND7m z{zmva;U9#568=T_H{m~oy9oaUctY?9O@wAb3t=9imC#0*PiQA}5IPBluz;|T&_!58 z=q4;CEFml`8BS zj1j*&GBzEK_~EoCYqG=5@`)X`H#=;DbZuq^bCuQ`wdqNCV`au0@rw4Lot~nf{c5!| z9&#q>vUO|o4^^Uxc-B32Zrw#3v9%V(jAe7ijJ-H7I5y>%?{2gMp0tex)mkNji<%2| zEyZXOUsh-A&Yh+w3rk@&sMJPAqo^GCSXN8n0OiKDN5xuDW9uMWJ6&t>uwP;0P?lOf z991lJn5_#Ob;>m-(sC4zQ@SfFor+tNK@XK9-&)$4wKNt@jh3-JErlJ~W~{nIlgkRb zkNC&^fwCWt4-DJJZR9O-6R8A;f=Un;VPVDW?btJVBq-J_z01)V3Pqb7t7fy)XrTFo z&lMzVyCOTTU0dV&PQ?C8e19TYLWdjMMtagamV|!Ndz|rrCD_%LqJiO{Qu52C>wI{} zE}@gzlWr)&0pZckHn*8*8T4d6TjGhJVaQS3ZlPrunMq2rftDYy1HHQ(-|d_=@3sxS zJDoP!GBoXQP03o9A~5Id7s7@^X0~d1CVu18aeL(sqWU)3bE&=y81f2dF0%u6p3eQ& zO{wqOIIwlRZBM;!+pWtv71iem$!ZWBjiVaAZmk3-O5qs3hrvn2aaS>#n2bW4mm|e! zDnv_najJq?hvCA4y z9bn`dIcDT)+27_}V&tGa*vLcVp+-ifXk<(RBZp+%$YCiNIU+}mlx4z5D3Os#Dl1Yo zQj;ko$K`~PlQM1OI(e9phZ7zlk2LZq!lUIeMjk7VGxB)3-pCE|1S3zBCmDINJjKXU z2~VT;>Fj+52YM!le3m@h$aCbmMxH0nH}V2`p^+EKi;cX5@KSl1k(U!*A+I#@DtWb$ z*T`#)yiQ(kui8;#r~?=)`RvY{O#z!RlNSqw@A}X_(uNKa=>xA@z+D! zy#AY|=|mlN_V1x>2N*ZnUj#6d9Lebbi)o3k+S0U*u*Ey**2>FARCC&!M9}2c)^<%=T7i z6H*R2Sgj)dcHjWSK6&A)N}Er5Sr{Q)JVO^fap}f&)Dj#HpL) zRIfe)4*wj%a$SInB1f=77vNG!1(`LhospIL8gK#S2v+F=Tvn+dvuH%?Y5J6Kv1tOF zJgap9F2NkZ8eM=3Ge@vi7vOTu5uC0Ia1lGftP^&f=Z=HM!xMM5&Obxv<9gTm>vcXV z0iC}==c8!Q`5SdU>IVMP&(Y_P!cpg+tMgG~>in%bALXddKTqeQa&^~g!~Kjy==}QqjLKHOdoQTp z&nSF#&V`BNJl4fJ2miTDY5|nZ`T{P>E+DB{P+vQC!}M_^UaX%#sKs^jmt@V?YaEpA zIRk9d2SACRBe+x-;5m>ZxTh|_(;-K2nJ&OHBS&yAU4SP^j^N(90MC~k!FFAMr%sMw zP#54?lp`3@1$aW`2zKZKJhyTLm+JyN&2j`gbpf7nPB824yN@1wc=74{`|5l=4s|~M zK@h)Q8qaFHBXvIB{Td%nPMv>0osZY4&fl%`@sQQ|SL%Gcd3FB%bv~ZQI)9JO$4gr0 WU#0W$=+^lU(D`_u>-@bMU;YPTTWp#D literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynArrayOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..380038b8fd9605dd27f9aeeaed99d6ccdae689ab GIT binary patch literal 503 zcmah`O-sW-5PhRDtF>zVz})m8LVJ*fUOlzdgP=r2dhrm(bcw0SCM2=Af6aqGz#k>9 z6(LcJhk@aJ@ZK8d2`cYAl2SrN%BjpWF`84lz? zn^UVR8#=H1m#jA?w9cPHl~-}5OMxAMU4mE72)GO;MhC17;h-LOW;Ca9X!E39zhb?5 zY{Pn3Yw+9o+2r{9jvsVUu<>(M@Vq3UGvyh}gmonS`>6^m!qEb&ZWvD%s;)VF7D1ap6MHfq{W< z7?{WNb_cM-oPjZn7{&|}hAG30urjvbrYU&TY0;E2)ZIJA`qB^51P!zNX0^;bGOb8JRCGEr@@>BFzpw1LV zXH>q(j6ce8Z=1d;e7U)IchA|qd(YC*ZMwCj#af>Qwt6Z7_u5DQinf z?QSWvODi)`WsR(}sZC>&!8?^O6ZSNNJKVR<;NfQas3~iMp*7rBfh0JAJUQCVDt8HS z!>X<6JBwO+P1{Hkr7N+?&_al9?SrNyHFHZ@wXKA?#fwOo?+wdl7ztP8i<$?M1yk(6 z)OHg(*%aE&nR~mFyk^1pXj__2@Zq!I#VeeFr@L5&MwQJ}LenYB=9Mc8W_r)2QVosL zomUI>d*4dfbk|r-vZXz{$aWqXznIt5EGxCoFjmR8w6SgI_C@6c_Dubqq3;-*YMyDl z2Gg4hZswcPlUboi=s>4{1qn}aRYE&L60Y!F7rN;woOhA%3~`3;g;;!oWH-p=SKa-I z;lUvZ*Kl3HqJ-yIlCX>y5+djqup(hKcNk>oEz_?$qK+zs_bF{DLwi}IG82ud%h8qS zB12cXr-;w?a$z@}6tE`YC8+bA`Pk~B8E({e&Kt?JVKD@XBF{Y)LsK4=8$lW*(jIRq zL$glevJEw1+J^O3(+$0!h-2JCJn(o@2NUvtB=!tm7SkJ8KJlh5Hmu$2_bq z=*>X*1~=I_f)qom8>|I>J|+&d(IIvReRV+tahLKTeUP1yY0AWNh2;}8en$Nd1YRGZ=~v_r zf{_yhOH6VkgJxbz?oJ-K8iRBx8d!%bNK8DPS9X`=8aTsWtVJaJpo1TBYUz|uQO6Fc fqLxqa$-mKZm@lg|ySE-bC}mGcZbDM`a~;EfEvv=& literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1db3b684635d9f420cf59df800bed432a63e69ae GIT binary patch literal 784 zcmaJ_Eeh(i=`AR&)}gdz?l93e$eSUmidV|I0qAko(bnrdoxPi?mQddDXyPFa6OnoPr{ zTdu5|E>q?v7S$HcJ7>{sz<=+F56x>V6q_?|nb`QAnXfpdPe=g43jGPQkUlS-uBf9l zuF+j`T%lRz4dj_7FfOl$z~M%SA?20?Jjg~LWiDT7;AEYPZdQv^8>=W|;gBTlNbgTrw&~o*Qnx23l4r%ZO{M! literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..d1c5fbfb092cf510e67afcbeab2c83152f6c9fb6 GIT binary patch literal 6900 zcma)A2Y4Ju8U0t1B}*DvmW$kCJ1((LavUWlB!EM}lI`H&;9xlp*nn7_*7Dh>UHR^0 zTcMYPl2AhLy%RzL2|)ouZ=r?Wd+)tN;Jw+|y*>HgFV^?z>2Bt|DSw&yM|a+R`yC>( z#k;UW_R06#WmtaDDL<4S5q?bg3E`)NpAmje_yysYgkKSUP52Grw}jsjeoy!V;g5tr z5&lg03*oPXzY+dU_y^&igntqKP52Mtzl6I9{{whJ@CZ$WWL4xyFMMwm-zCv*@x z35L)`m`CU)%qR2^77!K^77-Q`dI?JiO9{&e%Lyw8XAo8rRuNVc&LpfMtR<`?tS6jB z*g)7wC=mJx{e(?~vk99C=MV-6=Mv6q^R~2k_wuBDWGpBL<9;phWW(;LGCmMZj1O#| z4*iKzaa%aek2}Jti9M4+#jlm3u)5Wg){9DEsdlj^eTCDL^zHYgWhffMB!xoX>1jOa z8V_nCes!c;tCYfVPZmLX#6Rv2l>KmgVA!@|HC@$4+Ty~gEH0p9$H`(aY4_0Po$rZp z!%vkXj^148+l59qm}_h)?6PaGO;2L&%QI^q+Ov0X+rU1wb6+%yU#*tLLr+%a83pFt z+PA;WySFEE4^^Ux5kH*vq_<9w$BbzhuolIP#ivY5iYIe|V^e(ImdC%#7RU@p$}srLY=QY9pgjR1SRXtfg>(a^u>gVlAk#b&#!{uC;jBuds0_ zORXM`DwaCT)-Fe#a?Ob}c0@9~b3yX;P&xAL5IeI&j73wUWw@rLusz$Hgv@+5QzbYQ zRD!Sw=CaxL-ZOe6DAwQ^Pr4nQ?k?JJT``-TdOXYL!sEra6fR{)GOyi3Bn(Dj!y`Tj*p|ryhg9;s18FId7q5 z5b?*Bcp+#QaunwdvMJ+iNg3` zN@+eHJHrHm7`!JlDwe@;oEYmlqg$p}fe* zi{&LoUP^cw7x{9+E98|%UL~(K@)~a8wemV6ujj(wAa6ACCc>MkeG7Zv$}PN&3xB)Z zVB{Tgqmg%VGdFRfn>pUQ*!ym|#mKGl9wWEOdyUMF)Rxx>f@2_KRV8~F&~ zqw+B$AD2%U`J{Zx$fpT+lKdI@tdY;j=Z$*jFFZYW_{qbO6SBTTDG`8O_ zPn{N@7v5#1>V#h_9`+MDpVqyIMX z`ZwJwO*i8k`B%sR$LYae4{dY$Z;_^(TsI=ub@#gN4tCE-vj?~G$75h)a89$tP18xv zrWt8zg4_8sg5MTUAB|t605D!vJfjtC4I=Y`YMrX+K^b~ z+}T5xFc^|Dhu)s0w}Mo%+d=~CYv`!20r~AXvn|!xlgNcS>H^#lIf7-n0Jljh z$n0VDj4appfSV^rutFE$mP!SgO(R;*(3gZ8O%ouWSLy=XemR0wx&Sw2j$pMez^$4i zI8ztk26lp3r|X*JDCEIej|^PaI)AOs$Gxue*Xewe06KrY&PTPN^Uu=xC@ggT2Az)@ zMCWhR`6yR(e!-I)?bXs~PgFK3zX=B_FGzd4^?9gV_|wQo5tQ;9uCD&%*lpyaUefuS zbUsQeoqx8@M-`Ux8`i(sL-}>;`cbgy{Bv|ZYP*!*u-^gQ{wM=={<-@4Q8DWL^K?Fn zOP#+(=c5kQ`S?d%T)i~<3ni;|KjRQOzkWZXq}A_U{F^DMs!;LjoC^}ek(*NoU0CO! zUe-5opX>%$S+Qn8VeQzn%ZvN!=MRc-efaxjhp(SMsMm8Q*s4!}+CE2ckuJbHAV+Y2 zU4S=3j^JWlfcHg?-~qY-Z;>3q19bu3Ejfa1x&UvS9KoP2z+ZWmk3Br~bpC^MK3;`7AO9K9avu*!osS2<#>ZPz=Ra8I z<5{Znck6t-V0HdwIvk9V=o-=p*Kgx2|&>wLVnb^b$jJ|5;ef3L=u{{swC BIurl^ literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynEnumOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..b44b8796481b86aca2f2314aebd73689304c49df GIT binary patch literal 369 zcmZ{g%}T>S6ot>Vu~TcSZP6!a7s)~f+`1C%A|O;KbX%@*7*dl-$xpGb=E4W?p`#YEvk;Zk8l7+O=VxmXuv9y?38@`J|>?^q}7tX?+sPGZH+ z*tP#V6|4yT`CDYRWt_P}VN4jb`YOq4d&dt#fvv2Co*&lLS(aO!rB*-e9j9@0@AmaL zcU8LBnw%RcVf6jF#q-8QC1Lt^Qv}Dwn}1VJ9KEtNI&?cu;+GXCmFW@)CvrOSWu8ay Za4G|#3njEyQ@PKC^l{#71{fZ1fCI~pV1)nx literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixed.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixed.class new file mode 100644 index 0000000000000000000000000000000000000000..620e37ca1c89a0d166287d653f8e058cabd3b54d GIT binary patch literal 233 zcmaJ+OA5j;6rA{rUvMkBaN|1Q4XRZr6bjzpHOA7?CM5>3S99S3Jd_w0E(CF4U|>El zkLT?UV2ud}=jd|`IEEY}jxodB*i4uz6JevN%4MLNx7_Dfb!3B8dloSYypi)H3rYML4;^>!52oa+t?ZhDRQ}kD$&QwNc zT)yaxKg#jGHtF8s%gcNB-gEA~@12{!|Gs_)Fpj4px-lwZ4C4`WVM3(k8eb;EnBwN^ zVcg*7n;>!#_-V!m3+kAINKw7|@h$uz{%!^pSqJSj|{29_6Arb&GxT!jtZV0vt1 zRKhu&7qBYfA=V^3!ea?Z3<+45uu(jWFkG$Du{y3!D5Y1byjO;vsz_xny`VlyucucT z`l~%fkBa<_1hG<#t#Rp?(_ehJwNFzlW>MiBRs~hr~j5I(Dt;LyBy{g8Vh@zy>8dg4dr`*9S zk;Lo%2(C&QE>?G4y7r3UVrb!`SYjJ!0;zs!sW5RRP;Zky2DbwJ^vCR`KQDvGB}+Sr z_M~K5Pt&QLzKp&>`3u-b+JFK{)~-8RZ~}p2_>KzR2p6sE9frSPi+_Uu5897;STGjK zL--6o**JpX0qxX?D2*dGgfyaTx8I=d*|N2rLLJVqoBu~=9HmvO}niPM)S zm*hNJRwztb9rB2-B2gmp(T)@4(MrXg@LPs^)8pGb5 z2xpZJ)QgQCY6DEyDoS{f}C3yZ_&sCf7Z=qWMvbnc7rH3SfVTpdmZKOvg z(2888xI()~ze3sUC)gV$&@ZogxF>45Wn3#tNWph3F#~=}`PeXFq Zclde;3{^G|^&ni0(Mf?Ggje1M@CQh8y-ffB literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..b277ea6a54db3406e18a8ea1f421e02bd88277bd GIT binary patch literal 485 zcmZ`$-%G+!6#kBG&e<}XnyD3tJ*W?^dejK~K@bQ+LLfcJ+QyjZ7CNH+R|Wlmpy;_j zDmu%A2)o>S&$;(}-^aP%{rG%&18{`B1Z1cZ(s5+s$jXRgD}fxgB`6Z|5(*NE1bO5K z*Vf1}=Y;fSZ>-8Y#a!}B!R@r*Y0OoSp6?{SAd-2 zBu=%{n`1k@_t=RYM^57O=EUi}_uhMTa_{`Q;{BLCM_1aJd*95Pd2i;8Zol)^+eBoG zv!z@1%D21Zq4J#``L2AA@O{D$2tOqJi11^=PY6FH{EYB(!Y>HFB>al-Yr<~`za{*R z@O#1^2!AB}iSTE_UkHCC{EhH;!aoTAB>ao;Z^C~FcM|>!aD?Cx+6e804#FHlC!s)? zOXwnW6M6`SFpn^w&`VfA=p!s7EFvr>EFtt0mJ*f`mJ?PGRuax2tRk!?tRb99SW7sI zu#T{vuz_$kVI!eP7$6K1HWAJ#IGYR3-5lu}D|X>+)+L0m3L2ib+=g!{Ki&CI?t>6)#mw*3>HsQGqB&0j**~@VFro=rzyhpDqeH! zxLccoZZUL6+~e+0&Gjooqs@BNuV5}+jg+#acq(JyfFs=(o-BEjcJ>8lsNmcklW9&* z!sv?3WJY%H9o{yy5AB>N-EaBD*pyqltI^<2q3ku9^#Fsl7wy89f=PT?m9g8pgQ5NTRlniYn`7faQ1e{4 z)lob^xry3?Qqya)b(pO^QETb2TW8})mfAQR)Gc+Ct@9%4RMZ?xYk^;(bZ1sN6}HBM z9;yYdwX`E^sT@p=*RVYu#qHTJ3 zZ(Xo)Uk!#vy?WKHRWEn3I@X0ACP=cO2nU3RO`2#k(K3wiBrBW<8b%^Yv|DHyMT(FT zZ=mIeexP?}#E*8)nvb>(y*napyk%(G9yP_j&ZF(jo-E4*YM3L@rXUtcP4~loO_v+C zFG9H4siv)VLeV-B=w?65z$s9*6V<73V86AskFeF_zt^1J=-b!cQ#(~~Wd+%WH z4RWKAcgnkr+$1*}dAHnR%(ukIlv^&^JejG+LjB}W!(J(#aY?_gdHpBowkHSwUIxmwk2oU|c z(K)G6Bu9?X&Nc}rPoo_$bQyk-Mmh9CmY&W5DW}h2ZaN2KWW<^6SXb^c=>nXmiJ)ED5o0!*H_pi7_DtZVk%Y515rkP5hyN0N1f0`3f_`0q zGd)MJR2Sg{=>pt?IfB)?0C#32m~|Mgany4T*Q?GyQ|IF**7<97J}zyYf0oY2{jT%Z>3oy| zI)A;+N7bP7H|Ts67&`xK2NeT9t@j3Mk%Zrd1C{rgy^JR zTh|9Qp3WcA`6vf=`S=fkHXl4Bbv_>c8Xs>?oqw^;$MaO@@6!2r$?E(|bUq%vI{zU$AMazGzgy?y LDXsJOXngq}M{guK literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynFixedOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..aeb6a0a4d74706ae017ef336c07b366d9461c6d4 GIT binary patch literal 346 zcmX^0Z`VEs1_mPr0d@v%b_O1H23|%6&h*rh__D;D(o{wU5e-eBti-ZJ{hY+Sbp7Cx zqRhN>YoL;1gc4B=Ock0@j0{|^70IauC7Jno#q11x>>H7J(>H02}d5O81 z$&PuIAf{VpMQVzFL26MVST!Sq0K!WDq^#8B5=I7P>{@{)AZygcsVX2bIXf{uRX?P% zAk{asI5)8*IfIdbuzJrtU`S-9gn@#Cjgf(ofeDD2fnmnP!pOkFz{O@lj literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c49911cd8809995a2d158af276e1a925546c9f90 GIT binary patch literal 1942 zcma)6+foxj5IvLICd&dLfJRglyoC+0fOmpuASx(`0%GaQ*0PKk2%ESrDxacXfm#(Q ztx|cBDnH7yC)wPI#mh`jcc0VUGu`v&@3$WS#_&wWF^tF<#aIa4xGd9hMJ!i?xF*!s zgSa8iH)V_?A(jboyd`52w}o^^LQ=w%j4(zdOv^~&u7rCM?n{_q@axV_jx$8(vi7=` z-CEbC7Z#_I+A?XUvuixT5SU0?X=jqb8yi?*@Ch|-de&ZL=#CB4Aqh?(Uy-(_!CXb$ zy5tz<=Dd+xHdZr4=}E6KbP;01cxz}G!&=vt96N2TizL$48*V!c*J5??lGaY5tV-=z z##Y)Sokrpkf4$8ulP5&p5`XX5hDj7x52L7*(S(C)vbjMS-m8b_vbG~C&}OaNwnHg% zV=Hk4KL0yA?NHq_O$isaoeJYoiVRqWZD-#x+^FYVSl!^JbCk5g+m`u?o11)1FR|Th z!uH|_RR$-_Ore1koIsC+Sp^SpTETHd6`T@MANmtp(5t^97)*UWId##5V0ru4_j z#pFCgU#+ErFWl|yRxTr9S;13KyY-fQ4^N!o{Qn(hcqYefhHzyViciSUQ9>3+l?IM_ zQ(Q4ar%BD{a6N4~+q$Cw(9UT0t6#xBkpOa}7I)3zf)ViT!LwVihD7VS)**Ncy69(k574nE z-29P19?}YS=a7E3dWscmG`N0y=CB(`^9+Cu69<7vITghbrs_QaIkwmPRx{vmcX!(xt^RMXm z8UKw)d>@f2l^V~ZQ>0R?$p=q+go>iUb-5zMB*Fz$Z&j?JL+q7YWWo=-_z^dk9`yiz iwo4gxeLztCg|6LFTGi15EeJxZc}g-9l5W3vWB3OvW!8uQ literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..031690d5106825199209743cbb48fcadae96c2d2 GIT binary patch literal 808 zcmah{T}uK%6g{J^o3@pfTG^MTkRK0Ay&8cTVGsxzy~?VCtgO4+GHdv+3W}tMen3Ae zn$gu#Fj;n(x%ZrN?>#eL-yfd<&X5g5Mm&Td5@Bp(M=ZNyNy^xhu`lC*KY1kZI-XBPziT>gO|P_f#an8__;3b530sMaPp z`9)W1cb8?=wj8E44XWOlw#({_!+Isb2sWM^o$&&>g_N4hW;s%W4Qx(H=JL~~#%1n# zT=ZK~unI*%2w@qA3XYIckjAls3}OV?|4pb`Mw>bWk*?O)R6{d6YOUF&Ek=-@Fz3b^ zPb4N>u1*bGs0YSYT`!z_#;WO{3-3+xjI1scoH25l;OOp!&p72zO9sIT|B0}aKRb!< zxWjy1`SUMVny^eox{egM`##T5Vm literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..cc85f0714095c5723d3aa05a1614b6148fb75a1a GIT binary patch literal 494 zcmZ`$T}uK%6g^jWUDq}N1k@hn+^S^(zzPgmQN_mYm0j$$kxykERrsj|ClwS*QFx6tb!2Z z6$<*}uLyC@cJRK&r(MXL0olq6s3N~1)D0)YMpsHo#uMZRE`b3Ftp5`790NkU@(B4E Mkq;<5@A-zuH(Ew=$N&HU literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..703fd9705245ed24947abf2c7f6312af124ae75a GIT binary patch literal 7195 zcma)A2Xs`&6@6b7NdrO@iDJMQ8&(1=8+U^X5+=dH!Lf)OLlWg{^;s5H|BKxfAgA}< zd+)v3i5*8y;`HY9?)2V!?@sQWUsrlRVb9T(cIMtU^WMCfd80e;zWojn+2-u*lu`L< zhul|w)+IleUl4vt_!Z&Tgx?T;OZXk(_k=$X{z&)};m?G>5dKQ|8{zMSe-Qpj_!r^d zgu4m<0XRZ%2u*}$LJOgl&_-w{EFg3cItg6_Ls&>yMCc|gCiD=N5S9{_5tb8r34MeW zgq4Iiw!?@pGB zJN+5{IpQ6g_WYu^Z_2B>^>X0XwmZ_cqwJUKmpihxaO$%DQAb*ag9!|_rO`{~PUqBkdDjtzHcfA}k$qpcqWy%bJYc`O|b{QQ5C~)%w_Y5L7%DZnYE+P;R33 zpjh|nY#m~2SJYZO>{i)0oTb(d2USZQVe7((Ivq8~(n{c$QuEV|Uk_CR*P7U!H8BxP zk5{lRErng#X1H6Xt>uNiN8ID?V8!)IgCn+aJ9&$v8C1PPUX`26k(G1TVc+->uUNPA z?ugDDDBAtAdM-Oj1DcQd^dR)2rEqn2T zm9zZN4{I!1Gy8Y6U{LLjRPkb=X;;(~d$|m`IB%tpDV$Gckyd0OcIiF!K+wjsCeNxW^l4K}BuMjOdk^Sqo}E}6iJWW+p)-IN77|CcuzD~m?mLgY=~=;ugOaJeJLaP|?lRZ-`V2?iQ@2 z&BsiX*odGK~5OCUhdcKTxsM1@<1bF@*pEcnK0tXAtQ&SY~+X> zHBymDBfbPirsSBBs??0sW!lJb+BhjQMsAb`8+nL4)X2l+;YJ=Ik2LZq!lP;QF@(p; z@)08+m5&+uIN=lW zNh5a>J|&+v@)`N8kPvkB~HvaF5ac@v`EBnj1+%}y8amcNKxm9PP;<(l=9(7CJ;2t06 zUwLBGtxTU1pEu(*<=UiMFQRxX==SFqxw0Nlm{B}w9BE=I;;;Sq`vy4xJcw_-Xm7&r z&Vk#+8Q6TQG~JAE@nSF zdukM0FvsWu-6*!JZnPscirt)Jv@>gz&X@3meV;?`%FjE6qIf7nYfJ0pqY?zfkU4RQ95j0CPwvF9&n`UK2b7t42nS{$C5rn6K z6(CDi>LcJ{$q}s51-OKA1gmucF04e5@nPMpoTmGL%PmK+Mi<~BOavLHk*#a>DdE!8 z1c=f)U4RQVM{v3>z-62xSg#9kapwrm&;_{UBf*?QdqaF^^E^&71NDH;KU3$UbkO-{ z>3mcfI)9_iM?s?VH|c!TE;_%U^HJvL{C=H}ib&@VIH-sCX^ba|r-a{x1C{r#y)-vF zD4pi>QD-Imh8uB9eC#&bM@gphx9WUUZ#w^MosU8<;Wx~G&_U1q`J*P(`RC|-l#dC& z!QXTB_@mO)`P=mQqbSw+=jnXZuR8yHosUvi=U<@nQ59?VGY+8()B71!vwrtpl-|!M zs&&rAao`-*+&bryl!KC7ci_^j198oQ+C5^=Eibm~=MU<9-TaQM`Skq3lOSh+%k%;8 ze8>@8t_$$g$Prwj3-Bz-5nQPY@Px?`?9>H#?&JuDbOD}5If7wbfM-;WV3#hylPgDX zl`g>ZEJv_g7vL$EBe;hyz_Tw$a8F%;Ct@U+bNAuj1mWwV@hrt_Qs?9KukrEl)cN<) z`FNx1{JlCK&sm*+jn2o*SLfeb=i`yA^Y`g|yr*^kwK^Y9Z=HW1osU<#&c9CQ<3X?U R@!ukCz3}$e`TI4#{1;p9j{E=s literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynSequenceOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..305def9e0b0c817ba8fa4f93636d81fcf49326bd GIT binary patch literal 571 zcmah`xlY4C5PeIG4Ix0dVk#(T>;kPsOBIg75-12z8VYN1MvjBMIqXFE*C_Y^J_<25 zARG}yv6|JpW=8Y&{_+ao1p5|tEbLm?6R3xj`7!A*>kHHz*JCKHK!)SFUB)h-0~%$~ zP^T7J0*%5(F(st4RG{U!4_CuUD2GWX&pWqgZQ0iODeH=?AD!(ilDS^EjX&6F6Gz=CP{A<3Ck5DtJ;MNl(vI9QC>?o|3@-`uluD*HN0NEa;m80!#dA rd|uNKFt7}8HDNKj!l=P@m61BuN~VGJFUDl&M#*iWS#n$0p67rM9a5TB literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynStruct.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynStruct.class new file mode 100644 index 0000000000000000000000000000000000000000..ef7336820bc11ddef8be28e9c2f18524cfcb421a GIT binary patch literal 235 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2ATY#bp8C?bbXh~yu{qhWXHTp z5Hq->s5H5RkwG9Uu`E$PCowNw-#;lU6(ppFPlta&YEfcIW`15VBZDM%g+LpStabJe za&px7$xlwq@yshpElNvFPGw|JfN6zD7vvX}Bqrsg>U+BQxaO5)mQ=DaGB7eQF|aT& N12HQD8_|L|E4boXQXp(@6wyLmP!I*g(U(jJ5ep^l#Gvw1^jDzH6h>!M zUS!4}<#=wBrYrJtmvhedopaA}|NQ;-1Hc$wi0HWz38{&ESs@tTF_+m^L+Mtub`P2WpT6Cs4ql?WkOTQ*wo%>N>(#Blx5q>m>WEZjQQ5EY=((=jlYz+oAgBKT~pi6 z=p<9qxcqSo%K>#zF#j90iav6H6ER~s5T78;YN-Z$- zS8K}nVov9_^H~8a5}tz^>~zVtQP>O@{-=IuWb=kaH7GZ}Q#OY763!V*8ZPQZo?3`b3pifZ(j&hVP7hLulXi#vfH zNv!T~aC@~PTMmzx_=+K8XyPO3v0bcAln1G6a+#=ud?bQE9>sEjE4WJph$Y?2lS(& zJGxp58p{qd_nvd^y=Ug@`{NV98IGfnk&GaWR1}-o63ez&(lT~r?8?|Y6C{G_E(nForC zZi@<*p(uzTDq~;40S*;pkX3Mm1VeU_0oRVzG(3h_Tkq+brQ0p7T5lT-P8N)LGeeE$ z5%c}0ZCI|*4vlQ8%$<44rpb_V?o0A5yqYUFW#MAE;f)J_aZ1lg2E!8lOjt=zO`;t+ zOX~`q;=>F@)pxKL3SgLC_0uT?=mVl6trp%87-QBD^D#*u6HyBT1ph$dSf7Oy)K>%s W2#r-XknkZwjZvl00MfH)1NZ^2yTH)^ literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..576c36816aa309bf0020508e4ea4292714d4d7c7 GIT binary patch literal 488 zcmZ`$-%G+!6#kBG&aGuOHPb8*3+5hN^{5f}<0TM;gg|D0=RX ziq0}2!Y=pTbM86c_uX^P{rG%&18|Hz1u`@VsW{ScWMss#r67xK395vgguH|ug4_@0 z*TcR$m=RK!?U8kBnPbay%x*AsJ*P&9ow%MGoD!mX`GO!c{lSpUf|Ak8D@ZEVksu`h zsuA|jTJ5SoaVq}QF*$2 zYPNmb8aJ#Nmz`VUnw|4T-TcmUu0}&UAQYClRdo?Wd+d8Gk=Dz<+O#0ogd+D>20`H! z32Wm|h_KI%;C+KnC5Y?+S>qXGh_8tBqFS`u6Evaw2=Sg%U_cU^KZHEnkdQDQAU+}X L4vFU-M|gYz+fHz% literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..96219647798c3fc497dd223f7ec91e3241cc4841 GIT binary patch literal 7283 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 d=i{-i^RLnQc-QNEd}*ZZ7rp|}`J)dt9<|f literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynStructOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..22840f6705c5ac85bd196b2fd8219b6f2a8c9c02 GIT binary patch literal 680 zcma)4O-}+b6r3uu3Vxs+YH5om@7iJ8yi=cn4$cOF4-UppTfn2 z@Z5ystI ziihe}hrWp96T{#AS7s~*x;uS>Gy}s5tyTIx=@df>YjjFaPE>cWPPGkW7HU~+0)%a0 QdjZ=)Zi?+?ug9l#bd0Us%&jsWL~{ z{3#@jvg~~GLRkFH`F+Cb_RN_gtiSEXSjTClWE92+?F!cp2!sxL L=z8`s@b^4k=T|}P literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fd2b5852000d4b1e49eb3a2d557646ee2f4e762d GIT binary patch literal 1912 zcmah}X;afs6g{t7+7P5vmVztbQc@r+f=UrBi;99Mo1kJz&M_Y=)$OoF^oshi3yRGYkZjuV~U%v zhjD|SZ;F^kiZ3(#cuT}AZu8w80cinqBBB@-FfU>OivsQnxF_H~Lr`@Na|T0vIcx7K z*}Yw5esygwt!$8WKD%S27(z3qWjeDA{>0!GLx7v)aK@ zt?Q1azh2RD8`^e;D1GJ*LkA&VX>TAt|o!DE*(ri0>z%W@$xVrty(47+titbzbOGAHc?5G~qR1>P_ zCp8zI(K7|PNa#VYfF%hJa85!u;u6mCT_5@x!rtphc!*_&fu)7zX;R+^S7C!Um>wG$ zm2e&x1guDSgjETT@kBxrLju+$tQQX>3|Fgktd6S_O6ip<@0FpuDpHwCFQ|{xYv~n+ zzG_byU%1buym)MAP)*A*>=&ADsE*Dso2Va}dQ187>V~`~BMlHkYjNgOud1;oq9`e}hLsQADR=Nn zB=NdGf~!)7{_3tv*IqGP3@v;VOKby8Ak{A|6(+6(>S@x);8viI{+M0#=VcJNWN9bS zo|H`M89KGom(e#Ue*ybQ8&Dw0+I2?@P9Sg$-%-IE;i7fD!|)eu@lWvoLHjWe3&uiu z2%q668%Ho)q}31Bfe0TJ7ux0$`(t5`cL0}MXD7w`2o;f&$B5)177L5uGOoBGar*M) zlAK4&GKEPiLmtspBuYd++Hs;hTB*2GUdSM1H)NJF@mvY{7ur6c~j0K^RKaQ<9sIbo<2{!+(q;%8CF0 literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..89785abeaeebf6f464f6d26b3dc701b25f67ba13 GIT binary patch literal 790 zcmaJXn)d*1u`{rU!Qj*}21#DWMQ9>O+uc-ZA3Az@F#zJw%$*wxIA&XByb zorY?+8tQe=(ppBXVDY0Ut$Kh!wZjCQ2fc9d|T5=8^Ke z*}RNZ$TETmNjQ*kh?I;pj$|Ao%8*_%e#tiLy2B7|YF$k=HLIbPt4+P;PS9p%8ji!q zo50L*wxpYFE-egADlVLO%B1m#a}?>WM9;sQg=$m&Ema#_Hun~1^pGSltkBQ6jr7Pw zT9K<1*Ju|RR4A)_g1u1!gYvppj>AVE5aMMe_W|Dsvw^UOiFufylIz1i0f}I97Lrrm Y;p;;fsca$YLAV;DlY~CRSKbEj2TfhQ;{X5v literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionLocalBase.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..ec1ccdbd06f809f9fea8b29eae56a7ab89cd14f0 GIT binary patch literal 485 zcmZ`$T}uK%6g^jWUDr0XRWr2$u?N=&w|dkF{CEijAt{g^WLsrf(b>=?@Lv`50YTAo zKPtML2@y8T%)K-BoWq?nAD=I80FJRAg9=?iDvERz85L1%$B@O20!=|qL0&a>y$PP^jn1js2) z@4ffltDV?!4dJ(h-w}RK_yggOgg+7fO!y1ouY|u5{!aJ@;h%(m5&lj158+))O`mPA6<6n!f8C$qfY~n5Hk^ zcakDUy2rd)VWdn4|M^0{2o&~3HtJTt&@5tQIN-$Ay{b@&f>&6Nf6dS1x2CZa0e-@Pds#mEMhJ&E&xmZswe~^|oQF~CVc{R2Uvb8g6Esnc5 zlU#l%O|6ax6-(XE*7*^2Dr%0U<-i}Kbaz@h6}HBcj+O)0j<5Pc&&kg|8S)lJ3#oXcUd8i^7-4y{q4y0R_KG#@kX;d-XIQjxv$C0eAU;M8AM?3` zcyD{s^V+>N?(cYLzu5N2<1KVVbKA3ydq<}I@bKf_V?1eW!TMn-7})PsN^ZGylMCzE zEp#$?lLMW{Pth?V90uWXYzdcu1|}mmMCXK-{Rm68#7AfO;SSKdJK{%YX0_3Qp?6oL zjSmY=h-y1ryvz9PY*5tG)FSI+Y(;CxGVxC2jzeHzUsCq|{3-X6-1jl}Fk3Q+LVI2D`eIV(v zu^fx6GbCL$pu3~VLazw>;(=)Wgl!``9>{u0*cCTfXGz#L#N)9;uSxoBoG*^%jZZk~ zwNcg+ud1;-p3C|{sOaM9H&`l{?>mIEv<{TA5}Oev_6X`0Vk<($l2g`UGvZ}|b;4A8 z;;P}~q#gwaCI(zsFfAPDSzon)HS;E4f@+$dv44$7f+ zXP1$Oh-+k6ibh7+JWeRdVIxPRY-EDHflL}X%8wPP8mW;yCC7{$mlH;&$xwMzb%Z`}yh+|{ zuJa*vU3%Xf@?m+(FLzL6ggekeaO@?-glk)O)XjQpJN3%SRUb@x#l?hT4= z`9KLb+WP;;8g#3mZPsZhBCd9eN8B-QfOp$frRs!RD~_KGf47gsSsJ;{El*+m4f^;^ zg{-W_ljR0HVH|0pL*l>d@&AqTAmD@XsTb`n_}kHchdBM4ZkLu@@rnF{QiwR+`0Jo; zPXBGva!b?=ua3HVqwWrN&q%8yF$YeM!8y&+XqrxPHqA(`1#ZHh5&Y&bfQMg%M?`NL za*m_05l1?^O=BbA^yRiY@L&Eoj7Oa_x4tEWt3Kw!=gcjo5qu^R)v&%E_QFNYmRu@`U?CdeYa>RbKLSF{bl3J1ENd(`ZlBZ3({x36*!hy|~YGP`}OQqr^-2VI2_h z2jaBbI6kUDoqv|jN8zaR&(`^FY;5tn<&;`6!)r{slT8RkqH*Q0Jo{*Y0N|p^NJGGYWS7?!CBvKck-4Ir!ErF0oMV z>zu814qgNL1};r+ATAp5Y>3#+<;6BV|KN$C4}V#D_HHa>)>E*9Cax zWC#Xz0bWEIf+1ai*HeaIhc3WND?_kT7vNQvA=sr0@Pf+_T%il_+RG5!PZ!{2m?7A$ z3-F4}5bV(fcyVS3uG9s1okoJDyKk@Vdw9s|{Ht_6-n=^h{yHDeW1YWG=i?=<^RL$V zcy#Oh2k3mf&vpJaIv-DYosaK{!bfQ1-Go=a&Oe~@@dbg-zgFkty9Aw&Z?CoW;A;n+ Jf4#<+{{c~CoPhuU literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynUnionOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..a6eede64dfdd1202848b08283b0f0d775db143c6 GIT binary patch literal 677 zcmaiy%}&BV6otEpBT$5a0V;n}^oCOxPns_D2(|D^-i3I8~=wyF06x_39OEs7YdctASmH)c9;s zU%`+gsKW=`bh&cOdmTvS5b$LhCm$_-r3XbVYdsP0QC)`gB&pWy2wO88E=K8rr@`Z2 zUANrsaz~i;VNcx1(Bs-}GyLzrR0HnHR)f2Jkzin0qAy0j#cG@(j%9#m0tTroq{eAR jn

*%G#W=j*St$iS%e@C~cCGrIan?W|Ta6r#!$1)(o$d literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValue.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValue.class new file mode 100644 index 0000000000000000000000000000000000000000..010f74803ebcb47352d6fc6122a8995418041c63 GIT binary patch literal 241 zcmaJ+y$ZrG7`*rwf5BY`9h?KcL2Vrhg@S|o*APofo0J%ZzM6v%;6sUVaB%6t!NJ{e z-0S^#0@!20!8yhp6OJjzjAPEQGBy{c&PCK}stXzD_AAd+-4w&Jq&taCXWRR*rmO&6#2GJKb(EEI(eD9(I99tRx*9uiS~GVpx6KwRN5{twbCpd*ch= R3>X+X=%L%Pk3oC2#S7vrMza6_ literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..15eb55e821a37c501781421eb923b2f6fca7851c GIT binary patch literal 1972 zcma)6TT|0e5dKbYX+wZg0V`e+l{OUuc&CUKP^o|*AdbFdLWo#x(@qR3KSh59>P%&H zM&(6k{85g3+BCh98D7q1FW-K9cK7`K_w5IO2|N|ik1-MBn24YcS43K_^5t3>*SYvc z7&rO-mWWBD`7*_?w?$0j4nN%$kP$E=B8o8qvm)kjPr!Wv4+P9J1XX*tWH7`Ri`KSM zENm;Y%d0aPWu2t6#VsSv5Sq%FIeVJHpGa;n1h|+swPLjn3cI}d%Fyj2l8f$``b$H9ZEUGE zz$p*F=SNF7Jf-I=EhXUu1_Wd!Jj7`U#}Susik}8?o}sI`f)W<6$dJs=ElyIOj`Du> ztkdN9=$M2vI4fXD!Xqq8SixfnDO?t?Dq*d98D$u5>U(uUy`s34YYDQ!c|nYLlQ&~!t!b%yCg`@pqJ>ZNV_AX*~Q@G*2&=T)t-8uw@!x0hQ``M7pD z8RhKHW={lY8$RoKC7^L5}pMGryk+(9P zBsx=v(|VF_J+w30gYs9fPjmnoQoB3qXhjJG_Tk&BXd}FV9qkDG6ctv1@SwYmtBz#OHU+5$F3lhWXG^CJ! ZL7WGO=W=Sd3^nXYiHj!q? z{8eMn&%3>b@SVDtIc9eeaNo6B!6I^p+`F+m!uLhcIIbTtRMumO5@9rKM8#+t_Hn>q zM4}|VUbrVL?zQ=x3Mj3>o&H6;WqwEcS5w;x>E%^yZH5f8<%xiF@-_We*Om%RsY2~m z!H}XAi?XCYiIGozp?!-^RmkK4MdKOFkY5oS#k29jNXklsN67aS0s%7E{vnjfMufES P0Qm`tcPKRP=!V7@0tt3l literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonLocalTie.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..07ca78746178569fb870055c85142b4aae42d9a3 GIT binary patch literal 6851 zcmb7I2Y4Ju6@DwpI!hW`mW$kCJC2k1B*jrkLUjmOasmzxP9h_~2E^*LKA(NsmG4fr z6-wy6x6pehKmray0YYy9Lhrrz-do`RXJ_~JzN zx!(ERGA7^dk}KppJ@Q@o9^w0h9}s>>_z~g9gr5+8O86P!=Y(Gneo6Qh;n#%U5PnPe z9pU$cKM?*%_!HsJguf8}O86V$?}UF4{z>>3;opQ?3I73jLhuM}gmyv)VG*H|P#`QO zbP>7!38xS?5H=Dv5l$s+CY(mt zLO7jp2H{M?Rzi_5Ko}$p5zZoPBb;6Eh6~;~o^(x21=XPJHv&(#?T%{Y;b^)%ymKz} zrz@o$;T-=Q_p7tPXf!iFQp7b}h@c^-=;GK&BFh@&T zb<#A*@?=qPWY&jU|9b-PxG)ve8?^}Ib(EqRd~C?{*t&9Y&r2&|J*YJ%CZnht`0%l# zxR0I~XOBvaph4>htv$|KI_TGE9L-Ye2cw#$j?ucrQD>bwkyfLyOzEzybT+mogC3|x zzU}GaY)@0s>|~WoR@|92!`}+KTvgnC$Uo{2SN*U&JZ6n{O_sTd)Pe&+EeK2KVeP`T z*fV)3C^am-*U_05C7Xxq7qZjT;4~6GJxF}Jgbm5K*0)ywj>YjyVt*`gq1%mZb0KM+ znhWFPNLrD()&=WrB^n+JY8Ag)xza~;tP4G5qL##HoN^-xN(zpPh0KgTbazNwK*Bf=0U9J&`2aRMvh3$NL?C6X62}nV}#=}XXHx4!{p&c9wCo3a+N&F z$fM;kMjk7VGxB(Of{`Z@oX?^i&S{G*O6q-YF-HTrcl3a)Z3v$h_QWJB=0x!0m296Lq@(m;3 zBz#M5@nqot7F@fdl3(3h!G$(>+qffs9pr5~8TG(re(A7Z4s7jnX{A2xH%bR@3x8LL zW3n!s~F zd?SCaJkW9a@ae&}Xz+xzUF({W$*#HIHFvXlUfMmm#&MA7I;X=!0`Q;5eV}s|H96QO zI;Yb^HpTs57r_y_wA#7U!}$!&OQFpTRzhP3I-0_N?6(~H;w-%rq$w#wfW4{Dp{qFu zY+c7$IEU`GG$`2GdPhA?hq3c@j%f~tgF*9P{k$yEJ-{K7BUq{naNy(!dUXK~ryRjD zU4VluN6@DWaOmX-mg@o>kU4@Cx&Vi%CfG7BD|G=5-c-;o?Z`2kcw6UXReL7!nwf+{ zIu*p5FUiz?eFPlnIfB)?0Ed5$V2v)oMUe_JK5UwowYm?uRB{CCbOA1)RFH8R*}7hz z5-uxEfc<=mF2Kc>BiNt|a0%uJHtGUgm^p$?x&W7}6D&9*PfgB99!bs2z&)(Mf$FKO_ZjC4EMxBqJdNe*tOr4M4d^A3)QFpDj z+|M|K&THP!s8;p6_x$GljAB;j+%X9p6YOf8bEhT;rLgY6owE)kH4AEH$8MQEj>Nm@ z=MU;@z5BanyKkO9D8+LIxSKuz%Jv+=c3prHKSywZF2HjjM{svtfTu%_;6h!1XGV_T z9=ZTek{rQ3bpf6)If5O!08gD9!H6!vvnWR}stfRh$`S0;1$b`d2rkkEc$zuEg1Zk7 zZEbJj6{qv>rStLN)A{$-`FI=ZeEdG3%?Hm&osVa~#>b0O=if)?<8i93qDob^hfVU;Ybw7(0Ie literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueCommonOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..d952cb783b8a3d4367094e4abb17a01801a37723 GIT binary patch literal 213 zcmZvWJqp4=6oluQm{pU)JJ>`l7QBIIpDu+>Si=$$_D7OUAXl^S03J%*h>*r&_=b7B zVP5aY6TlG(!Yis9q8dwyn6;6~Bx|=(;?a zakBYzJzK4<$?mchuC}HlY#T8Mu7s(0c57tm2)q9UzGr@n2!w@K;3o$mA;c2!jKIEJ GO$0tPO*X0k literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9cba792912bd8fa771720c1a5b557628a00f351a GIT binary patch literal 1912 zcmah}Yg5xu5IwiAv>`w#uZmAZrKCW3_@s!If{KD5AdY^?gb=Y<(oPI2KSh59>P%sD zM&*ml_@f;6wn^U|zTDiqyXWlgy=U|H-}j#YCh$T;55`1{VOZNQX=LsFW`ZIhXNik_*Hv9XD~z;v(~nf z-Q8AF%d4|VWu2_4?3R&W2u!EVv^~S%jSX!u__&!qYS!9h=#CB5APG(&Uy-)2&Rs#= zx@K$o+a)cxu5D(B(v#j|=pw|9_Fhvmnz^m4*;d-z=0&82ZkH9gv*;dhHjr)P5 zQzwzxhMG2Q!+NdhhHC2!GqL)iskf9LuWra|GSUDsv=(Phb*mb0B8rkiYgqZvBWme1XBIdQeomspfgSS7~1gl(;u^k{=5t#mn`ih z+LMxLJxiw!`ZD_Ze=iPD!R zm*hNJ7AZ_x8g_{W5i1dSXvc~2Xrjy2PRI;p;<;k-G1@<)D;Koxa; dLQwvVt^>EM%Itv_1ff(tCAkSnw_m(5{0BZ4$`Swo literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1611c2dfdfa8292987fcd596df314b3d308e623f GIT binary patch literal 790 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 literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueOperations.class b/idl/DynamicAny/.class/org/omg/DynamicAny/DynValueOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..8414f6333349e59b12a473ab97e9f77dc62aa98b GIT binary patch literal 687 zcma)4%TB^T6g{Iz6?~u|@&h2mm`U8aLUdt#V3e?N(F|o$3(T~c7Gi(Rg&*KY883}! z35qTznYrhl$Gw@i_m@`yC#YB`S}0lAXDB*jW2BC3B~?!vTMH!_O7+I|KuiQ53GMQS z$ava4WyoDTJ2HqoUxyaT77iBqLr?b^D#Z7V%YEhYR{Q>}$vdqpLP#U;%9&ZnP^~u} zzdFxja`&93j`=Oc=!(%;-U-i4Sz(%0tN(-4=rWX3X0{0JeynYwV}{xiUy4ByK8?#M z<2i-H-!r5HrXi}cO{C_dYcgItkVYg6Whi`ayxki}Ct^5SLT&j<`8q9d{Bw6Qj58Fj zH(sbjYf}?R6g^EIlMKxQ!6&*X;v*!=sOy6z_~4;}jH1G_zIL-i(v=!bCaIx8`6>Q_ z{mSZApmwV){bbets4Z{LOhPh=ewm)>d(WA3Z=c)${r}HL0GDCuIE)D$1}wTxg@4>L!oY}y<6&WJAoOsGn>Gij(ObCaToVA zENEC{h~?#WO)wlWt8U4tR!YX)@{`#aW0iL2szs4wh)>&&EpIYJ(&K9kQMFA=zUrLPkbO<55D=dmmhBefxu2erU7MS!6xe)Guovpln=0<*TE&vbaMX_^)|P2HAN-lV^!I>pk-6v$ap zP3l%ZlB?UBvpTnAJ7njie66@>)))?jM$*rrsU0W@nXkEa#g_J#$jbu5#c)G{Srr(06{-bdc|aZY^QxRRi5DeyqJeO-SoVGH`E%15k97 z?$N_^FEi+BFz78w?=+V5JWgMOv@%*_nO(5I=mnHW^AdyyydV(WL(h&EP2vPj2GOI4 zqK9_-GXEm-EW3+n9WkFIiBX&i(o9-aS|;-u@pl->d_ueq&CGsAGeQbUaz=^_b&L$oUK8c`iEvyFr-&Ibu83af;8 WCR@irzxo6&v~`%mh%pl4hw&8>!@>Um literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPair.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPair.class new file mode 100644 index 0000000000000000000000000000000000000000..14fdbe87770c1050283d5ce55ff515db40a80064 GIT binary patch literal 392 zcmaKo%Syvg5QhJ0+N76gYrJ&Pjor0TIO0|jYU@G>RusBFZ9_OEIVs^-$YZ%Ef(swO zhY}~P;zDur&xLR1ALjkz^$ox|+I84yRk2q?1zsWh4h|d~IyfSf)STc23%QaamO2uT zCQ~}PAXHW|ehLYlAk89?CXpEBS|(~X(0P$^V9LH!TA3??)$30PrPA1{j`(CPy(E2%iJY9q{Lpc5(8;&2Y2V$9KMo!~U+>U}9 zZIsE;0Phs8Vs=cX!hW`Tcz0w-iGq(%eMe_^lFl2GBxq(iY L@lV$%Z$W$l)bCSc literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d08349a2eff9540f6623f14b87c63b0242aad372 GIT binary patch literal 2501 zcma)8Yf~Fl7=8{(*kswXAuYAgLIs2-8zr>W+7enzlPX9kwO|!d<0ha6L{(1%AI(`!|f!iYHkPx_eAt#Aw(zl1*G|5M#MNCgy`o}0iOkNJ%mLpaox{Fgs~h%R>TS(aSo3D+}jL8c+F4>J1a_U zUCEbJVwkX7F^_a$Z;853+hRCR65GnYk}N5eVsg#UwMvnK^XsZYw@Y47wW@A#C&{Hs zZO}vM4f~bBTIzP*7`zR;@_*37Uit@sWf{yvH!& zIJT;cDB3F+D{48f>H@YU?4Tr}3{spzm8x@JDeY0tY7%B~O+pNDiF)YJ3B9X}nQ#yJn|wgl@BVAhvcC^<_J4>*-~!LiHIk zcDOBSQicmn9F`?ZhMG50RE=Cs*UFlq?W;MXz%c7l-6rfs(=r}1vChHZ_2`UH&pFj7 zH)K+M#R;S(#k8dyE;>bHGevPxtC(;%yZLr&i?Yeb)TYNR9XETeWhmJJJ6IVe97w%0 zz%alkV3X@;Cl?G0UQ(O&(wa+`;tmEVSC^VGbi1AGfwXl}GDzlRZDJkjLLPr>(mmm} zn(O*ytd^{lH%wy&mq0VoxtA+ zFU!6Ygg2sR2=Q~Ats}yYF}NoC&C_TD=gjX0&Nna=y+97%`4bZ9^YAQR0kD5@j~vll zw;i1|-2lGmMTZ7@LhQ?FijK!Oa)RNFV~k`IWcAWZTu#UhjK0KJ!qK^jk8Pb%TW3&C dyujr;uJCoNfp;zXg1FU|BC?JEBcRqb{s-5DmnZ-L literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2c289a129d259d791627395f6a93c1bd0ba5937d GIT binary patch literal 826 zcma)4+fKqj5IqZ&3RVRLRJ3V@O_E zc3riab@jY!@}^$Rn_cyqH#K_F^@i(qj=_JTo4Rw#;7z3;7<>h*M%;tc3}k_q%C^R9 z42M62Lh1G_ueL1P;T1zui)O3s+&Khm<^;oEezbLmYNV!8N^NJHBbA+Qizx9_deqmT z%su%<%Q*$}P!t3Zl(DT~2fGRq*i(>1gxdR8iVMrAX*NTs!8=?vxLH?Am4;Sz7!pJB z#AJh^#E>%;(2SNS;2Q{5oI3rOV54#W`iGLM=;hR$V~Wm@v%d;La~#pK$zYhH!-TxF zh!WjMZL$mW3il)A&AfpxECV?IcaYx4Agh6OB2*CqM69Kdz?@nHZTX;?u@ z#SLk(sv(V=@^nkZnu^;DJy~b3Bp6Pmi*`Oy+{q`F*6u7WB-Tl~RNN9thTd7zGM#w_ zB^ujc@JlhhvPFB7;bb({=1K0-$+UKb?J&$l+w=?8Uh-Z;w!CK$2M{VGkqLPtQ#DL{)}VfzPo9Z){V`ApbQfGTGS&)*tf*(Gq)H{kj1v~ zz(^DfE1$?XwrS-lJijdr(%xuiRVvz!yd;sbN@a)4g|UsT$wgrbEe1cf?&Q zJ5Atj!k1|b%;pMi4LL?Jrs57q1`!6mUh|Gs$cXzZ#ln`brRTbePdGO4DZ`-HO*rP3 z*DO>rj?ZwH<8v9sa5G`oALc~KF^d+*J$%7&5pQ$6i7>}FA}YS*h$6=E6|x*U;tWHF zyMXTJ_!X z%0)BWwaslIyLF?w+)19L9*KPWor#68fi@Pp-i_8=cx4^ku~KUWOv;`kQ~~#MFXXEU?}{0W;#}S z#mj!kyJ%P3FAFOtvQCcSN;K8jFm3y+oj}XL4|q^U!8CSVoQ>$w;Xg)FC)@p1XAZj@ zmjwn*E}3k(P_**y@=YrjK^m*$y09R}4d+yOQcG{Lz%`xz&y|TAh=P z8g!-++we!|k2OMnKnhr{208`lOpA)1Z_(Efy&1iG^rv7y(g9>h>%&tIx=O%bg>T>0 z25|;wJ?&}u;Uj6k{u`9L@u%=t&{G2mVglzpvoyV>nXW%a?_-SV&(K?envOq*@)&*b zXHb4YVE+mHX}toiioSjFP>E&4WqY1{15m~mRa}t#X{&k2(?meBpZE#<4~$mPuT=3` z1p}*etYR=UM1Y~6!AURa(~!_p0UIY6T8SRafD1y3&~QCS+NGZI8rl2FYn-4?%!Pl) z$+R**8vX%;@lm~s*E5e4_T<06<4yd2_+Egkm}Kl9N^p?Y-X#z0DuF2k7S`hj6}+L$ sh2sZ=q{qWkRh)X{Bc#7%0&7Hr@coMbfrKdj%ZF-4Ht1m#SuNdo2`iFSVE_OC literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairSeqHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameDynAnyPairSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..06be337b4d5ba36b8ef30635d8cfe96c33545300 GIT binary patch literal 883 zcma)4+fKqj5IqZ&3Kqo+DtN^!l!r!NF(zIf)DSUZeDQ%S(2$bSVpA~ul_naAiGF|| zWt_!ofP}z9r?ZoD_ROA{ukZIy00-C&V*(2@7DJG+6h<5g5tc<*k+CXcO~yKd)Z%7S zXV|{a*-lln>s9TnZSlHMKDOH06|d`br1Y8_PL?5fXjq1O#Nbb*?-&B7c7@1$sd3nX zAQc^*R|Ml&_VD?v;q78sXg6w literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePair.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePair.class new file mode 100644 index 0000000000000000000000000000000000000000..5174f4fc01bcc648268fe96ef6de8266aa29b98e GIT binary patch literal 375 zcmZvYPfNo<5XIjlZPGu{)>Q4mi{8>$Sn#R{we=tbD+;-9+Yq)S8ws(HkL95V9{d1) zC~?v%3VM0V%>HKH+kO9deFJcYehU`54eT{hhg(U{#=eaM8;1l#EeLL~lq)F`sbld_ zQxWg3N5jytJxLiZ=H&7LEH#o4)bigprRX#L8Mu-#A*-tvmC@j ze*PqgM+#O{405Pdd>W$L8s9$S+vh6Q@dbZ26nv@RD}g}9I;cp2OX;$iPn3)KL~8lb z-I>HHNmJ!bnH1=pHcEzdN5B_}t_k>AOh=|{W(E2qQI92=vyoBSk)|bZJK}ktDIFy1 zqS=FzUNmwfOFYnva!oJn%7?mPCOMKK_bpS;k&|0zIcWrL>qVe@#nN-zOL}Eh&lV){ zOURv!hfX1H%DKbX6u3wlTl$`!DCnhpV#P9zQl3)tn^LFOIWMM4*|a!FV!l+_wMbp+ z#pJm_1|FM+MVv0Qb-BE2HGH0rz2J1NU>8oq7{(QRts#S`z<90D?O2;D7dEBIR^KSl zHDr+!=#e`K%h+_ggX*PW6H-GO-wO0KSh}~LlNHM-mo((@orZVtu7+!PLtv;D*J&`~ zXE$dp$zoQT3JeWf*w#=$kpq{gG55F^G?ZB!K~$p|x=HnHX%h_Dbr61ZkhD8? z0^fT42>vPpj*}4H!rQJ|nod@W#a^QG2}WWs&{>6&j=zNO3A*Ah;CqJP;VHbRq^I{=t0;M@!cYcfk$@_`;WJWYBVV zAIB+2&T{AkgX>2aO2^6TYtM0+&*A47iPvo2!!6fl*tO}6#h>AF6|eI-QpFXA#2{|B O6pFkfAPA`QjQ;@E3~fCC literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairHolder.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..19374ecb3808846331370e10cd721f261c7440f1 GIT binary patch literal 820 zcma)4+fKqj5IqZ&3RVRLRJ?+>QXU$8#h4&IpfO_9@JbeFNJ%fGDH#4r6OF_NKfsSN z?m|H!K}^%lcIKQjGpFw!y~|)`jx&OlM@M&A33)1|)ON=?LdEU27$qrZMr{qs zJg_+LI45Bql7tY#BDN*$U{^v4X$gCX5gg7kqG%g+%^`?1X@{x?wHj)v+SF<;L2AgI z7;G>TpYcEXn$hC=fq`Acsk4vSH5&Gh|0j5MUQLx8vvam&e+#(ZIA&`mf?$rlgj>s2 zP+&LaG&>jASG1pDQRNNfnFY{KFM8<&eCz?jJgsD3;TvL>5b-c^4---UjdumKDhb literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairSeqHelper.class b/idl/DynamicAny/.class/org/omg/DynamicAny/NameValuePairSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3ce87411a9e5bcb2f58550567f688618809e3238 GIT binary patch literal 2267 zcma)7TUQ%Z7~Ll`Fv&0oq^-6X5K3E<86_=MTL@6OR7puoZ7^D^#vvTzV3?$nNiFaF z6MgliuXtH$mM&TClWX~F^ws66erGbd5J=6-%$e`9&;G9S$BSPM0L)-V#VBS}T*f;J z-c=#tJr!4QRl%%^e$0hPl29-&gbOOpU@=6GYvT02iX|)y*A?-(8pL(+@j(zDs#rr( z!3|-tt|En-;&e;FhJxD+eOY&}#2HSficUUW+|9>VHtsAh#WzX1QrzYVhW>fWw%kPq zDH_W#$U;o7Y|+_bI2Da`c#^wtvg|ToSVCeURWylh)VIDW4V;s^{%iR z6}N@kL+~Pp!TDUltDlB3j4QaKA&p6fSfk$EDv;*)*NTO0?g+?r}c zhQPk34dE=NeC-*?2#|D8{}s|*<0<4S`syGdoWptFEJbf&rt8nq{}|)?GxS%Xq>Sf~ z9%I0G2I*%6_n$yc=~bvT4D6GKLM$gewin1Z2x)v-!JC3VEi)f^mIw&;=YE9tJH~1l zlxldTilKEn)-W6%A;9oY&`2-nQ{&T90-GQh+JrvLkOxAF@QFr{v_gI5HL{nLi$rAuue3Dz&{8QNSNZkbf{)zgFZ%))zgjt00l`gb5)*v@ zAIdn3#Q+JBi%xep-@h~S&whQse*!o_GK>i<$XERCTl$=$dAi@y;uVn>cOv;EWNMK9BHg**3BF2#VPg&F-PHnTQI}Fi#-r}0c zt(sP--0OEPL!u`iYX7%$;l!9Jbh9B+1b%%z8)?#juVYM$X5|@wKJv~1J#2w6ADxA}Sf-DO rV#Z@)9urDuItcV3vzQx3GU*riJCJ&r<`MIdDE&o2fewOCq72{%4=mdh literal 0 HcmV?d00001 diff --git a/idl/DynamicAny/.cvsignore b/idl/DynamicAny/.cvsignore new file mode 100644 index 0000000..9890ac7 --- /dev/null +++ b/idl/DynamicAny/.cvsignore @@ -0,0 +1,2 @@ +.class +.java diff --git a/idl/DynamicAny/.java/org/omg/DynamicAny/AnySeqHelper.java b/idl/DynamicAny/.java/org/omg/DynamicAny/AnySeqHelper.java new file mode 100644 index 0000000..64d33d9 --- /dev/null +++ b/idl/DynamicAny/.java/org/omg/DynamicAny/AnySeqHelper.java @@ -0,0 +1,64 @@ +// +// AnySeqHelper.java (helper) +// +// File generated: Thu May 19 07:31:41 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.DynamicAny; + +abstract public class AnySeqHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, org.omg.CORBA.Any[] value) { + any.insert_Streamable(new AnySeqHolder(value)); + }; + + public static org.omg.CORBA.Any[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof AnySeqHolder){ + return ((AnySeqHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = _orb().create_sequence_tc(0 , org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_any)); + _type = _orb().create_alias_tc(id(), "AnySeq", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/DynamicAny/AnySeq:1.0"; + }; + + public static org.omg.CORBA.Any[] read(org.omg.CORBA.portable.InputStream is) { + org.omg.CORBA.Any[] result; + int length0 = is.read_ulong(); + result = new org.omg.CORBA.Any[length0]; + for (int i0=0; i0 + +#pragma prefix "omg.org" + +module DynamicAny { + local interface DynAny { + + exception InvalidValue {}; + exception TypeMismatch {}; + + CORBA::TypeCode type(); + + void assign(in DynAny dyn_any) raises(TypeMismatch); + + void from_any(in any value) raises(TypeMismatch, InvalidValue); + + any to_any(); + + boolean equal(in DynAny dyn_any); + + void destroy(); + + DynAny copy(); + + void insert_boolean(in boolean value) raises(TypeMismatch, InvalidValue); + void insert_octet(in octet value) raises(TypeMismatch, InvalidValue); + void insert_char(in char value) raises(TypeMismatch, InvalidValue); + void insert_short(in short value) raises(TypeMismatch, InvalidValue); + void insert_ushort(in unsigned short value) raises(TypeMismatch,InvalidValue); + void insert_long(in long value) raises(TypeMismatch, InvalidValue); + void insert_ulong(in unsigned long value) raises(TypeMismatch,InvalidValue); + void insert_float(in float value) raises(TypeMismatch, InvalidValue); + void insert_double(in double value) raises(TypeMismatch, InvalidValue); + void insert_string(in string value) raises(TypeMismatch, InvalidValue); + void insert_reference(in Object value) raises(TypeMismatch, InvalidValue); + void insert_typecode(in CORBA::TypeCode value) raises(TypeMismatch,InvalidValue); + void insert_longlong(in long long value) raises(TypeMismatch,InvalidValue); + void insert_ulonglong(in unsigned long long value) raises(TypeMismatch,InvalidValue); + //void insert_longdouble(in long double value) raises(TypeMismatch,InvalidValue); + void insert_wchar(in wchar value) raises(TypeMismatch, InvalidValue); + void insert_wstring(in wstring value) raises(TypeMismatch, InvalidValue); + void insert_any(in any value) raises(TypeMismatch, InvalidValue); + void insert_dyn_any(in DynAny value) raises(TypeMismatch, InvalidValue); + void insert_val(in ValueBase value) raises(TypeMismatch, InvalidValue); + + boolean get_boolean() raises(TypeMismatch, InvalidValue); + octet get_octet() raises(TypeMismatch, InvalidValue); + char get_char() raises(TypeMismatch, InvalidValue); + short get_short() raises(TypeMismatch, InvalidValue); + unsigned short get_ushort() raises(TypeMismatch, InvalidValue); + long get_long() raises(TypeMismatch, InvalidValue); + unsigned long get_ulong() raises(TypeMismatch, InvalidValue); + float get_float() raises(TypeMismatch, InvalidValue); + double get_double() raises(TypeMismatch, InvalidValue); + string get_string() raises(TypeMismatch, InvalidValue); + Object get_reference() raises(TypeMismatch, InvalidValue); + CORBA::TypeCode get_typecode() raises(TypeMismatch, InvalidValue); + long long get_longlong() raises(TypeMismatch, InvalidValue); + unsigned long long get_ulonglong() raises(TypeMismatch, InvalidValue); + //long double get_longdouble() raises(TypeMismatch, InvalidValue); + wchar get_wchar() raises(TypeMismatch, InvalidValue); + wstring get_wstring() raises(TypeMismatch, InvalidValue); + any get_any() raises(TypeMismatch, InvalidValue); + DynAny get_dyn_any() raises(TypeMismatch, InvalidValue); + ValueBase get_val() raises(TypeMismatch, InvalidValue); + + boolean seek(in long index); + void rewind(); + boolean next(); + unsigned long component_count(); + DynAny current_component() raises(TypeMismatch); + + void insert_abstract(in CORBA::AbstractBase value) + raises(TypeMismatch, InvalidValue); + + CORBA::AbstractBase get_abstract() + raises(TypeMismatch, InvalidValue); + + void insert_boolean_seq(in CORBA::BooleanSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_octet_seq(in CORBA::OctetSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_char_seq(in CORBA::CharSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_short_seq(in CORBA::ShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ushort_seq(in CORBA::UShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_long_seq(in CORBA::LongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulong_seq(in CORBA::ULongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_float_seq(in CORBA::FloatSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_double_seq(in CORBA::DoubleSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_longlong_seq(in CORBA::LongLongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulonglong_seq(in CORBA::ULongLongSeq value) + raises(TypeMismatch, InvalidValue); + + // void insert_longdouble_seq(in CORBA::LongDoubleSeq value) + // raises(TypeMismatch, InvalidValue); + + void insert_wchar_seq(in CORBA::WCharSeq value) + raises(TypeMismatch, InvalidValue); + + CORBA::BooleanSeq get_boolean_seq() raises(TypeMismatch, InvalidValue); + + CORBA::OctetSeq get_octet_seq() raises(TypeMismatch, InvalidValue); + + CORBA::CharSeq get_char_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ShortSeq get_short_seq() raises(TypeMismatch, InvalidValue); + + CORBA::UShortSeq get_ushort_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongSeq get_long_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongSeq get_ulong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::FloatSeq get_float_seq() raises(TypeMismatch, InvalidValue); + + CORBA::DoubleSeq get_double_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongLongSeq get_longlong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongLongSeq get_ulonglong_seq() raises(TypeMismatch, InvalidValue); + + // CORBA::LongDoubleSeq get_longdouble_seq() raises(TypeMismatch, InvalidValue); + + CORBA::WCharSeq get_wchar_seq() raises(TypeMismatch, InvalidValue); + + }; + + local interface DynFixed: DynAny { + string get_value(); + boolean set_value(in string val) raises(TypeMismatch, InvalidValue); + }; + + + local interface DynEnum : DynAny { + string get_as_string(); + void set_as_string(in string value) raises(InvalidValue); + unsigned long get_as_ulong(); + void set_as_ulong(in unsigned long value) raises(InvalidValue); + }; + + typedef string FieldName; + struct NameValuePair { + FieldName id; + any value; + }; + + typedef sequence NameValuePairSeq; + + struct NameDynAnyPair { + FieldName id; + DynAny value; + }; + + typedef sequence NameDynAnyPairSeq; + + local interface DynStruct : DynAny { + + FieldName current_member_name() raises(TypeMismatch, InvalidValue); + + CORBA::TCKind current_member_kind() raises(TypeMismatch, InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) + raises(TypeMismatch, InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) + raises(TypeMismatch, InvalidValue); + }; + + + local interface DynUnion : DynAny { + + DynAny get_discriminator(); + + void set_discriminator(in DynAny d) raises(TypeMismatch); + + void set_to_default_member() raises(TypeMismatch); + + void set_to_no_active_member() raises(TypeMismatch); + + boolean has_no_active_member(); + + CORBA::TCKind discriminator_kind(); + + DynAny member() raises(InvalidValue); + + FieldName member_name() raises(InvalidValue); + + CORBA::TCKind member_kind() raises(InvalidValue); + + }; + + typedef sequence AnySeq; + + typedef sequence DynAnySeq; + + local interface DynSequence : DynAny { + + unsigned long get_length(); + + void set_length(in unsigned long len) raises(InvalidValue); + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch,InvalidValue); + + }; + + local interface DynArray : DynAny { + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch, InvalidValue); + + }; + + local interface DynValueCommon : DynAny { + + boolean is_null(); + + void set_to_null(); + + void set_to_value(); + + }; + + local interface DynValue : DynValueCommon { + + FieldName current_member_name()raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + CORBA::TCKind current_member_kind() raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + }; + + local interface DynAnyFactory { + + exception InconsistentTypeCode {}; + + DynAny create_dyn_any(in any value) raises(InconsistentTypeCode); + + DynAny create_dyn_any_from_type_code(in CORBA::TypeCode type) raises(InconsistentTypeCode); + + }; + +}; // module DynamicAny + +#endif // _DYNAMIC_ANY_IDL_ + diff --git a/idl/DynamicAny/.svn/text-base/build.xml.svn-base b/idl/DynamicAny/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..a781b46 --- /dev/null +++ b/idl/DynamicAny/.svn/text-base/build.xml.svn-base @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/DynamicAny/DynamicAny.idl b/idl/DynamicAny/DynamicAny.idl new file mode 100644 index 0000000..c588842 --- /dev/null +++ b/idl/DynamicAny/DynamicAny.idl @@ -0,0 +1,290 @@ +// IDL +// File: DynamicAny.idl +#ifndef _DYNAMIC_ANY_IDL_ +#define _DYNAMIC_ANY_IDL_ + +#include + +#pragma prefix "omg.org" + +module DynamicAny { + local interface DynAny { + + exception InvalidValue {}; + exception TypeMismatch {}; + + CORBA::TypeCode type(); + + void assign(in DynAny dyn_any) raises(TypeMismatch); + + void from_any(in any value) raises(TypeMismatch, InvalidValue); + + any to_any(); + + boolean equal(in DynAny dyn_any); + + void destroy(); + + DynAny copy(); + + void insert_boolean(in boolean value) raises(TypeMismatch, InvalidValue); + void insert_octet(in octet value) raises(TypeMismatch, InvalidValue); + void insert_char(in char value) raises(TypeMismatch, InvalidValue); + void insert_short(in short value) raises(TypeMismatch, InvalidValue); + void insert_ushort(in unsigned short value) raises(TypeMismatch,InvalidValue); + void insert_long(in long value) raises(TypeMismatch, InvalidValue); + void insert_ulong(in unsigned long value) raises(TypeMismatch,InvalidValue); + void insert_float(in float value) raises(TypeMismatch, InvalidValue); + void insert_double(in double value) raises(TypeMismatch, InvalidValue); + void insert_string(in string value) raises(TypeMismatch, InvalidValue); + void insert_reference(in Object value) raises(TypeMismatch, InvalidValue); + void insert_typecode(in CORBA::TypeCode value) raises(TypeMismatch,InvalidValue); + void insert_longlong(in long long value) raises(TypeMismatch,InvalidValue); + void insert_ulonglong(in unsigned long long value) raises(TypeMismatch,InvalidValue); + //void insert_longdouble(in long double value) raises(TypeMismatch,InvalidValue); + void insert_wchar(in wchar value) raises(TypeMismatch, InvalidValue); + void insert_wstring(in wstring value) raises(TypeMismatch, InvalidValue); + void insert_any(in any value) raises(TypeMismatch, InvalidValue); + void insert_dyn_any(in DynAny value) raises(TypeMismatch, InvalidValue); + void insert_val(in ValueBase value) raises(TypeMismatch, InvalidValue); + + boolean get_boolean() raises(TypeMismatch, InvalidValue); + octet get_octet() raises(TypeMismatch, InvalidValue); + char get_char() raises(TypeMismatch, InvalidValue); + short get_short() raises(TypeMismatch, InvalidValue); + unsigned short get_ushort() raises(TypeMismatch, InvalidValue); + long get_long() raises(TypeMismatch, InvalidValue); + unsigned long get_ulong() raises(TypeMismatch, InvalidValue); + float get_float() raises(TypeMismatch, InvalidValue); + double get_double() raises(TypeMismatch, InvalidValue); + string get_string() raises(TypeMismatch, InvalidValue); + Object get_reference() raises(TypeMismatch, InvalidValue); + CORBA::TypeCode get_typecode() raises(TypeMismatch, InvalidValue); + long long get_longlong() raises(TypeMismatch, InvalidValue); + unsigned long long get_ulonglong() raises(TypeMismatch, InvalidValue); + //long double get_longdouble() raises(TypeMismatch, InvalidValue); + wchar get_wchar() raises(TypeMismatch, InvalidValue); + wstring get_wstring() raises(TypeMismatch, InvalidValue); + any get_any() raises(TypeMismatch, InvalidValue); + DynAny get_dyn_any() raises(TypeMismatch, InvalidValue); + ValueBase get_val() raises(TypeMismatch, InvalidValue); + + boolean seek(in long index); + void rewind(); + boolean next(); + unsigned long component_count(); + DynAny current_component() raises(TypeMismatch); + + void insert_abstract(in CORBA::AbstractBase value) + raises(TypeMismatch, InvalidValue); + + CORBA::AbstractBase get_abstract() + raises(TypeMismatch, InvalidValue); + + void insert_boolean_seq(in CORBA::BooleanSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_octet_seq(in CORBA::OctetSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_char_seq(in CORBA::CharSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_short_seq(in CORBA::ShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ushort_seq(in CORBA::UShortSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_long_seq(in CORBA::LongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulong_seq(in CORBA::ULongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_float_seq(in CORBA::FloatSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_double_seq(in CORBA::DoubleSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_longlong_seq(in CORBA::LongLongSeq value) + raises(TypeMismatch, InvalidValue); + + void insert_ulonglong_seq(in CORBA::ULongLongSeq value) + raises(TypeMismatch, InvalidValue); + + // void insert_longdouble_seq(in CORBA::LongDoubleSeq value) + // raises(TypeMismatch, InvalidValue); + + void insert_wchar_seq(in CORBA::WCharSeq value) + raises(TypeMismatch, InvalidValue); + + CORBA::BooleanSeq get_boolean_seq() raises(TypeMismatch, InvalidValue); + + CORBA::OctetSeq get_octet_seq() raises(TypeMismatch, InvalidValue); + + CORBA::CharSeq get_char_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ShortSeq get_short_seq() raises(TypeMismatch, InvalidValue); + + CORBA::UShortSeq get_ushort_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongSeq get_long_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongSeq get_ulong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::FloatSeq get_float_seq() raises(TypeMismatch, InvalidValue); + + CORBA::DoubleSeq get_double_seq() raises(TypeMismatch, InvalidValue); + + CORBA::LongLongSeq get_longlong_seq() raises(TypeMismatch, InvalidValue); + + CORBA::ULongLongSeq get_ulonglong_seq() raises(TypeMismatch, InvalidValue); + + // CORBA::LongDoubleSeq get_longdouble_seq() raises(TypeMismatch, InvalidValue); + + CORBA::WCharSeq get_wchar_seq() raises(TypeMismatch, InvalidValue); + + }; + + local interface DynFixed: DynAny { + string get_value(); + boolean set_value(in string val) raises(TypeMismatch, InvalidValue); + }; + + + local interface DynEnum : DynAny { + string get_as_string(); + void set_as_string(in string value) raises(InvalidValue); + unsigned long get_as_ulong(); + void set_as_ulong(in unsigned long value) raises(InvalidValue); + }; + + typedef string FieldName; + struct NameValuePair { + FieldName id; + any value; + }; + + typedef sequence NameValuePairSeq; + + struct NameDynAnyPair { + FieldName id; + DynAny value; + }; + + typedef sequence NameDynAnyPairSeq; + + local interface DynStruct : DynAny { + + FieldName current_member_name() raises(TypeMismatch, InvalidValue); + + CORBA::TCKind current_member_kind() raises(TypeMismatch, InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) + raises(TypeMismatch, InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) + raises(TypeMismatch, InvalidValue); + }; + + + local interface DynUnion : DynAny { + + DynAny get_discriminator(); + + void set_discriminator(in DynAny d) raises(TypeMismatch); + + void set_to_default_member() raises(TypeMismatch); + + void set_to_no_active_member() raises(TypeMismatch); + + boolean has_no_active_member(); + + CORBA::TCKind discriminator_kind(); + + DynAny member() raises(InvalidValue); + + FieldName member_name() raises(InvalidValue); + + CORBA::TCKind member_kind() raises(InvalidValue); + + }; + + typedef sequence AnySeq; + + typedef sequence DynAnySeq; + + local interface DynSequence : DynAny { + + unsigned long get_length(); + + void set_length(in unsigned long len) raises(InvalidValue); + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch,InvalidValue); + + }; + + local interface DynArray : DynAny { + + AnySeq get_elements(); + + void set_elements(in AnySeq value) raises(TypeMismatch, InvalidValue); + + DynAnySeq get_elements_as_dyn_any(); + + void set_elements_as_dyn_any(in DynAnySeq value) raises(TypeMismatch, InvalidValue); + + }; + + local interface DynValueCommon : DynAny { + + boolean is_null(); + + void set_to_null(); + + void set_to_value(); + + }; + + local interface DynValue : DynValueCommon { + + FieldName current_member_name()raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + CORBA::TCKind current_member_kind() raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameValuePairSeq get_members(); + + void set_members(in NameValuePairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + NameDynAnyPairSeq get_members_as_dyn_any(); + + void set_members_as_dyn_any(in NameDynAnyPairSeq value) raises(DynAny::TypeMismatch, DynAny::InvalidValue); + + }; + + local interface DynAnyFactory { + + exception InconsistentTypeCode {}; + + DynAny create_dyn_any(in any value) raises(InconsistentTypeCode); + + DynAny create_dyn_any_from_type_code(in CORBA::TypeCode type) raises(InconsistentTypeCode); + + }; + +}; // module DynamicAny + +#endif // _DYNAMIC_ANY_IDL_ + diff --git a/idl/DynamicAny/build.xml b/idl/DynamicAny/build.xml new file mode 100644 index 0000000..7753427 --- /dev/null +++ b/idl/DynamicAny/build.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/Messaging/.class/org/omg/Dynamic/ContextListHelper.class b/idl/Messaging/.class/org/omg/Dynamic/ContextListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8b2c37b8ecd6bc37ba35f9c412ad1d28629dc7f5 GIT binary patch literal 1617 zcmaJ>TT|0e5dIFmqzyr!1q8GxBG{%%0IyI)p`akaDrJ~)eCULd=>$t!(}3_(_yxY= zWuT)o4m>&Ik8<48rWe}c%Q?yJew%N1zs;Y&KYjt2!iI=G+!HYlMZkmz7bZnA-xu&e zgclF}WO*duF*iOD(Tiz69Wx?gnB}ie`7!6iGoIqP5A)nJ&5s2EaRG}Ao|Ju<*BScN zoRv{>yBQ^(SYMb|Hpm*!ZR;@x@2p`O_8fyN9NA=Wb2DA3oVCT!8;&#}3C=-=Stwld>6tE=W1wss=i^D3nFsXlB&SkfCiwD0Huq}x~Si@_EV6FV6gS4KvjhrbVfj1Juh)B4KegSVK+{UPc>j+60!ySh9 zc+RwGTB=d7C9EUKFtW0!&X9n{Ik&|_Q`1d~uUdtL7tJN^u}DxW|sqWzc<0+ARlvAsoDA6!H9rySw@X#t$fQ$&EX4}FF7 z8+}D|tQK*lh|WM4W$OM0i5#3a15e@t8z4Nbjf3wjp~(>lRH~y@bDTlCIc-5MBB(|y g0kk$wK!Dslz$-_K=qcCj!`%zLB{w{bh?L#<2g*=?NdN!< literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Dynamic/ExceptionListHelper.class b/idl/Messaging/.class/org/omg/Dynamic/ExceptionListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d1757f0bbc288a49ca176cf08798007687f101f3 GIT binary patch literal 2194 zcma)7TUQ%Z6#h;oFiAL+5LzuIU;)7}Q9`L&C0yiEZ6qzVAX=-ALo&vJWRgxMSl;_5 z`szzxvAR;0E?Mo9Yx!&R)#a-0Gc!rZK-8CW&g`@IcfNg{-(LK53}6=bBN)Qf2;Rh7 zGTx3r!nFwA!Mif%BIrgsOp%XJ}pKZFm&$Bhs& z5qyYs8CkL4jNleF#By84M>6g(bgA}1MQ6B}En9_Dxl~B4ZroW}PHmBNwVc<}4BhjF zY1oSlQetYGAt=POsby=2;X-1{XG!M5$S|wAWizA_zWZhKAbrm#YrZBPko5<)rRB(W z`YhY2j>ZhVo3@tQyQx*Sw4I_(0VAHSf0s`2Y`)15F!BuNNn=;r*HT5zETlGV%P9sgx~SJd(ibe<|bp4g8i*!*c7|vj$j)#yM@-#Q4yuke6Hx^ zg<}M-$k^ie7-J0MjXbU$m|DrmrLI57=@r{3n^~i3-zXRJx+P4uWqiW%Def{v^=isC z@?PdCKOCRo9>?c`^FS*mO(c#l@Fm9^nC6IMm}3-UGE|PQpmFRV$B~E5k;Lnilct#< z!0|N-3=^5P>>O3wv|xKC)440tGcvy6FtE$;Qp2nE>g3piBBRJrg2_=v`&8pp86x})@kB>Ektd%eMVDl5bEt0Bh$>>3>{t^mt+W7) zdF|0=J#nhMoAr6ZoGNf%E7s_>fgIJVt*eG8UbX5}ui)Ts<|fL?DyLp)569N(x?xh2 z^w@i9qpc`s{w8;{sHLI>-Bv4>Q8H{}UsvrM!;Ig17c%YV(?BPbnCC)OzhBeMoQrcc zk@3IU7-atf)#pKJMMJAPe6|y(XTcc~Ul{(!Q)BHWXT_HxB4&LN$f zaQ{S=yA9FAIXOTmAQAO#Z{Q9$QhVGC>MRPdXQYzIf_e=vao`QW(2aqDo1MfQOTmr!(1P-0sFvjt!cRPq60wnEKeui{6`4quAx?GSj zCNSx#WoZ{`it-%Yk1(P2GJ=?BT`GC^Hfi2p+EAuSHaze6-ROrn=JA4=@;-+v@q z_`L|c0GE+s>`w}F7&Exyfn6goiNNAY^0jC0{PCc z+LR!3Q*yk9?z9^Earxq?s9!z0^w_D>J%Y%-X`AeTAgpa)6G$RWkkbN71SMBIYSam~ zv=L#~@t9GysD5s{ZFb2x*4h&lk;=ViGOnxzmXzCUxJIrp-X}p;+a5V)(7y^534-+B z6|AaQ!@7zMqzKmf{K=zjw9J}*`cR`TGab8R-m){ts#A|3*);A9-7@Tk zUamH2jS;N$3wu5e#_dfiCjVEQTCNb6dJY~2+A-u{;BD}`@Qp17Dh(MMsMNiEVK{d9 ztBQgk#y=t~|I?%G%wuuDa#tqY-2anb#>4k4wP$S?}|EElEV!VmDH z#5>jsW^>QXJ?Grl=hyoOfD0Vf;G{8)9gtRP736MG%{6InR}*LwsV!}#9kA;PIt<#;g74|DcD@iLh65|?leRl zVTb^g5LMI&N87PRxt3`%7k>^yb0J@)SV|p>$!wwKyvFHPzS-hAGgi))O5Bacx7sE) z#~I(i2hWTWM{dMNBG-%2Ww<}bUH-KgiP4YNpf`RvVI6zF^fAjl&NUnzov%=edMkJv GA-(~ZHc=4( literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Dynamic/ParameterHelper.class b/idl/Messaging/.class/org/omg/Dynamic/ParameterHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..852cd54485b5d3ac0a61d7f9cdbe0c98bb95c00c GIT binary patch literal 2459 zcmai0Yf~F#6n^!c;4O3Z3FlvyZfHobIy6rdGq(be?9~7CLV~G!22R*krFT` z!h@S4Zs7v~w?+6dAEc8z0@D02BVrs2LHhYnz()Zr2C;;Xx$Uxu5V8T}M0|o3u6CFI zd>X(#E?x~_O~7X&MtG=od>*8?FSzaofBRCzCcfgIUkms~K%T*uH}~r*!=-G^C?{*x zax%Sg@6LR3jZV|GlA2=h&uO}5-eT~?;_D1veoT*i%_uNjh{au&WX_E=eMdD+hMAa4 zKCkbmI!Bp(U8!otDM<_w`#Qz>rel=_-dsHjv? z!fNL@I)Jq&%OS1AaGo@_lwBoRQS@?h)igA{Ov!i+RUzrT8%(`sm^?^wNv}6dQdgB~ z>U4Cz`-Wyx`O+u)T4|VFXa7^Ez+ACnHAljAObYl`f`T~1)pj!n3ba_OlvIPO7X%a~ zlt5s@>Q2(sN>1ykK@z@0S;F_w7|wMIvanZF>!w!IC2V0^!rOR9!Zp0gFxn1ivxiF2 zD4IF7T2Kv!fMS#zRaG|yR3ubE<~7tgh99W5Ricvsf;5d82{FVanwGa1f*nps*a2~2 zd?}NiC5BG%SOba8&P+`+jI?nK$OSYc?Bc$JMeK3tlw=M+3iwIF&-g{c4g7j);nYf< zCll_LW2LaAa*__WgWAc{08m=IEez3an+FhCRCn1@?a7}#J9(Q>oL~%-T}O754)?lR zmcxiMJAKyI2bh1HIccQ>Jw=;Fv72iHRd1v+bAAr|a8S*{m^6i#iJ0XYOy-3@^+M^C( z+_S;q@_S^#E$9@a*ID;Avg_FoD8B9;ryF*HE^!8tZ##Mm(mO3&`hAVQhUv-Z>5~t^ zey10ZA}umU9JYjjw}qhtOB#fXgd-h+7ejO!l8@loNF2i3gwJ*o#Orv&QOnYktI6^U z_#YxFKZm~wA)9ys&qJI^Jcs8o0tdgro0XdoTR3w-76QfyJ4ZW3wgGse^cN$^@zb(( zJa3W~N1u5F=`Y;$Jw<3)_8cL!5qXIaKf>82!t4;ktFqTRjkIvi`flNT3l}06Dd5Y0 zKq7mdo*l~v_784TAll_lptDvOz!SODE(2X4j&PE)(J~LBFSlCK zunbK@1W^@x8nW2eki&t7LnH{YbFE)FR+D)Iu{P~d!=iS}sMg!8!3lC>(u|{#8EI~z zFtc1K92x~wp6hlhpozWz&Pef-tIXA!N^XJH@Q7umI1!ge1;LVdiHuKNEJb{YG(}wz zfAQf&bPMkwFQS3rc-0@L5D*U#mE%J34S_Lc4KW{+^f8e_ae&|-NF3|4kYeE#fdN8e Ul?^0(h*TqDrO*J%v)l&o1246?bpQYW literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Dynamic/ParameterListHelper.class b/idl/Messaging/.class/org/omg/Dynamic/ParameterListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..92f92300b93889b3ba68cc2785ba94e922b4bcfa GIT binary patch literal 2176 zcma)7TUQ%Z6#h;oFv)Nb2(15|nxb*=syeRa9o?lYNONJ#W$=FHi9fBW0ldH&+}Ljbeb)i8=#4HxmQ ziuW`qcwfUMe4yg8hF;7C=_a9KUS2L}7{OwY9#`b)Lk&w5`&vyaBma%7M;vm0hRh&jx4_8h{OEP@I|g5Y>K!M z)cW?WkWClvmT-ol8jI?vP{UJ$$ow;$j&w7XwQ4b@4AWh8Skl%0k^RJQzGG`NwA@(< zd9!lFdaA9_>z&$UPK|ia$d$<3aE3b95ouGlak}XCvE%N;e14Ey?NowBxk)-Ugm5%P4jT80U zx4VyS`6uZ|GD<%t3Q!I2`T9k|jU z&fu&k9f2P{y6xBhfO04H82&PPsvtp}!<46%qPJAj^{424h;jW1ddpB#v8PZTqA&IY z%5Ml9Jc2)^m!VbAcR&^@v7B_-o+sM?l<{R1Z%O{NlRV_hL_o4X_Y3$lj8)LDRPb6E z1J~(T!C+{J07JimlU&lLVW6i1HbF47&^(v{7lZ_%;aZTi2|eKz()W|q1VNox2>*$b zDP?gi{1XOaV|oRzZ#+=gqnCfj8u3m(`d0#gVqtj7+^ctcqT r#|{ZekA-I|IQ76sNPo!$R*44T`xgNM2~qqrM`}ho=wTFDHQjgxjmIxa literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Dynamic/ParameterListHolder.class b/idl/Messaging/.class/org/omg/Dynamic/ParameterListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..143c58111234f07ca8aae52cff26e9425e58e665 GIT binary patch literal 829 zcmaiy+fKqj5QhJSmO?Fx2UHM6#Y2UQMsG1D9xgN?!Km@Z3$jW>Y6>NF(fC%HXe1{3 z06vs)7ON4G;zg&slkcCM`FB4)U*7?2VNFLI(;8+H&@ihbgRBg5GUPPOYgo{bXHajs z+p!sP7ZuNMSYESX9o)Bg)48&axzC%nu>CSaY};u$VuvAWZk#hH`(B+yd2^Ubf@;mT zd7WY1{4Kv0xYq!|jKl8SR94n4PS`wXdTe#IxGG5UtcGop`_Ko1)WuxY{~l+$}y=?{~_c)+9s mCQ&SPq5MH6Fgb{nicg4kq5hmSg>-mx`;iTTc^F5dIFmY`ZMC7Al~iC}6u)7Vrv16bcGbtWrW^d}x;Tge;bA*)9k_gs6!;J7uh+|elT*4fKCvEQ+I74?L zZ*6G#tqm=nT$!EGR>>OAXL*dlJ7t)LJN7fkJ!c12>Z>=+Qg(Edcf(wvg7P)0J zM8Y-x8FN4OA+f3N>RL`WH?)*(8RkYzq?Y)eZRr_8g&UzF4PXo{DO=BcT-FP#`g)F2 zH;7xMrrtVkm#S(qvJ9ORQOAVv7T3u;QA?tbw`}ndZP6_3*hHM`Td~HhJfAGXrZ&Z{ z%#qx&FOoECL66O`WL?1(6^{^@}O!4i7d@jo^5&TNRf`Uc7W@zU{ z%{H>mV5$8ImXJ`ej5iFyi}L69GQ40Lc~e0WZxw_QQE(0265c5o#E^m;=u ze0zr%?Reg_X=n;okYX5KoJ&lShDHRvxqVaLGBR3qbhT!C9e z|AJw1eUl4ybeth8S|!EN%tW6ULg6b~S%aZAP@alN)0Ihz$x;nh4(uYTEY^S{)++Q+ zo#f6na|upsx2xxN=xf0SY{{A-W!XG!2$`jeWt|CTwX1fX`?4PYqYkH|ZBBYUXXwSW zoncrD*RMeXOLg1Nm#LQ4xx+m`|DO>3${1v!Bzp4GGfA1w>-5$^H>2C59)o?M2T&lX z%yGAuoq)T9ro*z=kAB>AyghKEiL5Q^Pq^MkkKsOor;@~vTNrS{5_F3&RXv6G0R8F- zyho4{(Nnk%&>TI1>pOghpW#lZN03WsJ|u)hBnHZCZxhxBS3mtS?+E_12~Os5A|TlJ zeTDKHp%Pk_N@y*iEznMxI=(?6hv3a1lDNQn2v7Ut;M>Y*as&cr)zQv5&LG`_wxpI2 jOhnHDXmgx^0J%kgSB;j?S*hEHdsV$9H$04pRNVLn8?J*n literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/INVOCATION_POLICIES.class b/idl/Messaging/.class/org/omg/Messaging/INVOCATION_POLICIES.class new file mode 100644 index 0000000000000000000000000000000000000000..bf37a6be2ad4a15b52e9ddc295ec85aa61507fb0 GIT binary patch literal 138 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g}Gr zoiz$uSz{)-9G^B;X?3QM;V}mPq?NbC6oV%+w8r3-%QU45_69?1WT=KobV;)EC2k8! z9I1&<=l5dkahXZsyTUfp1ZuwwG_)RPXjlaKrUe%({NsEfm*KX=zEm);VF9lgns~_&R>nOO z>YRo}Bs47HHAA>s+uUxN7ll>GYe?dah6si5Fq@bl3k*wz7f}UW0TAC zZa(2VW+ThcvB+kTAtO%vY9LfQ(Hv8yoU@T<#V~l~nN(3R>9&yTwsY)(3nn^s!5KQK z+A(w6v|F9@WH?RM5Iki`pQK6^qevmOH{mqZSwmfI0JmL@Zgw+gnWdCSGpt1}+W3-{ z^F2Mi47I9G1KvJ*9op!jVNj)6=qpIyWL6rl(_b^qjAoyH1onkKKtM8*8*Zuu0dE;~ z2bE|Ly}02u_cLWYT!<*0#p_Wm9Kn#UM^i|aM6E^@)FFk0tq<%8Hn|X``NcBBmq5VNy84ZhN zTq~n7)I^z@zd@sb)J?{x(F4{=e7Yhozp=umKqz!l9bGFo7^YduR`fE$iRcM{E{6*U aQCI@}dbErdr|tmmp6e}z;bSDk3FAMRLtX9w literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicy.class b/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..8c46f5b73f00cca1b23d61dd5482f746da86c080 GIT binary patch literal 236 zcmah^OA5j;6rA{J{DKRYf^J;}yn#QkP^ox>*Ah!gO-d8QUd@FE@K9nlU3BHZz+*lS z=JS2M0cKN94N^vPGa>{7SFmJN^_`2JQ=If#@M<%5r)J|46N+rXpZI`BUloV2ghv=xCa&^GK O&_NGf&prab(BlW<&qCn< literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..da612a30128263224fdaadc9c43e55052a45d79a GIT binary patch literal 1943 zcma)6TT|0e5dKbYX+wZgxl|Mt5hz$+Bd0xDH12&khknGj+vl(Z9qz)#U%fjUzd zol$ww8Gn@Ho;JPHk(YDX-S6Aov%BZd->=^RjN_GvZj6c;!*~E)xFOPVlP|aYxXs0P z{J6{S6Cx%Nx!-En@KIVs;y;+(v@Ck=p@93_Fhvmnwe5oY%6W1co1oG+puhgJCQnnadSUb7A1}C zZ7oF*C8_PrXLH+2*-TpBkMY0-W6!oUoj7iv#8Jtk83|=&85+g-xE`O&S~kx?Ntn4E zn}Rm9t=MS@y}MT0rqmNn85ei#3gxNt^qHDvWp^1S>PZ*ZHVoZ9Rbas#Q-5dZo5s3Y zqMK|&_vSQ-`ls|vp^YS*MX!K_geT~e(1Wmq^ZeA0%M7hGWs~p}3k-dUxrIq;%@N+B zH3pMoBcl>7;G%$}glAZku!QFlqPQktS;9*3GQu!a)86X1dP6A}t@?=>dTK0{nfRQ# z6km=f8TxBA6@1}Y6I;2AfK>@EK+SfsWZR^f7zY1iF>hpYhQ$!9Ohd7L3>_tCaaL*K zs5SZPGMv$=_iRH=o3>%S)pSF(b%yCk<4iS5Ds^o51L{1|%u%h1BdM068f(%Y<)*D; zR>?$c#hyYC};z`c^&O_xC^rIXSjc( zIUmXfKQAAZFh*>A%BT?09PDk7umZA6_BGx2;?Ca0}Egf zR~?fu?cBK}=h3o2W>WH6iD(FsGLef;oG6c03a+hWG7Q- zI(|fdArw7Es7fS9^EkspDdyyXt35DpoGpQUclpI~F zG93QGFN(M4XR2*Eu2wd6wa~QN?ww1pMvgOrrANnbse(L}Qf#~99HHcPZK5RQ%&4nD znR|-!hI10;AxQ`!EMi;24t6D^uqR<3F@}Q~Hsmd{syhsky4KNDQzM&-<+@&R$-*IZ zVy?kRe8hjq>!!`+0|T=zr%pa*)@an}|4#6{EKF4#^KzzQe*w7HIHCm;!7xWJ0F?%Xg@tRTdVnxbE7>>rhL|NpJWSlfgp_O#{y&f?mM0-u a_<5jv*66RzVCaapbTnLzR)2QIN65p!9>u z$n4t#pCNtT8uBZyJKVMOZZNi8tIiPJvt2vbXArdV8H3pL1}2p$C99SHAgNeHf+6`^ zjiGdW*s6J#R@EC@dYfM#c_aVCb8KT$+o^6d6zB0~=d^L4f5R#kLhq`IB1#Nes6kqK z+w^^Ik=vh&EzjUigZtz*KO3D&ej=TVp=ksR8#C-583xI4JeO25T6r#@DZegmQnCsd z;&dXRLyA8_Jw-tG61}z{Q3vEIk6;z)8Ihil61qJxC3f#2-4X;ENMiYmP@ozT5|ukh O4~V`(rhP*{v_1fT7H$0i literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..7301afbd58a3c472103c2507a640c081cd5f4ea3 GIT binary patch literal 699 zcmb7>%TB^j5QhILm(q(Dyi~l)$`+y|ZZ#&tMiUH1jaza8O>F|4hIRq(s2n@FchBOV^0juWe{G;j^7$K0=F+BU-rUdLiWV(`Ozui(4L{sxg(@& zvdz~W*v<@%gj`n)n)fV*kg}Z{f)V_vYDU9=$8qk0XSZZ9BozM4t~IW!XO+BJA;*L8L1}qaAbQOCh7O-d{k0le!STV5*i?BasD|Oitom-zJ*#9A`B4pH=f{s^> zBL88I|CFG_I@!yzZ@^?b$C1T(g-^Zo3M!RfpgeID^BU$8CeJ5vE>n7j@|cwQu}RrV j%6eRWLyGW_FuaS&OnS`lswOiT!tY(Y$;nKXFp`UJg_@QO literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/MaxHopsPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..9a7097e72e2d438b12e334f475e24e1ea91cff71 GIT binary patch literal 156 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9Bj@-nG_>BC5VnzmL4b5Oi2F?7Ubp8C?bba5{ z;^M^g%se0~vBCqWA|O8}Gr7{gAhjs5Br`t`s6!wtu`E$PClRQ|KPf9UxrC8H4yN7N gKgh{ZA6*X{BLgD?6A&{4UBbx1$iTwD3S=<=0G+}qLjV8( literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/NO_REBIND.class b/idl/Messaging/.class/org/omg/Messaging/NO_REBIND.class new file mode 100644 index 0000000000000000000000000000000000000000..6d85b85b7c46c2d061aa2091a93af2a71fd16bf9 GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=<4QLtz X6HqrJgCqkp0}GI51)0Ub1|%5(ZM+;H literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ORDER_ANY.class b/idl/Messaging/.class/org/omg/Messaging/ORDER_ANY.class new file mode 100644 index 0000000000000000000000000000000000000000..6de947af6a6971573215ace8a338683086b97c5b GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=<4QLbt6G$tA TBm*-83y@|7@|YOdfFuI|0mmCc literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ORDER_DEADLINE.class b/idl/Messaging/.class/org/omg/Messaging/ORDER_DEADLINE.class new file mode 100644 index 0000000000000000000000000000000000000000..9589a2943064560283c2457bdb981bbc73c2d582 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=<4QL(% Y6Hq@RgCqkp0}GI51@f2}*nlJh0J0_=oB#j- literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ORDER_PRIORITY.class b/idl/Messaging/.class/org/omg/Messaging/ORDER_PRIORITY.class new file mode 100644 index 0000000000000000000000000000000000000000..c54736f843e86e37e9e56e8f4ab4e36c93203ca1 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g540J;tw!~g&Q literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/OrderingHelper.class b/idl/Messaging/.class/org/omg/Messaging/OrderingHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3f1769868e8c1d030f1d00b8421c2cd6305639a7 GIT binary patch literal 1735 zcmaJ>ZBr9h6n-vw*<`sC2r42L1*#^YWqoT^Lal(dP=aXr@@@ra&Z}Srdq=V{T^6 zT^Bf>&V-PJE09xd*sdoqoDSLNs*iI;6-cumd9GEW&xyl)GDU&DqGy#Ju2}U|YrSGK zUEbT`d+NZw9gKUN4S{3ycwlW?M#ZX@jiTo|)iQ}iUE8AdLioyh&GpnJ#!|Ju<@U~xm~iGuL}AO@hxn-_W=j>nXcDI|s^MFSWsC`obQih!Cof&BRW@u_Ip#I2 zNZdt1V8Ct|p0g1&gC&#r4&O`M0~rnNr*-F1$*y}&ttzpKA0#r!N}R-qhBb*F@sq@T z{4DV?#w0EvEs!X*&irI?YXjo+$jked!rD^K#H;Lb2YWPFK zLSEo(JB@>YMY~eBT_&*4v9SKYR$U%!qgo21PS_1qC2ncIY#|S(O;k%rW~(ErLjvcI zY{kA;PDv~kNURHe?tpamdfx$O1UlSiK@1lPf1F1pAOZ^8) zvtrK@a*aToVHA#g5T)ObK|^Y&og?3gz&ONRk=GdN*zD*IKNW{5d>S~UXjTsK>}V6m STiGY@SyzP>CMHOvWyX8vt+rUE7pXGs=aNq~< zql|BZUS{^q%@F1zDyT}aPxmEW5?=S>4UEYc_o4|C9+FJTm=eM_y*Q7n9(qj6h`BN2!7Sp!cFqeQ-g0AJ zoVX^$*M<0ocwKNKAzt2gV^PLCUbKsN?_$YAyZ6LnS-igQ#RvFMJd!d#lA$uVlKOU@ zGqlBXg>*Exk&aHx-xwc@CP+GwTjfIxO~YDN(?=PkP|qTRQ;2Cv<_aqer$Rk8OEMQm zTDHgwI>SK7rXS004^>5TyjWDzS~eZMmdj|V?L{?H;zJ^g%(wJ{nj#NZ8hNNiZR~=< zx1g)3^*J@4P**aX(o2}lyS5*}Tz6ZCw#v{-C)U(WHJVWg+JasngmfuqfvcpQvIENJ z3c3gqjb-yCosM&LW9T@9R3}RR?SiILHn0Ax%lVRC^Z7sW<{nOEjCv`!h!(pt>oz2~EKo))`uA`I*{E@w~3(vI;WT zP%wa(6+Dj%4DFSmCaEYhrIbF$H&%Fo?w%LrkU?fS= zEg?|Wy21vtzICVp52r0LF{@>%^W6G+vXseXiJYga5KKqr5o%I@n(N7YLEF%DZIdVU z6hogqIo4r2n7T1A89F)u>=7#?(k3S|3P(n^1>jst=Tz>1m60O9RpQx{iL5^qvsqU$ z{0BIH#g)-d#ub+v;jPh;NFYYovMm^is|{HWaqT71Oa&9{N_q z7#RIKmWlGF&dLPoNK_q2HX_syJnD91KvujuLoxAfu!NR7XK1`<(b+|x!EXB8QY6ljX-*a=GpTK{aemt1yZyI{w`h6(BV8-<`e6wNc0KTQbGlcj)PL$zidpNle zb{f*aK3XJ0(@L5$P8muP?&EaeS&H8F0~B&5?#dtnyTJa$9L1q2YehXltN4=wXDT_N z*={Kl^sB{5%7Fv4FYV!MJVIVO9->n$Bax1u+z%0yMmsycLrdfVf+ah)tgsx_GbcW=$ z<e0;IYv%+!F@Bl6_QKWcakHN-JVU9gpwWiG(6^k z^1R)Gj77*YLXbr4%1B~QMha;e8AKT}|5|WqnKj*E2sgB@rkWZVRH`)es>_fX5vQga z4#WqXE3TV17Y_`LI-fc9gi+%$XWg0Lxp*;CZ^FendV_1{9^;T6l?a9f+Kk&t4^E&j za+l%~{Y3^9%I4m|UMPVBoiC}dalFz-u X*GFKavWBP!;cARd3iKg7^EQAVmWjh_ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHelper.class b/idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4143b4d6e8b49af8530adc5dbc0d7e784cbbf521 GIT binary patch literal 2216 zcma)7TXz#x6#h;o?IhDv+6GXlNo~2AOtgU_AWd6rOQDg}BB@bCjnniPrw&P&Opw0w zCwTRR*LqnYOP5{n6I(ln+(UJu`Ww8mquo>B5a4@aNBl1LTHRfp7taX;CYqKc2G0^ixDLkV3y6mz}m zv_boYEmIem%Uf>EI3k!(afc&=DTZ^+8u!e4Mm$(8SzE%ERvRil=E&j`hEY*TIOdku z7*sxvPjQ#yGs*sFJ4q{#@}lgRr6R{Ye9rMU-r;xyVU9^msrZ5;iWtY2$Z_b1GaTtC zIXUO}3I@YO>Uw&X8gW{Z-LElwVfws^O^!UM2$BDdM*63kf6YCUFxDj07$F)2Y8Y7uhSSl0=CW>G0F-LFYYbAZ(NnU=D2_v0rLE=8 zP{^C1eb#3WG=HmmJItvuAIe#z66dL#9g#C-Yv(F%Z%Yo{gWp2woB;~GnU$VRx9Vj) zUQ2Szat)$VVOq7#mPnw&T@~NCec@Sb!xv!uM99~ za%beKR;gHUcW8=X<;x#hoeV=xT48>Y#?A5F<#yLl*uPUB=N z|Gg>1vi>Rh;f&J{i~^O@PNyK9Y46bUP5K(6H>3A}{tWB~I)D^uBY5IbR|xp)@a?+N zAWq@5Cp`&2d~`dk{|e=9{2BZ;3^YK3ID@mETAJQcP1j#w@ChdL=NPO(O~+qAd4i$% zb0|L}u=^DLv|fW&$IvcWsKj#0WqXcn15hTGRJt{>+cyzavt|uu{j7 z8b)r>v5wKu7y*WU0w=koPlG{E1#FUFXv=vpBQ6LDLPwiH(t7lS*GS(_R+9vEY(D%O zj;ED{Ncek<#v^(iuVo%9?CHOM#oPG9@Vx|AG0oWDl;9w(xAPv@6#`QTEUd@(YIt3l s56AZiNsotT>NxS(M@WCl1U85U;rj;x0tr$47xvYRbTGguvPQb`AA@H=1^@s6 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHolder.class b/idl/Messaging/.class/org/omg/Messaging/PolicyValueSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..772a6c2d7789f08392504c7700a8562c2bbf01ee GIT binary patch literal 855 zcma))Z%e{Z6vm(HHkWIb{jt)rGW)aUi&1Zlpn@0fQn#eeS1J@`+4%W3fZ;*Xt&eZA?jbJ&DvK7rZ!z6ra`9+t5EKKLxK zMbB>p3=#Smx0PO}L@SyC#WC6?5TX?j)nCDM;T@qD2v2l?HZ~q$GlYfcOlf1;4km_) pfQbi8M9;P$b|90O>P52pGlUkT-%8Vn2S|+mydklL@FQ;n_y){?)QbQB literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PriorityHelper.class b/idl/Messaging/.class/org/omg/Messaging/PriorityHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..dda7e551019d113b1ada54cd73fea3c8a0bfb3f9 GIT binary patch literal 1732 zcmaJ>ZBr9h6n-vw*<@J?1QijB0#%dHvTENfp(>yjN+{M)THES&2|MX(NHUuX)t}-o z=odb;)`^VHbo5ha{85h2-Q7sCK)>9(d(U~!ea<=0xo_US_!q!sZ0H!qvqz2@G*7x~k5uspWbKbLwP1g#{fqa8t)E ze4}Ae!;(P4l8+mXz{z6WtC;nzin*|QXMWCHhGR``>-_p zX23>K;A}gMgMdY++HgE3u+MRIS-)%%52j62AS5g3i0Y8Q z`6FAg?^RF|%Y+i^LZ3Szo%g-(fV1&Cc6FP#303kk^&lO~RpPLkzB&|-sQBMU>QoW6 z*q!>?!m?YV2vhQ*)l?eb2t=kNaG_oYDvq=op1b8rcgL}0S>R$c{m?l|reh-dL;iNv zwVQsB_3XjvIOHTky!|Tt&s7uMki#k>psOit=gxP9C7wJ2*EwARz5X-?$oM#)w_!e) zjHg7;uQb0oaa>RHZ;-p-p2$Ck_?sV~BWEEr5BNqPzK5Q_d}|tKa5l7#AdViM_T^t9 zc6anS;w>bCAZd(aB6KTqS8nv6Y*lc1$_^_ zyF_TDG48XSBsPWE*t~|16#sKLA4a}H0*d|QQyBl@G)X>1Uke{B@1cJW1DQd_%lrd_ zX2qTrc@2BCj#jvDwjGeku-A_&9XP(5xJi`Oy}R S2id3aNmqpxCLu^9FykFC#F`ZV literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PriorityRange.class b/idl/Messaging/.class/org/omg/Messaging/PriorityRange.class new file mode 100644 index 0000000000000000000000000000000000000000..f4d14c0e3e073748a7dc10faeb10283b89976ba9 GIT binary patch literal 287 zcmXv}O-sW-6r9&Irj60I>aBu$YjaufEP|~b1f|kI?^_LFOS>!SBKosD6v2Z(z#k=@ zMZL_tj~U*)@1M^v0OvSL5o5oNCOQGS33>?*5*!Mmm9YXTLZx2?I~T?pf5~<*oC%s^ z_f!hvK~W568B*+KNYKjAMoVzw>Pop)rS8l1T35za>Y+BSHvVm@ZAD{up!W6`eU5_l}IRAjW bvk1Zzdw=UbC{u+IA%H1gvOqF*7lX@fA% literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PriorityRangeHelper.class b/idl/Messaging/.class/org/omg/Messaging/PriorityRangeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..90f4cbe63999fbedc5e63604dc0b53f5d8e5487e GIT binary patch literal 2232 zcma)7Yf~Fl7=8{(*ksw*kY1#;fV72%jgq!%s|2eMumyrtf+(WKB{`-G$tG?VgrCx1 z;8(0QFf#45pPcb8Ipg@Az2vfxkq_CkdCz-!-sipS-~ayk3cx*BGDdJ;#shpL;bR#A zOvy-NTEZtXdhswql20XkCWJFGhA|tVM@GV281oT)jz_}wv5Y7d!dMg^lrOOwp|_lPtjYKa>k__}@C`#KZynS)!$7ubmQvM9DV14Sot;Uoku*~+ z@-##5v~K9uLxw5zHgaYfqdLQ%SS72Hzy3yoTU|ZmbKcNwpHdtC*gMT9Xy4* zE#n@&$Z&}?wzWMiRVGBKoMjS9N-St{jcyRhX&&x0}a3#Cnj zE_C&{vTL-{S{{7_X-+ zz34Uul}|w)KPu2b^}pDnXnw!IYnEO$6ckWYa2NL!yn|7OK`*S+TSU%o!CK~(EpAd* zRdhoFSMU=`3Z6n2;kSic+gC7#aRn*dp;~ryh=LuI8E!AkWv8fXCq;xVNlo3IB=Zpu zLl-Rx6$J*W3g%H$u!x$3pB0#>pMy4Du8CA)EizWNwz+8CelM((It>T4kSGnqtyaOi zV6w-+=YjYqug-Mkoi-C~$1vV<=frAuWJ}9-73yYhW&MdI9(&dTY`rr?wQ1Y`$YI4MYI7y$xpbEYGdx zp@NBJv*~k6;^y46trjzI8B1dq{kXx~O~ z8wvOJDuU=CX;eKyU?X{iU;`n?Ndyy6U9~KoLQPfQp!XSu)z|24K*}cHAn*)*$=3+H zK=|-i1hZ-b@-g}j$wI;q;T33;WE)0ccvix@0{?rMbUkaNCD1QEhw>LPp_hm*seuzj zH{x#*;^(-~K#U!sKc@z5X}nW$yoe;7h#|0l=!+f^d(I7a!43ul z;%|Fo&^mQ5$09@8bj4X2`YaSCcPrt$`tNUZ>L` RF^ms83Ps)#Vg%H=#(#=wKCJ)% literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/PriorityRangeHolder.class b/idl/Messaging/.class/org/omg/Messaging/PriorityRangeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..31ef14d01a98332a965b12b016b23848dee198c5 GIT binary patch literal 814 zcma)4ZA-#n6g`h_F4rn8wX#>s$d?bJz8XRKp@hPy=&Q^eV=_0H)9_yv6iFZY0sW}x zJ~}N0F~%OA-Fwct_nzIa?~hLa$4JYN5Dz1Sgp5_J@nfAINeLSgHYIE^h#k#p>kO$Y z$2C-^VW`)7tECyHZKyY{>A0rXz13_(FEE5oOxyHM8G@PY1A|a>YQ#)uW>Ps?thl;X zV>tYU7t6QjXKK@NJ*{f#YRPW4y*rO!jRI$cDo<3MDrBZo%586)BUZd_lPJkdcGT6N z%ss_?znsjNxF04VR8p(_My0UF&G7Mb4<@YF&Ty$ig9Y zVy?kRe8hjq>sFJ?3j?z*rcOR))@an}|4#J1EKOA$^KzzQe*w7HIHCoUz%WNI0F?%Xg@>I+&kC{1<+3~`soA$^Z+tX=kjj|3^7ZH_?Wnl3Fq=X1ph#ySe}IB abFT>WAPiMj5c45ijZr0`2l1J=0sH{U6Uf5= literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/QUEUE_ORDER_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/QUEUE_ORDER_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..f61728ce9e43270d93d4ad27184f52b1b0e46c2c GIT binary patch literal 142 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gJtPD< zP-h~eGg`jXnf@rp_hdJl8)^A+F7M@eFXwsBzu!K71~7{!GEQJx#tdd-7{zs&mK$RE zF^Zpr_~$5Yiu)}YbI6EgUR-a>Simph^s9udghd%~OiNgjv5Y$sev|OKgu4u3-Px^j zhGec{7q!ZEQCljkEoQY1k}g%Yc!nV|U$RQh0z)u0`IsRj#I)%Zdy`=_HQD7!?&K75 zVaIyZZNP);j$yvY8`TYCvrLeI(iX!Ac|14%GPJT`6}5H8E?Gs9M9JFWw!<)&>WY`O zb~C;x&v$l=BDrV}YrMt__7=BSE9H{8n-RH7{FP%HCc)e~45n4ef8bDUHa95Kd)*M# zitUI>v=ysbb0~FgY-f&$8GdP(9O^-?FKD6Wv`~*)aKtifyYiA@z8kl&`J9{1QPYdp zEb|#RU+^uxiFmsY;vYw>I67~Z8^ls@3S$yh6x_pE1t*bIa7LWQae*P;{g4XoBgb%l zWjQxTe4P@!?Y5blnVME`4nIi9D|mo{f>k_Jkj7OBYYNug%M`;z2krG){krBqV|&LL zPIg#oi`iv;HM^G0GmLj?TK%EHVs;$@S4Lb~eg)>3nykF`2&8sXlc~ zJ`Ro3cYA`qZ3bDem`)0viQKfFrrR*>jP|hl0qiXuK!(J0PaSV4fzUnzdkt+&P}tL6 zL$D!BzC-XUhWCY8I1#BsdXFH*noL6VOcp4Th?PQN(_SuP>Q{u>9%VH08d3FcjO;bjYL6ZnKonZXQ<9oIsrzon@Ey0uEr!3+L?iLR5AdUm zvrte-P||d>ojGUD%;|i7y?+2WLNW*$(E$921+j`Xajc6YE@MN+ri?8HsiPSVXGj)I ztEQTbntH|CZLOv^YwC@|9bUAm+`2Xmz0%Dw_>c9bZl5rCQ|Si=U*4<|`5-k5TM(p@ z#kJ}fBVW8dJ5^hzWou=Fs~63dW8c{XYvcsOUwX83n?zDSA`_INV~=yBlHF|)C7w!; z8XIu#DK2`>DVT?%Ab_BZZ3R2nRgl1*f_+3t>wh!OO@oYK2-UTYrWzXgRV>$e#b!th z*%N&ZrV>-mrofGsQ1A^byPP`zm}R4Z|NM`VYieO?(J@nJDcau$;X4j#VXC(#D*4Q>$6p#T5? literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..34bd12b3586b49ecacb5015cd5678384726b8b98 GIT binary patch literal 491 zcmZ{h+e-pL6vn^NUDvhE%uA+Oba_z&w|dkF(q00?N(iI}*>;CzW!sJ2HSoVG=mJ5} zbAMEHHj|{wFf(UnzH@$joOyeHdI7M5l>}s@C1m2r#*vc|$3g;mEJ{!$6eJWSEHTLa zV06X%mffu4V?p~TT*E7|VAs_ONXK?S>wJm*A->z*jl%`W!ozv#N`YkJ%3GFKiN?2yt z3^9aLkGSt^CK>((ZM(W=H#MI;7be+b>Zj7V7;rscSf6PBlNdzZb{zs`%ay54jS&rD zjan>&Aweq=`lNq|(3yHc`yAaiAkqoQS0BNu;xi(>Xgb>M32C8w5Al{HP(ljxUj;>q TVL`Hb2k`;1S4cE(=!M1yG>&n} literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..320da72c3d0cd4c5c722830b70b1998b53edd436 GIT binary patch literal 723 zcmb7>OH0E*5Xb+UKGHm_)<>*wduvlM>QxbJPeP@>=(U7q34z!RNs9D4c~DS94}JhY zlsK`GdMMOhW_MkZoh5AE0!{pgq>f8zDM_>|$WI$LS2 z!;ozXhngN#YqQld6m8!Z_uT19PK((BBs5uNkCdV7le$u0ba|N1j1(iB8pg1vBd}ke6jDbdL&mNTCr rJ*H{eI!zmCT20b#$S^#l42d$C$&MM)Y%-H$`0YiKPG<59qjB*K3%8&l literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/QueueOrderPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..af967438664aea7bade7a348b6225cdf52b569be GIT binary patch literal 165 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9BzQmlI{PNV4`23=j)S_ZW24)S-U`7U={GxRI z{M>YX-_+vb#PrO(bp626)Y4Rckg9^U;~m20IU!qqW}N^ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RELATIVE_RT_TIMEOUT_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/RELATIVE_RT_TIMEOUT_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..7ae3ed98af5f1c176cc18bc65f27c55d6451ce4b GIT binary patch literal 150 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243ge1N}?r*mX{NMwL3BZELzVp*bo mP9jj5e^ORzatRyIYz8KvS&R&l49pBHK$;cEV`5+fk_-T<`yj&r literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/REPLY_PRIORITY_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/REPLY_PRIORITY_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..a23ef43a2c3225d812b28839f6c9612d122cd500 GIT binary patch literal 145 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g^U;~m200t%@djJ3c literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/REQUEST_END_TIME_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/REQUEST_END_TIME_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..98f4f4003fc6e9918138f93940fd192363612c22 GIT binary patch literal 147 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g^U;~m20REyOU;qFB literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/REQUEST_PRIORITY_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/REQUEST_PRIORITY_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..67febeb5def78205c70d1c6e7123dc7f1be71f66 GIT binary patch literal 147 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g^U;~m200hk;dH?_b literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/REQUEST_START_TIME_POLICY_TYPE.class b/idl/Messaging/.class/org/omg/Messaging/REQUEST_START_TIME_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..a3e7775be949a6a110e02bf3e87853671245d994 GIT binary patch literal 149 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243ge1N}?r*mX{NMwL3BZELz qVp*boP9jjLe^ORzatRyId zeo?x9er~$HZ)$OIVtQs?x_*#Yf~Fl7=8}9Y_co@p)I9UDy5esDBIRsC0GSo1qq@A(Ry1q$(guqNHUuR+n>^3 z;1@n~2W1P`{kB`(B^-eV_OI^Y0&j0l0;-j!7)&FmXe}O&u}Z z((xwV((ty9B;H9=@~(#4O8B0Rb68CCD5SB3_m$TjCHp`fAEvOZBr7Sb>bQ%0IzGb3 z8rC$d3nVP>aZ3uEFE-tp+1#s{t6SSE%jOQHtIet`2qc%BhU484h-GuT0&ykgWi{Qh zz}ajr;z@Vq zH^6)0MBYBcLrzuT3@skm2ew(a8#S}!xlW@-U~yO4)LxIKY&Bg^B{A06no*P8XJbd_OI!=`~x zu_Z7j+otDK!(p&x20p{*2DU*&6TPzTJ*vo-=QJAzcJPIP9P$RvV@kuWfiLluf&2K{ zz^j-sa2;6zeOs2DMs<@jH1G|+6}Yl~x46i`FDPuAvfZ|8?3CHFTfDhI4t{6gdsrHN zFkqu7aJgH`X)bHB-jXiM=po%IKagtH<6XaiXJiX!qI$(E>o+fA!Q$x^(8&tsqUI!U z?WF_hSrrt~G9l3hysw@h&@lu0+&TUOyS~qCLN&fZR(R5K6h*AI&k=46L>!Cr0YGshj WPj_%Os6K@^20E;K5`sViHU0zKBb$H# literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RebindPolicy.class b/idl/Messaging/.class/org/omg/Messaging/RebindPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..1816632357b0b83839880e4ba5a44306ba57de5c GIT binary patch literal 234 zcmaJ+I|{-u0DbY(_yq??5l6RxH}E$UDwWRrj3~ww6N)Ltj9_h@WcDH1MbtHy%1D-pT$$U|YE?7@i;_P%(>xeyUW&pK zZ2x!CN;vM7H8sJqjULnNuxIV)sw*e9;5s&5xH~Td!KQ0h)_I<5!QxYLHeUHAA|U8t MfPUZ*QTP||12d&U2LJ#7 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RebindPolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/RebindPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..900f22401b543f2b63ad76f0f2612485df753207 GIT binary patch literal 1943 zcma)6TT|0e5dKbYX+wZgxl~jXuO$TnCMjOmOkd zASU^JO2jl0e3{|bTOww0o1g9oND7z}5ypssc@Yb^E8w1h`vMjj{Hn8`GZ>=FSv##{ zx6{h}%Gz8~*&ykBcFRaG1ZGUjbY>a6v4N)yJ}#zB&Dxs`U9o{WB*6*fE7JBhsH=!u z*BwoNlhSe<+Gd6*J?0ieCm~*IZ#5;OS!re6u}v$@gD|Zf!*&=ZVs-wK)_$TaN*Oyl zTACornz3nGTdUcOsqZIv+=B7Wu{E72#*d?@q|tCK%Fy2!TWX1I zstMbR6J!~j(KCexl5iTm0+u8^z&Qy$h)OuiPyM*aAXOJk!b2=GTwPjNo~E80=Dm4* zS*AyaMDR%@D3kL$QVo9VKLOR%zm> zIr$qioYJZL978oN$FN^&x}iEc!)&Z^rWz%cVmAB%bslNv7+Q-Xsg|M|ZPFy=zO7^B zL)qpIWtk+}@L{-(%W$za>+<7QO&voEpV2bgr6!QtdP{{lEQ3xr$z$NDub)2DZu*!R zMBcx2lITorP3sxDb)@(1v*Hy4oRl3$o}Zcz>hg zh@1H%fjorI@RE!p7%tH21?xnJ&y5RhcZt1`V2Sq@YEqC8qDxVDnX0A$x>mOOD^G5IIjKcM9+!p{%U z@jd>SHvEJ&{NE=#*n(P z9bL9tx_qm3I*M*sx?I)jhNa%wrqSq^7=ovUWw>Vy{#^c%AyBqeB4%=nm>ewB98FOf zj(*YQO7-GgZrhHl)J;vkw%T3y-X&P8#2LZblViBlAUBs%>AKS#q2~76L`mlIlc7d! z9w^V}ElF60Bq4;bhX0XRf41{p~SsVLG>WMo9K5knT65)=tJ33&-y1bN_3 zZ;XL8@(8J`_E@{sR9kaQwdYSP$7~QHN0wvx$AoaXa!C+c?#N&>qh!jJB_su_h!YZj z)d;(1r|r6XZPwh0sh%62roWR*miZzZfYJ^ottOQ6u*(qaBS#4p*Y8umqieD+jUqZU9K$jX-01dC2p_` zLX1}^sE>ak#6EX|_ccE4Kx7ZdR-Zvt@fD$dI2rEsg{07Xgm}*oI3a=cA3~mOK!{f# PAU+}T4vFU-M|gYz+SPE4 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RebindPolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/RebindPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..5af1b198e240f0b6ba464e664a651f32ca3c6587 GIT binary patch literal 696 zcma)(%SyvQ6o&svFKI4b>Lu1|?MBn61l%fu?MkRrs&rdoGlW2!2}w46Cl?Be=)wo^ zp~RCmQWvFkb7tn8@0|JPpYNZ~F97GLsVHGffsBfVZS16BHw}Af*q3o2qspN4Tt48Q zlW+#BB_hujL(jhDaqM`0;MpDi=m+kd82J5BJLHj*_#%ie7>bvE;3roMXXfH<^)5rc zDO|ej)T}Sw$Dl=HA-&+iB{Em2eVGzAidBj7gKymb8_u&RLkoXq4(|AN$_#FEVXykbTMfvm)`ME#sZpc4P2tkmQZMg}>U iZfE}>Cr5pBJ#35&j0{Xb%nWo3BMTz~3j-^V#Q*>YJt^`4 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicy.class b/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..9d0cefecba2e9074a1375c7442a3ab80a4ec3d6d GIT binary patch literal 266 zcmb79ISK+X6n$}vD_B@scme}fwr+)>j0|2N6TU+vCYp(YSF`W{9!g9z#gu+{&0G1O z@9Pa*P$75|U-1MeVDmjD0& literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..995f09158ecb1ecc1ad014c303504145413b672b GIT binary patch literal 2093 zcmbVNZBr9h6n<{rHdz)45j0X;i?$jz$O76oLeT(P(vpIK(w8qg%W|8phE2NMX!$Ai zS7196nL6Xk7oF*kay&QLyc>t%%iVj=%X7}T_dI9+fBWBa0Q2}+#W~EXn8SPwy9&Nju*MKJ z#bJdrB-hJc(J1d1jg^hUa@N=;=}LKzXBZ-jj_ZgehG1%Hhan`z^fAlcF2i_gs>hSu z$tl!;o#<0{01s~o%YKlzD%;j>i68^c9>W-U+_xTDM#*xE#+L9LwyrWF)4Y&8xu z4A;77WzL&7j8;2zz81szE=yxMyJ~J`3)wuwWVfd6Uw@L^ex;;fTfis(wEUUtUm>NLK~1F zF~e8K>q;PWjKEP{8dlf-yqD6D5J5z5!GK}?5LSmXY|MrqA_tZ@4r8KjG|^zt5O<`?O;b`RmRpQ}rHMx3!VmDH zjB}x=n2<=CPTH9>b7s!W$LHHSfE{c^p&}7M7|AGRFe}ZRH1jGJR4l4kVo+L!?Qw>! zGsiV`r)KKsyxBBNt8VH=ZX3dC@gl$TcvDO^UfFYR9lo&$C zPK65XriZO0la;c|jS9o&Pxf)4cyy>Y99I}OHrG$<4NqJOg4OaeBV4|BEkT6ofhh$~ z^yesL@z9`@`E=&H$u7+m`DOok4WrOBL=aW6tYHPK8d6x(u#Rblz2QVUaqJ3r8DdqV zW$3m+nig)V{8liedX@f+*_}{MJUkn>8U7@?QRmC#u$^hFyYJ4S!;PK3PKSFk5?pc5YV!$}0_0irUT&AlMd!%QIN qV-h|llFhXd`~`_)@-HNpeMX>-P_N1qrhSO4#)v7@hVm%e0KNe14(=-e literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..b0c96939960134518646cf441329f49b7ed217ad GIT binary patch literal 527 zcma)3TT22#6#hncUDq}th?o|g8!wRsksg`CNYRem%wozdS9hkQ19Wn&-g$o9u=JYs;86=f2`~p(2h$uts zCmX}|$#K2x42+U9G}I=yG|wFKCchqW*E=@{+!=Xij%DhT@@{E|Avf<{Yc#7z>bF_J zf?tZFAcu8^eV>x3)l=@ennB6`8KCaynpM?YswMMonjfsBHN6|9D4Ei~()*^sd*V~auQ_PN6? zGvEw|4dGda7+A&y_kGi{hnCUejv3h3yv46Z+z;CJfQwOZDIB{uZo1r~q!{`~4C$&p zw1X3d`#=+KbYp+J?fts{#$9XZVFSiqu=CFB|QCR4H@dZyF1 zX`=lp3TviMl?Rhm{yrXx^hq-GX&9t%DY~WUu0ba|LtdWZ5}j)08LYDN1nGgi5U*f1 z#^mT^6iZbeA>GGmQYKD^6k%Eo(=SLc+{G9Y?gtZ5#F!+*ZHysZ|Hq^lzI&1E|6|e& H(YW{oRffMS literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/RelativeRequestTimeoutPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..633fba576fa2221f3782082a0c8bbbd609d53d9e GIT binary patch literal 178 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B{-V^J#FEUi)cDkjg3O{yMh0dLO)o|Ui~OQ= z{ruc?ec#mL;>7gKymb8_sLG(!!qU{@l90^Y)cn$tfc%`yNm;4MC5#MmFw>m0qa>%)Gc5mYi3)OI#F~;}@(pjIc)b$endvWmu&LC0D`8Q_5`K~JtAv{pmKnmj zw^!i|$yLWKY0gebTU;wHF^s3CdXNMs zP^dvW(WmYp9^UW_^J&4TY#Li-q6}Eu3}b|NVmvdnvSF9B4bQdgk_f`Gce(2^ET?+> zwK~Ygpd2k<{U)ZIkq%yPY06`a6?gcSw1@STF=NGkYN z>?U!B;pFFwL&0sVGGtbkR%fXrGNLm+kC>g#WEGsmDG3Dycd({l9d{L^aZy51!A9ed zVYtxMX8MeNS!=esc+@3Pbu@=N-9zL+mCOm=J9`1;eV>{QAUHWl0h)p)jP`=vF^ zaP?~;%e-9SE!VRGFw8Rk>{-QO>1 z7f0W;>hVa^fnm5YJoIK%(*ugG)hj)$VptsUheeAd**Dt!)?hf(optMhI(naBNKA?r z+t~q-?wU~Qz25?z7?8)*{m>+h{$unDVUR`j(@vp1H3hBT&}o#ujJ{#@CD>oI0U1(< z`099F34{(1*sp72qP%_WB?RlT9{dQLLJr3cp(B$*sa zDR`ovqm;y>LzJat>gSqWnQMy64ssgCp=pR9s$xyUIyN+HVoSp|W*H7fHR{y1D%@p= z)r^**TLw8>DA)MCVA$-{8fdiJqwM)VdfalPUZ`v5?ND#}?EEofg!wDJ{dYqp`s^QF zqO(3evFO#F86<6qsCPn82{lz;Oil*Pdo+*G%deTqNAwUlhmFaZm6@eaR s3Nas(@G+5erj6hqNF39HkWBgofi^|4u+Dl*<8iDj6>$)r}>yEgq;J+&91A?OG zepGZflO%!~X6D|RGw0m7_rAS9y#P4CP6RUI5)xq~!$`>pV9wix8D zHyasUtM4)-t{Vews;Rc-m}=V_TaH;}2pw6DnuFZ@DMu!<-{ z?57$->Fl&o;X|{;$EMmcY|XQ#MvG6JK7|`yT0?_RybEqy`mC~FDl_Dk3H4^HcA|d6 z3Re7N6a_hKGaUM&B(9ztuB(~!{Xar9xUShX&82)Y3+_C|C(`T<4BcZWFR=gWGKjj( z9gl-4HbDEYgiA>Mrbxev!!BN#STNdXK{zy zX22P$P3hScIj}1i-1kje4DCvrJ7yrRcw3H!R^SP@BL-ZKf=lU${BNxnBKkdk?Fw(q5G$6>8FcrPelHliG=^elG_x;V z0_1I3T2QsPA9!-orE5S(&OjQPid_R4EEvdQ(ZCXx4Xhx?aPU_>o3d{@ z9YLH9|5aKyeX2eBYwgc7qCg)eMIVSk30I?AlI}VTvUB9+D6Y_{m7l=Mdyi1=$qVsm z%tx3kos43M@&lB+C{6lA>99qZ*245NVhpzthUELkOj<;kIKxeZA$6x?5)5CnNc`!T JB*TO*J^-iu#A^Tm literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/RelativeRoundtripTimeoutPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..7a3e4bbe172fdc5f74d3d4b3f5470c98fc3dd8c8 GIT binary patch literal 180 zcmZ9Gu?oU47=-V)wb4nRz*(n&qno-3QYr2d>rY5&o06u*zM6v%;6sTSba6Pi;l7W1 zy&q2iYfJ?a0Uo1QOxZ;TrV(QALR$3mpZIw2)mf3fi*{;5MXPUFA z*mnM8OOp?2!!C$y-4f=7>Xj^2fYNKhxhE`szI~eQw(_4z2!v5c6dqDch%pWgABlW3 Ac>n+a literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicy.class b/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..b8e85ee73af37073b9c5865063eeb1723b678035 GIT binary patch literal 246 zcma)%y$ZrG0E938#b0o6bZ~Gs;2ZeUp-`z5Um&e9q@+n{gV0xV@Bw@%F-wPT9^7&t zcW|HY>kVL!1qG!TQ%oqP6f=rB!PZui*+R05sB12jkt`9VZUS?^sX|<>R#`)^%=wcu z%{`9OTx5=5_fIn}Ma7-6rY2amg;Sgy53HSDcjL%rT!+Sq>cKNXu<7E`R*t7yu<#rO U#wpi~2nc!@pzl4z$ba?v0XD-%&j0`b literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..004fd85511253901a039d86312480979d8b01aed GIT binary patch literal 1993 zcma)6X;TwH5Pg$tlVy<*K_i}chK;g-H$gOj3YrK4YU!7)Wf|jY*rb+4<)`ScK&^_D zR(X8UDu0w^PqMj*l`nI3zt`O}ujkL-FW&%6;E9X_7?UxMi3kR9QKsRN7%qo#MI2uZ zmA|OSmK9u7r7ppzdxLIYT^CaB^B< zBd5(SF3+U3RXUw5tn(B@Xv(rJcbdVU71!s+6Ffr1CBshTr722UTa|3bj ziffp!vPN;$Sj!Wo&st{~AjC`KwV~w=JEyIMTUS-!bx z$>jnl$kG!Ou-=xNmx*D4@VUoL|nlUu^PrnhFJTfD!7jf!^wrY%p|FI zRH(S!YjS*aOu;c6mylKP0E-Hi@K8Y#=OrvFSgCAA8O}Aefj*&M)M`)Kc=rqkn>@9d z^qjtwUQTBjhMO&QeEF&uHi~%(s|p^0^mw}J`#-%gsNJ~D^L&vz4AFZ3R9=^%zlyJP zH}xnrna^13B?mRb4uDfPgCv_ID3)}m${=jX&MoUEMQik426YJHi#ybe7 zrt20~(ZKt>2Ck9B+rAi2(xi&!s%sC?(3=cBqLXWEr#e8I-(D&AX$^F!LmeZJ1H<$M zAE2+CK^AJJl|pM0IgN*D*H1H}IjDXH`#=kjBPrf9N6SVaunXT#*%}ct_N*7+FQ3If z!v7onyTUCP3zZ;!f}hR=g5d;>ey{;VL>GC`K9ATR3s-qh;k0KQB!3^FB5HCMkrL!e zViBCdS3t7gGHVu`cXkuje8Ye$>N{ odASU!zY%0Rl+nODgw-Dy*r}$~7(LX3FtnzpBr_rD_A57re=k4llK=n! literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHolder.class b/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bb98664fc0855965d1727d7317d28fc809c771a8 GIT binary patch literal 844 zcma)4ZA-#X6n?HcmutPJmA$`EIzNp1Y6K-gfn`+mRaRccVs2y3!hcmzBz@=y^rND4 zby^0}xa@Fu&hwm?=bq26_YVMj*is-Pok9{B1#_4eWfZIEh}+k1W& zFs%3Ze}?PMCFYD;gWH~{k?6`+9;(5BZ2h7Cc~2>n_IzmC0coS9?QDk7AG@@EG8jha zV?t_LO^I%#JlQe&o9aZ!tG$6elLMXbco@zgMh8$tSS!3D*27F-GQ^}qOiC-X5&s35 f!t`HAL3=^0jYKcY3}!=!$i}Erq7CUuv;lkr7YNhS literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..cdbf7572c443805ff47494fb29a3aa35f8f2905c GIT binary patch literal 497 zcmaKpZA-#X6vzM9ZO+*;^C8nL=;6f_a@9+XAgvdHVQ2)>3t8J3levi-f#0g22MCH@ z_o1S*Op=f;_ug~v{h#yW+;cxZU)}&5U?UC*DG})yGBIQ&#IO=a4yz($5qS{>5o-)m zFBlKao^ALH>FZ`+yVX=jb1k(KjBMAcF+>k-*A9*tIHh#Oz&AX@Br{3LDy2C|G8U0w zNdBcUY@MAntKPt>cq2<~n?q-O>Kd2!z`XDrTOU{VD|-yZ*`P+NT|ZWTWf=?M17sOR ztTXI}AOfoArtfPOl{^RA^mNUsYd+PTpT;F?_?`Qw|w>3KtbANrm>?nHcKC0-cB7YzAJFYuBphV$xw z#kD>|wiP;baid!MubQF2180zsEr#-pUKnj!F*hF)yGIVS=-2fi8An8BsU5je=A=SW$qtW`QAiLe`Z_ciIuxif4t1h#?gjb>43e--vpmf;=oFV|WzfDvqgsChs~^2WdZv}&6)dMr zkw!*)x%vyFr!-Bqr)eWit0Mi548tEot(nhc86MMfsB`m~-1Ho3?0hEAFtLjt^H`~@ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/ReplyEndTimePolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..32cd481d84988776ac19d543b3eaab247fdaa913 GIT binary patch literal 183 zcmZ8by$ZrG7`#twQ#V%^XI%`qI$3d3Dn)0BZ3roCQko$2)f{{PA4-fv7l(u6{S6^JVg!N#Yq;o=Pqj)acx<8om z7d_ir7k$>sPIzsNBg`uC5WE&4nB6N`c*0`X*k^gV zoJx8IWkcEL2=yo6g0C_Gq!2kdN literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHelper.class b/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8b67bee3dc325aae40c5cb2a32b827b5be2c2ec7 GIT binary patch literal 2215 zcma)7ZC4XV6n-Xen`{;nV$dkoiqaZ3$O;szgkl5KLQ9GTs+GQMH^~^IVUx32YWXSp zD`p|= z+?Hv$BZkE=vSNEFj8DXRS;k#_Du$d`uETEaF%P`3~3oFTPYv&vd+zpSlpZLj3CUD{o(m3WpRv{W%G_A-M% zJ@tSgAhzkF*Q^4=SbC}tNpJ!M+O!u3%pT&A9or~A%NzAwqfjMEU!}y5B*atWXG5zR zW?9>@t%_L|A}VHsTQvSfmwXQi_dsT@37q&!nSvcD8oy|YO8=0T*mtnb`+ zPr-zkeTeG}iZ@{jz5%7|(#G26BGu%Ks7Sqa}O z_@TX+XSm)|*7}@2ues^+-Y&!W9#3s0x2E6EZRhd~6TOx$zICM=`}L}X9~J2MiQ#g` z_v9*)U??b{$Z&1YQTK+pV;>Y0l)x1{Mwwx9(BJF6&Z~89F~qyQ)6O`^o9h+R=GJ4Q$aR~fEvE-NaB!!a`hgdt??mcQhLLsy>m60ILrTi6@;+A4 z!e^Woc1cnL&x=#$3|D)jc9Z7mQHH4KXqU}RN&9FQ(px7=t7~1*g&}bWy~$n;ozR1N zrJ)<*?L6UD_vothGPm^-uktb_he~B2N>|#N<3umyh~DTyP4){L1Wi2%OwgZWoc=%z zvgk;fDKw`>rSS@_M(NAw8&qF`{Yn#%BXzA~j<<|J;26H6mNg>U(y`uvzqOb84gPl+ zJr-`kM5qbrclc>fAQ(QN(GQkHM7#tJH0BWd6X6bT8dHvOjQo9sil~`mM4FJ>!Xi+S zaa>aL6^AQo6VXj_Q}WXtqG{Z4iF`B@L`{s4xHBD>8EB5nGMyyON~>=Xdx_|4#2>xF z=--)tkjT76!n37jnm8+@v||du7fVo3^e8!831Sk*g;c-ithp2HT`e-<=Ns&Wpd_^~7XJgB4JIW3 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHolder.class b/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bd63d10171466fec463683fe7fe7126daab39586 GIT binary patch literal 808 zcmah{?@Pi^6g^L!%e6{Nt?ZYk(9{p3z8XOZVNeJbeU+IHQKlPn8va)WMbd}MTlgl!QLGInI_%GhI&`i9x#49RQD zY3NqFq2KUs*Jw054ZXr`b5Jrmb(1>P&w=KstY9`mOI(E;!bqUrk2u85_=rmnwpv|R}d+sbps=5Q4C zj`CvOf{JCRDnd|X?5j9HQbh`fD$vT&&JbTc`)dR$b2Bd&a8iqI1tp@{BCa6`V10k>Kd;h0i#qt0jYBiC!iwrE4eA z7dcFEh5jO=3T1O|V9%7msJ!ZxlNw_O$sSRM)}$iwoGJMEU1N(^7-bWi(()!ec+CB|MQ4#DIjS5@sYkWALWa`fi@#_V&uYcC4v}W@got zW9w!%!r)KmxU**oKwHUvdrhveRyb-!Lw-Xa>48D>E!kx zJhWojS=GvA)m5I)YguAe*ZHAwvaFfA2Dgb~I(&&)Os>bGDh-hv_yyCNVWf4_;r2T% z!ztWUg=x*Q9c{=Bipf|Yt!`U=CO4^x9+L9mo8FrUgz(Rc;1PK{2Eh^ zmN{6}4mSk3gjuT6T*fHYKtTuYD2QNA!gB@lcp)|m3PNaA(1vyiQ3Ww9N{B01!b^tE za&b!WV$payxwf<(-AE+g2)b7c&6UO^DAg>t6)Ypc&{Q#$I>ykIh_B32t;Ymyb(Lo) z#>T13MUP?+m$m#}u|5pFju-+~xd03y%C5GNlv$|Ks>*YtN0#MOpuupJ%Vi1`7WasuwHoL? zYoTI4J(^9;I3mr{vrTw<>HBB_2?TYJgok%eMu_R%@%n#Q}dYo?je>>VzEeWC?u z+lemM9CFQmGS_`Z{l`m0w~J_{5Os7K7#=CWQw6z)`!1x3=6Zs7PT?&R^q|+ZE|ASb z*1=QwM$RFf!@oNE6Tu4vw#2>w`TOV(G@L`3?|v(;NZ$~Rez4!@l+Z`3{>yy&id;au Z=PMew>RWE5&fvX3aI1i(Gx$mw;xB9*WC#EN literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerPOATie.class b/idl/Messaging/.class/org/omg/Messaging/ReplyHandlerPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..2cf2fc9ac9b88f76d0ce16bc1aa8fec7fbfe1f29 GIT binary patch literal 678 zcma)4+e*Vg5Ix(ZCaJBpt#|8#;6oEH@$#lc@baKgX|Wq^`I%aU`mpkw)H7XIuYOwpu^)QsGifKhC3okvufy@)$&(VfbgM4AuSJ#ya(EDe2w!Zmq8@ zEi=sh-BJ>BEZ10w?y0}BH)5VJC{ I0euMs0K~3E8~^|S literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f11a11cbd37ddecfca224d1ffa6f890359ec5a0e GIT binary patch literal 2302 zcmb7FYg5}s6g}&gY+1y{F^LoUBBYIx0S9RMzyxBTZD?^#fhG-osIt6qlo;D1i>CaP zPRNxrOh_ug~%+`W6R{{8QdKLIS_fs9GqknsUN4B;|9 zl4aGB&U&W}is-RKjO6qPQX9wu~)&F5!zXwvm(Y zrHl)LKZd**b|icyVVA+L*~c}`kl3zTrF8YMl-|hiu4mKxw7XF)@(e>@#jKe2DuXvU zbBDnvw&|l)tpdYDa;6VSa02;Sw3i3WUBqL1wr)Ji>9u{mP$o)`S!9S4;-UVNo-XT^ zQhLv}%t}d!Fe`O#*$g+6edlE>#~F7k$Ln>yM3D3@ua%E?EVF8v_VG@&Y#PTIAz$J@ z+m>z+)5hv_)+x?WVXp6$}@9Jk#shO>HN;o6Rvy^;$ak=EZLv*2)ro zP@v&QhIiY(XX=-rD=5HVPzU|BAvd&V9~Bf7!4=#`i6J!z8-lvc%QbE>L^~zfdMpg% zZGu+Apt7f$5b2`~8T9CFu9+2^TlaN?Yc>g8O%4|J;7;ec3^by?6RGeS##((rYpYrq z@eJKM>0=cw;hfVFT$02<*K#U^;Yx4RZYH~mogpk*gUdEO0@C|H%GqR^ql+s;BD?D zeueiX#!rQtKNe^}`VC&%69}p!8ogj~ghbnLpb>}I8w<91lbCUg6Xfq9R7g#oBGiD~ z5*C7rl;e`1uQ*&$8whWco06Mt6U}1ICGyZr5H&DH;?A{Q=8<+>R_P>hR#JU|$Ww%$ zBYN){#{WwFgIMYXVqIHms)6%DN-HKGJdqd$MV-pwiV>4IE}(k5&RQH|?`V+;zvSTW z5?%zgroM!qosgpV69m=25kHxHiik?L`#UB)c!I=pTp*bjbF*ZPHIQiF((FlFyDKpO WUmzTbBZ&8VGENS3041q)vG^ZPw@f7f literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHolder.class b/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a7c00fab901e1b4ed5fe4458aeb5fdfb04d26761 GIT binary patch literal 850 zcma)4-%G+^6g{7AE^U>TTG>x4NVkVkuSQV56eNm8uQGMWWV$h@;eS<7Bt7&8^hZVa z(`hM4GWN0Ed(OG{p6`Bre|!Qs$4LYd5@Cdpj9?R6{MhD4O2UqWT?u;(Vo$fa2E*x{ z?KU*K)zAt?r=vH_c0(&0j@2)@rtO+uzhqlxt)F8EU6^gtyJQGvvX2Zx-mVj0$t)nqK%T~DuChIZR_y57AVe|IYS?iT0jPPx0F?r=T$9pH?XPy)je zy^PyU3o6nVxliW`{l$hEiYo75FBHHqz3Qiv2+#vWcv?~45Ex_D5cM$$9}`y80fK)Z eF|5x*ROJ@3nAkx8 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..7a227d890ee539621a2659208f623882feea6762 GIT binary patch literal 200 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9BzJj96{G!Z~%J`zhy!2E?24xLRpZub9{ruc? zec#mL;>7gKymb8lsHz~4B5OtleM}`msRcQeFm(a>Iho0o{spN;i6xo&dBuzj0$GV= yiTXJ}{rdh%S*gh-j0|!xL!AACoE-Jh^{_EAFfuR!F*DHBj4X@{EDWqb76Smi7&_$u literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOA.class b/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..6c196228ca1aaeeafbb77fe376b5fd06a59ec809 GIT binary patch literal 2587 zcmb7GYf~F#6n6bL3rMbu>p+pw_grkf2l^-}M5 ze}^-El6EF^#M?J#{1^U@j^lZ=n`8->!4G*a=bZOkpK~^U|NG1D0G`DUBKk1Imls3~ zV}zeZ8}Srgv&1TI3@&4ifF`?fEyy3@UlqkS42!B!DU|M*Vp)UM#L=UI4#L( z^CDhHil5RV7Vri?Eeg09!kZy133y9H4~9Zm=1Sk@mfi{B-4NsuRs<*lRt01j0ypETE0uGe1I=vjZHf5x=3adRshpH=gDB}RN_t8jVy% zCzGj(@i;9bCx6~7E4nUghOJt+l#EKouhbOIo0hGt>S|iGwpA-WpBx`qp6EX`=%8k7 zo0}9vZ|%9`kMlUC-Y%$ldxS@ODs3y7%~>V4z?BPFqnwRq^m0ZdL=lsq;+BA{gmq~A zvLWFaL?rZMK)|L19a{nn2_|w3-IY{1_9n)ss&$RMmyIV_V-kxKrKb&`tD5UYsRA!Dj& zC|g=4v6a)+E!D6Uj&z22Mf_OJ$((AH9}xIFc}%Wus2Q6R<^()L&Xo*r_q(-UY*{LafS;XcWUse zjK>sj1X3@$jwl8J{a^&+1|Ok)l?aZ|Q$>tsoNf*HazCM`$UJJ~2=2YN`2x zPHMUiQ^SL8%6S{MF2Q7rn!<5KF6gF_r4mtw>D|HJsD38SR$_Fj|}w2&!m+$Ok)p`$az6X%7;ez5ujdq+2WPjP}65F4zto zK-WRUU3Q1d4iUTIA$&hqB`&!Von)ecsEq^BUHCmBm+9YzW21$3ABp(yBT!Lr1G$J6 z38#D|oF4W^!~PPQ>E1FN;M5XYhlAl@IPef{(QvSY_MJn7JFa?#I|C(j9xdE;K=Wfq z3!mBH*=2a1))oXGpyoaY3;hwvmP1U!TboDg&gPPOqLaFMH` literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOATie.class b/idl/Messaging/.class/org/omg/Messaging/ReplyPriorityPolicyPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..338c4d29c056089c4e9f386d1f22cd9a4d6d1b3e GIT binary patch literal 1079 zcmb7D?`zXw5Pse^UD7soU8Z&F+?<=5w61Z^Pumc-`DM`2(uy$lA!O}qh{Ptm34{Dk ze()!vpnrgWlz3@VTO>$F;Evq$+~w}M%dg+xe*$=lW(g`biYViLVm8aThONXrNX)~; zJd&X+Fcj2fG-N!MvCUAl2HfM09dU-8mMc*AR85S+u^DK85aq-&jb82#T+C|3~k$vIu9v7Efn4R|F{`rxSIYcE$$F~FxN9}B8 zwlfi_n~-SsaxhZMisFEB^15+C^Yr~7W>}diaNO=59hzfhDN7#kFcLnID1#JG4*K3m zLlqjWx6^#WusX}1 zZEg%V<~k9Q^QB8u>+`Z1%(7D1X;P$fV4C^C ze7>(YfF0%>oMXf>=9q9yIc5wSV^d-BR9s|LQL2hmM6%TN&5?C?mCLKqDybP389hm8 zY64-L$;2^i|LcaOwB(d2Du!iSIfl_;FWT`{R}M@<+Ao~64@xA%x@(ulI*PRv{wX*Y TPPy7+VCZ3he#0TW=5K=^(|Ab1 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e1f770f422c5587a9484837c02b5371448beb65f GIT binary patch literal 2023 zcmb7E*-{fx5Ir~BB*P#ff<|0%!7#xL;7$+?;DQoBKrMZl8is2e4U^O`sC1TjWF$<=h+fN$+zAGMV(=kDK!|D63(g8dZ(^{;libNEP=W2+p>6=~ zTyhQbMb;=T8!LH&^jWJ6J>>D+cxh;P!_H|-u4CCbk%VQhbH`vu(t9kl1)kq<>&Sa4K4cq?Q+UO2qZNC8XSWGA09XJ<$+Uh2z?S}6x_v81qTsVa73K?agyd_w+1V?hgpWy%=GLS z&2mc2^xxY!Hj)}va16&KWEIR|UcmzHD@bBU!lHtu$|c2cwuvD6sD56nHM+4M34QE%A3cLC=9^9mooVc8JxsT5+8OOZ^&{9jI)Ds`1D-lsRsw--__oU0h!|y0dk+4x zEdCz;pXlBeX2Dpf1nC3(BoiJCCusG9^&ld6<+*lw!2VdcihByDJ!LQ1`^YPzCbtnO zL9Qeg!5IvACUM$Da78VlW0uU6>`)cxED|*!ADskH37wSOzN*O}RL^9BB8gZD^*g%W zqT@57k3XXOYw`zT$?u3Yh}2{W`$a01ngZ~3#i%GEvWFETBoQv8`Ws@M+eKf`MJE50 r=RfS_(x?7JkZn;$J#P?JzoBQVnpR`-_`38IBalh=mYDT){dvgxM4(A!AF%wu~JDsjr(oN|3s> zoTg^Ao7x@icJ-#wX=){En}agb9ab^gv}l<|eUKvvo*Ny5T@d(F=?8*9-fD1ytY-$1 zBvl=%Hwcb@vhsz})um=z4%2HU)owa=kChpRwR0jPSbcO1COVy)Qs}YS9I46%Hcv^U z($n$AWh&e+`p&6XgsLJ0MaHg*J?yJU;y}eAq68=2M7g%i26YI+ExoU6rp~o1)LOL8 z2$B@~ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/ReplyStartTimePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..2898c4fbda2dc19c5e1facc5faba46da6e15a2f5 GIT binary patch literal 513 zcmah`T}uK%6g{K6u4|i_ADL!B1hM+yR*xD%+Dl*^>@4US~y#P4CRsu585;AdQ%SbY$ zeyTB4PfuDkZ)8=yiKU&HzRxXsMeCSjXQ~H$5?t6L^W1Z6V_MsY7-9y-FeS{L7uMgst|ei)-kgk8+|-KaK}m#@{N{^%PuLE|Svn__ZWPaCTXomI z--j=z(nXiH(h9Fl;|PmVJO!^rh^CKH7M`#gR*q?w9Qc1HCJ;se<8YKBLWD_R_yNFy BH2wep literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicy.class b/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..5914df94205965b0294314232a8e28b0817966f8 GIT binary patch literal 250 zcma)1I}UEv#(UcmqEaBp3|w0t-IL64*spO}Ltc2k=lv8VWlnnPz^; zyg$zufDNV`oMXT-`IVKD%QzpXXi8xYK$wcWygmk-8WnFzatDH_IQ*q5OOXWj~ zOg4caN-4Gs>;JkzL8Y|H=!#+9R`x--+lqF4@hkf#mYJt5l~)-P!}8ZIOlf75k?;<_ UtF5xN!@$r%58Z}+IL+S%U$V+bjQ{`u literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f7a2999bd58e40719e35a4afe448383983af3ace GIT binary patch literal 2023 zcmb7E*-{fx5Ir~BB*P#ff<|0%4HL`&?gWtlE+`QM)Y6x!VYtT8Fp0yU@+tZis8x~D zDwh|n@}n&KCX*GS@^Y76PIuq#bASE*^aa2O9?IB|BfXo;7xH_|mxmanZD zIdah!_=|PE=3ci~maJ7iU&veLMq1=A@z<_nm;`loC#ZTk|G=Ue9d1y@cUxhK1;-T? zX)|_l-K7$^v6|imZt#_3x%3|MZGq?3-8%AaiVxX_;}l*oOtfOpEkEO?yPGtl>$drn zo6q@*UPaBcL4CZ7>ceAZzC3UW4xmrMjDp)ZtYAOl3J!@=KaSI!?9^ZdcQDJ4nwg#* zrCCminf`klM~72G3Xb5Ygsg(Qm{Ty1dkT^ml(3*+v2sZD&I4mWae*hRzDb^=ekb zZHB2f?=7f;+v2eH|>n}p!yN)9UVZ1!~stoEh~Y*7JQp!ZA6T+r#%aQ zSr&f}|4(#p3A113H3X= z-lF3(qK`hJ`)l$CV#)7_HHg$?3428}SBP0<Gz1c@8l zsp@vUs^8L9%cz=-s-CBhZQ5d&jY`3+)0}OYNc1GY$Bp(QT8N0#>QZqA% zB&q07qe5`_o0ZAtFV6L*?J%QcQT@8nY_ogDVfD1g@E4yPlZj5Jrexb}JVz?BZj-0P z63NkcgE9r~7k#Hy%tKWXfFfgC#SV5=#IdJhA7O%{*+jXrtqOGrf;FRK=$65?%a&@i z%n0H`hKcb8lZi=ZuR^V+sNx$)cQ;jsG3iEw|GQVo6*xDQcue3~iTgJq_JCu4iZTf1 z_)CQ3{7fbO#W%q10{;v3BiyUKgS>DD`r$=49EFEJfFiJ6SDW(h$T6LB#CE!Bhf g4th?oIf&Z$Y4+x5$ z`%%%|Op=HiX6D|xXU>^>@4US~y#Uz3S`0Fh5>ip5qsYjJVkw3!mL(_>auV_qRv6^2 zKfd5ytM4(S&Km>$TGwpdF}1covK+I@5ZSdH%im)NtHm=0q3-rMnF%GM7Jnfrm`9u; z@l%bVe00#LxI?q-j!f;Cd!BC6D_VK7ETP_P)%LY- zSixLSjG~}`RR%2(CGmfR8?K?-HQl2sa#O}c`4egO2Hfx&HmBI%X)=h0?K&iuR*N(J zo5)m!b!xl}h8V3-kT3mCh`{OW=A| literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/RequestEndTimePolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..73674a021e0b515311839ed7f61a3be0305ba37a GIT binary patch literal 763 zcmb7C%TB^T6g^WOr4JwYsNkC&U}6o?mBvJf3lj{6AY0P3lcouDDy<9t$%Q5wqYFR4 zk22m$4J=r|=FZ%?=iE8>%zXcRegUYVq#}nc1u_a6ir9|BP8@dQuqR_*#sP!Ub9kS- zR>T=uXW9)_0d`L5aK505;Iu6?KD4fvhtd-kXm@SzoX!Vk|GvKOB3MVAa` z<;CfhE6pTv?pYkmJ77i%1$najHWswr+*oypQY-snmi$<-KSW5HeM++|b3g z2u2KrDO#h|u3wqsDTyUJH2P2wh!|ZR8Vnr@R2hdlRFgW-5S1DnFO z`W=symULCxkRg4eFv)^y+L}REXFHX zPB3{|8J%USuaKUTGC7cxjiju`e$X0l5jU$XJaTmN6A)1~mS$M*2RFx{f8c8Et= z;@%NwrN|w@_Rnx!3&Wk%l_glVnPZ$D_N;ARb?HdwT!obr=E`$Hu1TjWF<_?h+|a3jEq^_lyFPJZ3%Z6!n(Uz<_yXC zl2g!1YXxm4zc`)MmPtBOTICsr$fRXk?i52XHS~xfB*e7oC1-`9KQ+|mN$%tns=*HI zP&Wa0FS&;KGG~;Rjg=xn2CP+vKJs{Byf(C=VHdO|*Rkw^NW!w$x#KciPqoF%+M5|) zl;i8`MuA+kMgD4oue%G5RdOtMbD>nU%*~7_K;my*$1n+NYB#J#J$r#sl@2#3=X^U( zx#YN_CT-3xZ@5$hH`X%y0S>>Rr0Gc>bVSZ?xDDui)gQ49$0@yG$hL#$S6*<_-B+UV z4cmOq&6j*tuftAvfPK232Z&CZ#p>88ID!EQa|-U_Uj>JeRB%+B262+cZ`U>}xQBTL zZEkjcf<}5ojP@SQoERG!Rd5W)CFB&`M_$1K9wNV3K)j#sC!u6;l(m{7~&0{ z)jH46TZgFq0>ot+a?uBdgC z+4Xu>V;v^SANw{`!SVwh%YBgKj<3iYcZQR#Rr~E|VlP9N;JS}?s)I}G1SnM+`%XtX z)G_oZG)Q0dA^P$eWHIA(Qs_*hPwPK)>!qF19#%hreV_x#ka*y!<5eXP+D2fjs*QwFvwlE7PA{9vgBSg08G`DWOi?5e zE2aKG&wF%zLHx-l^nOeKL?ZnIi6)VnuHc|ZrB+i2ft~~vMO5~%5`-keMbuzZtl?es wja+2%AMyN0y<7&=UkI};%Bb%hqUv|_ZPn9ijvnbk6k1CwNll*g`n4CsUm9}%f&c&j literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyHolder.class b/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1c6655f11f4865ed52e8d421f9c19175b8952fa2 GIT binary patch literal 862 zcmb7CT}uK{5Ixs+-L&n)N-O*RfJ}>}UX7r7DJV3HUS-Y8va!0h-YxuB1x3~XWou>G5MS}2_y8x7YJX2s#gdA;F_YeBGDUS>qgPt*og$_z~@_@X~YEsIuz zQqq~<0lQ^x$S)hu>llNsBZjz!6&phBr`MRUYQU6hfI}KSz>55kvszjf7p%+7I2{gVM%G{@MXy(qL$X#Hc4pIZd zD7{R|PRFX!7j1#;IQ=C$5%Ol=!CuILPIw{+rx2kBh|6#`_l8IhGl{7HlMFDiY_5%w hKad2b2O+uaDqYdvZNX)l4HCT^|{4H9dTd literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..68ac84da9fe8328adcbd25ad94bea0a3d1dec5a0 GIT binary patch literal 785 zcmbVK$xgyh6g{sDrGoH6TmUbDhgOrAfu#V9UF1kjLTMBwq@+d*kw?91AAyY zR%kPvG==Y&;?6N|>>#il?mA}2zJIWTu(V+;_F}aBjC7h1QGmPxw2c0Fl AZ~y=R literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/RequestPriorityPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..4d241153e12aec763e808cea7329270d128d8ef3 GIT binary patch literal 202 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9BzJj96{G!Z~%J`zhy!2E?24xLRpZub9{ruc? zec#mL;>7gKymb8lsHz~4B5OtlLrf(>sfDGf#U(J60r@$Z$(8;EsYQt;nfZCej0^%< ziDilUIY1Ni{gbj%lS>#GZ9vnV`N}tU;<)hpt~7a7#Ua?Sb;1C095Kb A!~g&Q literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicy.class b/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..8f6f1a171d247f792b592c217e4b8ad04e4919fc GIT binary patch literal 254 zcma)1I|{-;6rA<9e!;@h!qRTR8~7`PNJPEBGd#mel8u|E;MFWVfQJ&(q_A^fn)$)J zKhGC{83r0!qpi`==xX#d`U+F$W8>1;Y`G{XwpncUe7$iY2O%#_HR4P*^^k86$+!Ov<&x)xvA#IzjELrN;a9WKU2gClV3Y`Ug(st*{p(f UCRQFT1%(HR5dKbXlMI7|$R*%q7j>5~Q6}KJs|3*itKgCa18V8Z)G!>ggJBYfVOf5P z{tDEpNNJU>FIwe~+S)$J;#thP8nHAUDGUjkcobF1PN+x&~0FZh;T!(Hft`|MP25S}#)mElt`f>8;}3LfBsf?>oJoEN7tTw)kHzS#=? zzzRcZd2wZiCVNs$_(?6DnVL)~xQHJlWEK30RRwE!s33`}5^@UGtCvZJ@fO19)B1I- z-t^|qFbua?YV(;zeJzvAWEsX3A11)J8;MlLe>PkR0-FPBmE8-nbRG8%Y=u=+0s4r^&OM-TNN46UV=q$W>#{pyS1e?kiZ A=>Px# literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyHolder.class b/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ce6148c3d1b2e9df45cdae5889e8ef8c179d50c9 GIT binary patch literal 868 zcmb7CT}uK{5It92H*G5|weJrrNLOm9S0kui3JS%dSK0C+E30ek)$m^x6iE;LfPPdo zS653xFqR#5XU?3NIWu41AD;k@up5SocnCox!dS$TG|SSgs9068red8zX_)5IA>AM6sWm zoI|E5MVFf;hP~gs^IYNV)TleIFz;<{T-NGMDo?O#R%Qf?Pp&1XRBCKWt|^9dl%i=hGd^(WWe5Ra@POU;dWit3H0R4kJVyGzQOPl>{sz*E{vrfl6i9K?zPB$;E>Kz z1;Z4*OiE8DtI!v1g6s_aMY|F5>hEALxC2W(F25KSkJt{*T>8u;$h+*CZuON i@c)5CF+U2)=&$f~5a_ckAm%|N8>32r4wPrv2JizJ+uq{< literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..2627e2ad890ee8e3499bb039a85c2a7d17d5dd6e GIT binary patch literal 519 zcmah`T}uK%6g{K6t!tZ^ADL!B^s@TkYL6O0+Dl*^>?|gi|yaCw5b{sNN64EhbV#vyfVLgr3A;5Wz^DK z7pFoEVTal;gCR~U66Q>Q6d|AbMEfe8b|I1nXHY6m<4-lWQ^bU#U9Ytt-0lq|iK>z>% literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..e0f05531b328fadc49a53993adfd8eb7bec537fe GIT binary patch literal 777 zcmbVK%TB^T6g^WOg;F2*K=92Da8V^j7a9{`WrD#VvL#KKG);iPc3kjJE;P{?UHAch zl<|(#z=8#`x%0T^oSu6+U*8{}0LsW4NMIug9oZCe*i>apm2FjabnNQbV@S3;yvto% za)#rY@LfyvTWj~btj!Bc})#|{kP?CK*&g;ctsy~ z#9+vfouF0gjmo7pnw403ha&I=fr!yEkwV5q5{8a_6H8b&k;aONRjipqgzZe&HdOl^5r#hu#WWogWq1sAD8=cR*jR@`o{ot#jO^kE Dhyk^= literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/RequestStartTimePolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..f046471a0a67dd64f9f0119d5e3383924e8bca86 GIT binary patch literal 189 zcmZ8by$ZrG7`#twqfV|a&N>CUI$2kxQtK?SgpkrUnnb}@bMOItC@~$nI2;`J$9=x9 zH-H2ahM0jdj0scch4p8z8%dZiS36@BH;v*&P*UL}Kl!p)6O!K8OXq~rt>U@7-KF!# zZlQ}GOs&gjc9m9mZCXc|RpKFdEkZcERI>DhMZdGn@^r)hJ28PU2pEQ|6cHkf0>ckX C?ls*2 literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingPolicy.class b/idl/Messaging/.class/org/omg/Messaging/RoutingPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..d319d598df9a2c718492b0cd93b5fe4e41700b16 GIT binary patch literal 236 zcmah^OA5j;6rA{J{DKRYf^J;}yn(+(p;GA$(hx&RY)Tr1Ud@FE@K9nlU3BHZ@L)a< z=JS2M0qiiRpcEsDF~x*pN--l?Tc?=4D|V4}&6O?{%k0C4d$mT3hG0?fCufESC(R2f zJi+!)DXpaAUfZ%JShm??njQA6{krPPi51+$rI+r;g(TQ??aDgOb0b-NO3tO%zKIA3 OdKjP|I7Ac{2K)dN!b33t literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHelper.class b/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..258a463afe29608e745aeb3ba42b35e6ed104538 GIT binary patch literal 1943 zcma)6*-{fx5Ir~BB*P#ff(Bd=aY-i1u(**R8bBdR1Osa6%hWK8F&ZYRVG#Kg{R-5o zNNJVIi&ptjmVJ}SPD)V zn||El_bCx^B=|DTueU|a;0{0C6_6A#DR43zFaj@>FOC+tdxj z-K(~yze#JwHElgll&;(cLmwetYi~6rubEk8)wXhGmIskDw+zc>xEX2jmo#@1HBs8w z+S0NFQ8I;XoA#ALKBw;{c;JHZ&bBn2IBp!qQO~0j31wv&8pXKKiZ2!{o9CdU%;L69 zK^xj;;wXgP9V=&3>Zy*5%iDIH@<@65OwFRwCgCBL7|x{Tm*Ui#qr63% z4C3RXV-n6{NI+V`BP>f;!D9(AToI6wuv)o{GF)zIZ*@YQRBA4bX>EEsk|KNk$gzC{N)Ri71#l6U z9Fs8Z+_@x|(6vNnQu<1j=rSTTA{U)FQ3>4?+_9=j6tZJ7L!P*=hq;W!Val9LCno)9HPqw8>mh>5%N$?gVUR}azGV-X2I>fpzmSO(?a j@UlIMsP8@e@=x^bRl{oZ?(2ddN>eFGO-OqE%8TJ22zS|i literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHolder.class b/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..5ceee5dce6fc16b4a356060de6060a30522afc32 GIT binary patch literal 814 zcma)4+fKqz5S#;)3RVRLRJ@`XxjZ!biZM|hlthC;<0~o9G$n?=s%K*1p*3`cWpxVEjD?l6SvT31sojch7b>Ux!vg(K?J zT*HyXi2sn+t(K7Y4b8fmIr)TH<56e-JIVF3FjH~D%ejh!1rT22gceK&!vft**hFc?_e*Kz@WVBmSgbH1q4MolYN6{gjqqz#YA09Ad~IG`v(%n>NF&q Zd4;DB-$-Q*5f>uV76$N>$N>C*fBormAG01~( za%m6TVZe|%Ymdxp)9_5+F?!+H^_>PoV$b#6aGxQrS56s(79ZLark0#u`NO1Q5h;fB zZyH1S=&)Vq7fy|j9iz*yLi*!`d#*L9@6@&#O7nWF(`_CY-?EB@sCHFF31tR7Vi3zX zwu8WQi1d@#=9cL-&48*c%u=VwPo;A{vaOI|W2XIsVGu2k`$Wm=mAM8@{S9H0IxB-g zp%sfNr1r+7fk6=~t8L@s`i}(71CiLzh-jW1LNMrfSP^1_cQq?<% O4@kU1qIp9vG(G_9NN#li literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/RoutingPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..8831f1b7c844c27d58f49de74c7a518f382c5107 GIT binary patch literal 739 zcmb7>%Syvg5QhKhEzPBBy~KLA8%XE;UVKhCHs+`^yM$ar z4EVVt!YX z-_+vb#B`vfeh@@aNM%845J;UhBZDSRRRQ@qnaP#@1*t`eC7Jno#f%IBS&3zd`Z++I t`u<5-smUdb4015-&i+A8j{4|&*ccfY8JK{W8R%k07DfgZ238=80RV${ISBv& literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingTypeHelper.class b/idl/Messaging/.class/org/omg/Messaging/RoutingTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..91c1b2dc49b0639d5111ef6541434a0e376298bf GIT binary patch literal 1741 zcmaJ>ZBr9h6n-vw*<@J?1QijBMMRTOS+#GLP!-S?B$SpQ)>hpvVJBS;NoI4Q`cwP` z{lbUVI+1B-I{K+I{ZXAhcXtEHg8g#u?m6c<_c`Z2=l=8WAAbS3hD{yAnATz9iiWE? zVz{Q`BYdpk6CFu>nx^G54cC?Na~-EJljc%LV-{a1)D303sg_$Q%qh!!3JW@JE9S!L+WefkPU}K_%P9yXXWg1BZwSP)xebB1GIO)) z-lo9GY%YQ%T!GwL)A6Lha5mzft35B2R3goJCOx~%m{Z5aXzfFz@ml~ z17BlRV8Cgb(%lL#gDo@g4Zbz71~M8tEbGp*veS@my=Gt?_YCBaH*gvw8a52v$9D!E z;Cln_W6Z!MWCeQH>N}F1P~9@{10D)YF5NE9@aCr#xfQ3`v?~lSI|65}PE&=C3_OOV z;YR~DiUJeuVvfZuI@N~bv64fwtD8?8b=`w)U?4RLhS#Fn#VzaiFA~A}i3${D1y`f4 zO5ox<@8mG5ptP0=wbq56Jffik5p=+*fL*(~!_$Q7eVM|Lj^!$qSWRChibr$`4l;Gh ziK6T-eSKlstx=6B`P6DEF>n?l;}V2WxC0eOS`E+LcBQ-PSh6f|C0c$M93|5+8vP-E zyXx9aKgmY+=$IU1i4bo;5C3!2`EJN@9TCvgIJRr&1H%>{=qixM0j_h*C}e*u17v)h z@7yroP3BYT=U1BF96hdQ`8UX2a8Kl4L;S`MFpxtLx(9qG5Z_17uf8{pbNC?ijv$U6 zTKn>UBKBbPHR3HKf+T5-<9rxacs5m9zPX_DSQ|PWaw4_ X$^2*wCxhx!xZKrYg-Hk!3EcP(h9jMp literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingTypeRange.class b/idl/Messaging/.class/org/omg/Messaging/RoutingTypeRange.class new file mode 100644 index 0000000000000000000000000000000000000000..6664c36d4697042c442da476216fbaf47756d79d GIT binary patch literal 290 zcmXv}u}%U(5PidO9-OCu+F_wqaLp#x#6;18L_>0C=oj5=mcTB7mB?pV5E2VMz>hM{ zMrhufH}fX*=I8f&2jCVLDPo+~QAHy_GeIlCS%PyyG&7b!WvJvQ;izY<@pmjc-4UVM zckhZ2cgnIm%8=qXLxNg{I%uHp-9DELyrR}7)Ncv|NSBiWi&O4TZ*RAzN;ZZ@?}(oC($ z(+q<%X4Mpr7y^mO4Thi;(~+-P+YA>IlRi&!mriE2!7afso$%>rt54Hy(F$)gjFMR` zrPgXqL8pwnW>iZ&En_KsUsy(gU>=?Z(+T}QI1JI8FbcaXMt$AbE^{g>v3If_J;A;! z?*X&OaDgm#j6EY&CQ_-Ku!tk27qqxR+9f}$dd(6tNNTZKZwfN!MkRelnxUU8Q&45I zeL+{7qJw(Y8ir>IW%~j(+{7&fn;O2x1Vh5R@cy-XTq_s3CH=M(e52u8e8&*ujg&Bp zZlBO?YRKbz4F;$k&Ub3HuwUSHVb-b|3Mgv0j|UpA;|9a17ujhws#3EcR(NHbThwF~ zv#Nk=_yHviPhiUMJ5p}!Yq*064Jq6s8vcgSu!}Oo^~L$@H1+Y64C1$$zCT5-H@*1% zGgna2P(@9{0_qx;P*?Dy1`Ca|6^@tdGMQMX9IM+qTsHEs7u-pnriHpm-Vejw&c*j< zX3vEWgf4-Aor%jkO(&a>VWNZRglqR_$I1qbyMxx_edok_#yQtgb1k8AfV(M0wZa6PkZR%sN&VmIG-LgUA9sm;Rya!hDyV) zXL9>&`9MkBo}aE=1zA_lhGN{55az+7my*1xvP%ZN+5WIfdg9`!CfR= z?PUZpK+>pwjKF5{5WyBg4oC!(&|R}EozhI#Ut#bW#`TvNY(dE;Um@@eL&=v2yg>Ni zX9Tl)3+fSu4#-2n81a>CljIvlV0=!&8wxDdZcVK4m(jZkEgPQ(z{KlGuG$bILAJ7)(20`b?q zV$fQ3l@pYs%yRS?Bb$e~oJ|ty=x?~!Be&s%ug^%--0hV|qNTxnrUo>%E~iWtT_ OJr_mj2r(k+sPP|fh)1sg literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/RoutingTypeRangeHolder.class b/idl/Messaging/.class/org/omg/Messaging/RoutingTypeRangeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8f11523312511c8004224140368a6ec581d8de4e GIT binary patch literal 832 zcma)4+fKqj5IqZ&3RVRLRJ@`ja(QU<6=R~jsKJn+@s$+WG$n@7o}=+udPkeP)o2};%F zMty=&ELYA>^|s>*qh@pcqSfw-YeBGPK{A5Xd)E>qlKB>yqLjO0lA}}w^~{jWWXFvS zIdT@+b3wyAGz}qyRcve6!LEiB_B8AxMq2-yaqif4?lMFgM$gb~@<%V%8vIT$q(DQtYrp{7yun*FA9Ma0EV3?zuNsDP6 z6?!AbDK5}gbdaIb+$-1<9bk}N^wJ6V=mNqroy)(#H^M9-;$h+*CX~zf;r{`NVtE>p a&ppG}M_^QC1u+jIt1(gv^r1Y;Hh?d;63@i| literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SYNC_NONE.class b/idl/Messaging/.class/org/omg/Messaging/SYNC_NONE.class new file mode 100644 index 0000000000000000000000000000000000000000..4d8f4c834fe3d0a5f9ddc25d05b27484f68a6ac7 GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=< c4QL_*6VL=k21y2H1{NUA3Nnv@4M;Ko01`AEl>h($ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TARGET.class b/idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TARGET.class new file mode 100644 index 0000000000000000000000000000000000000000..9d1459aa99ba7594faa7e7aba458201adcee2e84 GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=< c4QL_*6VL=k21y2H1{NUA3gj^{umMR101rYPh5!Hn literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TRANSPORT.class b/idl/Messaging/.class/org/omg/Messaging/SYNC_WITH_TRANSPORT.class new file mode 100644 index 0000000000000000000000000000000000000000..cdf06fb17f1b07c54e0bac3e05c6abdc682af75e GIT binary patch literal 138 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gZBrXn6n-vw*<@J+LR(6yR7zixpln;;D#0qyDwH7FAX?wnCESVIhD~O(VEHNi z1%Ba!)=tXkjMIK{#vkSQ+}#Z%3;5;U-Fwb+?sLw0&i&`#KmG!63!6GdF{8u84GlMS zBydZ|+jvLAyE@W%FUynnHQZK*ALuxT*({e*7IXMeq3)=&kJR#U2J`AgH%?V7o`_F!S&T<7UxV@s9<(sPdM_;&;n`ND=kQXO-% z8s4VB*?b{}BwT?Uw2vNRpF%}opyJ!r$E$X8-QKKA zrptRnz88+&+r_xg*%CNIk4N^dZPsnKW>$R9acd-&^rTJe_4t*|hUcqG%w@N^E0_=%>n(ESCtkYLsBcM6IhHl7 z8u$!r0z zA-*y2IwlNUM_wRX*>kIvYNII)e2eb{rk3xPXW91|MQv5KT6T?vG7sHmZ_ZGG-y8S= zmWCe<*eDB3b`m)Ou_WtF=`n{RnroYnq-ykV2NsHqQei_>p}6IP%EdgGIZ>gOtgtDn zNdnhS?Z%N;NvSLssjLTm^_Y4N+usFe?|1F`4sR2x>Qzd@mzJaSVYLE*C?0YBA4cjH z66M&N`ugIE<5Gti|FP9lGT;=%1|@W%WQS_fx0;@_?fA~FwEU{Tjd=QzbDT`qPz*-= z?Yd*Pf*>3D;{$TSNsM^sVfde`F84xCs)&HD2CJ(h}fC=;m0~sQdlYHSu z`C>Aj(mlVj{N~Vcy~w{|?t*)&_yXcLet?b~hsZn>7=h#g`hE?pSzN*!k#!77^zn3{ z_$Lw%$6p}XMk)-F#Uw6AZe{Mutyp}8^ixa}Un1RxR-S%^#8dQ7zeM6WGW)+ESuVDr zAE1Aq2#qu*1GZDdW{{Xz&~QcZzlv*7{&ss35ZLK!f}tH3JIpC4#fV}|F`<}J%m_Bt70f;gc9C_>3uOwHHAZB@R`P1K5)Hwk`~TpcPkeYf~hEJ4LjBOO*;z#L<^b2(ea6+6h7Br|7RhovDn@ zsJzIGKg#jkHcdA(!^>UH@}2M8bI$$q_uCHulXxcL2*yQBU^0S1To!4$!k4RIT;t;F zVcg*NnXC;3SIXreWC(HxnK4GUj&L73GZ0 zO|3vKN`Bka^Ln{rER{<|eLKym3&wlf(sV+(@jsMiCf+cVnPq6iGuw$!DO)zrL&=(z zEt`lN+D7_dkimCW(WVD@9ePxc1u6?E{jFZkhTkLw{qe zs|~*HJUkG>_D@ z{Jj|t>(rIDp%zWsuwH7qq1rmbOrm?@x+TrpcKr|?5osbBdg}wLHdsw~^o-lg9jJU> z4>|Mdg2cPN6Q`9KM%uG>OVBcn3_W~yU9__vF6~v9YQyO|9rMT|xf&Rz@Ae3N+YBP_ zWjaZ8rWU95INkbbXS4_9uVA0(05YV0chu3E5(wjM_v&*wTnm0bmBl&^b)y44U;5f$7F^g@mL9Y4}Ble^BvLWU(x?F z^&7F&9%3ybIaS4BPNkkx0KUE$B}L=wV8sZDhYQL6mROhmqi=E%$$!l8A9uJ6$@>Vh h9bz=_0b%(U26h^>TBC=05QfrLN>Y<2y?*`0@DHMhiq@>WM6byf*iALgsAK*tB zXQ7~&pk&j@cIKS9oSl!)w|4-?*bhNMEQkQ&A*^DJn{{py5;i1kO4wo$yPDb28B$l4 zQ&+8KUA@-ZZLMy!>T0Ris+Ovjt>0LtQSIdz0w+exa8DWh>C8QYkhf~YJxI?$=6JE} z=vs~8@SBh?-kzVSw&l25#njb8%kH=(mtf5tX9UU*j^R>`^i)c*<4$tKvfHzXl1OL9 zeGSXpk)OAmlQ9ojMi3zh+cI{rD>+u*{n7FoYXgS5r-m#41)Adevn} zj>x|z8xF;XoT-3r+Pr`;6s$0H`U%0t(XvTkn4^zz zd1(%x#1$!a~2H{079EXn%5aMAa`vTtxvxKmRiFufylI_F)0}{dV cZ%9^ohOZA{lw}1`55luCswDIwKJqqzFKvL$9{>OV literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalBase.class b/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..6909261ee0d5c0c35d0b8246b584125bf15d05fc GIT binary patch literal 498 zcmZ`$O-sW-5PjPwO;cm7{jj!Hp?FDhXw+jXf~^;!QZXPD4<)7{q{M7#g3y1Z;0Fkb zXMdD9u@;NiWp`(G-n_T7vmc)?ZvYOklYxx9ghCp{G)gkk*vO!aO$myGiiE0!Ee3fI zO~=l_8-@&ptM16UwG7`1T*HheUf{MEQiopPMMn%tRl8&mI(+DmnNdor_76$HDzXf@ zziJHH=}EWAZ`=l-xW<_ihL%gW80IvvO`DIMbMAZgw7K8dW2i0Wc6t}>W8)WAuoAyR zQBcD+gC6UV?sCm8w=KVIg;aZGo;(x%MtavH$Br24b8KmG45IDxfOLwgw$QMdLQAMq zr)4l?XeHt*={pkSQ%h)Hqth-#@_@4b45o{(Nc5BWq}dnpg82yXo*+;{4(mUJD%qHj R)gK@}A@vT4<{d?7d;zRwbYB1f literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalTie.class b/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..3902459b54ca179362d29e115673383e3d2e9853 GIT binary patch literal 718 zcmb7>%TB^j5QhKZR(esyOU1kFXo;zDt1%H)CK!wuwxlUdZGt_7c2l3pg(e!K3m?FT zGESie7bM7L&Y78S&ipgy>-*yqzzM1firADPp`v07+lkpp%x+@#BN?^#!F7}}m6cvdG4oQ@-g?zI^BPTU^4BRld%5S|hWXMW&E=Y-?hLX}3B zkZX!Qx3p@;LZyUK$cpYpBJdx^LI~NK(IKeAvA|vw5BXh=U2+o^9uq2mnl#%tjSFis z438l7-7p#nhPa}uL4~eCh9comLkTMy%2?H~hII`a&hGka5GHc*16ppLJOBUy literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyOperations.class b/idl/Messaging/.class/org/omg/Messaging/SyncScopePolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..cc9c9d2bfb9f7558e78a07b5198b6d788fb6b893 GIT binary patch literal 165 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B{^H8K7gKymb9wpvvIn{DRbg{G80>O8$c ob=<4QLtz X6HqrJgCqkp0}GI51)0Ub1|%5(XIUH! literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/TRANSPARENT.class b/idl/Messaging/.class/org/omg/Messaging/TRANSPARENT.class new file mode 100644 index 0000000000000000000000000000000000000000..61b56a6e7f3b3e45054e0a2482f5665f3829065a GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gzF|dIQ1OP}y8`1y( literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/_ExceptionHolder.class b/idl/Messaging/.class/org/omg/Messaging/_ExceptionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f61c6cca2bb012011850700d21c39695d84f73d9 GIT binary patch literal 1348 zcma)6YfsZ)6n@^(QK)4O0hNo&MWEZ%D&8HU3{fx;5>XP_ho;-!jFN6$+D_zOc>@;{ z{Q>?c<9WMwj7Ac-r02by%X7~2w7>uS_yu4AuN9;)-;V)k3NpxwRZcu^D7cARVx=p% zjXPqypx`d<$+$1<0~rrxJd*L4A#M0>vtBlRvt)C_s(1`T#f^RQgQ?qQy{d2fu2rw* z>D2NJ@6hvk&EOx)yy06;oq_E#D5XQ68;)DyF1giA*V{8~Ug>sA6blT!i&ow8ml%4q z%npOJ;#4@ph?eyfx2(8YzK2uaS4}Iq%kNXuVN8TRb0T3ieU`NSW@u}&sB`zqKst~1+1ue zfmInVRlLF^F&QUK#TwQbrlav~a?dlX#HMa^;IBD$KwDSvR%xG?3HMwS7aMzf;zBMv zrro63jh}XW=W(}_zpH#KO&5C%s^HovIgZUuQWXh=bd`jK zCT+&K%}Z1Cey2d$9&5v0&2v$+;}k03`0ui$DtB$xdL=@@;&CPOQ? z&>w|d!(<#o3rc`NVwegVn5NnidCkztb}FX?NO>#OnpQ0#(FCYfORyTC3MG+B5XGwNCb^~yNj9@t5Y&I+ zC;vsIGr-tU>nCUYOFE9{Zg!Kf0fsNT$vx*h_c_mb*}wn$^>+ZXs42LCcNDyfdkS90 zoPspw#p68*_a(e9;{yc}G9fZ9NLUPE2@iz(hcZ5ru`JG46!hbvj8z3$%*n{f_*l5C zNq8hcKT$A-bqRR|6WEaPsf0}lpD_e9qr?!&ZtHt`s-oA*sl06&wQ`!FSF;c5oMAj` zTIG~kEvFXO))z9V4LV&kOPpN#=8c+R-zS*Z)Fwkv9MelPtpdYHY|0l&;UdVWHMnIn z%*A~6Ozj}uI?C}zLoXARl=fi1$m_OY)|SmmiCbxLm&EsNOD_`4y|ZB2S6_g`Fp#(P z;!aMlZ|H>zm+(2UZ)QEw#l9o&9wFK=d7L3z(Be8-ANpC*U%Vlc`b0h znhax}Q?pMNGE3T{%z7rrkfF*(OD1nbYo;A7nl)ReCWz`$ibzstC0npbf3c%`dS#a< z1;cMt+{7)0Yp3to6b?CFEpSVMuA+dViV{e!t42d>95ifR)wtI}3{de3q5|++2BmOd zbLv-WD+y%^sp?kaiC*EQ&XBO5m5L`Y7;c|pqRnb|QfHM}#WZGAY-5LE@`8}gBC4pM zO2V%!W#?MzbdAE?Omdnb=3$=ixXdecZZU-09lKW8=3;(^og>3c<+)|(72|u+r3^zJ zXtSC$yEGf3Te?hCTn4o{)tXZchM8D%Hhi${@%HT!G13F>NP8IL-hlZ*#BS*xJpnO% zn)Jrvs!^k1RO}tCV44-K*BC}ycYXY+L&R!I=Y;@qFQ(lJIj^JJYt(Iq!6GdoYJX?MoO~OXBA@p$ zXl=&FK10W7UL=_!R%Vk0WpD-schPqDLBF#Yz0iak>i6pwdulUylRk?#=mXpXMeGCm zrHJ)H?+}>ShxB}%{teNamIiv`$6&wE58-$lldd`J7=hpkdY(Gg5Mr2ets@A~1q2yS zoFH(7U=tvOI1;YQUDxG${0P0-#GmN<8FJzU`kp?Av=xz$5&DA=7~Y_#4E8UEB)mx^ zX-m5hKheiu-16fgl)tds_Z#|GS(XSLLOsGjHXeA6{;kNB$lxKuk--ED9AhZoVGla? zh~IuS8}D^2!+r}Pha)2aMw~~VL7{s^?oE!pVES|v)~)Uf*ySPUYemo^s8k9nzLwMuAth}>oVxs#f@1N(5AdVJ zJ55?`K`lcrlY7s(%bEM}`SuQA7h4)s%)}AHtcE$vOS2$NTE(J@B^ApI%B|_NIKx)S z^)16~SjHK@xiKxfX&IHH`)lqA+if1ZPL2BohS;9nw8cKdNG5y55G}ejB5!AgVM~Hi z@wr*+V-(BhhX;n|`ogR_+&F1^EpZ_T)+k6uta9huf{J9miwsc8Ez!?WD&oN-N;;G6 zH5PC#$uD~@=oo{pBMwc)ijGyR=~%~xj!mSf*8gGzk}xFd=B;TsCh1kK*7>zySnsk2 z`V6L$Qw~>wJ0AB*7bFW}eA^wgG$rHw({$ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/_ReplyHandlerStub.class b/idl/Messaging/.class/org/omg/Messaging/_ReplyHandlerStub.class new file mode 100644 index 0000000000000000000000000000000000000000..7c24f2461415acc9526ee350bfaa51a51f7c9605 GIT binary patch literal 420 zcmZutT}#4X6n>7|+?=zfW)Van-DnrS)ul;Lc9CER4ua@nY&yndZev?P|EiCRAgCYE zkBVNWBZ)5F_c`Z09~{ot_xmS+6YQucLN7r=RYpxgUB;G-hKy~3WSZVIA=K}NGwZ=( zz7@F4NMkQ>PYK1I7kKFzL1?va2x32+IvkdkMyvg=N$E}e%%(v_S%ZQSLI0ah*c)69 zyW!mJgt5!UPUJscS;5qI;_h+hh;XnNbDCW{Nn*KtA!e?tjP%|nG;>vdG`=`zQ5dI| z?K^B_&zwm*m`6TgKiB*wtp}mWFH;0T=1*O$%daM6b(#Mf@2VV$qjdNNdgcXqTfxSP h)>pLng2GeAD%eDB-i4UWD&hx(TcIWzuP7`-@B@)lT0sB+ literal 0 HcmV?d00001 diff --git a/idl/Messaging/.class/org/omg/Messaging/_ReplyPriorityPolicyStub.class b/idl/Messaging/.class/org/omg/Messaging/_ReplyPriorityPolicyStub.class new file mode 100644 index 0000000000000000000000000000000000000000..815d11aa4089e3e8a50a799551fb206e93dd552a GIT binary patch literal 2020 zcmaKtTX)+;5Xb+UI9Wwe+r&+JNk}0L1z+Mgy-;Wx0%;oBw9W-PX$b{X$6kzLTN1Kt z>W{*A-~q}xriXL5z3{+yDu-E1vMt+(2k%PS+273kXLkM1zrX$t;08<;^GHu%4yy{T zt2EzGaTB*xyocLzcwY`5sJMeQj=S<@T^f9-U_-@6_;>=FxF?^sRNTk5f~1O1aEs%C zoF6JkaqK8~q~I|}hGUmwk6}#Ljbe@A{IkqyzL8H?@@6TWa~;Dh-DMbGH%!CbU>J?X zpD;wWtfHXF+cF!A58ZUub_~lg+@|gjjO>?U@r>n^(pI&U-W9c4zC`r&fp3+SM&#>E z&dnFfyLtOCe^L<~`y2-hleSec3QgT@+C-u-cF2FhvYQN-dazsj*?XJmgSIWPcu~|` z$08$Ty-;cApy5rtrC|YAC|SKETs<77hEI{@$Z0sl5qa0}1Wz@5CN~}9bB<>kzQC6Z z3qdNL&s?+Sit6@@g0Nk~GBtb!UBh$a8Kyip-2^yJG!#(e5E{NlNy9fVI8HT`k>IE> zTn)pI%(7{HXCBpr)8pYess!&Z7ei|2erAnCUXhTl&{<(unt|G$L~GYqRvF&tweMBX zTTTSAbW!>cR?e-TFf0bf9>=yESC%ooe{w1c?oQRFDxOm|@`2vZ3yFY$u(B0H6VMsGVOowBogGmy~BRI?} ztXjfZt#5t8Hkxu zrTfU2A_!qF9He)Uf*zsH3onP&@*Mit6Bg-mp9h^k`l<3pqCWsm&vZf2xJYl)G&7pV z62E}`L=T|Xt61`vr~Ku}ON{*JufC0I{^}!)AVObLiRfqxkxcRx##$Ipw!rD9v@o%| z{5O>4KcW6XA0}Tx+e=9d!#gxig1yEP$GaRc`V>dP=N@3R&Apk3p7FV7U*cQ~Q~yVA zVR~cXhcG?fp(nBI)1UfL-$_KHKK=Y4cV_u7%zWPterB&HgW28;G>p8K_o>VvLikii z*9X3ncp`eC?If(pAYE$j$ + +module Dynamic { + + struct Parameter { + any argument; + CORBA::ParameterMode mode; + }; + + typedef sequence ParameterList; + typedef CORBA::StringSeq ContextList; + typedef sequence ExceptionList; + typedef CORBA::StringSeq RequestContext; + +}; // module Dynamic diff --git a/idl/Messaging/.svn/text-base/Messaging.idl.svn-base b/idl/Messaging/.svn/text-base/Messaging.idl.svn-base new file mode 100644 index 0000000..c1cde05 --- /dev/null +++ b/idl/Messaging/.svn/text-base/Messaging.idl.svn-base @@ -0,0 +1,171 @@ +#ifndef __CORBA_MESSAGING_ +#define __CORBA_MESSAGING_ + +#include +#include "IOP.idl" +#include "TimeBase.idl" +#include "Dynamic.idl" + +#pragma prefix "omg.org" + +module Messaging { + + typedef short RebindMode; + const RebindMode TRANSPARENT = 0; + const RebindMode NO_REBIND = 1; + const RebindMode NO_RECONNECT = 2; + + typedef short SyncScope; + const SyncScope SYNC_NONE = 0; + const SyncScope SYNC_WITH_TRANSPORT = 1; + const SyncScope SYNC_WITH_SERVER = 2; + const SyncScope SYNC_WITH_TARGET = 3; + + typedef short RoutingType; + const RoutingType ROUTE_NONE = 0; + const RoutingType ROUTE_FORWARD = 1; + const RoutingType ROUTE_STORE_AND_FORWARD = 2; + + + typedef short Priority; + + typedef unsigned short Ordering; + const Ordering ORDER_ANY = 0x01; + const Ordering ORDER_TEMPORAL = 0x02; + const Ordering ORDER_PRIORITY = 0x04; + const Ordering ORDER_DEADLINE = 0x08; + + // Rebind Policy (default = TRANSPARENT) + + const CORBA::PolicyType REBIND_POLICY_TYPE = 23; + + local interface RebindPolicy : CORBA::Policy { + readonly attribute RebindMode rebind_mode; + }; + + // Synchronization Policy (default = SYNC_WITH_TRANSPORT) + + const CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24; + local interface SyncScopePolicy : CORBA::Policy { + readonly attribute SyncScope synchronization; + }; + + // Priority Policies + + const CORBA::PolicyType REQUEST_PRIORITY_POLICY_TYPE = 25; + + struct PriorityRange { + Priority min; + Priority max; + }; + + local interface RequestPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + const CORBA::PolicyType REPLY_PRIORITY_POLICY_TYPE = 26; + + interface ReplyPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + // Timeout Policies + + const CORBA::PolicyType REQUEST_START_TIME_POLICY_TYPE = 27; + + local interface RequestStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REQUEST_END_TIME_POLICY_TYPE = 28; + + local interface RequestEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType REPLY_START_TIME_POLICY_TYPE = 29; + + local interface ReplyStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REPLY_END_TIME_POLICY_TYPE = 30; + + local interface ReplyEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31; + + local interface RelativeRequestTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32; + + local interface RelativeRoundtripTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType ROUTING_POLICY_TYPE = 33; + + struct RoutingTypeRange { + RoutingType min; + RoutingType max; + }; + + local interface RoutingPolicy : CORBA::Policy { + readonly attribute RoutingTypeRange routing_range; + }; + + const CORBA::PolicyType MAX_HOPS_POLICY_TYPE = 34; + + local interface MaxHopsPolicy : CORBA::Policy { + readonly attribute unsigned short max_hops; + }; + + // Router Delivery-ordering Policy (default = ORDER_TEMPORAL) + + const CORBA::PolicyType QUEUE_ORDER_POLICY_TYPE = 35; + + local interface QueueOrderPolicy : CORBA::Policy { + readonly attribute Ordering allowed_orders; + }; + + + struct PolicyValue { + CORBA::PolicyType ptype; + sequence pvalue; + }; + + typedef sequence PolicyValueSeq; + + const IOP::ComponentId TAG_POLICIES = 2; + const IOP::ServiceId INVOCATION_POLICIES = 7; + + // + // Exception Delivery in the Callback Model + // + + typedef CORBA::OctetSeq MarshaledException; + native UserExceptionBase; + + valuetype ExceptionHolder { + void raise_exception() raises (UserExceptionBase); + void raise_exception_with_list(in Dynamic::ExceptionList exc_list) + raises (UserExceptionBase); + + private boolean is_system_exception; + private boolean byte_order; + private MarshaledException marshaled_exception; + }; + + + // + // Base interface for the Callback model + // + + interface ReplyHandler { }; +}; + +#endif diff --git a/idl/Messaging/.svn/text-base/build.xml.svn-base b/idl/Messaging/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..dd0f299 --- /dev/null +++ b/idl/Messaging/.svn/text-base/build.xml.svn-base @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/Messaging/Dynamic.idl b/idl/Messaging/Dynamic.idl new file mode 100644 index 0000000..0c10554 --- /dev/null +++ b/idl/Messaging/Dynamic.idl @@ -0,0 +1,19 @@ +// File: Dynamic.idl +// CORBA 3.0, Chapter 21 + +#pragma prefix "omg.org" +#include + +module Dynamic { + + struct Parameter { + any argument; + CORBA::ParameterMode mode; + }; + + typedef sequence ParameterList; + typedef CORBA::StringSeq ContextList; + typedef sequence ExceptionList; + typedef CORBA::StringSeq RequestContext; + +}; // module Dynamic diff --git a/idl/Messaging/Messaging.idl b/idl/Messaging/Messaging.idl new file mode 100644 index 0000000..c1cde05 --- /dev/null +++ b/idl/Messaging/Messaging.idl @@ -0,0 +1,171 @@ +#ifndef __CORBA_MESSAGING_ +#define __CORBA_MESSAGING_ + +#include +#include "IOP.idl" +#include "TimeBase.idl" +#include "Dynamic.idl" + +#pragma prefix "omg.org" + +module Messaging { + + typedef short RebindMode; + const RebindMode TRANSPARENT = 0; + const RebindMode NO_REBIND = 1; + const RebindMode NO_RECONNECT = 2; + + typedef short SyncScope; + const SyncScope SYNC_NONE = 0; + const SyncScope SYNC_WITH_TRANSPORT = 1; + const SyncScope SYNC_WITH_SERVER = 2; + const SyncScope SYNC_WITH_TARGET = 3; + + typedef short RoutingType; + const RoutingType ROUTE_NONE = 0; + const RoutingType ROUTE_FORWARD = 1; + const RoutingType ROUTE_STORE_AND_FORWARD = 2; + + + typedef short Priority; + + typedef unsigned short Ordering; + const Ordering ORDER_ANY = 0x01; + const Ordering ORDER_TEMPORAL = 0x02; + const Ordering ORDER_PRIORITY = 0x04; + const Ordering ORDER_DEADLINE = 0x08; + + // Rebind Policy (default = TRANSPARENT) + + const CORBA::PolicyType REBIND_POLICY_TYPE = 23; + + local interface RebindPolicy : CORBA::Policy { + readonly attribute RebindMode rebind_mode; + }; + + // Synchronization Policy (default = SYNC_WITH_TRANSPORT) + + const CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24; + local interface SyncScopePolicy : CORBA::Policy { + readonly attribute SyncScope synchronization; + }; + + // Priority Policies + + const CORBA::PolicyType REQUEST_PRIORITY_POLICY_TYPE = 25; + + struct PriorityRange { + Priority min; + Priority max; + }; + + local interface RequestPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + const CORBA::PolicyType REPLY_PRIORITY_POLICY_TYPE = 26; + + interface ReplyPriorityPolicy : CORBA::Policy { + readonly attribute PriorityRange priority_range; + }; + + // Timeout Policies + + const CORBA::PolicyType REQUEST_START_TIME_POLICY_TYPE = 27; + + local interface RequestStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REQUEST_END_TIME_POLICY_TYPE = 28; + + local interface RequestEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType REPLY_START_TIME_POLICY_TYPE = 29; + + local interface ReplyStartTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT start_time; + }; + + const CORBA::PolicyType REPLY_END_TIME_POLICY_TYPE = 30; + + local interface ReplyEndTimePolicy : CORBA::Policy { + readonly attribute TimeBase::UtcT end_time; + }; + + const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31; + + local interface RelativeRequestTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32; + + local interface RelativeRoundtripTimeoutPolicy : CORBA::Policy { + readonly attribute TimeBase::TimeT relative_expiry; + }; + + const CORBA::PolicyType ROUTING_POLICY_TYPE = 33; + + struct RoutingTypeRange { + RoutingType min; + RoutingType max; + }; + + local interface RoutingPolicy : CORBA::Policy { + readonly attribute RoutingTypeRange routing_range; + }; + + const CORBA::PolicyType MAX_HOPS_POLICY_TYPE = 34; + + local interface MaxHopsPolicy : CORBA::Policy { + readonly attribute unsigned short max_hops; + }; + + // Router Delivery-ordering Policy (default = ORDER_TEMPORAL) + + const CORBA::PolicyType QUEUE_ORDER_POLICY_TYPE = 35; + + local interface QueueOrderPolicy : CORBA::Policy { + readonly attribute Ordering allowed_orders; + }; + + + struct PolicyValue { + CORBA::PolicyType ptype; + sequence pvalue; + }; + + typedef sequence PolicyValueSeq; + + const IOP::ComponentId TAG_POLICIES = 2; + const IOP::ServiceId INVOCATION_POLICIES = 7; + + // + // Exception Delivery in the Callback Model + // + + typedef CORBA::OctetSeq MarshaledException; + native UserExceptionBase; + + valuetype ExceptionHolder { + void raise_exception() raises (UserExceptionBase); + void raise_exception_with_list(in Dynamic::ExceptionList exc_list) + raises (UserExceptionBase); + + private boolean is_system_exception; + private boolean byte_order; + private MarshaledException marshaled_exception; + }; + + + // + // Base interface for the Callback model + // + + interface ReplyHandler { }; +}; + +#endif diff --git a/idl/Messaging/build.xml b/idl/Messaging/build.xml new file mode 100644 index 0000000..eaa238b --- /dev/null +++ b/idl/Messaging/build.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/Messaging/extra/.svn/all-wcprops b/idl/Messaging/extra/.svn/all-wcprops new file mode 100644 index 0000000..e88403d --- /dev/null +++ b/idl/Messaging/extra/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 67 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/Messaging/extra +END diff --git a/idl/Messaging/extra/.svn/entries b/idl/Messaging/extra/.svn/entries new file mode 100644 index 0000000..248c223 --- /dev/null +++ b/idl/Messaging/extra/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/Messaging/extra +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +org +dir + diff --git a/idl/Messaging/extra/org/.svn/all-wcprops b/idl/Messaging/extra/org/.svn/all-wcprops new file mode 100644 index 0000000..f3d0c6d --- /dev/null +++ b/idl/Messaging/extra/org/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 71 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/Messaging/extra/org +END diff --git a/idl/Messaging/extra/org/.svn/entries b/idl/Messaging/extra/org/.svn/entries new file mode 100644 index 0000000..d70b3cd --- /dev/null +++ b/idl/Messaging/extra/org/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/Messaging/extra/org +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +omg +dir + diff --git a/idl/Messaging/extra/org/omg/.svn/all-wcprops b/idl/Messaging/extra/org/omg/.svn/all-wcprops new file mode 100644 index 0000000..b3b3f07 --- /dev/null +++ b/idl/Messaging/extra/org/omg/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 75 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/Messaging/extra/org/omg +END diff --git a/idl/Messaging/extra/org/omg/.svn/entries b/idl/Messaging/extra/org/omg/.svn/entries new file mode 100644 index 0000000..08eb220 --- /dev/null +++ b/idl/Messaging/extra/org/omg/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/Messaging/extra/org/omg +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Messaging +dir + diff --git a/idl/Messaging/extra/org/omg/Messaging/.svn/all-wcprops b/idl/Messaging/extra/org/omg/Messaging/.svn/all-wcprops new file mode 100644 index 0000000..8ac5064 --- /dev/null +++ b/idl/Messaging/extra/org/omg/Messaging/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 85 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/Messaging/extra/org/omg/Messaging +END +_ExceptionHolder.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/Messaging/extra/org/omg/Messaging/_ExceptionHolder.java +END diff --git a/idl/Messaging/extra/org/omg/Messaging/.svn/entries b/idl/Messaging/extra/org/omg/Messaging/.svn/entries new file mode 100644 index 0000000..d3a0702 --- /dev/null +++ b/idl/Messaging/extra/org/omg/Messaging/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/Messaging/extra/org/omg/Messaging +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +_ExceptionHolder.java +file + + + + +2010-04-28T10:47:59.000000Z +ae521c7c476cd67c64998a08903bdb58 +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + + + + + + + + +1402 + diff --git a/idl/Messaging/extra/org/omg/Messaging/.svn/text-base/_ExceptionHolder.java.svn-base b/idl/Messaging/extra/org/omg/Messaging/.svn/text-base/_ExceptionHolder.java.svn-base new file mode 100644 index 0000000..2a5f32f --- /dev/null +++ b/idl/Messaging/extra/org/omg/Messaging/.svn/text-base/_ExceptionHolder.java.svn-base @@ -0,0 +1,49 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + + +package org.omg.Messaging; + +public abstract class _ExceptionHolder + implements org.omg.CORBA.portable.StreamableValue{ + + private static String[] _truncatable_ids = { + org.omg.Messaging._ExceptionHolderHelper.id() + }; + + public String[] _truncatable_ids(){ + return _truncatable_ids; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + this.is_system_exception = is.read_boolean(); + this.byte_order = is.read_boolean(); + this.marshaled_exception = org.omg.Messaging.MarshaledExceptionHelper.read(is); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_boolean(this.is_system_exception); + os.write_boolean(this.byte_order); + org.omg.Messaging.MarshaledExceptionHelper.write(os,this.marshaled_exception); + } + + public org.omg.CORBA.TypeCode _type(){ + return org.omg.Messaging._ExceptionHolderHelper.type(); + } + + public abstract void raise_exception() + throws org.omg.CORBA.UserException; + + public abstract void raise_exception_with_list(org.omg.CORBA.TypeCode[] exc_list) + throws org.omg.CORBA.UserException; + + protected boolean is_system_exception; + + protected boolean byte_order; + + protected byte[] marshaled_exception; + + +} diff --git a/idl/Messaging/extra/org/omg/Messaging/_ExceptionHolder.java b/idl/Messaging/extra/org/omg/Messaging/_ExceptionHolder.java new file mode 100644 index 0000000..2a5f32f --- /dev/null +++ b/idl/Messaging/extra/org/omg/Messaging/_ExceptionHolder.java @@ -0,0 +1,49 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + + +package org.omg.Messaging; + +public abstract class _ExceptionHolder + implements org.omg.CORBA.portable.StreamableValue{ + + private static String[] _truncatable_ids = { + org.omg.Messaging._ExceptionHolderHelper.id() + }; + + public String[] _truncatable_ids(){ + return _truncatable_ids; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + this.is_system_exception = is.read_boolean(); + this.byte_order = is.read_boolean(); + this.marshaled_exception = org.omg.Messaging.MarshaledExceptionHelper.read(is); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_boolean(this.is_system_exception); + os.write_boolean(this.byte_order); + org.omg.Messaging.MarshaledExceptionHelper.write(os,this.marshaled_exception); + } + + public org.omg.CORBA.TypeCode _type(){ + return org.omg.Messaging._ExceptionHolderHelper.type(); + } + + public abstract void raise_exception() + throws org.omg.CORBA.UserException; + + public abstract void raise_exception_with_list(org.omg.CORBA.TypeCode[] exc_list) + throws org.omg.CORBA.UserException; + + protected boolean is_system_exception; + + protected boolean byte_order; + + protected byte[] marshaled_exception; + + +} diff --git a/idl/Security/.class/org/omg/CSI/AuthorizationElement.class b/idl/Security/.class/org/omg/CSI/AuthorizationElement.class new file mode 100644 index 0000000000000000000000000000000000000000..4180a10e0a6b30689b646fd272b927e6d99e499a GIT binary patch literal 307 zcmYLEO>4qH5Pg#vqb9A|kCT`7rlGLVa}kX75GV*Oc=1ryc8M!7D`6|xf8{|6J@g0k zN0rXfmR{bQk2mvXKEK{S09@m|g#hg)YUnuVhBygv8sd!5uuJu5cN;~Zj1ak06>6kcrWYU7AY2 zN~=vd`P_tjkQyLGlLLbKry#j(^)dmit_5yLQq$z)P+U@PCB(22@8kWdHyG literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/AuthorizationElementContentsHelper.class b/idl/Security/.class/org/omg/CSI/AuthorizationElementContentsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..280e76ef64f0d5f9c0ea9745a4e610c80272413b GIT binary patch literal 2049 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 bBex1j8$(STY*nAZR~;Qzm=q%-EjK;^%Q2?j literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/AuthorizationTokenHelper.class b/idl/Security/.class/org/omg/CSI/AuthorizationTokenHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..086321ec88f2d4709aa0c051cbef16793fbe9c91 GIT binary patch literal 2254 zcma)7-&Y$&6#ga~*kl<5LaQwXghFewQPNVig#Z;ON=ho)AX=-&C5-9Pup5_6ZGG-P z(N|ykO4XC*=#kStd5(XLzIr^>JDY71LZW$@nVoy@H{boazd!%^5Woy}HH=_J!$rKM z;%yBI-qCOgmsQMa=*3)^Zc-}d<>i8g(^w4Caz&or)v$zRX}TgmuZFNHKi&)BeGO|! ztGFgL)-_~sU7kKrv7zEahMt^zza$t=Wo)OAwD$_hm5m$AOUX^TU9opWilKMjv`lxA zL5an;7=rSewwGn|aYTP(?38kyF&gu4!AV zMX@I=Hzl7^#XZ+C@`Q4^9ZI|l7>53=Yvk`-H%gnvc2Q9LhpX{%IrNnIFwscu-R_=r;Rtz)_r+4YXF z8)dhF+lBKohN1a<(aRslD8^LW;K*WvVXB_*)(mXgcZ9WO7k7jsZ8lYW%&~<}7zV|D z(lvMd5}`zLe2SYKpGo?|jX zXfE%ydQ~>GyzYwl-F3wJ?6IC`XHLa>*C>|hwc$J!xhry}toYo%SMriW>r|+tG`9vR z)&tX;T0dKBe&{3qJNx3Bvas?Z=jItM#?mdm)*HC>{kni*z=tx5rm^qgY{iaud7GO$ zS1+t}#Q%8e%u$neL1572G|82VwpH+EY?@)MV-B0c*Yt3Q=+Ug2>_DM;mN4{rv*!hg zU@R>w?pj9{&Bm!l3OccfZv`jlw=_b(IdWG{0y>51OcROL*XV1Ac1C-T{sinX9YBgS zEqw8yCj^331P(lD7-ul)OHU(+0NwWMzd*T}c!FRBJvERprf}9*%g`>>bp086A7V^@ zirxy;OyU`ohv-W@h4K?Z2agcU=oM&H^c|3eN-QTlw&%z;1Z8Yl#p{wk4KW{imIz4p zQ$K+JhS4hel`3AUU|^k&RSZUk2r%*^ILRe_DtuZMuyKN+3FyNNcpxN*48L%aMyD^l zLi$0n8Yid|3(;S3GNUYxM!&~kVpOl<51q}6{j8q26r!!T!J00u9~(NL2oO9ieOPFsCeT=N$pajX%fOl(Wg>SEP_6O z4<*jlc&Je9MJBt;_s`7!vv2RuuK?Dul0pJm6=O-L7*AmWlQK-nFs))n#jJ`s2Ib1M z1J1B?df@sE!)-Q zQqTV>b4=&5<&p*s{S5Q}U0Fj4eJbWPEMQT?5^@@rkzvSnRUW&S+}U&OI`LytFjo|LolMWcJvno8_+7bhz2WjA%lk-TPg0cG%rR&h|Tz z1Hl@-!~__U^f75HJyeBOGzy9Xw3|SLRzQE@39Jx(LF5t9dpbZH8w{~5VG%k@wXxza tCXJzx$%IU@P;4Rg3mL}9U!+)gK(qzrtI{YkA(E!QY$(=3{7$w3d;m@w*c$)< literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/CompleteEstablishContext.class b/idl/Security/.class/org/omg/CSI/CompleteEstablishContext.class new file mode 100644 index 0000000000000000000000000000000000000000..36109c1fd5d87b60962e7933d323b188fceab8af GIT binary patch literal 376 zcmX|7%}xR_7@Uv46cs3@oa*&viXu<&wWPyUkr6o{}K9&b!;=u>- zp^RT4a+zu8`^VReos(oB&BiHs=2z=e=gOXHKxfxflz4D>4&vI`{;A h@WBn_*Rm^Dc~P3V?8?E}3W?x!g=A1kt&rNZ;}2RSNl5?z literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/CompleteEstablishContextHelper.class b/idl/Security/.class/org/omg/CSI/CompleteEstablishContextHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c55cc56f3f7c3e1ea0d1b44e45275875fd28200e GIT binary patch literal 2645 zcma)8*-{%v6g`b3MjAI}@e+e$Vz9Br$U!)J5OD&6m_?WbDI`D=We|-#AZBD~gdzLB zFVFshyb{NNDpXSTQ>yYysY>PcNJxWNiU&=%?t1$4y?5rH|Ni(3z*G1|#Z}x;@iJaf zFrdPNK^0L9DHv8!k5>aExv5}83P)93!B~JE;|gMaOayQXlhXG!6%BaZk0~jM`;k!b z2BxL?oAU9NA2ZTy){i*_Z>u;jQ@(?D1GG!Z-FtGUORsskOQ~3ZkdH+vODnjoz+mtt z?e(l+I2W^W>9Dnu4o4@a1_#0kl18ls5n-tBH%!C6!QcsYPcwL>n3klKn`bx^?5^=7 zcj;u9d6Baj`hzw40dqZ46~#xxQEMfe5w;l4+xmRQ$ls1yrY+X&h|H$YCa0$;P~@OM zuH;8WVrYoldTMz>&n75`Ao}S9rIWYqJAv!$b;bh2X|h<-SM_j4H`C#`oiofd9nqT; zI%#9IxUyDG9z=vk&1}IYbD^(9jt$gzH)q(y@2x|_P8RHH+~YIp?@wi%i{#J{Qn19a zj2;H9a`8tnIAUcML{55U6s&NVuo#*|K5QEc<%*$u<;da=M-F+0Q&q->*HR*D84$CK#ccpfiM;U89h93SHohHIlku|DdH z9tkyi1Vw$!|bn6tl)a=Ppt;^bH zxZ;ZGB&@VW)yfIjQtt3Q-d+2e@*sB_U#ohiAhR8>52!3s)Q+}D8nQQ&d8augSXY1U zMeA;28U=evOhm^GlV$+7my?BzWv1ni;cOL+6Rc!LBcmxT>|{1)tQfYjDw1}Jp|_T& zvT-dS*H9V??jJ|B8F$Bbjhu>E26Bj33G}>WWrS|JJCO?DW;~vd{W7v!O=Z%EF6vJQ z_S``jszpb4EQjP=O?nbn8r(e+ODyeTX6W2YbLH+`m%(sS&R;j}^nMy+VD#gTs&Y6| z%#wnB!CJNt3LWX5qu!{Kk4uLDanE3eMrUTbp?HI1^6k}7QdEF=gR@es9g4yoH!?Ta zJ?-tFxBXT6uwYQ-%%oj__B6rid5!)x)5>V|Y1?4G(FSBl|!+8Ht}pa5?fFvXba$?}Pu1c>SMf7}q>I zXqag^Nr>;GaSKgs8_jXe>quK1>8Xm;=SWW%amKMK;%pI*wVWdut-pg)RC#CyiNFW; zFQzFy&HZxvMkhJoX=&Rfhh9!)We16>V-|T%k_y(TnuSNbZnwC uwCfu|f7!RI?Axk^9-w^-m*jeJ3zy~ESwvTfWItZobCHw{K1RSxYWxpF?7h7J literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/CompleteEstablishContextHolder.class b/idl/Security/.class/org/omg/CSI/CompleteEstablishContextHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7d0da9d2ee4043c5156dc9c1492c61a4f819a443 GIT binary patch literal 844 zcma)4?@Pi^6g^L!%e6{Nt?Z{2HRp#>UyYz7NRWhzzRJvpO{N?3Y4u+f6iFZY1Nx() z_jINPhKxPl?mg$8d(ZCI_s1uIBkU=Vk%%CSq=IFvh+|b8DH&@r)@5uENFCE|Q-b}X zMcQg+{1vTXCWXW3~;4{{MeUzO|PV%Z^z)UD@7d2>)@&*G~q)41bBR zny;qBZ`^r)&hf8UFTIc|4D$GQ+V}M!uL~ zJRwk*;4Pw=PKHYpnWrU7p_O9wPb$eI;nL^_sR)@ti;%yJRcx*Z*+#QZaN2qz2^)=W z7!F#^z6T#=4+RuGl;C;Tw6KM3LRBYIp%+upz7Iuvy-UZ=C-}4IITG_oO+{}slVd|T z{kz?}Yh8;+otS7emm<8m?I;tQSDf)PU2rxWMo#1(Asf14&RsD_GiTW0#Ta+EvP{gm o;2reF2ixdl_t!p0mPZ41YX>JOGQn|*Y*2AhI6*C!BDZeB4~l?Bc>n+a literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/ContextErrorHelper.class b/idl/Security/.class/org/omg/CSI/ContextErrorHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..66a2496de3bb2c2acbdf00c6567d4eb2b7908bd2 GIT binary patch literal 2558 zcmaJ@X;&Ln7=A8Em?T`v(nX4e7P=TFmQa_fgx0cIQi5oMR78zKGRA>qCJqxywOaSO zub=u0{ED?ejvPJhC(rROd5*{T&J4*g1wQ27oAqqJO56Bjdzw#-4zF zYlh~GrR0{Tl=6(SP*jO-Lh3wW=R-(6&)A^l84i)gqOzhSii%!HWGqwD3-l;KQ&s5p zk{?UiFf9=zk8orhA9mn_hf#XN~ z#Bl*X@5jGdEDKIr>#R;MEUKc;+iEau4r!sX6Uk-h^3;kCqune%Q_3K@bDA&f)TF3U zhBF>Nc92^6*0pSh?QZw&us;1z^Xz6$<77oCRw!EM-nC0*m7`X%)T}1@hO#aiM*#Hn z&Q65h2BS9JN!HBhq^47Ua%(ADDH?h~{1}eZ5!lWgHEQS9f@)>UrdHA{ZAHymxm{+I ztLz8l85m=+hew4!;`Rvj$*C%ZBWKhRXa{e-jVQ~PGnpAt=@Z)}<1$8EQFGat=XV28 zuPjQcm|pX~*d(rXr*~F46m0`$=-tV2E!mz-FdPtr(aSl#AZXq)`bF$3=gCN#A}Rf1 zd)A=GZ?bQms=q-jC-*?%ostYK_Eh!a2*$36_ej*aa8LweDIt^hgy40WoFD0%4ffF6 zwvXQJ5`qxG~qdg>Vg8fDZkRpvF_qx@-1cFsGtl75_oTCo~$M`6M zXdr2`yoJDAd=tS9gd8UkJc*}VwKVNQO_m>^@eaD>`)J&Nl#V|@;0~JN_Yt^<@Y=5k zrsWMpt7uvy3khB5vC%$FwqXRi>6_%dz)xe-^?aMO1p4w_@V}u+f1-I(4s4-$uKfTZ zzKfO(w6aaKW#phOZMUTdYtoP{J>-)%+S0>S9Ib30o4jCFBUik!}tRg6x&; zb~Ss@)oRVURZ~ChlwrM&^rW&bGXKJ z^;~mom+EcP(CU^mq)p0Tg9>NFTK8^`GU;L{r7@&Ij@Y7)4mVIN&9>t$bHn<4rxgW@ zP!z-=OUNtO!LEV=_7v!zD=c^^vZby4BSh?Y?nG2?{@)prMHu?(IKa z!*sZ=Fp1|Z)N3G~nYq8`Bl@vbL!|<-g-dy-%k#t$yEYOC7T8O8bnHrr?29GI>Js}) zdK1=F-$0&O1KxPqA7>C@4X;TwH5Pd_AP1ZpmsCW_qk0dDTeGoh#9t5JOAl|M^vXxp5yQyVB{VDzeKT+jX zkpKxtV(t7{yn&jOv`RP%$Z8y0^}E?}mF@ z7alCnTUm5(;(~7;FVR!74i}-Z&#NExtqpfR&t2Eb}c~( zr?*7REQ=<@OD#55tawG^*o%D%rZ}e2PgQO&a>237lTM{%y3((p;1nv3!K`$VpNvtHb$-QEs_d^sasMK`jV#!$s;KFMx<8lkOJFNpUX{KHc5|*SNd{= zS}%Vj{=j_H-AJk3WmD)?*IKlMwPNa`$Z#T90^d1EsAU$q{2YvmWh{9?=2IKzVv~~q z`SthUKUWR5LpG}l!*)4;t@+cdLZu$s0^2%U3|-zVHqqe$df@u#!DLXS?r9gNJRJGv5(CZt4Uu|~ zI0i82yA{wue?TVl3(|wNuF_U=7{)Q*Awg#85X~fO*jdj$hU0A& MmY4`5B6TzV0m62fa{vGU literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/EstablishContext.class b/idl/Security/.class/org/omg/CSI/EstablishContext.class new file mode 100644 index 0000000000000000000000000000000000000000..fdb03ac43533f1021353dd5a1aa4c3aba23d1631 GIT binary patch literal 545 zcma)3O-lk%6g^i*Cv7UtzHE$&7U@6?v@HU^7K$KLxN#w)4*E=ILSIq+s}@7hq94$Y zitbYj-9(#n-s9YJ&wclOe!YJHILAR8I<{koVn@NQf;|Ok9s4>=9T`HhGZd~TTOHq% z?vreZE`h3ql=C3_{#d*?Qutm=`gg8JIBC}WanJTgJ-c{QvGa>H<)J&`P8WoA(dC1X z&p$SE$yJ%Fx2h+XoAVJ=qVjc?B16prA$lo1A+HGGY_37jihkE6l(N--%=1Tfvyf{T zNMh4K3~>XiFbu3=-M|JCgv{bw%MTv{>7MwL(BeptOWy5p5ijX&4EUbeN!MTf6W3 zZuqUOWg?cJVtyLbNi?~lI#Jb_fKiXW5rzG+@Gy^Dq#qY# zO!0hC#wAR$*eg85{kY8Rsvpx55;AtP=_IrOtzKo>6t8AjTIbajmY?NSTE-jK1iXAq zQ#@l%3vBJ^tdJye7SfG*&9nrLbyU!Mjm4hQQEV_WFmI{TX?=bsnlUWxn$^QrBwCni zf)sRBQ{XaMO@lx~%u*AxBWiY>bZe9aLR|24=Q_kLU+eUwz!u`TqAsYBv}&XxG0W7A z6uIOzHI=CSm3XollO50^gGM%I5xb_&^*j=w@2aU=6vxvKR5zNlO8OohG5?7~+D?>$ z2#!dw6y(q)&{|Avl}Mev%(8b15lpv}Ou45>Cyq;)z1K<9brUTMFLB zI||;#dkp4%vZLm#nT)AlSJ^_`%FJqpgbx&SgL1J^Pm&7VT3jQ1DA4TaWkDt;$|OHh zsAanpoWQf>VP(xJ_!yrEv<>zTcT*D_X8h4A@#;Q$_=v!+qI*?XBz&siGkmUK3}0|i zzEp4?U-9Z|1sCuQufA1q5#LGpUcnFeQNbzv#KSEfetuNWv~-r^7%XLCboz?Mz0z0& zX2+cdDqAiJffiStRY7exU4=Mho>UeZIbNu1u5*EQmoD2-u?0$8w!$W-i_4@BtZTq( z;&e4FsOcP8+w<_+r&38!%UN1n=l+Y&+YQJdT|HQi(%q=k?&U!nj}GYu^|@lr#&hY6 zk>XEaTM31&tiVR47))taJZtK6x}`5@aVsHkq%uAZb0r|x#Y4ABDV-EWzH%xpu3gC$ z=Tx(-$PRd0(HF{bue*cBxq;3)rL)(~Ht4ic8AqvuNzs{Dtc)0R0#2c(zP4SSs)m1^ zM^hEh$>-2pG^=(Hhp7oN%RD!eQ36_f;U98WoH!!$En zD0Cn7x3DL45A`dMhQs&axrGhkd+^+Wf9Y3vheIon^VqON5)%Exwb*E%CRsl`d-^0i z!}#ebbTr=}E=Hfc4driKlKw=)P{?x^4UEJJ`2^ h$9Zneql4$RJUV%9&m&X_zaM>NDJInL338-B#{Z48I<)`* literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/EstablishContextHolder.class b/idl/Security/.class/org/omg/CSI/EstablishContextHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..0788e0de04e955f2745eb9b96fb1ead982c29521 GIT binary patch literal 796 zcmah{T}uK{5It9S-L$Q=)XF}!AU__KdNqQwA|VhmdX+U7Q&v~jtJS|MD3Tuf0sW|G z?z*N%8p{s5Gv}O{Irn~ky?+2Wz-|BvB7XP~4PY57BCLuKQ?RCBUBL!}+||vF!LWI0 z*;UPIRJB|&ubs8IUN&p(yPVbJ#skkX_zr8$8b4z2CQ~;IQqHOnEuNgt6HvKi8+wId zZv2k!_ZgvH;GO!@_$ W9;AWF62dM-s4?m!^&mfqF@SF@9lvz| literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/GSSTokenHelper.class b/idl/Security/.class/org/omg/CSI/GSSTokenHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d0d8b70c3daf53c1f0b727edb3f9c96d047103a8 GIT binary patch literal 1969 zcma)6-%}e^6#i~@VUuN%5c(4Xm11$(D4|8I5}-m_+ej+fM6{x=OR~m=up5^Rw(tEX z`szzxX?0RY9j1M9#=k~i9jAKk?uLW~9AEC;JwLwlopaAQzrXl-AHWqfWDMhqj2XNs z;Vl^g-j;C{??`x8MlWU)B*{sbk+UT(J$Kfb8AZ+Niy$wu2CVQv&R`tt}QY2 zmpr4gdE01|jrF=o`BUV8@$iwzU7TZ9mEjawY#2L6wr<$9Y{_#iyGGPR*EC40Mq@S{ z*W*F51-sGo$lNrxazsMH$5f~9UCX1iwG+KonqJ2(NH9KEsr$84FoIDDcNCN`#xQ(P z>rx?mvs5ZOo2GrssaH*xTb3n!qF@!DG9=CItY=ljN1@Uw_zZUye9k!yb&|VruVOYl z%dr)#;R^+?;|&EbBdy>Sj7j)X!B@}~d<{dvIw}e@WEkS@*b1tkgCqQ+NFhid|@@+6tE${{kg&~}% z(jpVbXx|Rg5~o;v=IARy-!$=bUZB50x*6R)+EcK{^Z_!YxeV1wUkQkNi0%5?1TJDc z)Sick7)krJUm)DgJcZaoPXLm@tGE=J73t77eLvIUGG4mY4L-b{yLHG&r z-A53MS_|?X`gX}fB9>!5+X?cGLl~uP_ZsJ~VlqU&Mg%x}?Fp3MFusR=frviAODznv zkX$Cg9tKk>f*tx13R&?aXddVkz$OTcmQ4sY;6srjb*h~zt*TJDK=vYeT_C8_^XXsX zMPXqi{R5Jj5t5uKKM>fXfBwvL;QJAKfj$XSjQvGbP9Tfv5bG*o351o_GW#u@73R~K qeL~VQ>6sSJJ%|y~AH0eI&jezBBTgVGD#GPM4@WlWVU$=aOGYM$HD)9so_7lB+00`xo2v0&O0h7Sc0M;ikOT&1^YNq zkj0^bBP2*TX|7tLf3}S67r8GurSFu%5TV7m1@zSt?Z^>|%ao-d&<;?vcQ7sV z8F_>7LODj%N8qViMBD&hf?449~vA0jk`tYLi~$!o6=h7kW=+CU;ecs1US LIE3`f+W>w6s~L~% literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/GSS_NT_Export_Name_OID.class b/idl/Security/.class/org/omg/CSI/GSS_NT_Export_Name_OID.class new file mode 100644 index 0000000000000000000000000000000000000000..fb3983b5de0fc5c2e019aeaf185593d3fe921118 GIT binary patch literal 170 zcmX^0Z`VEs1_mPrE_McXb_Nbc2G+8~oYGWA1|grU#Ii*FoW#6z{osYX=U`8L_u$}ozmRy>ih}&2l6b$w+|+n~PZvf8 z0fbrpNm;4MC5#M$`I#wJhI+<&W_pHtra;n!jgf(ofeGjuMg~a+W(F1@%?ji(F|Ywi F1^}w!C?fy> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHelper.class b/idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..0685599a1e4070306de4e8182a1d5f0dff871d8c GIT binary patch literal 2013 zcma)6-%}e^6#i~@VUw^(2>pqHN)Z}1N@!851gMZ=8%aT%h*s2fNv?4r*~HC)^u7N? zUw!E-Rwrd_hiRXj@vqTW$Elv1T}W7h)0ca9&pqcm-#PcY=Z}}a9RRq7S{Q@47REH* zQSfdU65b2rI^I|CK^Wbb36UkGU{)CC!nla}5G^;v*M}i2U{Qpo#d1^FmV)?5{M-uS zb{H9aESBXkvbZCb6$PsbK4Iw6o%=P;a3Nc@OUY`bluWPQU0g`!$(pVfd5WQX*0fA# zowao|Q6MRN*RhQPIi2t1G_k(O z(3^9N!qy$5mNz!aoa(2{F5|%yncFxA%p$`X^4K(XjAYrcO39pKn^uXa$u>9WH15w? ztJ;o8lFV4OZHL^sQArUA1)ox%ezZ-8%GOSeTHSV9VQzuJ*+RM5I~7A1R&ZBE4kHX> zN4?HvlDBd>eI>6i?TY-oxMEcJ?P|HmZ4s1L@R^D=e9jQz^`v7Kz5Agqs`vu;RD3Du z4YcZ9+AZ*!V^%E{>-b8=TXxij%10xE)R`CsV72m>8v4MgL4G9A1Ktn|lRPvR~ z&Fl;*V^XkAcV;|ub#h98jF4Q0jb5*FjmnklnVf@q^Yv~f7s?$!Nr-5XZ%?Y$Ho6Z^?6W6*)-}+ zK5Oxl@3Vu&*MnC`b@_Nmr{*$*#T?ML%T=q?oNbvylh;`qccik>Q=r>W! zqgNuLkMUXqeGNpG$*_<9Xp~?Fet}9}q6m5qv`S#(1V+=y1M6!-(LwagVW~9Byu*3& zmnrHJL7kn8Jqu=~`JvcPh$M!{axVWsVvqj)E75}QMc^fR6ihPqH+4CLB&Iy9>x3l{ zR!mDAG;m&;izN;SNlV108@TWwKuCXzF1kEJ2>gQ}fkdeZSC3sB`JjtYVQ$ayAFB1{ A7ytkO literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHolder.class b/idl/Security/.class/org/omg/CSI/GSS_NT_ExportedNameHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a2e536519628196bae1615b477f5408724deb462 GIT binary patch literal 697 zcma))Z%e{Z6vm%BH>Ycrm73XK`$KcS81>c&Qlf-V$moqP#%x2B>Bg8=->RTUBKiP* zsOVl@qJrRy9qzgJ_ndpqbNBQ6`3>L{hZ002q6i}?VI3(JHdsiD*c7oPVw*td8Ftqq z;A#be@L99d^v?-GO7@1l@mjsU)prr>?o9`>dn9j0MOtqL4)F$k@f6 zj12Z=93W0`G-|F|(yppiy?m!%KCvDxvuw1jYsWS%k091EdWL2jorYGax2y-BATyFq z&NUo~jW|bn%XV3LerVS0$tTQW?hAog>U?GmABAUb;ed zZ);HSj)tpvSH(3Ay_gHrOH#$Wd|c2lip4N}uFKnd8kVpuO;_aajSyDl&-)?V)Ubw> ziVvj5Ee&bhmbY~k8!GNF^qB60vS1iVmz;c}w3kn;Y}{R5N^H{WN+~Cj488Mq(RLRZ zlvsR=At;~eFiXx3!|7PO!;;LUkzK3^$7L9eb;y^B50cy4%MwZz`>tbUNo(XJtvIPM z^k-Zv`^{~uylL$e1jSFj8=S|E`EFw!uyYKjNMqN!ZzT#=F`vk|j$OxxQ(x?n?$Dw{Go;v|Vx6N`;(oq~WHDk2tpQF~gv!BwRb^*NL*p@d@s6 zd@4B(x1wF$&x*2Zmx>(Q_>AKXyvgwzq8yW$Qt>%Q3~`PxU~=d%7|wKI!SN+53OjWp zJx2{PBZ;qcCp~w0=8}pXjw~q0f$e4Kn(FoyM;>2uBw+u~=tZF{916G<)5gxOknN&) zoiWr*q1UqXq0-7+Q~SmI^mph`x)_EUy=gWIEDO$Xp=(iFT1nZn5x-}TSWh48#AYkC znNthhw+dDAHk_r_a)oKjJ~Jy`qe%{(v(!XsZ%BseX5c56Va?B6#CKB>-&RF2D@-@b za3z-Nn8@bTbh>W}7zTVOt6*Cd4`(ZOe6&t@X;MA9R{q1)*`p>W<$ytxBWzX+rDEP& zOeuy~*Alj8FD`e=xh^i+2biJH8~B$_g0YmWzuwhLyKz!3xZo7+;xXFoL|0B8-NJOI zH9+6j>2HWmMrV)y6zmCIK#DY-zIf0R0>L^02c9&HvpDBVM-fDTUiWTa>`?S zfowxiCTIsBLF_{i6YfMkFE2k_r8UPr%D$161q+@fn8gOMQujQj{ra!H>WoW2U! zB*DId|r zqPez73PKM%duQ%BJ7>=9=hxc@fCKD?5ky?UVh9SB!bl(~!mG^i2%gdZ#twX^G7JtxdZ@6R*U!skqj+VU-3y^st!TEaLgSWSICjl)8KO`uuIr_0 z)4JgdsUdxIz@OQ~tp99b*&WeB`f)Bj(S{M{2Fs8=>#`F$Bi4C4l7xBKr>zIU5Tb_( zi|D72=|r|soTe-RADw_m<`pdCe~0e{{wFG60Gsh(af11%79PN|e=t$ZdYG7p31zZ< iNPi%6m>-8^Gtcn%A^&z-K+JKbAjN=utaTl;VhK7bD;#>wT5gO9s= zf1WP@5vD$T9|3_o$oioO7Kcg>lGRcdjQ4G+i!H${F}mxe?yo;6z=U9B+Jc#;U2yrv~b literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/ITTAbsent.class b/idl/Security/.class/org/omg/CSI/ITTAbsent.class new file mode 100644 index 0000000000000000000000000000000000000000..c231bed47d78f9b0cefa92b4ead804d65f9f43b1 GIT binary patch literal 122 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_*C2Ca@k!24)5p OAdeNuV`5+f83X_is2KeK literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/ITTAnonymous.class b/idl/Security/.class/org/omg/CSI/ITTAnonymous.class new file mode 100644 index 0000000000000000000000000000000000000000..b0588e5667afb11d1d709eb9c4fb74d3d21b28c6 GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gZhmPoBZELzVp*boPGVlVzJF3yYH|r1&>RLPkUj=U S24)5pAk7NoF)^?KNd^Fs>>6zV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/ITTDistinguishedName.class b/idl/Security/.class/org/omg/CSI/ITTDistinguishedName.class new file mode 100644 index 0000000000000000000000000000000000000000..cf50fe35e83466310dcf236f6035584e78bb3642 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gMg~a+W(F1@%?ji(F|Ywi1_0XA9f$w` literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/ITTPrincipalName.class b/idl/Security/.class/org/omg/CSI/ITTPrincipalName.class new file mode 100644 index 0000000000000000000000000000000000000000..fee7c430604657ecbf58382df613d0753cc9b7c2 GIT binary patch literal 129 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gNd{&H79hpqHN)ZejCA6qj0#r!RMpDrd(TWdVaToqNCe?w#-6-=6<+2;eFzItFo7$28v5 z@Rkk*Z|k^*cQm}KqZ>0JvLrRkO5>c4i7PTi1+2s2SMD_ zk;aE|S=N!kExCN8VMW8o3|%>~SK$m7GG(`zC~p@Nsg>J{3yCaQQ{@6rGIY<{jxFXH zl-R@?gDTCm<;v~`!`awGMOR}gTl<9xx{ORg_UB#rM1*UFRA`O};x))yIi zSA~_|x@A?e)<%g_{&aJL@!*M@+c*d80>c^d*tB-6M9FfBiB;j+PLZgoF1P43)_G^8 z> zTCb)P=>m6zE%ugn1$U};*|}LR6}T%yvKl@$u!heV!n~RgcENugs-c0;amTfP*_8KxyB>PM`aj);mftWl2VotUzW$B$4;oNDVMfzVzpzH zYINH`p5!BV&X!urRXs6D4xQc7L}?ctN%wf(+0?S_kYOTaU)Xzd-f*P*%ydsve)U z*vY;;#nMrO|8dpj;~}RNmqC~PpR1M1PSKlb=_8Y0SsHVsvR03J%4d+PHx`b- z)L2>y$T#|MYK(@RIzlsfkOn>7CEJm{Li9~jf!0g(*H1g6y~}(A_JBS>j?}XLao9Tq z)B^ZD%y-MsF5OJ?DZ1}r*nEQSIbABO3m!A88qjMQE!bPB}fQ_jNbG@W)7LmZLF*1w<;)-h(16c zD!Nyfs37%XhkNdR&$;J3=j;3Z6TmSJVvv!HB8*fF>qzsk!9zyIri?8a+XPb2u)8LK za9bh>pIDAXPYFV5{)Rv-yG`~>Qg2HBn-E)0vG;C9^ zI9`|5D8o8Mt_as3e2cOY>Rd^+OQ$tbo%TH@$*B36XRg^j@2IF?0g8esVls9V>|#$r z7W)cvND$=4&DAP;rD;0UqW$wnYC89p>s+{Y)AR}AZKG%Cw&Aq&YNKu5QG)DPI6c*9 zAU@!q#ZBAe#l?|P^QWFNiaRd_Mrr>uYP1lMJB1^*U>O7v_7QFhTfW3j%p(>TS(b*t zPJp7lfoP$R$SZ_rmSadQ1yqVr0=tV1slo)ajCjB#1172!1_(_cD_EUH3fc>V0mR>z S){qDgUXAx74j?`8Hh>=t`j{{P literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/IdentityToken.class b/idl/Security/.class/org/omg/CSI/IdentityToken.class new file mode 100644 index 0000000000000000000000000000000000000000..073346ade9654e572e9ab920752e589b357ab6d5 GIT binary patch literal 1279 zcmZ{iT~8B16o%hvx80?#wJl#F6!{Qn7j*^v490{47fsL_ASA%WX1ZPKLc80vTM~YX zUikyK&_pDWM7j1y8PAk;i*@bAna<2P^PKnH^YhoY?*JC@B7qFFKBO@(!hI1Q$at7Q z47!X*3bF~vSP=U~1(PzC6ig|YQ824uPR3&yPh>o0NE#KpWj5`)?QqX+GO!|pYP22O zb&O+PYg-JNjYEFS^%{4odZ~P9ncgx(!mwLw)&XzVJSy5_h`+QQ+k3?j&E< zwQ*iTbJ59W|P^W7-W~GaO#;juqy=Ukwe&`iaQupaT_Bl1~8~%2*dPFS5(1u zYZiA@Ji|D{sN1aSZoR6nmNpA3dSPYFD7{_ZT-h#`-iW83i!ebv(bY(hyj9eT6_RRu zC)@6kMGd98ge%(^CW7?N+YPtr2_y94+QxdPl*}(*b+dD2{$TE!`&%A)Q(eyQV1d4P z1`Pd(A|h1LTttL0S|uTs)+F7Na*AWL8=`wgYeG8*)1)&*KGP0#mc_WAvp}zjoH6YS zq92f?MY=@nE8?dYkasi6Ir@HdYVJ~`T+u=n6Mp$Lp(AuLtVPcd)h-a*9X&_l43anq zc#{Ed(dT6aPx|;T@J27NpHPz_K+^Mn;1s6)4*vqi0-$;c^;1XT%`o5;?)mj&q)#YJ zX)ytu@0B(aPLe}N$uQDP2uThl%?6|;-^6iYVoC`?-ReaRket~7mGwoXwUiRdnhRLh r2PE?T&-d!um+B>n0htR(UHjqz==vn)koS#F(<&x0CPbamANu_Um*UgE literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/IdentityTokenHelper.class b/idl/Security/.class/org/omg/CSI/IdentityTokenHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..83f243d139721cda36fdd81990f882f97c20753f GIT binary patch literal 3414 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 A{{R30 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/MTCompleteEstablishContext.class b/idl/Security/.class/org/omg/CSI/MTCompleteEstablishContext.class new file mode 100644 index 0000000000000000000000000000000000000000..c07bd3400bc1efd52d2f372aeaaa3ef38d685777 GIT binary patch literal 139 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_*;MCZJA6 U21y2H1{NUA3gj^{umMR10P27nQUCw| literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/MTEstablishContext.class b/idl/Security/.class/org/omg/CSI/MTEstablishContext.class new file mode 100644 index 0000000000000000000000000000000000000000..ffbd26e54639a438b738c753a2b70a72ad89dbc0 GIT binary patch literal 131 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_+Zc YCZKLc21y2H1{NUA3gj^{umMR10Eqk?$p8QV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/MessageInContext.class b/idl/Security/.class/org/omg/CSI/MessageInContext.class new file mode 100644 index 0000000000000000000000000000000000000000..7371e3955d3e57bd1468c6818943cf97c05f243b GIT binary patch literal 314 zcmX|6O-sW-5Pj1$#G7Frp*NK0eYi(Tl9Kodfc z={l8F_9t+6PT0ECM%xj=84PEHc3ftP;0`A9;mk)5z7G%EK04?Uj>{?+=lCu-2wIHn w#rIKT$J}%{0^<(9LS|xiqj%677tLS~yT9@g9R3Oj8aX;$qZOU3;cN!+0|kRRW&i*H literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/MessageInContextHelper.class b/idl/Security/.class/org/omg/CSI/MessageInContextHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..5359923becb8e1356adfee064ea3fc2e59059333 GIT binary patch literal 2334 zcmai0TUQ%Z6#foLm}GiVF1=U~P-u%GQ9^CK0aj@!76_sRQ9vCh$uSOunK+qH>aG5b z{sLdIwt*!}SNr5z{w3FPxzEfb8A2)#Gv{Pqzw@2F_vG(?fBzG}>-bs42;NaKi75rs zDnfWy#ZA1Y;C&UHn2C|(mV%5F&Z-#3?HIl06nqfHofzh^Abl5A#F33+NlHGHX3O&R zQ4}9b_1!2|6s)S~lc_$zT8ws|%H3yjx2|FXoAUL!f-e+&$q><;`(?p!DQnrqw6#-A zXO{2Ynn|ycG-DOS6hr5v}l%{W4MqQYw;v^>13D{VLJ>r5-s`} z^Zry*v@)Mw5|xTx6!T`rG99t!Ovx+?ZEQVH0j{?T5J=iC0z-Vo(ev9&dU;jPl?3rh zh`p2cpFkWqYll%_I8PQ^`mUZX>1Hv#;@E~+q$7oGp_6vD6;Ii+9hoFOZQsP{d$!>ak8{rrw_J6a@lIzfI-M`M7sYWEqY5;RuQ0|i(zw_*Ox>|c1z}4MT|tf` z4?1DDsH7dE;8z0O7l**t97TM?aIVSB?Y+DxJBDR)7}(;tfj2lV;|fE6Bd1$T#7Q;p zEQy_*uo-#?r!XBY?_IZM6clW8l(55L!jfRh3|$4IlGp7*-HhW~X^_Aer*67VC|m1> z!$yVS%KU70k_vfTV#u^P^W?Sh35J0N#5N`h9F8h>Iqu*d#~z4+C48sgdyXIQBgap8 za2m6sRFERHbY~|6ie0IC*LeM`(uZ60PF4i3Azwl;bFa z?L*V98#{($>j+7CBX=4CE5766l;|m4t2*GM^V>gqp-fw%IPtiNu>N83<3K z%YyUABccu~ShmmQo8hb+c0p!o_%ARpdbq1<;3vffDd@R;{E8a&5*%dI*zVv9h7Knd zr;IBvQV%4`FnWG@d*{Xgzg+a19YJNDQyyHQy{tt29d{pP}<1hLTUwS%Z>I zJwxar&ZM3q^cd0oUl7hFYfukyW}iG13=(#UcAR{p2o2HqJuUH1;F=# z$VC1?d@&h1LVUgVEFpe`t{S@80eV)FVOQGgO3&4$hd6(T3%wU9?F+wwQxthfFJlDk zAIwoY8kc^$E;ktv>b+DagNC-R9HoCC@|68Y=vzNPe>O!?UwncAxeh+TP^#|pCf@RW i27RBNWa=>nYIsSmLp8kYkr>6>$1aMZBf7 zZ2iEN&kpuY&-H~>wYgbxytX(O1Zx!}BUZWb8-nEZfs}GvggHt@+<8P<)N|i0^^Uoq zyzI81VGNpvI1(yWHLPJ>Lk3w58<=6p4m04`wQJmGNH(pGW!jcgH_O!~zY=7@7cV?i ze;zsCf7;ykq;|A#)8W9GLpFU6`S*P(frUo{Yf}?f7=8}9Y_c2*1QjtBi+D*w%c{MogxW&9fCOm`rD`wRCG4cDA<1kOsz1eF z&@X&wtrMAcrlX&n@kcp6XS0}O0l%EH`(B^-eV_NddHe7G04`x&$0(+C7`UL}qK*hI z>G&L9X!ue`9A70Vxvb%e5?saNG7``5LIGcX5C#E zIGV|ZJn62SoLbX%J%Q0oNIzG5k}s)1n*G>wtuk$n9b}U&2@I4xtNdu$YOGr8Rh#89 zZyWE4eR;bO_cv$|Ud#K0Cme+CdOH0g_tA5iYP9Uw}w!{*~1;%=tT>70!7wXjw+f{}|4a*XD zup%&IHx19(2!_FyNqmRzCGLWVMmlBPcwDv{o>Q+$tl|fWEOHXZF{WWn;z!(*xQ_=C zA7fnNJTh$ha< zU2WJd5qChXtUt8XSciM7B{A53)fQeEzfU0x)=956bIkS#)JO!*9oqYjRbFu_6>zG@ z`|LihydQR#J14zuRkxT;s2-O|0M9lZ#RjwK(?Q_~v;BRfZrYH1y``@fmYf<{m+&5$ zO*M3KKC~8X6B2Z&VtZ!8bv7N(*|truEN~%QeqbC1)3pMF0e-9MSWQ33T4w(`93Tk+ z-+Kl=km_`=%RwCx(AC=Q)y{{6EuK8YuX~*Y`u+85dqyYto{jQ-WIV-kekJ+M72|o5 zf5W^5?^x~y#NYe?4N3k$J>)Ba=q~#H^0i5v!Y6@t3{mt^I*|Jhk^AWvh_(=G2T5WA zrvtMhZ)KLty+Zsc#&a(bZ$T?gy+Y(E`lntZ@*IhsKM^hFTF`gVze5j=FeZGolk`m> zGCr^2jKY5w=Yq&r2tc8qd520 zix0)I96=7Z#PN}Wyn>GQ!5*33Ei`%WjgZ` z6o zcg4|5o453OL0_*LjGvxe#zV(EcW@4vWeI1fv7ztisj6;OQY(&aS`|_Y+J?^8gx_bq zW;?=3Dr?mn4%H2PD@_s#K4G4IuuX?yYo}V}8&2EI4KOrYsy>OOpIy3HtCkI0C>0cZs$vzNNr)QTDaR~(^p+4G;?Kg zO2M}(D)>%?i46stDyrC0VWDmX9Y%qHAq z`BWG%&D<_3y2TL1kuZL01=?C^(OxmHy^dI4KGrpdW$!R2s~x@Cptpe%+rTl3rs#>{ zcB?4_2Y=TeqI5P7TkvSyh0L;PvG+pGX0cXs42FNsHy*AE+ca7+oMPQJw@k;}F^Wz} z!jwOBPuWkVV-R8<|83*@hGCUloasc?@AY8Z{{yPegVL*}zTM)pnm9gRCrErb_#dt= z9W^;Axe_8`j*E?I&8oC^Q}#gQWtQuTT{dgcz0=!A^pS;P?3Y^Jx5!QKyVL%-PUUumoVnNUO*55 zN_({@knbcPBiKZj3lhewxa_IrcndX6dyei07}1`gy9p(id=B{mdXmo||ANr&Lj-eL z6Oldi?9xIZ%h49waoUC;k8rcSCio{X;UQlq0l{8-1obzJ?V(pD(MNcxiM}SH%M|RP zKNchGz|T;rC4%5Q@RT8q6O7x%1M6!+@ga8RAXM%q?{S{`L0VlT)Y-ZC(@;*HACCWs zXmXg6bA|h|^zffQlWq831YV#=!K5Vp#Vm)B!jy+~jaV|V;#zXQi9vZTp4=yrmW)p~ jasGaQNPmbdx;(=O{EZMnVobu7BZZ?5x+DhX<{bY5=mN~- literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/OIDHolder.class b/idl/Security/.class/org/omg/CSI/OIDHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1044e8734cf218d89f621320e6c7b11d082954bb GIT binary patch literal 665 zcma)(-%G+!6vw}JZcf)KD>bv9R?wUeqh5_5?I9r;Wc1R5%p9UjH^wyjuL_DJqCcQN zDmqt}s3i1o5BJ>rIp?15_kMl9e*!qcp#mAHIHE`^SVxA34IZ*GHf3zd*k+LWmeaEt zgu4<$^t9D&1!oKqEq}`(mfZ$jN!neBr&7(gtp>x9cIEm_!|gPUvUy!PH$2x5th!?x zm9EzdssUl0BCm+n9{g57Ews5MW-pkok!r!CM+b&Mo%Nq@An9gnvY zM`p}dHf08PR|?J0|7XU?bdkG(WBNoH3^7`a3#Sj3Xh%L!T%;@mfp&nZzk%tIkJu}O zXUZ|8mO?5`lt5?7kSa_t%SePwDrDk%VSva4vVzrFq@ce*7(o1eX${E`;obN=;sDYU H9|QOS*ItXh literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/OIDListHelper.class b/idl/Security/.class/org/omg/CSI/OIDListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9afccd0b68527285aac9cff63df7ab6c61f3cfc0 GIT binary patch literal 1907 zcmaJ>T~`}b6x}xym}D3PLaRUnLcdHVN?NMc5}*RD5}O)r5Ur?j2xA;flQ@~w_Pu|i zufFsZKUSKhOIG{jTK*b+b-AkhPNqo+#Fx2u?m1_leLnwq_R9f)1?*{HLTUH)DR;kx{JCxmx3Y#^=T zJ*ja+Lk2hH?R^zl6(0x;xonmr5duweqxyje{%C40X7+kW;w!0#r z#Nt~5LHW!hUvYK>PR8OrmNb_}cDZIbuE1ohN4{FVpW5DDlTfO4&vncKwI+_!ic?Ks zIOm#$Z*H2^O>?JYF@E}Pah^KjyNh+e-W51OjXm?OnJk&*VlwACcDYD$LB}#FjrTgO zRvcG4Nv6xyx=VG-ypxhFRD8%(edpLNBTw`-%huhFogZUpsZjFrr(+s3DsJh>VUBre z=R229X4BU)cFo>%#2m_yo6gd@4DOccQy~uV7VO zyHeJ%jn8zviq~|ULR7~r=2U#HBZjz+FOb(^Ai?bWUUhs4Q{WUiEV2RSC9(Amsl|)) z7gX%%D1bQ&Y_CaZ*5NB1MSQIz3A;};R;g+^44}g?yR&D>aw}eC$J#0IT8n8##+6VZxu)uOyGRqqI9%Uvgaax&mFQpcchcrthv~VU~9Nm z-j;omuX&9kIrPp#8>PFUI5h3RTWQ|#GZpb+Yu2}Qt6Z@1Zb9HuEZs9f?Jn&{kO?tn9W zTyzhdz>qhf&z%HgX<2Whua|D)lw3%`IquFW?qbrFlfzq>caAN;FY|AVr{FnYJcjsz z7f_MY<%>r>ArNdLu)GQ*wqisa9s_mQuV zfMkF6N9ey}x`|<>i5D6exxs4_qmeNJMt*`$xunmA=2wB3B@8!)4>RI{P!Jh^9wb+d zFT6_qAgyKzbz(XC8%}1FmFejB7)?wYO}vyfOkj&>7=eEfB1nYsUp!PZ>R>=HvR1nB EAHQY9oB#j- literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/OIDListHolder.class b/idl/Security/.class/org/omg/CSI/OIDListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ee63d9e0a96706dee235c078496af2ddea951cc6 GIT binary patch literal 686 zcmZ{h%TB^j5QhH)Ed?x!7f|qu*FqPKZZRf;3rR>w)VN_miZrC8P*M*V-%1mW#6%y! zhceEAN`Qn#r)TDTGiTHB?%4c-TrGRgAQjyP-Gwx|6uw;ZEVIFIqLp2*X}ImCQLNk)E{(41akK7N zMyb>7@mo$rfR--PiDV(WNL~s7 zIsviV2Usrng}^(4uN1%#Tk^3aVF8LohnPOW#Ifu%37?7N^Z}#^WCg3Uh@N{xZ~*!L Ur8OjcBu;`uVx(`p&_g`u@J|VZP3uE{qHUS&3zd`ZH7XjS*gh-Y(O&@n1F^eGDtE2 Q^#W;DAdiWG4M;Ko08a=R%m4rY literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/SASContextBody.class b/idl/Security/.class/org/omg/CSI/SASContextBody.class new file mode 100644 index 0000000000000000000000000000000000000000..1552fd97d28125608281768abcd655d0d156ac12 GIT binary patch literal 1512 zcmaKr-%ry}6vw}JE3_LOj3EeY=n%xM2o?M-#stP5mVh&qkmyTOwmOSjOS(ez&3{8* z@DK1o6A6hX>a%~8@!YM9(G~h|Z`*Uu_jB$!=l=co;}?Ksti&;lg&2}pWi~ zgxU0r-MZC$qc@s0hHNgs;kY%`Y1Gt$R#J!GB?AJ}tY*TUpO2M~=(DLWiFZAS;nCZHX+eT!15Uu=++=C7=6_o9=a;ZVf)+_BJ zhZknkY&MOWS+dUx6DUNFM=M2Luby^A$Z7mnBG6&#k0xURlQOPiT*e5l$QZ>KL*}y1 zFr+)?^48j_y0*HmmtPdOR<}##=Ung!!)(WedV5hV8OG1Moz*6gL-2?UliiWps^(W` z&8fa;NCxMW=B?x3%6Z>$`8b+tX?>$;dzMF0qq(m6);!m;Yb*I3EYW2e22DSri0~rO zm5cB?(Jt`H(Jqsn3Q234zQ)MTXpbu=V2W^z$T#`|{mWp=_gN%0?lYl$NAwd0XcPXR z@9R(Wzf6fIkbbuUuF*=4L#^2Ber$&HBV%mB& zn0%*w*ZlUSl;IEHzKj>RyN!7$zG|U06u?6IBT{MM2#K_K1Sw6~C0eZ<;#n!_9vKGS aS^<%f7)j0JwlByhjn73N@7Nc5q31uHpF#@& literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/SASContextBodyHelper.class b/idl/Security/.class/org/omg/CSI/SASContextBodyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b93df4cc1dc6ff9b174b46af4c49b20e30476905 GIT binary patch literal 3927 zcmbVP`EwI>6#snNq?;^TDCLkMS3$5%DB%=rL1_y}C80<-ETAz>mUbac!e(2*`@T@| zMiB8f3Lczkq=Mit&iF4mI=;8rB%7q^IAmsb-}}D%+|6JAUcU)oCH|1H4m%_~BBKU7 zWdyNH!fqK(>~Yh{UI~x#VV{h(*e7E@4!8+=Ov2-Q65^95m?7*!zl;c?GU}naa8Sko zqAm=|(D->s#$hI|Ma+dEH{wXJY?5zBT+k(?WGuiA83u+~(FmhQS<5kojUu)Ypn}n|ve2s4u ze2ecCr18DL!k$h3c53xy>}+>MirQB!TP`rW5J?4tgdY@~#|2Knj|%$n6GJ~MIEY^u zx~O0fml(RN;1I4TxQeq1uHk}&jDk@{viOxHuPX>(j3s|#=mtyPWaxL6yv5M%iR-Dx zlB!N6ELN$v|B%X)HQ&};6)~7oIJFR?SuHBOz|`DahjP8ly)CfBrpe?iw0)7wRM=>Z zb&2%iilG}%oQ7f~92+KUb0%tc>cpr7;sLO*apZ zfNW_Fa~>);3GX%POe;UBK^lD$Z3*%OE-YxJOmEINwzc)PS~c3+Qn^}+vF1x)+nwf7 zVMCR%QWG=D%)7^KzS|m|YHrLcWi}V{W*)A*pC!Qr)Kn@wp!USef|*{>lJl~An--@H z=`s$7tkldbb9k4@LMdz*P>oPh*M>Ah8&N|>L|}P&hgr7QP1Tez` zc+es@!9o8ufO^juYWlpRsLjBUXWNKQi_K3@X7hM%!+9F>Jh$M?pw92TjhfS#K$^ zl#@=+U54@}PDwXVzb%W&8BFne$$gie6J&W0mcaxu&F(-q$6zIGwP{=d(I~Su9 z;%}Ux4Ab|Z6~YuNz}m+7`S|GD)gqpxtU5?KF@^v+_-w=J#SbNf`M4Aw1kMx^=ZwJ8%<7g8F1I?oZCbm%flS}jaB@AVK^}(+j*uY8EjEAU*rw$X#5%^n&}^gE(i-<2>wyyFe_8XE#%{Q~ z<;s@ra%Ev0QFWo;xrn9)|2ro!2=8*C*j#wa#QbySx#E;vAqfO4>?J%xcD+RQ#S&$8 zjs3;_3F{W$L0(t`{&+nYrx0QfAoFpt^oGy`vw>KENd}l`u{1(>1`@~SUr4F=iqHtc VL}d$!0K(M>TS*u}eCFE#egJGVxNQIc literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/StringOIDHelper.class b/idl/Security/.class/org/omg/CSI/StringOIDHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..441ef07754cd25a79ab7c75aa7367906660a3fa6 GIT binary patch literal 1823 zcmaJ>+foxj5IsXKn=FHb;FX&qUP7Y8yGRg)pb}Y)3gX?kgss$SNK(sy`YC*YuZUKl zw93*atNbX-p4}xRo8ZgL?sWH=)7_`%&);u909=5s;t)nuBymo`c@;ifP;n8L6kJvj z#Fa3eTvaeC53i{>h_Ns&sW8TIT}DmFvm0``8N#GInF=ATVj8zp+{PURGYT>cft>hQ zF&GYOWvh@ZFBg*O?4zm4opyB2yhK@O*=ilAa zEA#qd(V&75Gbf{-CT4XxwV6u{`^lq;2*q25PS#N`hf3KJ@{(kxR9O|o+t8O&EfE6m zEmKg9#`c8Bu8LiZW)iX*q49jtE<8sMdKKK|n8g4?Ph+E;`puM!ONJ#qH3j!L?jy?( zF;sHEoaV`9GMw78NxNRQJfp5W z8=_A(sjMcGx^SAaHNCh>w?&)DQZMqPC1K=DDXiRztt?5*J6bj9dIge>8;diao;6D( z;IMcnv1qy&4tj>r@u4}56bzB8Smv@R%rzq?@(ky^1#z9dZ0g3T(@j7xn)-?jve2R{ z&8d4??L0dFx$1ahvaL$O&@M-~mi*8jA@xJZ!0n-RgZzW^avq|Wm_e1JKwn|{ra`2& zkN&!7XS4_6TVS8*1LQ~(;+iA25%6!LZNs*PaTLc~>k;_TMyDO|@9;fKY{6eezyS$k z5XW6Njdtl4kN-k&9Ru;72v(tJiC^%oqdoBxzOM*ve1cz#SD|jBeS;ztqA_T*9irF} zd;?PoPDuVIamqy=B?6ND&?fkA^byHTbX2i#b{n1Bh(x;xFZuNzsbBF3B1f!fsqP*uM9l z=&LV%rPWCp>oDz;GyXOD>NwSNcNdZ@;P`Uy?)mYZ@0@$i`Tf-|djKw@E@KdvWlZ56 z3Gd1f@Scn-xGLd&8QqvpkR&Hzh6`t9oW)#%j%)nug9PTWz+LnFxXxua;<(9wK8)j* zi~>I5$D)iPZu8?~2}=?_Vd&Dm2X&L-OwnX}TRYZkso}NUf&}9;<(gkR1w$B?a7V#1Mi|lu zwO%e{@0M;}4Y=KMY8BJvwj~L76|CShhNQWb^{h(xEL1!NpW~i_FF31#R(dz?m(99o zIktjTe5v3qyshAMq!paUh=i{cd<|W}H!u{ep{zhdhCyycS5N^ZI9#}1oTfgQ;2iTE z{H8BWOiK7xK^5OAu&^#+LqQFj3T!yXr)Adarc0T$$S$p|oBZ8l{E7Pys^NDY9rQ-L zY*ckMC}hNhsz7c*hv~sX@rPp=JN9*2Ryp2!sj&4rye}T=sDqYhb0=2YMy)~72FlbT zo~c{BU-T`%VK|5AL>!>BHx{*LXWpg!qGeNG#=Q;QDSIZRe=0IMfeE#6vTAyI-L*C? z&)PP1ugowRO+7S@l4%=~RLFnJ{Jvq@IO!Z>QN^Xc<}5M&(U8$-Hh%o?HSk;`T!ZybcX7ruLQ(h#CCjb0v9kE zYR^JMjHJEVa|rh`&mcC@6@Vo01}=tXMY_3}roBY>BMfUV(A|Vo%)Er~2tAn>5Pn8{ z=P|^h)`Yx^o*nX#h~Qth;@aq1j0&dnY|`X3$y9W q9wBL&^i&gP9>xgi4_?K9X9BUm5hsuo72#6H!;uZT7$p|e9RC9TQP>Co literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/UTF8StringHolder.class b/idl/Security/.class/org/omg/CSI/UTF8StringHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..47798d1e78775c1522803b5f752ee4ee948d2580 GIT binary patch literal 679 zcma)(Z%e{Z6vm%BH>bABO3lpvSV42X81*VJf)pYl5Yl?%3z<1YnVXDh^sNetB%%+{ zhlqX=Zg!w4b~!6uSCZ1Iqiu`MGlV~0T+7*^k8 z5NZX6;Cb6_dlw7=HG9t>7M&*jlGIv(r&8TDjV8mfdgHh)-RZXUV)?dksrMY$Ga8nu zm+W5Ot9XQU^IQ?EKe}y?N~jAZ<-Rwok?P)4k0dEIJNHbL?s-Rf1xrvAgb|Ukt6&fN z3NkoQaEKT~deU5_q~BGq&Zwcb-MV(Hrs*<7JI27!EyHf<o^f7J&ty`iKxk7Q7vLpmL0gCnx zrUgDjZxCK6$B0_-sRU61-9<)JZi-n&)Mw&86V`G=1g4NRtj{Ak?G?fh;@?Xfi1`Sw N#`_V6ke+!Pz%ST*kx&2t literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/X501DistinguishedNameHelper.class b/idl/Security/.class/org/omg/CSI/X501DistinguishedNameHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..eaa56473060e7b27b76f1252fe86786991b6e33d GIT binary patch literal 2021 zcma)6-&Y$&6#ga~*dz=RLVseQQY_tUlt8go2~Z(a8%c|nh^?q`Nyc;`*^QeGw(tEX z`szzxv3gRDdN}Qq=lIv?tH)ElvsnlP@bqP7_s+fFeD}_G?;kIJ*#&R~wFm}rC4wou zqvC1=3f_(28s1a!egxf^4wEIVVn!NgBRG$_FfG^R*9T$DV?l;ykOy0L`Nir%OKOL3&$m3t>b*&dYE2YkVvX{;5tT;oX#HSlvrC} z=v{G*;^r-*mN(Wbg7T-ETZ{*f+EW`zD9xL8yFnxD01jX(n}sogrfvX zJCR+?O_MstCG*Tltfwc(CscgPQO11^6B{ZvIVz}fSg>CyZ&9fUhf-~4v%J0`q(%Z# z4*mO;^HfR;y{9ZOy^z)_dWQ>@iNacHEVLd~J~G4Di7(mqN=uo>e3>4KzH~%=`|>#u zPOP?!N`r12D3Y99Q81;p3UyChl0#?r?4ukMAxZgg-ucXuX_1CQ?qq3uj8pcHX)-HvR{y&xbN9 zrcw9!tZGO5^cYJ=4PN1@i-$vwD=tGs&VxduVq0Zz#%1?Rer0Lwk;+C-fI8Ur3_aeM z*aHh{St%gj=)(my8h*hMn$d$a_~|a$n)DT>Z<-RcUZB5z+8OO#`ZKT}=>z0Q?du;$ zy+a_lgTS_T8pcJ8`lsg+M1ZWl`ma##C7&VKL{|$Wj5l$~cgxW(-E{p0x*ua$e~#`Z z)Lilfl*i~vK8Nx%LfcOe%;`-;cF?m;5h}49@z{=0YzWFQO~}iVzlMa5e4PkL_WD!s z-!Zy_UWJH0#cNIUH4$AR!w&jmF@hcV37ouS64Vd0Dqv#-Ml;C=>+_)KAa-gmRhnr2 z;T-t~De3}2ot};V7Ro7eL-8LFO%9ReO#YF=p8We)vJKyhz)SR~7-#Hns&W`9O!!#W z2umTXxSrf?;;b?oPwo%dre6D=AU%+e4mFri6GTaLrgf;|4`vA2gc(nmj9F|W^#d8k$Zw=* ZK0<0k{>n6pu>=vXiF)KVlzUMI@Cn0ynXmu= literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/X509AttributeCertChain.class b/idl/Security/.class/org/omg/CSI/X509AttributeCertChain.class new file mode 100644 index 0000000000000000000000000000000000000000..2d9add8dd305a379e23722b09e12cbbb39a4636d GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g e$t7$+6B(F*RxvV2G5}2i(yTxp69XHNWB>rHyC0wc literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/X509CertificateChainHelper.class b/idl/Security/.class/org/omg/CSI/X509CertificateChainHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..219b09d047ef1b5daf710c531c9158d7022e0f0b GIT binary patch literal 2017 zcma)6-%}e^6#h0F*d#0xLVseQQY2S+xPwx zef6cUSe=wnhiRXj@vqTW$EkjIvyc$L>C3&l=brQ3?|k>1^T*3yb^%;MHG)B0ieL)w zD!3ehjQ1kAg7+0%ji4LTVOmlOW`uDzg0q+lbGatIJ_utT3nDZvmg~ZHBZLpd&qpEL zj39%L#j+Sd7PrLmiGn2spGxS;yAP|TgfrQSQ%Y7gOUd-o?S=Vdj@ERgXr?4|&setQ z&PkB9@f8U{Vdj>vIBOD4YU3S|3>QI`T{9h*z*@)oy!|k>x*(7g^MUIa1v;HR%4vLc zK|=4cYZNwa8P%MzRyLVGZ*DRkJals#=YUm|aDpD|#+H#R8+IwV>^hcRBDJ7n8a&lH z@2plFS6q_J*wwmAchlHRk%WTJsMGh31;aJd_YKRwSt%DyM?~cme6C^zUr30WwWMnm{Rg6qD(>K} ziZ2DffmWh79u&-~YgKF&tN2RA+jvLC>xip(10xE)R`Ct;D!zrGVhsfqIuaD?C>|<` zVA5LVdUl$%F(G)TkKsIhabi-zJryO~S7BjY!G?-5HdWZDyh_q$xoSGhvz5xy+PW#~ zBOpqle_u7PLb>oQg}i(nttohi3pHX`vl8>o2Ne%YF2}xN%PS>HH0GD+f#?f|DsR7Z z+QP|d%P7}*+dzS(7VLo zv8D@4Jz6r|eATfwE!WyI^KL=HWM}HWb0?X$W{UazYvy-#(=Ie|rnF4wt$QQmf1vt& zD5Go{HIL7VcDP56uyknf3Rj&!7;==j5+Y(2(9~M zfRatTfczLeiRX}iMriv9f?2(R$PRk88KIEnh{tw}u_4IAoQ`h^{u;)8cLnOY|t1kfgt#RJPHu$PoZLyXBdHh5F$v7B3wN1aP&c!#KfAK<3Af~ B=BNMw literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSI/X509CertificateChainHolder.class b/idl/Security/.class/org/omg/CSI/X509CertificateChainHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..cb2b0c5c17b7459828b1cb1e7ffed38a28ac34c7 GIT binary patch literal 699 zcma))-%0{O6vn?Kb;( zBoInj0{^+yvgieYPfgtsh&iXmjwH2|<*8J5O`}F|s9rm6U3Z#wJy*ENUg~YfrAEaz z^?a+{p+(BDW`-;L_;G_2N@W7kZVAlxvzhHe|Jx?ZR>%qk^F z4z=Th4QApq&QjmB+q}LwuxtA4V|H=>CC@HxHoFGTB67cQ%$`{WL4bXPTf=?W YHwZn5|2M55;vu{m??>!Gdf{yVf0I?1pa1{> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/AS_ContextSec.class b/idl/Security/.class/org/omg/CSIIOP/AS_ContextSec.class new file mode 100644 index 0000000000000000000000000000000000000000..e6c68d6b92215eb96f17ad145ec32934fd4d8150 GIT binary patch literal 407 zcmYLFO;5r=6r2ae3KRjq`8epsKohfxXJbOq1BnU7CR{i)OWl+bXt69tf0l>F#DhP; zA7y-1qL-O{Gdug<+t07}4*(Zvm0)78h%M}AaFD@a21h22O*Bk22~{nVKxuEaUM}NA zuL$J+tBHDChlygf>CZzIX-}^8lsWXJ4&%sMD1S=GjU7UH^HL-iim-JVMxnkUO@ml)nVJ&`RUCvznR*S9x3tA4>LuWf>`4TF)p@(=OI8|L0W zHMeKZvBSeL*14)P6LZ0S1HJMg3s$kavCsH=fwg94+pQEiyPYC$pQkYFhLNK1o542% C-A$hW literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/AS_ContextSecHelper.class b/idl/Security/.class/org/omg/CSIIOP/AS_ContextSecHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bdb41b58d78617d6f3331c769c8e8a819973aadd GIT binary patch literal 2570 zcmai0YgZdZ7=DH%Y_cp8XsInyS}4?9ETOhmCA12GmPjDANof&vU6L&< zw?EKd;8&~#a^&b~KY5OS$#Xouvssc&2=XB_vor7IndiMs{{Hv(KLNaopGElbwuo^| z2#APqU{b^st_!#!q7~B~+KCEyhi}e^@FC`*VOGGL8*vYA;$5zLOGG;oZY15fEn*&b z+_)=Z0e85@dwf`Q<9#mqfg2wRkVW)zuOC72&}xYfDXy62E0wF7t9v4rvBD2DzNZOT z6|lzOl8w!R%5XB4*Ox>2>~bg)zcn!)O44p5pH{;Rtz%kFGp;c>eExX`C*P(?&g)AI z-9CSVCaH5JEmu@^gW>bURdn}bP10~@VTo90v zki`hYKsB&Un3~RK(yGoiasu)a3b@bURf{1*OIw*h@sgmUD8WF9;aH8Csg0CcFtmJ5 z!a5#E2xCk_06~VHs!ubSh?7#vm{qe&s?N}1DEhK$$i-5DQ&$wQAz>3AOZWtzawwnG zWOVg@Nz>ILnWWpPIYU-T#tO|^O5vX6teRR8@VSK7@diViWjd#1Ddt~D2w_CRn;4~p zsLL@4U*aLdV01DzN=ZM=@kW~PGkS5DDD16Xr-_JwuOxhpZzRO=t%M{W!uU?YZ9I~2 z7moydFX0FLDB&u8Iw~G&rocJ!)>w`&t*X2ZI;$W|PHCW&(t@sKHA7oh zWh2Ef(nyXa+=#~3QK((iVo4P8Uef4szt=YGQ*v@cCfnWBizK3w#$o#Eq?ys|3haXYN(+!6^&somYaRm5GFrCGQx7iEUx$kF zDLBzWyX}EJI2MAtaPGiWG2+1`T(-nwG;^^);5k|!qc89btve86!RK&1MqBV198cli z`UTEdU^eU?^qO7hgqt(AED3Tuf0sW}x zj;`rO8pB+6?>*-_`3F%A^Shy>tARKYqnMA#G|CSyy+wu~JHsjr(ogCTxp z*$vHVH?%^zSS(#@`EsRTb-3}s%SJ87;6G`0n*5Z(n@Zm?_zG5?Xo=K(o`6af+tBL_ zhf~@3?KW)S83T@xWrt_IIyKI^a`S*QEj)fO9zw6`nC>1wjWBaWH{Qb^z}bB!t!9kZk4! Yo&kJgl{JJNh)`p6l5YU%Nwfic10jjKe*gdg literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/AssociationOptionsHelper.class b/idl/Security/.class/org/omg/CSIIOP/AssociationOptionsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2b0227a764d73e9f6a3263ebbd7d085d5bfccae7 GIT binary patch literal 1759 zcmaJ>ZBr9h6n-vw*<`sC2r42Li&RZQW!1h}LTw@1k`j#?#M-LcCG4cDA<1kOsz1eF z&@X&wZ6`8y#?eom@kcp*?q&_i0{wFD?m6c<_c`Z2=e~XS&np0zu&!eqb2rZoKl}NLnc&=4p%&~)FGG&3GvS(EuU$>g8)_Tom zxjeVS_r$()dl(Nm8v;id@yOb?jG9%i8fDLQ>Qxepy0%5{x$u$AhU=+Aj6%J+^Il(Sa9Z0L}|<0gZQN-7AiHrX%Z(eso@8S6-)_C^f$TuD-T_6)HZBa1r{}2 zm$-qFz=+*4JZB@g47N<-CT>aG1{sa*m38e&#cp~|qb{+EI}#aWC5~f4!$2;Vr4|aZCH{3`MXVM0Esac5X`D zoWR*buV^nSr=*t(q}PW&vrkf8P4vJih;6I3#nXhkiVAh&*`}jJW43(NC?4UV=w|9w z7d6^n`f7f~sZ*Ru@3FbnQsUrjgvO^6Lm`h;ZO?4F&Zgrz+qUUd1TKW@4}!yNdPZe9 zD8Q;YR?APamfk-$2UtSP-#-`sbJXd6$U!X;7*ylgEuJq9n>=#}uy^hRq(7$tG&;?f zZ=5fwfUf3&UrBy*7`dM0-zay%J(hg|@h3mPK#ob^9`T((bQc4E_}(N=;iJGifhY!O z9m>8$A3M90{Nr% literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompositeDelegation.class b/idl/Security/.class/org/omg/CSIIOP/CompositeDelegation.class new file mode 100644 index 0000000000000000000000000000000000000000..dadbc3b40e1aa8cff9ed2828579873dbc508d215 GIT binary patch literal 135 zcmWlRF$%&!6h!AICL0UE*47Iwc!jk|6(L~%m1RlT>=(1i;Ve9WhZ4Wd8|J~x=lgmC zIALpG3>reUa$G!tdcw|0nlq<-{kswtuS!JY;|N(Fe|hB*K2= cm2Kn{Y*8kRPtOezFgYzL!1%LOrU;Scaf z8E<)XQQ4d`?U`@xojX6jU*7=EQOQ8UP8uof2C^5(ejr5&B?)B-2Mjr3dNvn^$6qFW zkNXTvXUGcAbo{aF31h^qXNF44^=#E0*=nlLj2?wjmwl%%t{CFAdWRvQxjoMCRMSIpRexc)vXy8W zDO&HyC}2}Y8W|bukY#KjDd!PH<_np7~`Rxw?kKrd7yAYRg z3_}u*%kbfZjA4vOcveOWPKIb@RKgf9J|`oJ@ennqBs?F)=@1f_VBHsFwBk$?c1|gpsN;+r;vn?6?}qE6`aOr z48!LN&f*ImeW~CazT(l>3NGLq3EwLC4&N&{f*-iK$<2@V&y$udFm~ZO`r}hG8rR9% znsYYR)DU5r3If|2_~q%jU2-l1ly5RxDdc2@)68*#tHGLmRE_?1DcfMXQ^QT#JC+rn zmpWZdb85Ckr)|9->xqgfDmY6^>Rf%vqFsLMWbO~g;?232{;noX99 z(?mUijddq%OBETSVVDVAF!h{n>2q4rN(tZJyjWp=Yxr4yi!JV`&Navxr7p)Qeg*n0-UPaj{Uq> zAa$w|Klma&?}~wzYu7^KwON6>8n{5+_Z8DAu$u4aTH@%@N(c!0;_kH6XxGSwdXhXa zqdW<7s@E1Qh!v ztHJK?P4FYWvX_n8_5T4cOxe!L53aWzFK*iva$-f;{?m{Pl)f|mZu%+PMgM^UGQV^* z3elKeTx$2xY%TSI`aon6;uji#1nD7iw!`)&;4fp>q>S!)^l-mz9^1L!F^`?m ys*NKUbZqQ)Y;;GWcd&HENruo7O*2=SHKIZXKD?-eXX}2$^?Zo`t8NJVq1=@whUdVnYQOPTng)#86(nsbh<8WAkU@LJ$IJFH{BCFGDG$p3Fb)iN~QA&B+VfvOm)*-`4Pp5Ar|vcJsP zwMHAU4Hv8HhRxKukyV#-_nxt8vgo{X;{zkBa|LINTqNk9J@XmI^lAwpSfVdsmeOm- z(=X~UjVtso?pJ8G_zv%!c&kq*8f6E a#aD!e;KnK&NCXh3MrbE)2>zLk0sH`QQNafQ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechList.class b/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechList.class new file mode 100644 index 0000000000000000000000000000000000000000..4b8244b840fe398adf8a3205acce9f4ef3ff9fcb GIT binary patch literal 374 zcmah_%Syvg5Ixg0rjOW%k5xBT5ZWMIaH|L!T?8T#3tiNO+@>+6B)O%z75pq0MR4H< z_)+3S#iee}nLBfabMCxT535>BjH{6 zm$^>#6Z-sh6C4*6Mt0=eP-)6sb~p&*CcnDO#B4e*pl2>hVH2&NagXH&_uA#y>8(+5 K4%aZgh4=)^^-n$k literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHelper.class b/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..338b19721f1e2dceb4eb93794f6273b0fcd0eaf3 GIT binary patch literal 2548 zcma)8Yf~Cm7=Dg`3!61ja%r^DR+AW5S~0z(jhHkB(@2Dx25YOfr3;*pRoJD=VoY!O z9r*?QYSToSI_)H%I@7<@nNHuctgs@?_<`NC=e(EaecsFApa1^&3&4ALDq{lIWy~NU zVOE9@H)PzzClYSS=*L`$c5X{Zip_Z$D4In&BBoQ*^~G)Y}3=|+uPHp5J$ z<9yC|l4x&bQ>mr<@uXR)nsuX?<%J9{JWA^|J0W~YeA~9P0-3qq&5Xx&Z#xVFSz9Y? zX0+_-8`_o@FKb3Ap0zFAC{cKRi)(axuM<_(v~1xd zo-(R+o5Z3s5&%5uT^qosu2kUZW>n= zL=aV|$=)XfU1~`|4OByFYCb(fB|atmCwoRcb9HK(VWI`Hr=Wzof-O8&uz+n5AW@OQ z4-$S<@DqMka1Fm4k7r)4ir5F+>@DRtxTyP~77T|gdQkC+bTVA=)Jac_P8)R?p`4N7 zW`pLMH7aVBVbWvKan~y6wv=Nq?Dpj$?aN1+shc{DoGqE7-Js5u?af@?G|OBw7|ykkIHsCH)aHXFZs)3&UeRrR zi|6bD!*nM{u5c$D&mftP933H@9uLNC$39i8FyxS~wj$}8ZKo}23kRj-vPOJSb2-S@ zyTNEz9Hm&yw)GAKwB71X?<8vybpYGjFFmutpop>A=AAB-H3mk%yPd4IO2?bcs0UnE z4k%^g$B?<$V)8In?|h|e!+=o|w62KsiK(-2g|+|yzB(MP)j>OOp{u|4>A z5oj6-;T^o|ilyl-#8mY)`k!G;eTDvANa@&X_@3cJ>=k@35Zw6{{+36rG4~ zWFNz;dl*T_$m*LfaUrHQF!~Z>u>+lJ_{h~6b#;c+*b7|P#arS%*1+3M`hxiQP>RSp K0*rt*kMTd5e4!`+ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHolder.class b/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..5e47d9e00cabe8bc310157defd72fb8171c6265e GIT binary patch literal 832 zcma)4+fKqj5IqZ&3RVRLRJ@`ja(QU<6=R~jh{0gQ_(}>i2r0Cw3&y|FL?iLR5AdUm zvrvSZprq+$J9EyQnbZ0Fdj9}$gk%shq5=333t|;(;#e0)T*iisO&MDZQcp9wIzzH( z+6~ogH`IK&P$*rgd9!Vq-A=u%*Dm$iU9ox3a}56DW~a$d7`&nDK08${)8<;$(A7f6>hdxtSUV>e{>p>hwh!OO{1>c4560R(^Nz2G}KbHrPnw^ z;)m_-b2yclayA9su!MqdXxYWo`CXQc2mb3nN{*?;sYP9;&Qf%+55jjG(#pwTn4^~o zi)kGtx{>2_F3?wakfCVi4eXf$7^D}SbPOJPfS^ccvaj%rFiQwIn5csZWU_sDCm>-g d|Au5UFYxr?8&z3B#DR!vjFfzRNKc{-;2TwR%Etfz literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHelper.class b/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9921a702e40e251c35099ee3d5dad33c0abf449b GIT binary patch literal 2255 zcma)7TXzyy6#foFGBBAm3DH(lk_L?y1{*ZCriLUo!Anq5RAO3dTRIu0I4PN-!(jE@ zKjCX%d`&M4S-P5~PhG3OrhV<|vhFjCKnRF0=bSlv@9%v3I)A-&x-+E;vbg-xFTT< zX%Sbs#x)5Utn<_7BC;Z`GYsUN2W6e%NXD{@32UdANM&!Xt|T_-Hf0s`B*WmMVH(ad zgAk2vGWhv5ZF$SyVmKU)by$))H!{qMZaWO~(GK~F`5<|xb(c%0v)27Jn3 zs?$R4>o|{IU{Nc%d6O}TDG@hiQh zoNA~e`wb2v#_W?L&oO$Q?qjDfpvlUTteV zIkX!mTM6jSA-3s{(0^%y{&VCi9|m*^(wRmRtsl_W810Pq0p$tUFLVGY(!lV_e)#BiSa}BFcKiwaH4HRBf|$VxPc1_`S5uT17<_~&SXp8_uzds{l4lFf;@`m=PC*1flWQPSW)BgcnHPPgc_e zb!aL42M%Y1<;n2R7>!RVb-bH{}XTF55xBovWQv6{-pp1Y0jPYz~%`|Ah56! x->cz0VJRHnBP1mro~z@?Lmwgi%>&pV8iemZ1PCNV{-4>GGt$8TBhMP)#w)*-MYjL| literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHolder.class b/idl/Security/.class/org/omg/CSIIOP/CompoundSecMechanismsHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..e2db18349884c6189c5a03d9407ea310218face8 GIT binary patch literal 868 zcma)4%TB^j5Iq+t1uTjWe4yeBwU$MrTa1aaP!bJBj2joE&;~K3ZA!uTSDI)fCi($> zlyNTB2PS}vPVb$ZbI;6~d3%3;1+asS7$TS!F%yM|*%;=K;$fbL1rduP(jt}^gtlh3 z42G4 zM+;@w&~%1P`A4XDcCfEHw(DsX(@+bR)AC9l!5TTv2$yf%xT!=ck2)( zC2#$aIj1}?I440uoFP59T?sLah**}ef>jA?$Vga6l0g~F)2w>4(LAzE-EbKa*IHXs zP0gyQ#mco&^~mUNesA}mjdLUZt6`W9*9d+3df3;b9$$yfiYDdTUg-N`kL^QW?CuI5 z3$|$&BVdTq$GE|?ssf#8AQVUGHirP6fVlDmrUYLQctr4?66nIleAqO>0+fq&VcB1p s1jc<#(#J%VYzLuVkO@rwg=Ccn1UnGEl%|mMAqo2PfR%&ty8_+Zc YCZKLc21y2H1{NUA3gj^{umMR10E&wo)Bpeg literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/DelegationByClient.class b/idl/Security/.class/org/omg/CSIIOP/DelegationByClient.class new file mode 100644 index 0000000000000000000000000000000000000000..d11a35a1bce0f7f7dc5d03389983ab3194fb11f8 GIT binary patch literal 134 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gAfABm)57eI1wp literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/DetectReplay.class b/idl/Security/.class/org/omg/CSIIOP/DetectReplay.class new file mode 100644 index 0000000000000000000000000000000000000000..4f3caea6ac4fb676d5a2db89ee3a3b57570eedee GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g|#BZELzVp*boPGVlVzJF3y fYH|r1&`<^@pdpM5k_^lYEI^tS$YWw)1Ck5?#MK|L literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/IdentityAssertion.class b/idl/Security/.class/org/omg/CSIIOP/IdentityAssertion.class new file mode 100644 index 0000000000000000000000000000000000000000..f7a38b46a802939c8710836e9cbcbff6c0f0920d GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty b8_+xkCZI)(43Z4YU}IQ;JSGMRLPpgu+h TNd{&H79h|!ZIewK%gi3fjx zKgu{oqlqUk@3qsJd2gogAFpo!PEcJ!7MqL6V9UU^fgJ;71CupCPBY3WWB@ zlhG(rdd$GQ->4Fg6R8A6OCu$xav%cX^NGHXl+@D14?EY93Y=&dI8D!WTQ`m;)KvCF zGYaoyFi~8~C_H5-e=CT-AM&9L1Ai!b_dJy2A+)FWYFqa{H zCPS&uDZ5s0GbEc)Uobc|&-Q71QwsGN@Me^=IIPT^3)qDyZ(Au+LSVW4DwCS6e zk)Ja;m@}D}Gx;E1pbWA~SfX2jm=UM!7qDkKm literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHelper.class b/idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..204440828d3d45b8a32c9d94d7e1c6f2c7d393a7 GIT binary patch literal 2981 zcma)8>30)V6#qSvbdvNHN?Bx)YFTQUNCQY+C?ah^hy;S9qNU@u(Oo~&#f&@2y~=vEpzs;RvOhN@7Wdod&t$2Ng=^-G7lOru;NsrM<(8v;gFH*Le7atfd<@d01H69W=^@R-2T`8g@^ zAwCk=lGvBrMOD(zzKygZbJzBM@_j?y_f|3rK9=|dpGu74Gl?-C_TqDi6ZnExUrL<9i-{koXZl-7&6uzQkO2Hlmf9IHPk-EwAHqVnYLEH)oE( zMo%`j0`F93lRl*f*{qekTFZZ~2Z3IXG3TawsWhY~n{TcDhs)Kxnpu&tRLSGXCCr#=?3BJ9#$~O_~}`4Eng-n zMt|uVWrm>mlEz{`b{rjd7iOty>#)xZcz_ryEja^62 m44iqRJ8!NM|Fqv*MU3aj4DPRmDu{ja(t*$*Ajq-WG5!NE&K(*6 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHolder.class b/idl/Security/.class/org/omg/CSIIOP/SAS_ContextSecHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3c3218f5fadf7c5f82a6d85ea6958d9647e20165 GIT binary patch literal 802 zcmah{?@Pi^6g^L!OIxL-R`$cxAe|pZeKi7;C?Qz1=g{<&acq|wb<0$0J*Q7K%3$3xXN2_!w@sOTVJ=1O(^-z7(_5G7>Z@|T8dilm<>vh{Uy#$ zH5!NyxKP}*94;Oj8Fevt>KUUZW6rrV!FTa;uHKA`3-r8e=N{vjJt`3dOKcNvCwp)L z`(p00xWfM8UWH}lcaRsBfLC7i%P9od0;0Sum);N~@F84{u#-YV2+zC?;0Mm&y>|cr literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SCS_GSSExportedName.class b/idl/Security/.class/org/omg/CSIIOP/SCS_GSSExportedName.class new file mode 100644 index 0000000000000000000000000000000000000000..6374a15acdd8a6f416c9ae7b5925bbf3849e941d GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gSDX<)Sfh;RpCp z#ydbXabqSqXXf5>@0@!-zurFpT%nRi68kAgI1q3speW!-KuJPb!m)%ChHSt+%M5gX zxmdVf;4?7oH|m*BOWQLknw*=HN8PmzhRCSNklEBZd~PzNxM7gY7s|6y*Yzybom*;4 z>vVb#>cHcUFS<9@s%wVCjqTXMEkm?cA2P&Ru0d_iYnnD{()qVTeJG=V9T{n4WXJ-x zuq`7iAcs6d<&O!i-6AhKkv`}*?rF%}ls|KI#vM!Tji=@$V5t5S_4>_*Dm?S?%v3vf z-L@0h!3$1le@W29h!fK9v~MO1te8Bkm~5<=oDfGyL1qbe>6IsD#Bt>f?3FH}K>>T4 i^aaTi6swA~QVJ1K$|0i4Wr&zkjD=KJjE6|9EAb7|i)4-f literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHelper.class b/idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..aeedaca5d395c8156316587364854984219df4a1 GIT binary patch literal 2903 zcma)8S#uLd5dOxJywb9c4~_r{CN`HWB^HnX2_^(z!2)3sq&P8#ENf|F7Id*%8AA?o z-xs;bAIK{q*jB}r6g;IWe<@X|bg$OZdXWo1XlAyjyXWg~x_k7`e}DW1U_XA5(T`CX zFXFg_F&RF@Wt_lC2?-gkI29tvxP&ANPs?};FNJ70BOw(;I)s-o!M3l+Xv3>POa^gQ z#uUy4abCu2JgYJ;;2c|OJWL0XVT)`Kx`fwdbo1#mxEP|9!NVnXaG6&*c44pb?4-c5 zqKp!*u!_mMG+aPgf+e9M5KygaC0$^1qG-;d~*O={7c7T6f>^H`EO8ySVNZdw9|!k+!X!nJ{hC>4(K4K^zH*`$>O2shsvOqAeXD+HmBP-z(1xN6_z&giKLCe!s ze<~2tvRP6t>*Vt@1<&Asf}?nWBJ$>&g3s}Vz@GR>;xN@fKjR&4PSN3g{S?vmdPL2& zBz&phD}1dWjc*i8@^B0{6`aMl3eNLz4BshG@x6o}6#R&v6b#{K9&WASp7dOax$9`K zpPas=bFFmNk=b0+Ksn2~Ah6SwVa;LNb?5Ow7fxPl<*e57n)6&>x67Sa@I<4oSiBHLxp{lcV)!-6T%XSSiPFESO1nRC;s`!=ErH4-% z1uFHBby=;HFH&v_Y-*seJ=JumEp%`SmrNsXSjMcbS{Z@8UVa>9FB(_l83{kwa=a%l zH)fBVQkNasgm0_|l8VQY@sTknUEJj#JDy6Z<7sttj(OL!<5V@vdVMZ?ZqI2`E0kGn zuvSnBqiikfb~v09+f>wc;8V?_Xk;p72e;BGPXHvYcLjIjtns`YwLotj+^Tm;y@0!P z{nqH=N(l)1g}rxDPdaxh^i5IGwD2&tM*T)CwZif;Mj6uU3V2ne9jgTAegXs(`^l(> z=MSg&y^O4i)ond6HN?s%)~Ni@!1^ZqJ@hA~pZ*#N$lUK~6{0mgJTyK{U!61yngfwV zh~H=dQlxI|Y${CH76lFi{~7*1kJ1# ziQGr)Ep$ijp>+XLB6=UbTUZyp2j5);Z~qE^BC-IvigmZiLc%um*k})vZ4kchAqfMF zpI#Kl^G(uX^w;k|`5WcnpJ+Q7@hzckvg;8-d*w96w6*wXb?Y^Z6q z+TR)N(V z9zDFy=27B=S=qmY?#V@LPejS<6Z7bC=H6(eiXHRV$@8vx?B;pTJi^gsUqcvnd>wFn r^+lq0(X#-1?sev!RbrmxyQ_%u9IoQY+9d@svLX=(4FZA!t8L?d>q7Sc literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHolder.class b/idl/Security/.class/org/omg/CSIIOP/SECIOP_SEC_TRANSHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8d301aec073d5b604d50e0730356948268f8b5e2 GIT binary patch literal 814 zcma)4ZA-#X6n?Hcmur=lTG^{*H1)%%uSQ@JB}9fwU&qWL%5-B)qkmOUBz@=y^rND4 zb*2VljGeok^E~I}x##Qq;}gIsQW8YOLI@%*VI3RXY;uzju_a<##14bd)6K5Iki4;+ zhHAANYN1jrmhRNbWq}Tj4y{_w-&S%A!Lw$k>7FzAmGnJBpkURBnNsFbIa<&hL$5O& zPrys%i@a)Ej;q&9LoIgfu3K>l*3NN8P%!wQc7KSnj>iLlTDO_k{)+8C{rar zZ#XAo5weUBBoVtZ_OLG_i31sjh%y|_k>T1h>xRP+Zs|Q;HT6zIE!A4agG&Jd&M|#7wdHTRmtgD%mPl+`ib>`g(o|eU#8K<QpqFu3Y54^D zB9+N5(O+Z`A#dg#?1dZ{gqOW=96ovgiH9@UH~2=F6@)!Z%)^8-**^RekO)@)Lb91x Y`1%NpvaBKML3lPsl>&VT&%6!b2RQ}1Hvj+t literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/ServiceConfiguration.class b/idl/Security/.class/org/omg/CSIIOP/ServiceConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..d71a276707ae9ee32b25cd6bb857cf6c35bb27f6 GIT binary patch literal 301 zcmX|+%}N6?6ot>7>2z#6+SZ>{H;S8f5CX16a7Gsc!ia@#x=L#tQrbkuSnOlDD1r+g zz=slVP~4o8-0y^Q^Y#7l3E&(@ZA9p{&_K^iKgNEHgBXW|=JUol`AVRI&@ghP2*EUC zaG{NMmxORQnlQ@k1Ec1!m}a9%f)0`dF?JHP&?cPPx)OF(iF{lX<((L-dadUwx8_k- zFST^q8bWU&*HSE{sYE$jsJSB?|3576vn%mrYbR$*C5r3Y8{@Rw;Dk4hz|{y?xsty` szLniicoWuLzV+FOJxbp}Z+!5<4)*@=fa4+0x*n&4ErRrHi|{vyA3|I-kpKVy literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHelper.class b/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e26b08c0ef520cbbee2564e6216c8d830a2b24fc GIT binary patch literal 2446 zcma)8ZBrXn6n-vA*ksw*Kwm6a&{Dx^!c41A@}aydtRP%&U4P@?|*;)6Tq8zC}I-tiqNmTf>?VKuLPQQ<^4G5fd@Uf)5Xf8mHI3nNrfQZF z)k-OmTD!lvkXWbFRJEuj83yNdL$_`*_@c2520uThEnhVY3>Tv@k0z;eCEeK7Op75I z_1rHQ`^oN6Hl1F(m&j^nLs!Y6v89*lref(;Bgvf!+MZ=9D%qJk&5q0W{}^HjXDvnD zSygK5N};S#mI;3=?y(d2U6BvyMTQF`v8^wmD_&T&s%dd2 ziL_CxTO_V2mE>7*1|FEYMaf<5Yjv$|bZl~lqON)o<>&Tzh)t~-0GR^!!_u#FuFZ{r;a*YGOC zSjV-^H%e4pwN|xCK{JUxyZeTv>`BB|;q@DQQ-|X6hB)(i>XdQW<8wDRP9p zU|cg~DSC2xcs;gft>>Ib%MIB%k9Okdsdl!esrr_#-le8kZWGDL80Csu%Ep~L4Mdl3 zR9`;SavuM5-04a82y3OO4Vq!HgRO5R7(_lV+c~E%Nt%Jt&&}h$+R0dsm_NXmZg2KV zyXPXqkUdA+-u%%t|CY$!;&lk>R!-&?V;laf^iiFp?>6D)e?;h{tUh+2p;?be?~rp*u>BQX$Tl6>>TY3=?3AOpnnw! zj-TeGV>w4s9R1Q`NPppG;17gXWZyBunS35hzL8va8~x)rz1_Ax8Iw%(8R@& zOXTpy-yo4b53l7b0QL`VlOr0(j-zw78^AYmxt#|30yvk`6djLm>=>h)M;Ob*$?8i_ yaV0J{G5!=2@wUzlyzA(UJ37O1{0Xic;$^;1H1SF+eL=j}QzEjC03)ESYy1a>ZGQ^@ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHolder.class b/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8093d90bf3ae4fabf04e2c96e6d9db60231d1d6c GIT binary patch literal 838 zcma)4%TB^T6g>kim0A@PQ1OY62xZae7Gt7pBx*2X+>!#dDJgB!3>g1P6OF`$AK*tB zXP^j}XqriHruUw6A7}38*ZT*6BkakLkd7mUjErThaI?xyR>GQubqN~;Vo$fb2EqQN z>zkU}F|~57QmI~RHN)>&O{45O_mWw1_(Gh+1z-=e>&OjD{|I?WO5^wDFKY`!q= zY{0o?e%^FR!7LO7amW%j6>MQ!K@K|#c99||gplLhwOfWykZ9{YU9)w^)T)iP(WC^q zANq8o!?F07Axjvx$4dx9(JsP?HXixkw-f_iul~$BrE93HgQeiwdeluzvLjoyy_dsGjm`No)5wqMA!jj9#)I5h>S1`NCcR4fQhTcKB5zlBo==| bis}m@eF&p0OGpI}o{g|dLLcH2Zv*%SR9epM literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHelper.class b/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c426690dfb9fecdc8f43145593c404838a022c65 GIT binary patch literal 2317 zcmb7F-%}e^6#i~@VUy(|5L#_9Q0Om{UCXvqttCJOS|t*i+8|o1#wBdyV!DZ&4Yu$7 zC;IA3U#U82rjAVeg zV;8Ef>DeVGDPB{od!B3N2`G6OP@*>^hQX|7=D%Ar%j@Q5(V{4l2My214tUV!d&u5m zI6@lR=8kC;O{ZXFJ=b;$k2;Q*uZBD z!&b%c?5&_~D7ze=;}*vk!j;ih+^*frTV;_~j@$T><87SdcoQ*>NlYpDiX)B$$JfYl zXwa!74=V~mgX0^R3`Xi|dX_47TCiV!HS^gE)8`dza^yiNJJo}~f*{q&9gYIN%wm;Z8_iQwcvj999g?f~Eh0E{&XOiddn-`@ znz8Ag^_3t8(cr0y^?lWH@>b5vGhB?PS`%phyz8XUHVlRWD6?pr6(46KesC}xa?_;S z^HV4Hn;aGg22~88T(wwo3jT0TF|2k?V|xVKeC!@TnsBW?@rgHCw2vQ#0e@V*pH=l7?&`yh8di zSxpkuk@?tfIGUCg#$!KXSRdEwcs=_-Vvqj)OK;&1BJ=`W!8BukQ-C8h1J4Iwmk3NE zu$ZRr)$oQiAJg{;Nz-F9bsT#TBBVb>02@Rj2>pXFfkesw3;S|LI_P8MStH!|4==!C AVE_OC literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHolder.class b/idl/Security/.class/org/omg/CSIIOP/ServiceConfigurationListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3fcf0625c541fc67ae043fd968d5e24fc7847d6d GIT binary patch literal 899 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 YhSZ1rlW7s@2obM|dgMNoM^Ogw4L!`7>;M1& literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/SimpleDelegation.class b/idl/Security/.class/org/omg/CSIIOP/SimpleDelegation.class new file mode 100644 index 0000000000000000000000000000000000000000..4d80246f57a8569a963c515c9d48ff51264e871d GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g zeo?x9er~$HbFinUe}I07qkDX?t22-ZqT)k>9Q}eB83eKt%M$f-67$ma{gbj%lS|lu bMlvt~jbLPuWMF1s0n)5M9uor_kYoS=^QIi< literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/TAG_TLS_SEC_TRANS.class b/idl/Security/.class/org/omg/CSIIOP/TAG_TLS_SEC_TRANS.class new file mode 100644 index 0000000000000000000000000000000000000000..15d612f1542fb7ee251878949942a2eb670d8be4 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g(4rsE zkBaWgC}`8>oO{o`hjY2_AFpo!&Tvpf9@PSJ*w(P4p=M&&#GZ+LLRrZq@YN_?E*5d3 zQUZCuYT`dE!^CH`ASV+pQe7Y4b>k!u@jMW1&vkpZVvxuv)qZEabxz1%gi)w22}ZLu zBxKw1#3!6IJ@0>aYiOZ_EejhcSSV`Pghiux7fp?bm*KO_%=34@UX`E8^#znEj0Gpz7EjAibs%*33t jUqH`XXhR8=?{S0Iv#izh*gjk#W7k(O?9&yp>ur1jXE9cQ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHelper.class b/idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..807fa37249f4a57d0944e0a706e9c4bddcfee5a2 GIT binary patch literal 2552 zcma)7Yf~Fl7=8{(*koDc(u)NP77CSYlu%o1C0K<(lC0@MNW$)hQg2oJ zEBXui6>AF_8J+f%GyWxK9N)89Hk%N{4>{-LocHp)&wJUw{`u_>0B_@wh#|y8OyGS1 zw?z2xfrt+=DPT%OE8-!#nHDg^FK>&ujE_RJ%nFzbVm^cgB)IOPh<4lwA{oSzh>x+% zB~yG!2k{A)SP9}&0iTKJ<=$3tH$Uv%yehG0k(%xf;J+ZdvS%$MDv7zp$(Y#v7MN^ic7jhJm-_TTgoo>WaDjF7d z5}hlQ$`*-h>Q?MjfPwplZV`{SPc)Y-TQz&9GZvi4vJx~z7zW+MHeqVE zn9phk*Z5jMPQpFt44s-8we+l036w7h8`zYP#}>nx8Z$Gy8LedL#e#$aiV|+%T?xau z!qDsbw2O&2DQB!jZEIaK7&d0x?r1#2%zY{ z!M76T@tuSuUvA)g2}}4vz(WZ?;wK3=@$+d!YxxonzOzPOa(zSN1>WWQx5=V~YK>=- zVZc)yO~Bcm(x6W1B9qnbQ>w+ti<9As$CmBLt=pQEZLr&Ey*lmTV_nlso#x4onlF>L z{{Jpms-q0`iKQtzZyLq4yM}}GG)_HAZ+B6T){~ZwFX#no&XBdKl+AloRt)EB5Nu0T z8EWKCUVSA)-_k98M^h{sgJX^4IKqu+Jfni4-!#&j{H)OLNb^~z| zY^Vj3b30kB_k?a*vq#0_a7JuVKiR<7nxQy`YpnqQ!F3zbJF2QY9ijG?^ohA(XybFy zWt~0}DF#Nr*+x#?it(m0?7`NY0m|6m{}H=!zK1Zk8x&z<%o;IE)%&wdTz zO}yp2_P~!8x^0&a;aiOyz`u_`)kp}Vh&o~k+PRo4zeMX}^vf^Mx(^`{c?sWRv_)RP z_YA?kC-5iaeTWsb?U9CnJ`C7s$4EB_U;mVVs~kU#TgUP?NpbXdpF;W*sn*}oz99P! z(Z1UK3L$=qj(v2p19YWizkS=?a2v31&s1>Mma5=f1?Rh8B^Vceg+x|)(A1H%2EhKt z3c05l@3`-NEZYfb@`x literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHolder.class b/idl/Security/.class/org/omg/CSIIOP/TLS_SEC_TRANSHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..348cb17192b7916a2975d4461654db5cc14d5887 GIT binary patch literal 796 zcmah{T}uK%6g{J^o3@pfTG^)-*-_`32@Zo05e>kPSP<*j;9--8xQHzg+ah)tgq~(}b%x!N zX*XoE-H;1Pu~@#9t0hHME(>b4lD|=M4F1z*r|FzAcvI;+24BIf6D^UN&*M-*wRNq| za5RA}SI+aYW!jEbGjzGwvAT}p5Uic!48QtdHyx5s&7_pO&NN3*okxo(@l<-;(%_gX z<$1R`35$><1P~OlD`5}&5)w#CI6#CUInRJ=)2QnGuv<@WY!P zYB&#{?>}wbu(-BwXw${anWt2?kI?{a8AWA?gr>{Pr-dZ<^zc10oyL9=tjbiMV5TbYD@fi z=*K5~{K$`_f@Kx`9O_f71Zeje?>^_$YMj_Y=fe^J88XW8wFFsz^24Icvs>It_lp)!#cG^ zBeC6Pm3!bE{V6p3!;RpL9AhA=LvlWq{C)`F3+P!hNn zpG!9e~3LeJEMJGl8p3mCzoY(;qD!=wirgwe3>X`r~>O7;AFp#HyES zL(6d(bQ|u7_2{uiX=hG@WLwLXDcbP=7AO@>n!3Z*QwFz6s^s(v<7{e|qd=Q`iaPTs zb<42@!=yS5*jwz2+En0t1BK(MszdGDlhy51(K7OeZEWi)J1sET%8#quil%8m%!Q7R zhSrF+0oo#`3S~zQ;f%Ok+Mo(2U@j+=0X2sMY^`0CMkUeh@km;02|(g{cQp^7Di1YO z0wYIRtlw%A*8*KU?dq%sk7r#|sii@0L{dP|@5%}Oo2Qw8bf#ZDLSLJd`7LnOYEitQ z!GX6V`Yx z1Oq(53pFxmfV+odlp|+3aESiZeGDWbYbx?y0+!;qOLnew_9Kco;5p7e$L>}WbYXQB}*q}Iy09l&{EAY zG@api0$#bjD5|1{RyPf`+_8JS$_dsk2u85>=rlQ1$jqcvdVHEA)%cT5lw>A5?#eB5 zM{&_`LBS#v1tElG>?+v9zJe4E6dWSPa5Tq;E6dakhau9^`kHELorYSew~Pl)7XDJF z=NgVAM*N4oVcJ4IFf{9O=HydmjYpmN?wzz<~!#ZdqN literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/CSIIOP/TransportAddressListHelper.class b/idl/Security/.class/org/omg/CSIIOP/TransportAddressListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2d530f0e499834edad31592b1be9f51d1311fbd6 GIT binary patch literal 2261 zcma)7-*XdH6#i~@+fBB&woO5yrlll<#UmXWMce5mEnoRm~@7;UO`R;dq?w>Dz-3PFMT@@2pP;mk8 zDtJ$Yg!fe};-Z2}Dh9C>qML+*WpTNp;v`l>v|JXa4^*sSU6^i&&nrP(6(1i4aZSZ0 zk_xU1jTud2Xy4@({%>={XvSnND zDuWb_Z8ON?nzn4o*(a5*bOAsABAB!;~Kf|ZW`q+W2b0R^oV)GpCpb7U~X5NqbTd-PLQ#oa6w^QI#Vw-kKBv5ij|M$Jmx zweo(AP$oG(!yS&#g$v`YSY3UPGs~`3vN`VJ3y!z(4#%5_a7<%H!IvCS#5le}mP3P1 zq3$dIL4o6I7z}#yN@|HJb6&9C=*@WP{QNluI~+MsdQSE6QIMi~_=cl^Z#m+yju;oS zST-FBMa$dt&aNq{bhdw17{;2sygs9aDoP}YVJ_MqK%}(;g3>^Djeg5E%1)Fa!`Ys- z)Y9@AE$lbi0qeO#{n0G&Hgl@n`$n-!uZ`!Z;9WCoiR#Z*yz&qFFsNd%WUIxJUGRo&lHpp<6t+jN&ByM+qp5Ye2ZQ#p!Z75Gp;sK_Xj0T$vL}gl z<3uY1JxIj11kW*R>Y8^v+WT6nt8ISE*vJFC-T37Iv;7_B>N4`V^1p6~Tf&YQYI) zUaMi`1|91d4UZ9E_-AmE3;NU^v`S#p1VeMshZ*reNDv->0)$w}fk;I<-_qX1{A4cFMxPp1c{-FSeXx5$c!4?TjBCv?2@7M5# tv=Y(x2}#o<3w4}$6dK40Gf9OEF2Da2(gg&<=&j1{bkuqMK~j13u^G7=0@Pq(@z z!_Lix?bI~8S<`Z*LZNu6l^wm+Y1fP$yD~T|UZ@D*V1plvOo3 zCR3)os5qlQL4+aU(XfIrre$m?*v5{6UF<2?M~orqLASu+j%XdH zz!0L334>`{B|6bWD9+Gr1wJ|fk<<%V%Krx6GyIQ~zyLPu!r}z;Q7$}yrT<`}m~$~P o7ZXaQ`w0Aj%wu63l1@Fr--qz)K*PZ{B0{G$nJgbOsnleg z+&Ch%=IL`P7ip2nWH#6L{B-XxH%e|Vhtl<>vxS!9tI2g?bNhl*-aP;zgvZD={6lh0 y-^^vqHCA{F#$CR(nTfd`zky!);06Smzjlw~K5JcP$43=v@o@z&KB?gUr11sR**K~I literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SSLIOP/SSLHelper.class b/idl/Security/.class/org/omg/SSLIOP/SSLHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a35aaf941274b88c765af51b59b915a92c2947be GIT binary patch literal 2177 zcmZ`)Yf~Fl7=8}9Y_e=5r1Sz7EL3W;Q9|pTV3kX4kzi_rXr!7h$(khDAWlZBU8J}Z8LRy9oi!#2z zZ3$n>2;!?Sah4=33+9T9Ygi4_b4SA0A>0k)9@d2IH!>nv4gEo^#dyMFN#?@Hs5NzyGpKQoe5v*{-DTx+nYHZw z6p^&>E$N5c)QV)57-Z&#>ak;pA0tcqSsZxvQI?1-U>*c(f zgcgexs{sn$#jJ#%75suYb*$4cw-)#6m6C1>y@G^C3N%oMqIxsMjgr$>s=k6EN(yxR z%5cHW{mx-gZ*ZetQ&7fZ1s~!g1v9wLFwu!*j|OGkD)J4zx}%#6BV04fIxjR^4N;t? z1Vh0t_7qf56;Nufj;TLs8K&N(`U+hI?;)<>CT`JeQ5Fj7Xi&Jd)yx7-;+zQUCbw{N zZk{35!Qu)eJW*hxso*ZiXGT05;1XI2_Hi({QhKE!&_~_;vpc)Gn7q+W1Up+AXM!sl zz;M~^q#NEET#pe|nHg*Msf8J5a8c3Vhn>9k7ie>3-Kf#7g!x{f)qG5SWw_K0YLt7 z=yc8f@myldKTW?5)AaMhAd8KruP}YnHKF$g{WnUK5e=xvV87D`NRf8a5l1Z{;6K68 zktGcy0o9R?!;c~2M$}XI^2uZP+X&cB!bswMM=e8CsHy531fO9_eT`rnQYQHZzGoOt zzJ~85LPx*BpHbV8PcVE$77`{2xj_2?*@oboT9z;;@TV~Ecs?L4f&S5RD1Rd#{1cIN z)pv?WKK2$NevXkgqU;!>In{4*V;*k6;$G<7s75(P&LUU}_ zGn$sERr}7st9u0Nm3T*_@!)nmB2^Z)=mRgTc_B%_q3{V$}bz92M$FlE_5(uZ(1 NMmq^3h);YB;2RRcqptt} literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SSLIOP/TAG_SSL_SEC_TRANS.class b/idl/Security/.class/org/omg/SSLIOP/TAG_SSL_SEC_TRANS.class new file mode 100644 index 0000000000000000000000000000000000000000..d41ca57c946efdc681fe2a78a059947aa4ec7e8a GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_*yICZI;3 TJ_cq679hR%&ty8_+NY YCZJ|U21y2H1{NUA3Nng;4M;Ko0E1H;>Hq)$ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AssociationOptionsHelper.class b/idl/Security/.class/org/omg/Security/AssociationOptionsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c16b47c8b72d5552d52d7754f1431b51b5770550 GIT binary patch literal 1763 zcmaJ>ZBrXn6n-vw*<`s0gtnAYsTA8LLD{yxRf1KZRglzZgJ^wQm#`DJ4M}EmgXO36 z7x;w_TAh^98K?c^j6cfpxtj%&1^VUQ-E+=!?sLw4&i(hlKmP`B6PqT+F=xWUbptm{ z#BkHZTX@^RJ0_BNH%-fX25xEN`zFp|KFy_&#sWUjsN351p<$T=43ix-AgP<~9W4+RV*v z_?rS}v$+V8a1HY6E!S59qLh8SouzcG3QQ-$(03$%F3xcy5}_4oz0rd za(Ql-?}cOM_Anmswgk>F;-RzSST(0!waUu(>Qxep`>sRpwdj$}hOhJ?)@r@kRt$HY z?Skfz_}TXq3(lR2D7DoQBq%MlP^kq?lemCM1D{H)VM<`4zscpFc<4%_w&nUduxQ|( z#Ahf8jJPdJd0XLSuw@dT;|q!VAfvIPvhF^vxJ~6X>JsbtQX+@E#Cc2@*pT=NUrRi| zHxjR6O5z%_0-42Dt5NYBjVT4lmc+OCPGENRPH~05&zQWLsu(c^Z?#fA2r0A(jDZM4O$wBU`vSVip=ib zmcBiKtEXPmQB*<8FB8hI4}ImBtPXY21E(lNA_N9P1fg!#df@sgu1_d`xafW(rvQ6rPe2B<8bagK zeEr7xnhKbDCis=+HwTjIMgEO)7u*y1XAr;f0}SM-gzk~R3B>m?@N3{r;}TvAy%UII zfYzb>Ux+=Je1>=jiEffKrg1q8D{|Li`TPqcpI|Eg9LWxh;_M5=o?vkHIbwexwf76+ z#e4_mJ_h%QFi2xMU^_!>3bCmr1FviTS8z4Ve2WA$` Z4oK!FJ2=~|K7}{?I;=4XK_Xo@{s-ckryKwP literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AssociationStatus.class b/idl/Security/.class/org/omg/Security/AssociationStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..8de2b84f409e27f1b8b11555244b18f9ab8404b8 GIT binary patch literal 941 zcma)5+iuf95Iq|^*E+O;Q0R@ep)?nuhVn>-)P^EON>!;rk$8$+*F-Lk9mSi7{u1IL zluHpvd;lMXIO{r91P}1wGqW?EGiS!@pTEBS0I-cGS!7UFP*G4-P|G2Q`#E|K6g*60 zOIb6GM`=73nCrA0dp8UNyEU|JCkzEdLm*!d{7_oHY+K&Y(MS)0*}q=hXa<9>8T7g) zQ^SEP&&-I+wWJ&PEosSN_;k9-3(NI}gNRT}5yoMG!j&8fkgk8(J3)#`?@3%B)fp*q z0?F8Fl`5s{_27iT%$tuYC|4TQ{}Y<0Wc$s5)qiOndn8HixV|f&k(3l|fti70 zog6t~;Ek9qR;tZYYh;<8<#)})<5S0$oHn=r)^_@80bv^3RI+1xF%1>A4ctcFz#Iw& ziVAKiSjDD+1uPm^#)?4c-+NUxYh28q3Ix_B#r4CZyu7bE)!7U?r+@ zgIIM-a~^*_Y=@@0aVj?$`eF@5{dcT!gLS1TL!h03XWuNJR=C ztM~+;%DAK=gQYA5yw>p*96j+3a+atr^OkLR$Q-PxZ4e5ZT-&bim^e`HMh=744GxyvHi;oseECR zK@wuRYOc4%Fq1C~c#^wtvYj^fe1@g`fPTf+zLF~-!WF&ZP&6*-*%mNWYuy#Up!)zomSwJIXAaU2c(()nKD6{t&9X+5Bvo6pgB~Q zt!7w24YN2Y8ot4O4G-{; z;YgCJt4}T767|&ZExyxm4vQMz!MlWz7)1$Xm>?2i3seKk;_Y^yG<=U5gI>N;S)#sP6yc5zb?L(5c^N-wFtH`W(ohHCKM+42 zX=vcbgC&eNTin|h;riBNE*f~Mm+ol3XiBJyL|qupCIuf&Fr0@05K2A)N0U~InoTqx z!$N`>J-64FiB$-giwA6<_nD!oc#}Krjwfa_pw~_xq!p<*ESd(N*K9EwwRSigf@(4z z16=!Oh~aST&YfVp=35N6^TU%lEO|IA8ho&C=I8fUX)o?RDhydM{I#a*G{T)&X4rEZ zT|Wlpk>_qx^kK!z35n4@v}jI^Ak@DK7}Rie#FV6bxv(kC(VxHx`dcBTm^%8((l>1Y zI^UyTQ*<-B)A|drU+Dv6Nb?k{CqpG5buqRZYO^?n)3Np#B#e=CT>k^9`^6WKI!H$# zS)9Q_Y*wLLnCbd!WS(JGe}zm3a;5khsb@G;e1+6=D7(Kvs^}f4T^!ma51H7`g>27~ zuY%Ol{@icS{>DP)PmJHxQ@O)cUCK>V^>l8s+Qn2Cx!e&#p8g#g z8HzY)+UQJy6$pQac634bUk}`H=?8?|I~_! z?KD-p-Bhc3-E|D!SBu@QT{kpt*jANm-0c<^g6D>1@CyciCVS5iDA^4npJWzc3xZU0 zbgePPC{=DRi)zPqxb|S`>b2Ezd6g5aT@Z|5?UA}6k<5?C45i}oX^vFm{SHx*ne3#o z5$BHLqUVBwWhe?l2+P=4aDYPvDI6&{MvS!nH{;4S8@j^~X=y!8H8rcLRvubt<8 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeListHelper.class b/idl/Security/.class/org/omg/Security/AttributeListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..295254ee27827453aed2b7e85b7c4d0106068e06 GIT binary patch literal 2219 zcma)7-*XdH6#i~D?Izn>+oqsUlhQ)LWTOof0cqM|TMCT?tE5&DHEz;t+!~U&*&u!A zpWxLOUW+;*gJTDtobj*GSI0rm-E1~#nofM#y?f6+-~G;ae(WEwp6>&g!;Xdt%xSoY zcU4@{py0BGD|k=ERSkof57JIj#e&>i)Nm3@L3&)1tM@f5V@0~I%FpWotjUiX0o>HE zj+BZIGAF9|;@e#v7*50iMh7;+sRY;WY7ZR%*cUG1Yo3y)H-WExQ!3DEq z+Di;dG`7Xym)rEpmaQDa@o22elia0~S*i-lX1E;fvM-l*llQ#6jL6q4)80+cV%fGW zGgq@kQr@GAhqh(p3F1;Oh*&=ihT)8D>Rk8<7*fU=Tg_x^Hhbil4)<2^A~2%tH^QWL79jg3aPV@Bn?XZHyj0g%aMTDUj$LC z2#exwhqjU15wZ@a`f1NF)}qtwBI*UI8JP-(GtqwTGId=5q&Mv~dnwy2D_LeF)REQF zKIODg$Zewo-e(WhzgNH=?o^u(jAD&$8_!cg+ahbq>dsc3@|GOBd*4IpYy%3trHYr) z&Lpk7iig}ws^a^aDCI@g&NEz$ro36vHJQ3E?`Yu>7s@D_M%BUDiXLv~9y=|f|NpAf z2VHt8z@W*ok*yWWrGhg?Qw(cICa_bxc8ooxqlx5c+obH>-#IiGhMXbOV&IRaWUbvi zl0v6*($l{;h1iyVn*KQx^beyzWy{klNNXBB^gKmhWAtY99?+kGJ*5TcAdLmrJn9$$ ze*?Zf#~Q?GoN=uu;fIfQhxK2f+>Jkjzm9<>NDwnP>mEzfTOQN(ml%AEN&N)|>rm72 zmrx#KDEg@c&(0+TeNIoG&Dwlp`XFYF6mQa&{F}MA{ZKVF3gAnLWal-oWdbM+$rL?_cpY{xE#6z*WpL_BRO}q~Uhn1-n9E3W0_7 y_x14}8 zWUkL#zizs>b@PH(1K$>p(kTkz+m%4@0z+)yZrI|0K{2vd4ACREM#K$c7*m4Pvd^s= z!;aA{b5uG%ESjF{3#;OA^R(dw;zAJYwjdd?@&h$N1&o1|QXqOcYFRvbL|HJhePu2w zF8eL$&@sla{O_)tXQt5G*g zl^b3a3~L=`-`MSmr2@mVbH|g}qirdV2kO!z<*@D0ZbG3?1}5wgdRW5NZOA=fmrid4 z3~~CHl$0)0C66{hcAQ@Gh>!=2<=((@$_FB^P@XA(7HlGfr3n_HSfT~X|H33O8Ddf) nCZ5YT5&Z?3!gN0*pL>DQgxaYzgH#Af(qA?dZ6fw0+W>w5D+Sa0 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeSet.class b/idl/Security/.class/org/omg/Security/AttributeSet.class new file mode 100644 index 0000000000000000000000000000000000000000..8bc6863b759ace5ccf1c270d1cba880cfa141870 GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&tyP!A&m Y6HqfFgCqkp0}GI51@f2}*nlJh0F5*q761SM literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeType.class b/idl/Security/.class/org/omg/Security/AttributeType.class new file mode 100644 index 0000000000000000000000000000000000000000..7cb4841658129c4abc5af22121e74c0a2a8e641d GIT binary patch literal 382 zcma)2O-sW-6r9&I#;sPR10CKvr@qmoA*#_DQmIwjP98%;h_1PTaiXFAd5oM5%uBSN{C-m`Mt z`p1hwd*q@9*M)<17Zp?q`+tITS7~pTGrfs?k|LH#B!=NcjSb;o)zceZUv$MR&5Y#S zBDfs%6T_duA+Nv&hee5zr}2)c7|2{yI0WMc- literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeTypeHelper.class b/idl/Security/.class/org/omg/Security/AttributeTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..566b678b52200b0f7a18bd0cc5203a8256aebf78 GIT binary patch literal 2507 zcma)8TUQ%Z6#foLm}D4QNNFutVhb$|6D3qFDxtNMi$sEGK@?HrBuwK#ZVo3Dy!ChV z7x;>`g)CX^YM)%ozvNmj_nAuuhD7?n%*j6c^6hV5hQI&)^ErUG@leJ9K9Dhvl!OTx z0o;;t8y`xzBcmOY5t7`MFeQZ3GOl1ILXTMqAB8a|BaM$`bYeb?Oau$~L^xU$YM+Y7 zXJOnElBF<~C44TUSAzs(Sc53eu;g_vI1ikV|LA0PHvlDRN4%3He08OGwi z`^oZdsv%m^^EK1pyU9t;O(R$1x(J*SaU^|*n_8Y++-&B;3){j6L+29L@|z1?5 zb>fy#+u8P=Kz$_NHe;Qkhcq^{Z7o^U%7x?-fh!j%t)QuEbUW)uRIQj?1WBgL)fy*t zT`Q$t0b=L@WlwC*wRE^xfJ6tbs8I(lX*v)q7Z$7syIPfkrFt}I@9+<=bB)VxuqWf10@ z*;=tuE-+m1Sua~Ev^Tm6I?q;3qhxSnThH=5!>GR;j|0) zfzjW5OSGpfQGef9)gEktLCKFi30@p5we{`@Fw1J z)H3uIYO4AY?T-*sU!Z*-QYP^dfk)^_yg=Xy!h63Vm{Ip3*U_;@783diyFfcawqXQf z^e;(L;HRbRcwQqdfqwcil)rE*^bDQzYTyu^tI;!coMi{-T2h17?{3QAF{1l8XG!bm zspEX~0tI~S4=7|W(z9cQ!2ZD<3PcOt33S#90|cTMT^i`S;#>|v;VsE+xo&|5L;guFV+Ub8Pw@n{GAn1efY~L%d`AxNOrG#{0)gMBWi%1k}F9e|z$u AG5`Po literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeTypeHolder.class b/idl/Security/.class/org/omg/Security/AttributeTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a286c482d856efa3b2426de10b7cc2270e6699cb GIT binary patch literal 808 zcmah{ZA-#X7(G`vmur=lTG^YXkj@XIz8ZlEVGsxzeU+&fQKlQ?&hTFq6iFZY0sW}x zUY(YL$=GGP&pGFL&bjyN`{NV91+pp>#KQ<7p<)+%V%Zls*NsfGJ^D!xnOJJ zNH|=rPAx~MOOvQ>minHHYG!olxygQzm8F7nL9P-UpS{Q#=lp6ZAXwus5s~t1C-X0! zFkd(LUvymIyZSrG3*W%Fyy=${2=E6`MOiPrAuz>kA>w1=J|?UeMhO0aM6taHDd?{V Xj37-_b`bL+LXGfF(g^ai7z6kL!!XA~ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeTypeListHelper.class b/idl/Security/.class/org/omg/Security/AttributeTypeListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d580dae1c5ebedfcad6aa702ce48e293abc909b5 GIT binary patch literal 2245 zcma)7TXz#x6#h;o?IhDv+oqsU)7n6RWTFierP8#;wpPl>rZr6(2BF-?lXckO+ znL!ChwivwfnqKLmm0>s5`5JR|8=kA$Lnq_;vnBNwbwA)ni8OIhrXBZXbm~C#m z?LkH4_yV^%zLWusw-R;bepZxhvsmD`gReN=#d{oYBgiq0kczK4!iaEugEWVZD8tx+ z%1i$o-@;(f6PJ?<)RD82ac{N@=Vs5U$Z%vqb(wl~c#;qG!FL=ve9sYs`Fa@<`I4|G z39UFcGCM-{W~gs9D8vS-`fSmJP#?+SFwBJe+RJKoAW-`0u0CSvdaudeV>sQjgIZe7 za0T4qI$(Y3&`>nHy3L&W^`4Qhkhk$Hb-69lrfm6i+39)7p>riPQQBvNVsE6SdvVv@ zqz7CtW$|N06tW_1XBp0i6U`mcv9UV6w+;4)3uWX@qwL^pg%1yTmzxID*LQW|ph>qB zFlcg_q$~MiA?K{u1jE&y6>LvlE5`1*qeXSH2Z8og!Z75lo(2VPI3c@jy(fou<9M?G zJvcj|R zoWMy}dK_MO=yq6t3gve6F}zg_)It21!6{cQNpGp9>(4Rx5L5ay3|65gqtBr{#8C7Z zl;7dodjxM%uR^O~XpbyZVi|JSo+eu#l&Mt}XC!~xUoP@RA|Tn%{0jajCTkd0YIviH zksEZZVKgvCfPvq@NiONrY|v8yn3hj)nxKv>1^>X& zq_R92{28OsNxgLDBE&O44UVy8ZW$a%{u%EWvSr=@cz!U-t>e2lw-cpu= r(S1VFqrtfvjy>=Y(%&+Hb)tTF{)3M|0u=wb12rQZ3^0nUo^HGZ(j89h literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AttributeTypeListHolder.class b/idl/Security/.class/org/omg/Security/AttributeTypeListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..eb47e1495ba0223db7207164ef28e112839710d8 GIT binary patch literal 864 zcma)4T}uK%6g{J^tG1PWXlb98)v6Cmy&6IJP(dJ6^wNW@I>^T6$~If{uL_DJs2|Xe zitgwZDyTi|-I?K>Ip>}`U*GSa0QRsQLj*|`3sI<8j3I@zEK9O1t5{L7s$z{nxi@W( zGi0vM9JgUOw+-Wh*F4t}kH(=8u2uB}zkF=*B13rJYFgreA*koB7(ykdPRy)6mMYOo z#pPz5VMqTHDwWTV4vm)M3bSf+LT!Yfqz&K)z!}-^ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditAll.class b/idl/Security/.class/org/omg/Security/AuditAll.class new file mode 100644 index 0000000000000000000000000000000000000000..9e5bbcf67e2eaedf09fb1b4a3c768d5072bc0540 GIT binary patch literal 126 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_*yICWt-; RW(F1@j}^#cVqgOq1_0ZM8%6*C literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditAuthorization.class b/idl/Security/.class/org/omg/Security/AuditAuthorization.class new file mode 100644 index 0000000000000000000000000000000000000000..7bfbc57fedb67e87c7d70d677c49d93ebcc18385 GIT binary patch literal 136 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gsQIW_}(cgFsedS)zVUVqUtwe^ORz eatRyINCqaL5sVCy49pBHK$;cEV`5+fk_-T!IUlP4 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditChannelIdHelper.class b/idl/Security/.class/org/omg/Security/AuditChannelIdHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6e10c7d08ab1cf2c9aa6c55f76dc4881ed26cf1a GIT binary patch literal 1746 zcmaJ>ZC4XV6n=)hY_bdjK}AJTL^KI4>r3kkK`lgEQleO)wDxVgBy-~GvdLK{C_lwt z;1@plb^@n8r$;||PJdKS@9b_QS->wdyZ7Gb&U5cPcmDnFuYUks#;T5COzALiQNtx2 zF7eNwSfoykOc#>f_8}ZM&n}w1}q>1O!vnmvGbibG!vFlrsR^{nEtFdgYI)cij za|6C7_MF?nxW}$C9HxjT)`n#`mRmEHq-VP|A{O_AMcxb1BO7&3szZ#D+h|G(7uH%q zaY#J#Y)J*@4n!Dg)lVsQOQO=Gf;Wxs(CJH4B*fo2{(!0B zPYw%ZhKY7P2cYJK(-0mNw99#M^@&h-KG=o^dLz})-Kd_?mi3z$iJ&$RDv*^K+>g31 zhVutr%x+Xc2`&=~t_wY}M@XNP&;chIY*`$r zQ>4u9(wB=1wo8&s$){%1sk=2Ah{((YA*9}cnviD0v)62CZwOOX7%oQ34}+s*I_9H4 zc6w!~#p4IyI%kcc*PqP*86Ts^ zZkQfV%BO~azS8tf^GEAR`WvL3(Voa}gT1B?P$11l=pOK$Kzs*1uY7MBr*S6q9!DHK zWbMoUjo71+ZNyth1WD2u!`U#bOuGup=RY9%0;Bo&NVcGrCqE$e0=<*(5qpQ!)=R|8 z`4;pY^llMCBN}5q+i}9C5F4G-a8B``!1*xqbt0hHkG}!`h?7L}4fL9H#u+x-Jdl#T3EGPYQ)51Qr$A@2o(&J5yu=MsjMEDy8U+aKL2dWfYFO zULXZ_D$VNu5a-*{>A!mJjE|h2Pl)uM7kKgsAqmhCScqI_aOh4#f5vK|Qf(bOGspIw zU}zuoj=2x2&+WhNyJP8bA13Zo$6nu0V5qNSp#aOm5|%AoRb~Sv3)iq};W~-}+y7dS z>e%Ex{7HSOwQ+Fxv~G{XNUAyP=Cjs*Ah~OSt+>kz6S-~4iAKK!;}&l^%ZtmwKoJYD z=;yip6c!m%GyNh~F6FN<<{0rm9E_*I9*#r1#%P77P}$lCh_`e=0uGv#A1CGA^*3>? zOq+^5a7^`vfSadC%}=4t#XQce(;Cn=H4VDjMFO?TM%9|Dok6c{e1v$%NI`7j1}jQU vA)(9EKEe2mv;rgnKb@6rWVnG+f>%cTim~<;<_ql%nfFL3SC3uo2ROb1%4DR6 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditCombinatorHelper.class b/idl/Security/.class/org/omg/Security/AuditCombinatorHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a9cbf3f503ec7fa55fc2e497ada36da175133998 GIT binary patch literal 1990 zcma)7>vGdZ6#h20BUvaUF-d{YrZ^Dl$ZZ5IEf5E&6KG>FO~E0Q($>iG;t|M_N0BLc z6rP}e)5{o7JMF-)&h()=JuAtPW8-Q5?5@t`+wa^~|NQ&=UjRNvL%|#_D0KQn!bJrM ze5&9xT#|5E!8op@NwOlLAcU(5PU32smTMBO%lKSIQHa*WvM%F>fVnB-3k6?dLqQ3* z#By6f8FwUnC1H~xRrPmUoZ&>-^%}a{Z0PHo_tuK~7D?CLIxjGcuUd}fUt>t*mbMv^ zLQGrL^=b^WxupS5au-gPv%@`~;c{+3Uvzd0`=Sar+n(j`>cw{5^4HyF&2kLi^$Ox9 ziNEkY!z7SPZv%-h9*M#*QSlA)*&U;`Wz=j=nIq<5#B)Q;`(hrm>I^ev@zi*3=(gcB z^os9UPDA*6+#v17Ag7k=`Qj428+8Fn{7YFJY4qVRnra% zr{X=#OZZyFU1S-~^$I;IYa6az=brGoC!wNZ3-=kO_>S&d^{6|jhAOu4K*cwB$Z#yq z(#;npZ~2z%sQ4C-RD6h!RGh-Qgb*8rsbrWW3PszlaGRS{^c{wyLgMW9Bq~lLt3pGb zj0ajo#dr9gAy>LlUZK8S7GaGFY30K5c?mzLsN%5%Lq!dy;7%WP6&z0vlNN5bxOX6q z&Dv8U&M@6eX*fGH0n{ZT_Y8}1Nk@?jdVK(bazL=*3{}Hc60JovW4!RP{jQ6x0>Df( zJO{iNhkE{P?(`}=H|#duw($S0M%6c|(|umGMB7()g1#3-kKQp^;c(sZWjruBXLnx>u6p3+`{ z{Y(dtAx%)Eo(hyevWv03K%2$_&P3XiNMekn6WSk0Jj}mBvV&9zlEzsqMrLK&g_)+k z!T3weYp*fhfmF`FLEc7v!#nfY7+m#U7T zHyBR7@x}7(WkKuO4%cgzpCEmng|hcGA|U z%pJu=$9V;dP!xm^ma(f~5BmyINGmu%jNy2m5hdGd7!E_ErT28r(mPG9Tx%J1&X5{& ze+@R8NzC{keZ%Ss{lLhs(#+YX?3xVw$N!T&JFjO-PT4tMa<~P;Z=BMa$zWKZmkDcW z1tq$X({wJ;S9F-6sQL=_L;(!b%U(JGA3Z==q}ALDd}GWCA|590VM1zd0RIn26sx}> bIrSO70Rm%{HN-rKP-9dnFo5(Z+5o-)?Q6?v literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditEventType.class b/idl/Security/.class/org/omg/Security/AuditEventType.class new file mode 100644 index 0000000000000000000000000000000000000000..662ed060788c8e5bb47445ef40e92c55f71ae05a GIT binary patch literal 375 zcma)2O-sW-6r9&I#-`D>ew-9kJlLj(1+R)wYXqTCFw(1}?HabENr~HHewK$Kc<=}K zqr|tZp1gRO*?lu_-@N_&dj9}$j(rz4Y88}GH_&jf<6zgp9>J3fnd--!gmN^`l`cf^qGkH5hKamgnJx(Kx=9x^NuZFhaj8vRx`5S NUZUh5E@7>W_y%m+QjP!s literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditEventTypeHelper.class b/idl/Security/.class/org/omg/Security/AuditEventTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f9113f72e87d9c274e1fa2dcf726321adb24ca55 GIT binary patch literal 2513 zcma)8TUQ%Z6#h<=Fv&2qKxr*ls6e4%qJ(;(3bd92El3b;5Jl8DB&X>>Zca`pc>Nvy z1-@c!AxoC7_Q|#UORnW|pP9)d45a0OnUj6?<=fxB4FCN1$6o;6#xE)c@PUd6Oe&aC z5x`9qxA38Y+bUWx9U;jb1v64OtD+xs5qjKJa4(E`6$|)CMH?2wNJOxNkENq!srHF{ zd>Y1mDM^O0qTn+X-7?eyRwH!!T*Vhylcz7GY+c1y_*%g?3Q`QAl-MnChD(W}m5mqk z+4#)z{X5g~6_U;rGklVvWy&m=;ub?7IJA?r_wpQXc~qvtl(P>21Xc$YDI2B*?cjV;g&So zP>|M;0Re00<+w02ZevjSG(137!$X)1=j#;B?WB20n8kvIO>Aj+7w>5p#8rl#T3DyI zh@47VEb;sXw-_`otDbsbW4|SQW9>djoPc%ViPm0e2m597L1DJ9;QFbQ7 zaNV5~%WK-YmhG_99laygL&rwuBy(CR+eWTJ(fVK6s?r$M zh}cS1$`5G;FkJMRuh=@YIoh*aq)L{VH-)*)QzFeU<}Zk=>`&i=MqXUTh$|W*+spb% zxz+oOYAaXQx(^qLy(w&1R6Z_VwwD@fQAgag6hy(Ghv8*f14l{rx~w4{L#y1w9_jRH zN-{9|Tl7=vnZII<`a8$2_h1t!jlO7w*(=-w6O1NDR)hWYT^^uMKW#C&1?d!_Gp%EK zUZY%D65ptYF z@Fw1J)e`iUYP$XcEsxQsKS#?xltkv^5DB>LGW(Ei5F(4S~q)B}fTTkAYq#W{9>_M{%Pe|Jy@PtduK z^R~2#t|~5cUZjAp{SJ-nWqMAm5ZJ%CO@U~$yMfNxVSqsAr5X+NVR0{qDLa{8&mp?k z4$zZ`=~cY`43}f%z4saVVl|s_+;DArU7HR)_7s<^xFX+u`*_2lFO2t(l!&||#0aQ! GjsF4luApfE literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditEventTypeHolder.class b/idl/Security/.class/org/omg/Security/AuditEventTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2832c7b042a98ef588d2245896125d0f9bc2bd30 GIT binary patch literal 814 zcma)4T}uK{5It92H*G5|wX#pk$d8AmUX8#cN(h9EUS-vbD61>WUBiD>P$WI{1Nu?X zTwN^%F_sYAg^I%kkY3}A7EA@h61_~?O3SCv ziCm_*LSNxwhHf+OU@vrmVS3d~$Kas{2+DLO`v%V#vxbn1iMp6TCOd%l4MX$eq)Vo95dHb}qJxFpB8m~P@`gXO+| zqPO1kma3CxbY$8qXZ$sK>p0c-Y&IVRVz}8o`+hv0=q|GCpDGNjtkm&TuMOuye7(qg-rd{m$}IY=fjLg)EOV^v;`>=`1ox zk?1CaUx?|IF4$WPCnM1|PjVMdrd8s$!*C_ireCsl;}09M6wj1x)7gzJm9wU^y2C9; zTpbrT$^5Zn8yNzbJqje+9fhGkNMK+-lXq*UViaRC?x;v%f+1S3b%*RH&62ZL$Y;4N95-ZqreYI!83uVN=9pQp zN2ro2?%}?Q2O@;wX0BErXL!*u3zmw9_*}&WysP4EgjI}VLdF*=B8aN^5@{70bcWEu z@(ThgzJkG^C$1;ws4u4l=l|h5cWL^fj4c%zP;t(5iBM3YZunY74&SJV!8~SGc)rMO zN<=f(^{s6#dUUdTO&EsiylPWMvqJqOO2jY~=?)-@+6F;IAX#nN(zT`&O~`P*V<$DO z+%XGzV|KuM>d_ah{As>i=-@}SF6 zIbcx4T1l7l1uN&S+62RmjwNi(UNgoH$)lZhwgZFKrNYqXE}=RHeMDf;x6 zkbXvB?-~3_tpcTrzCH4giRFaL_B{CpAdM}{ct`N3Mdl%2B?5x|xgVkaj?pUmr7GU2 zVBi)Vs~8Lo5n$*isH7M4X*}pDfsGRkZ9xxazy%>iXt*9Etxr#RjqLs8HBL|`7Q(;b zWKvoj4gY{aeN?OB&D0Z#J^S}By@}rs-)pEcrWyO25*(ymchLizB`}G=!kWHc!CTTo rSl=fkO%Kmhaq5YWkp2`2tPu^u_YVRD5~BDo9jF=EpodXpwRGb@zF$(n literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditEventTypeListHolder.class b/idl/Security/.class/org/omg/Security/AuditEventTypeListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..664db0e4f71a86592e1d25dafe6f0d80f690ca68 GIT binary patch literal 871 zcma))T}uK%6o%hX*Hv4~KD6)b%Ubnfsaqqc2r2}jqMI&c%RyFFSGHNhe^pQ!&~CA+vX*P=$_TG#6Ck<&tEY_j+`1vb9%5= z;!4%!W{qK6|4nsNIX^rw+KwyC8=D)at+ppF1YymRR79)yR0yTeM@lN57}O|LLB%pG z==q^EvI$vnNrQ$YLpGpc4GD~?Sk{8lim{m6&9|886w@y`_8Zp##rZ(C1BdNg2b@T_Q3zU^ltuN<&F_{#okk#oTg zJ;xXr;`A|TFuhiVRx}ZcA p&!l}OUMThu`GZVhdKf7do)GRq`N=ecw2!3dFAIwF5Pgtk0AF9X+t~mB literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditId.class b/idl/Security/.class/org/omg/Security/AuditId.class new file mode 100644 index 0000000000000000000000000000000000000000..131ba9d9b524f71bad4c1fc6bd7665074ceb487a GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRLPkUj=U S24)5pAk7NoF)^?KNd^F}5gO0{ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditInvocation.class b/idl/Security/.class/org/omg/Security/AuditInvocation.class new file mode 100644 index 0000000000000000000000000000000000000000..a4db92df36ddf3de18d1bd7ec238b9776d118dba GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g+XX>v(sejX!(KvrT|qJBb1A8Y^s literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuditSecEnvChange.class b/idl/Security/.class/org/omg/Security/AuditSecEnvChange.class new file mode 100644 index 0000000000000000000000000000000000000000..01ac3858e2b256dc533f1a61081ca8d7f88bc3ca GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty c8_+-oCZGX~43Z4Y3@kvJ6=WO(8<1oG06TdetpET3 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuthenticationMethodHelper.class b/idl/Security/.class/org/omg/Security/AuthenticationMethodHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bbaa8f41dad5dbe975bbf588e29a6a02432e48c1 GIT binary patch literal 1764 zcmaJ>ZBrXn6n-vw*<@J+LR;EWsTA8L!Ln_As|2e+t3-lmLA1WbCApJs8#bBc2Fp+B zFYpT=v^puHGfw--8Gn@Hb2pokEYL6a?w)g=bDwkWbMC+Y{rNY5o7gfjj#(2nt{b>v zB8HnL-o`ry-ZhcLdudwUH*iZEKQM6yb7?MxH0JT4M%~u7kM#0!3Jcn@n8K2YJGg7& z6MSl5*+5YsQC53RDR8#b@N0HsyJjz~-CJC+H)vgIRAoURIq!O|x-AgP<~9Z5+RUxo z@V5j`XLAuG;Tq(6JJMGIyB5m*Ol*jH4=;a(xLZi^vGtzSNagU=rvo4;nLYI zXby>=eOIyI+=+;_mO6w4rKRR8^`L1M&SS#BXBJj4$!7F7x#+3oM!hP19ab{1YT`cTe;QnD%da!U*Jm%_pmN7c39Ni#}(OBZo{*%fv+s&khgFa=L~FG_!{3>xQ}lw zypBl=SCM5;7Fz0o^psn1G;CF>2aT$Q@9@3Awc?%990f3|Ij+k}i)HWG#{uSU%uQx! zN6GX|%y7uxsk_cjkYqD^bb5}lM2L4^jaM9XsULD&M+8hgrQO>3?y$wvC*XRgPhc>Z z)($d0#piFF&nffivEWyl-<(LU7x*{IU2sq2pF#Y_4=|9^61qnMClEitz^{Qfjf;3A z^qxZ;1GEn1|3d8k#52U(NOY2^s=Sa3;lxAKa_5_17&k_3r zsr_FNFXh`X4=}h-gh3ip0o!R}Q;1D28hBIlzlwsi_qK(s?>QlJZ*I|uG2omYI@jpR?rkVf% literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuthenticationMethodListHelper.class b/idl/Security/.class/org/omg/Security/AuthenticationMethodListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4a6d8e9b7120aa33bf52aea0293f14f6cc86c812 GIT binary patch literal 1995 zcmb7E-BTM?6#w09V3TDL2(2wOQ0Ql}t8B4qEddm0mDpgkAX-u5vblz>=_YPAwY>MA z=&LV%#g9odt;4iW&iL2ptK(G9-QAE7NF87H-o59X-}#---=9C;1MoVw6^vmO{MaJ6-`f)W*FS9Z-;&D#FNzBLTvmkEoD0ml(!gNXeF2`_9{9KRWJq7P$ zMToNsKEMre%gI=k@gYNB!P}{FhLgF9TQVwlO2%^j=F+0EPOrih ziIH`xb&u4!c_%|8WaKGN-@CR)VQW3D@^!Cm76cfZv&w$%R3tGj<0BOxW0JvW<$8@< zb;8{-7VF+NcRbrNJ-gzpa&Nm*%-J<>rBW_(SD4?Fv8G}jpD+ybn&H{Suu_yy6&v_e z#b<)(XglKT_bgr&cq(q;a}_#XRdEWhs5p&D8Jj9DBBkOBe5oQ0jcV14hKjFHV3^5X z%gs`cObh=1$$fTa`jU*VRhZZk&Mg^56&&BFm`3S;Wr3Hg+@-+VvE{dJbI~~w(Ig|S zdLy;P}0aO=+Qz@YEgQI3q9-G*2;+HO@z&R!20~5p4@M$4s&94 z*DTk`+o(lN=JA3pI<8RjTTXE3o~eD5&emkmTXDaz7As-)5}~si|E|s*ix)hL;c_b5 zHJ|%a)J7GtHjWeVhouZ{YMoXT^iW#I^obI$1=sQ7w zBXlx4`?N=3Khg!HNOKyBhkYRsZ6dPkOXHZrnNT{0C?fPas6BynOMirD1APHV9A|MZ zRLjvR)HLlG`X69Idy4)B^ce(}1U5-9w0lCB zAs>VUiP2V&w6sFu0_jJ|>NG(en@|3#ge4JHQq%Vucv+fH>U)Hw>B;FPPTY?W(jOv!0na!he6AEM0@}r zN<7o1panq}In0^)&h0<>_BC6 zSU0hOEQ2#>?wr?SD&KJqV$tG(@anGc!r+vPR@gZ4ZpCrvH+aM_dF|f0j_(Fdr&7D- zb-_>=BpI5pKb#!)Uxm2emW9;5fWNEpLqNF^EfLWEn}GdAsZv4g(BgG4jL^rVSoBk9 zbRzA@j*&M9g-(EJzku1PH{%(~Bl+l2;|Y}~N})TWM-{&@6PQexT*74RVi&1z$P}iB bk)r(sr3-aXX$IK@k=bNFY8TprYyEQ^k}O80mGx`qB?hN@tj#mhRDg zinW8bA9>rVN9|NGWd(B0eKmrBo?5L^<$&3haGPZQT@>y${Xhy>m3sBu^9*t__rq(a z{l?j9Q75~)g6YSXQTf3esxs*cf!1dZ{ zPaOk~+02sLN@dvOrirTOHv23@)NUE{y`s!MZ&ma#4rjjf_OuKJL4!HNfe@yd}D)JLCX-gQy5dC4kNCqRk za|HS&T72*>euoZ46 z4ZljmixVG{n4KU$8CsP-!!yS-e}qi;2pUh8NAHR*S%Diw1A1BG4_URzRCt^-W*973 z$H-Ze-ylBorc!2cixDM0mKM)j-(mbfUP+#m%Q8|y9#vSW-qWNdVBr@A-fG7vd_hLJ T*~Hb9t0!(&xw*vEPfFq+|JBa> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuthenticationStatusHelper.class b/idl/Security/.class/org/omg/Security/AuthenticationStatusHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..af1af8644ed863f305d8328048a22b423d5aadda GIT binary patch literal 2100 zcmb7GZFkdT7`~qMC27dmRyGC1>6n8ql?Cv99q2X&R5~kUP7$?c=|jorlAbih?Wgby z{5oGw>CpoRK6#Em%H#bc>C&~cXMV|(-Y?g4-LL82|NQX+z*Rg}a1QS&cpo1~_)tLt zA1U}4pGa6#kVYXxk|hb(gz&n8H}GkO9-m2Ama!sZRmKe&YeI2TJZ{OjEx?L0K38xD zB?asFLOjX}zQkP#_aqn$sfxeX;0&iru2<9DotnN{zPGZhZ;*7=t?~jxddYTd|2jh= zH^0e{6k<9muD8W7m7DMLBzNItJ5BES4A*jf`ekRYa3C_c)$(kAPhW2NkGSL8mg(EB zWB8`uY8J$G65sVb(;}p$qmbg;heI)p5~%ff-E3@_TXjyEq!_~3&kn@U6a9!?Wtb$3 zZS#q#*G;FU8@^{dH3~B6ag(&`{lprs=Zj19qSI*kWX{cyb&L&a6` zEgq=&4&O7Jij%gsYw?Dtt%@H|QLzAB#haKWgxDy|EW=6SAv(fnSr%_LW5G?+uD3kO z%~)iy>Qd7%Mg14{Y=-lPYjqHM4;6-t zSP_-F>(qk%S!9^&x(%%&gZ$8QcPIft>5DOsp>DL4X1n-(8S32`3`($LB4Wv0aegy7 zL!XUv^erN#7)*N0&^zr3dd|?V2|5{_DeW29FZ2R3q#=vcRbCLE8 zk{BWBsP-ok_w&z?Y$FwdWN-l&BeN2n!c5a%A^jB7+DoL{kV^SiNIb=f{7WQ$hrItY zk|nJTrGpdu>R-r9&oO#OOJq+PS~5Fk zXsPVDp{27EMhDprPGu(ve(E=NmB?a>VinP5w0s+9+Bh2~M5ez3y-6nvq!^J2)%X`~%qQRg literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/AuthenticationStatusHolder.class b/idl/Security/.class/org/omg/Security/AuthenticationStatusHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b598c80372a3df385cf7a038576e22cf770b834c GIT binary patch literal 850 zcma)4-%G+!6#lL{m$phvt?Z{2r1N3as}Yzl1%;5&t4tj>nVYOT!~d$FNP6fG=#Prd z)oCe6GIrU{`M&R*^WF3H{qYIl6h~3WNJbDwDvEV%h+|V6X&GBGwq@)vNL}6X42I)t z$8Bm(yQx)-y62j_rxiW^VA$NO>)dqg3fH;!SYQaBnYPK#8G_l|JwvGEG>ETe=M)ee zsp=YfgNpu=O6A*&qSkR-uGcI>yRthTuW*933xW}@K2c9pCp(i;_V^@6s`6fkDCul& z+}p6s9mPf41qF*x6hsh}v8!MY`wB8RP;iI@Lw+txE*-03xD2tD-qkfrx0_nI)-vjx zAu|$~nr=9l78LPO(jX1Xw8+<5H&?o{&KEzi`QaCc7K!Fq^0zzHp(42A`I znXsD{RH83(pUx%viw`msRo}s0D1bqF*-xhspa+PGw3>fIV1!vg%*P~sOhnE15&Q#* eV|5ymS6>n6BQ#Q3L&Ap$HAa;}eMrxu4d4eu;@JTJ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/Capability.class b/idl/Security/.class/org/omg/Security/Capability.class new file mode 100644 index 0000000000000000000000000000000000000000..ab10cd27406a207da124109ba1c645075849110c GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gA_4o<%U#LqRAg^wLAwCLylGO-NUvKg&Z9Jop3r zQQ~a$U}1T0c4pqpW4^vWJ^@_dtcf}f8ZdCE;Yh==hOUMa13d$$2Ko#gA%zlLCE1b( zL8dlo$iSuy_I4p$uNg`Uj|$xP!*p9GNUe6BN=6+}Y|W^wmGrWOnaeyJ?aszKTP4dUJOx6-~i8U8N3&2C9U#p03EW zgM!IK!Q`W0vO-*<4suJlM?agG5m%jeur~_y02}*%mQZR&&&TmG}W7!&yTB literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ChannelBindingsHelper.class b/idl/Security/.class/org/omg/Security/ChannelBindingsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..96cb69633555875a2adf3849ef4d8bc95ee42349 GIT binary patch literal 2917 zcma)8+jA3T6#sqQO*RQzY15`$Y$}BY(?kh~7Nk(61*H%y(t?(%aht4RAx%QEDWKvN zFDTv~amELEkXJ-VJE9CcIpd$Aj(>mxdd}{qNtZ_HO!xctoZq=$HoxBe@dkj$@Kpf) z*creuMilG{K*H_-p24#U_5|R?sGlf%73^bTGJq)d`|0tVf-xTs`0+drvg~*Ot(frP z5F-vV`2{Aw=)SxQOWa8oS;t>dPaKE7WoPH59Posv(U+Yzt6$Mc4mTa1iACn1h$vsxmj z<+F)#vqYXzXmUx{h`Yz_Q?XDo*+^nEU#yq}*R`3!`*4!#M|C(!X`r<3ZK`#wV%F8( zUjlvG(>belDjvb33i2un*eI~RR_kVo+f&G8^b$)I6`W8}LRp|qFDFbR<1`4BQH6<$ zidmc#=%^=Z_o=jAG>rmTI|Tv_V!MhM;sUE{cI_Uc6jjpZetl+IF9`(MQ$sTgrIeP* zl(E*JD1U9O8hjH)XJ%VUy_Mkx#IlqWTQcNlqb4FTY zS5q0y)Kol)Z34?(y{O`SoE30olMoG)vsJO&ch`Yie;egDLnx#fSJv#Q}V* z;tAB=8>Iwno;Uw z&ZI!3-f_*`wWiUfg6eM-gQq-YH#;{!xmnj|8(Wx*I?7TQbjEv;bmX3?TuPkgWmd~o z$lBWfp9E^oG|i%^rwks9aLnD)Tp;ek+OcGqUY1LXPcv=F6jjy{=>Ppnks9Wtq`Y{^0(fU)Castr(DK}ys!=$_NJ53 zT6|RU#pPJ&kA|WN1b9i;%0nNnQ2{~!EmPF^HqXff@rbmpiO$BQE3nL3(lxDebdjyAEkGJ_or9kFCUy&3N2_CFx{XEOrat3+Rd6gtrPM8NUVT z0+z*ZLb?jyYPqj}!q1K(bO`U}4H z{fyRqG3h#5CxZ`=$5*htiZ(Ha_VJi(QG@g7kStCoajFQ}OpnFva*22?>WZaB6pOiX zNhT5Ju`0NlqIvKKsN@{yPJjdPK>Uqw$Zy*4P87@OlmfJR#WzMnWDN=po?m@p?32c<-V|!44t*LgyWH z@!55Ul1}FeigE}~Ie~mffk+g{nHX7KQ^k5ddvDN1+R<%YDFTbuy}62q&$f`M-}rr< zgYBzh`))YcJ{LAp$3$wFNCSqO)2_n`cyFVFyj*!3LHh{sL7n#WqUj(Bcm$QvZfyJu DcP#;a literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ChannelBindingsHolder.class b/idl/Security/.class/org/omg/Security/ChannelBindingsHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..e3a809744521e6a45c7c05804a54692e67ba5b2e GIT binary patch literal 820 zcma)4%TB^j5Iq+t6|4#hsQ3h5JQj^^F($$WjR}bwx1`VpOG-;>i{Y;{(MVkQ0e+Nm zE)*0J#5BFRojK>s%;|i7y?+2W!G0Jb;voc)2xAp%{8;BlQpARcO%YoRLPs%NjUjzy z*$vrhHRKzu?%KN3l}q=EX=+AMH&xwiJQNs$r@E;-XAJ&K_KqP?vQ(lTWM*?YT&UWb zqB0!);7gV3;q#%&yU}fBZkev-5JQr%3f~a3gouZUdzerz--G`bB#Pxp bNIv%hUk`zy$_ip0gsU;C6zD;C;%xxmsT#_) literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/Clearance.class b/idl/Security/.class/org/omg/Security/Clearance.class new file mode 100644 index 0000000000000000000000000000000000000000..3b1d0c032e761367d1feedc3bc0bf7ffc6a07224 GIT binary patch literal 127 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_*;MCZJA6 U21y2H1{NUA3gj^{umMR100gERvH$=8 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel0.class b/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel0.class new file mode 100644 index 0000000000000000000000000000000000000000..024d268fac5dcb3b8740b637d21ddc1ebbf0769a GIT binary patch literal 146 zcmWlRO$x#=6oluswoyTF>mek?D|A&5TnO&d@+d9&k(dU&nhOu$p~UBAhWQx2&-e8P zaKc7GDXa-qHg;hGb%b3T{398kZhuzFaZ5OcIO^a=edS?^Q+nz)I2U~96UT7pX!^+t kK67T<5cadlMqA@Yed%W&QY~^6A|o77VkKS4Do{(}2XA^KfdBvi literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel1.class b/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel1.class new file mode 100644 index 0000000000000000000000000000000000000000..4b700c6ff4b9b43d79d155dc7d9c6734c61b6eaf GIT binary patch literal 146 zcmWlRO$x#=6oluswoycI>mel6D|A&5TnO&d@+d9&k(dU&nhOu$p~UBAhWQx2&-e8P zaKc7GDXa-qHg;hGb%b3T{398kZhuzFaZ5OcIO^a=edS?^Q+nz)I2U~96UT7pX!^+t kK67T<5cadlMqA@Yed%W&QY~^6A|o77VkKS4Do{(}2XGD}g8%>k literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel2.class b/idl/Security/.class/org/omg/Security/CommonInteroperabilityLevel2.class new file mode 100644 index 0000000000000000000000000000000000000000..975d5231b434c561ad5fd6dd7e078adf06f86545 GIT binary patch literal 146 zcmWlRO$x#=6oluswpCDY>mel2D|A&5TnO&d@(3;YDKQOrH5VShLy6DL4D&I3pYQ7p zpvA61(_l-evbHM|s3#n{;2%l*bpNwbj(fs6M5BT;>c-<5r}R`^a4z`XCyrs^sE5f4 kzHnyS5{|RZT3PLlx(+jssTMg3kr7TPv5~H16{scg18|}vg#Z8m literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/CommunicationDirection.class b/idl/Security/.class/org/omg/Security/CommunicationDirection.class new file mode 100644 index 0000000000000000000000000000000000000000..68b889caee2ad77c535bb94e3a30302119b2de3c GIT binary patch literal 968 zcmb7D$!^n76g{tYCO3hm4TVm00GfePLs?QGk+h3QL6s5|iB;sfCb%SaNSuiN5@Hd` zPy`Ymz(*m@HKt0-1{S{KyXT&J-}8^3U%vy`!NU}i$cre5D2gZ|IQE{~ckICRy|N#?R8UogOvU#Gf#n5Ft21;o;zMEP@3Y04-*20Kw{0>v z?7P894+_e<0@wzV4P+0qeP&ufVpO`(rAIMB*b+5MX1-w0l zm9Wb7BkGNS({<0uW1X+Z;9HnRg3Qv$(7qyff~)k&pY{S~C*pJTIZ_zEHW8m^oKuFi z9G*HxEKWlF zC2`zV@EOVyK9_KZAyM`ATAblb$#Ltt)2!?3<;}vHzD3k^r^fRP$ra1Cyj6x+CcDiL z7i7Asj=RG!lgSQglDbf`>|O494A(P5{55+oe?Y2mv+Y{mp1$rhn{C@N4bO7y4a?=G zc;tmai9hmO!z8TLqp%|Tqre!(E1qHgc-v@g89NP5siZi9_|F}Rqb~zvR*hkrBpw(K z4ZUI5b-m)bmR+Yn<1ROdTOM|;<+z?Oq8IH}+aqyqH1o&tHSsegh7x_}KatCAFM>W+ zO63)^;TKiKEMAwesiJ~;hQ(eJj7a58r%~gsP~MX8g^F!_$uPlpb z_!{>ZrlQo{cx3XHsIH1{@U4nPEU9=EuMt8d6y%pk>7)Bg#doMO=*5lFGWGtF2!BNA%U74KNcdibfgK5^iW<0xkv{IL zsDm8*-&y317Iz22F7G^`&ZlU4g$SmRW{NsZRE*(r)DI(E^`~bDiONFg!EjcCt`uF$ zun@rpHV+y&lJWu5;W!RxUpzEEN2$}gd1y4+WbHVEFlEy0c)V(fL8|WhlO+6&FoqoN zpE!n-p*pwQ&8lbm12x=d`NNZa?=WfDVBdzAAFS6w@O`c@q{OPIHXOU|@6sZ}rJmY| zN;1gzU8hMY@Ef2Qc``zg7Sx5FjiD^{Zx05=-!`Fh@k}wh9iOA$$a(rP5mSsOy;Ah1 zeL?3N^fgI0qdTEJ1^bmAAVC_rkUilufp`~V`#v{?3wSf+o<$sEL>89VlI#*e4B%yq)vC zy+pb)VzUJa8R35xT8LaA2ZZ;Fzd`*A3(4mgzoo^}Co5V!eX61*(i4>~Cc8+drwDoa z2~-jkaZuIhjDckdkCsb_cgja2MtY_fEiJZ?IZd}PCKJ@@E?((L=(rL}%utvj(3F z>$pwLX*ab8qwc$=*VD>QyY1U%UH44KzA{~-&Mzf~*qLdY-Z?{5%|9^+Wv4+5M`~ya z9wk;?LvJt~j>F28`^yWhN=^5-q)}YnE;|wMwl; zk}>2)6jS{TTjQ<%BaLBocp70SUS*~d6XJy)42>nw_--cigvOzn2aCdIffHIt2@G@e zGcG$Vt4KGR0-X!=N)9|^Eqs8zk^uwvV&KjoLLVS=ccJ)>$OyB9M1V;Ln0TSsNAwRQ eiREcXvG9gSAHs-b1*rhS*%)OK`Ve1u8Ne@QQQbcP literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/CompositeDelegation.class b/idl/Security/.class/org/omg/Security/CompositeDelegation.class new file mode 100644 index 0000000000000000000000000000000000000000..22ca7d4f2791a99f8ca0f79bb37e03deb3819cf0 GIT binary patch literal 137 zcmWlRF$%&!5JmqaCaZ;DYj3~c6=H7@uph&)Y)Ez_nFPF=g$M9Z;@Z5=f5rQJUvB_s z>>QlKmQbxcEJC1`ux~WY#>sAfR{{kHC!K=VG5A)xWs3InjgAkUqsc`E32adl;n4HS be&7`R_1;Tob#CSWGLI;+$y?=Dpw7e(#$O-u literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/Confidentiality.class b/idl/Security/.class/org/omg/Security/Confidentiality.class new file mode 100644 index 0000000000000000000000000000000000000000..9c270314b65f5509f58690560511504c0bbcb788 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g0RR>?9%ldm literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DCESecureInteroperability.class b/idl/Security/.class/org/omg/Security/DCESecureInteroperability.class new file mode 100644 index 0000000000000000000000000000000000000000..380ce9d77eba8701fc165e98e949961c05850236 GIT binary patch literal 143 zcmW+uI|{-;5Pg%F#1w+9SFl;|3eh5!gALy4o!`}5wP=L^6A zb%m@iWw{P(!ahW6!eq@w`Z*5iVUEq|uch@#Vz^18Mq$<-ns literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DayOfTheWeek.class b/idl/Security/.class/org/omg/Security/DayOfTheWeek.class new file mode 100644 index 0000000000000000000000000000000000000000..763510ceed4a680b072af7fffcb6b256c9a9b795 GIT binary patch literal 1199 zcmah}YflqV5IwiscDH3wP(%R{#8+F<^$98nLU{xOX+j%_@k6t;3lz#OS++#}lJNuL z1EYyQz#nBiv)z)$587tVJ#+4z*_pZ9{`&p>CxAy-Ou@vsz%zm80xtw61SSPu3QVPO z4%2C}R{}FSW@XLmnA0(@pqE!Xw`w0Ls3nEYyyqSSwi~S3^@gMINl-|(P7E!3{+8wK zZCOR9((r4+ku_%@6*f!T&bs65PAC}VQo}i5Itf+G9=QtX^14%X&-P*psWXART-t8< ztw4>5TE0}c;Mby*aaPmxB&KKw4L{mRFs9{8OtB$dNf}ATG(D2?p){tDh*m9=W!v$* zSEXod`rcl-<^~EQnWgN1yX`Cnc4c?P-Y?l3b;c(rYi=!=Vm?N%DRlUbU0rn!y!s(` zdotPO9sAI>>bARO6*hL9O2Cn&=igPF{h-Fd>sVkBla+duhQ+O!$e`Oq4=$OwA}}Cu zP2jq~O@TWC7RF3ukux!hdkTa9yem2WK%wjJf)s{ZarwgP?2NVV`GIt2EzK>@y8-W< zsl%w67d24~*yr9^8?4LZJEw4--#&DqoBRSVB8H3f*$H_cdfW8N^x0gf_qFN$)Y)&S zUv1L|sdEIOKGdcUQ|DAdeWXplL7jsN^;>QFZR(sI^_YyAYl5|MhQzz{q;e%{?laT} z5+EhhjkY(V?brS9!@b22`NnaTaEtbsHcp$MP1Euxh#j9mqs3_nT9T&IjAM1o6AJf< zX&9qg^MkltR`kqXmKu}&+$mDIfiF-W=}FW>{wu`7=k`Q(8M&`We?y04ZB`QJ&J!4T zim@o)TZF%I6n?;bqn)Dj6JkQ+A=QK?LK+vE3~55B9@3;xBc!^}uI34&Srq;NR5aC& literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DayOfTheWeekHelper.class b/idl/Security/.class/org/omg/Security/DayOfTheWeekHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d354bb6a1b0d11b0e5893b94c20e24bba3176049 GIT binary patch literal 2032 zcma)7YjYD-7=BK3+0C+rbZHgPwo+_OH`)M#m$rhv0g==Q8(R=HZj;k=+hjLxH%NX8 zzre5cG9ja*1D~AnM>)P{chjUvocd+Y$$Nd?%X9MgKfnD6;5xonFpUose29-Ee5@dX zMFmS(mhg#!IBq3Ka$CZuLb#$}3abhFtVvjxu_5D*jJq=K$;it1OvZg-krSUy8J~-& zc^O|Qcz}lr3>3uYO9fllmheczV}@AKYt}i#g`DG7GES|MS<63MUC9(ky5^Mm5<`61 zvMuixLnJl7#Sj%@I*N|F!!VJW@AD*g;bhr|-1Qi4ruy_Nc5~@iWbjhMwY+9#-E8J} z3wwN<^MfUkM&i#r*DO(l8^a=WvknizFlu;a>0r~W7tEb1rxp_Cpw>$Rn0u-nvC0hN zWU+5PH8WMyu4D|)wd@KN6?M5u+Kqldb;tEYl1$dFH#{=uW^L(ogs~r}bZX_@|BRP! zc-?^iqiOPTsp=0)#SE@U_)5hS%rRW)40mX=?m5*mcZJK>624LKEs6|DewgvBa<~pO zG!@^$RI!5+!})G=HlCGu-Lo89MHyVhHC$Km7A{kSu2IlI+KNrbE}Ko7ZlS>s{aa$2 zm+kN_7xo%%AdcU0EnhDirq^)&YusoEZxyqcQ<1?{26eq>Z&d7}!Z4d%&n?m>FNmUt z7QA?E;i`l^6&Cg-9H^+GCMu&JREC54sU73hI(JW$nBUpwVq3>LtqyoZY@odnGhvwN z&Uq*-fA9PJsqqvuAX72eEU{?}bKPJ;rsE~-TKNIBkVq%IX9p-S%$=Txr)IT5*``lf zK3a(qZN0~fmY_iK(C2_a*`+}r%wDcAoDJQ%-KZ5kTCoSIK?V*=o(zim6ZUX>=HzUS zOYVWfkPsvC~cfMA`c0Zgjb+Vldp`()T)Gc1^)N25JrAP00jEApP~MR<)rinM(^tp z?X00kwR46Z(~^cB*TxK8(lkStweyCajBDdY8xw83roB%2F8l(O+(mUkstDL^%0iDt znB|QWnTbS&P-jnHC(iWlW4^mGevwlEoVNXE?*Qy>e( J7=a1Y_!qN!{c->R literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DayOfTheWeekHolder.class b/idl/Security/.class/org/omg/Security/DayOfTheWeekHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..23015dca22486ab78905a6758f6a110cd297dad4 GIT binary patch literal 802 zcmah{T}uK%6g{J^o3@pfTG@xGL90G2^=brVQ9&SN)T69AnYOyJtcL%pph$Y?2lS(& zJGxp5Cc|8I?>*gU1IYaEq zw5pofsA>gXZd*0GtDWlI{Qb=XzvKKd%iuk%HEZ?}gIi7AGI(-kg?I^d22o(8qQ&(J z!`?4Am%lza)>@`z>m`G0m(5n&F4zQXWCg=pe4-vmU!6+Hx9xF`RJ6M-qD0lysHed( zHsP>@83A^EQb7p76+7DJ$}cXZ9rn^i4es`IkV5FZjJ zrWy<+2AnC*jg}Di42(LPI`x=QqcNx5ndG>5K2>kb#Tk12YZo44pB|MAhB?|y*hvpg zqAzln;sX5z`xVNj-@#refqr?>DM#R<1^7idoq2<6h*?6w!Gs-*FP-VZ{Ra}n@+2ga Zeub+C&roFrAqOJV7@g$lL3$Q#06%++!Z`o{ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DayOfWeek.class b/idl/Security/.class/org/omg/Security/DayOfWeek.class new file mode 100644 index 0000000000000000000000000000000000000000..894e9a6339d24d2198a722b0b20232d647d89dab GIT binary patch literal 127 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gLTE`Jv@~sq!^09=3KAq;L<&@DP$X87o4S#UV@J+3f^ULF zD32nL_y9f%amKh5vFgHi?!))obMDN~U*CQJc!&o@7^o_t@9u zj#@$D4`eX)9|_F$U&QBa3PuQ67a4&xPe6*H&GGTy3B%9*Q&t$|KkNV z&fA-N`_G=b<2aE@i`#B>b|cAs3#_GGL7Y+UN~#+DC5_v>-y(0#f{qI2VAC)026DK< zn7rv%u<%d*8e>XH|DiaZI(sOIc8SpfPoc7nPZ00vfCDHtD?iT4wdHqdtxB6qJy524 zK*0Jba~V5A_{aEleirkss48(*M* oML_{_0KYsd8!)+n%?z)K^a*3>JB(M_8O)E!DL0?G+8=QI1}IXXO#lD@ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DelegationDirectiveHelper.class b/idl/Security/.class/org/omg/Security/DelegationDirectiveHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4d79b551f5fc12be41b01ac03c2e70e7b5144f37 GIT binary patch literal 2027 zcma)7X>-#?7=AXkBUvbrn1my3(;5P`Wr(<;aX4~7aWP53X}B?pym$nT54DU*EI=NatA=Me_JZYd)3Y{sUfd?} zH=b*l1eD(mD7w5a62nl*GtAd_jry{&TH{nf${@&myeET>+y|@*!zfw2GBymoX4qA| zne< zC{EK5Pl=rRWqZvD#~~v!BDXZQv^;Q6%`yW_gWWTt8;fpB1@~UXnq+++I0;G zMYN!i5e;C-M!oG9q)&h@7^*Ts2jnUTvn6JY;bepvT(~`kk(Cda3K_M-`$P{3c5|oa zV#BC4#BF<mU(Yxx? z$$p}U|5}7$#WRKMN<2-k|2X|jNGV80rzD+;^0aS13A z#9J8H^0i4E!|_mi6mblYbV&Ofu}8Ugh&Pc4K$4imiO{S_yD-zVj~IN53GD+0n~;jR zkBGg+zT5}I{(`*q8{$Q+38jU7TjU{8lxaWOljJKSHZdpRdl7#I*%0|E1t6l&`~mep zq!a&O=#Cak?JsHZ)PYh9!!3-YQUrSNPpD)gQlNRGH3l|GQ1pa^PzQV*;!oVj1$AD;lua1@4$cnCox!dSjKN6`LD3t#(J;3xYLsk`XLFQAboJJ(E)Eh)Ir87QHr6lIhI2 zwPBeD^2@Gs8Wy2x2qCOuSHm9mHKcH$;SezfeI7xs9lOR|hDgKgnucw*>PD&3Ah8%y zBmUHI!@1;~^VZ;YTh<5+Wh>6qU_!R>(Eq%r;z@fuGwp=5^Q9eZhSVRYw01poj5 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DelegationMode.class b/idl/Security/.class/org/omg/Security/DelegationMode.class new file mode 100644 index 0000000000000000000000000000000000000000..0c682a02b7168eb99577cbb527a1191cf891ebfb GIT binary patch literal 994 zcma)5U2hUW6g|T(U)x1nMQWjyQfmvSU9FEcCYJVrgxaJS5}(MHu4L=7LtsnvFBu=O ze$;5<5Aa7B&#bEuqS1%FbLZYU=iYN?_S^T*Ujc06K^iG+DpOXbqD<9*f!hYXJIdTm zVoR-768Dn0FR<8dI-NboJCG;N6G_ME+JP&50Z|vo)TBQQY(Hq(-kGDZ3IuY0LzEhF z(6wZ*Yw^U{zztqm6GBzsp+I4(UeoRMJ!f)6@e6_cgn#ygz>O(nUn4c{#u=)#GJ3QKbZ1v?JP+F|| zUSr=6c$b`Nh;n7raxay1tF4BA+^dy!!|j@#m#PJyFvO> z_yvBg%7l!L4t!$9ALaO--Ay-5$k;FEY~IUrp7)x6{{7=`09RqDIEAY!KEy{dK30*y zH5J$KiHuKGq%fZ*$%2eUA^c3m1a741_*}*p3YHWsD_9ZIRdL)@@TEYyrQo)T0=`ml z2SstLskn=E8DGn|$B-=hI}OfoqUd@x!>!khmG%3}OU4FCSKKOJU`Q=mj^*EANMv)H z43ZGjRd&5ChVg8!$CKQJljUr4&u6%v?a?neI}3ZF60bBp%il3pxy@^)Z@JEzcvU-pjlqu?}}KACf~zHktZ$)70!l+eOJ#Py~hLmnt~%3{S1 zil$)_XJp*hP{K6BOsB{LQg++5tK1V#8#2Dpu!(OOM){8$isjf%wL(iEaQm=6I(JW8mb`o zhvLUm4K@6DfHZQu!M%NPuWvo$qLoKG6$r;>ILg&{3=K-qSkTCfxg z3}-rS11iU$JoVfg)o6;2R|5NmjLP{}z z^p&P>S_E{SrC+0TGrE)dYp`GG17t{}6RAf6B_Opiv>RyCIEV9*_9P?>k#t!96Nv}; z*N|FBh9GIoU^X%<(k;w%{Vh^2F{!^nss*{2e~ZLR9Lm2z;uVzLUmz9r7SuKl?UIK~ zY^MUY7syvZVscqVR`Ab3kC2y%fM9>=H)!uLoB9jGcl1Q&a7mXkM@o7!Gg4|}w2e&W zC?Svi4vh>&95nuPCctupM@u5YI})IgA~W8JmNr+U9HU!2rV!MzHjZ~J3|x*Z#wkn@ bXj;#=aH55iVJ;M0*_Us!K#~!eP>ufpO|1-G literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DelegationModeHolder.class b/idl/Security/.class/org/omg/Security/DelegationModeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f9bf51576d57b5728d0ae4cb3fa97b10230f708a GIT binary patch literal 814 zcma)4T}uK{5It9S-L$Q=)XF|BBR?LNdNqPFD4`HCdX-f#qO7hgSHpi*P$WI{1Nu?X zTwN^%F_yjDojK>s%-Q++{`drNibMb!B7XP~4PYG`^4OF|Ov9FjZ4EmNYS*+noFRT| zJ2k^@){G*rbey{A8CTrmHB;2>)}3ADSq9%(y;T?I4BlkwkwM8(m?4pzOOiM)t2(g(5&m3lTVm69(DG=Q(Z6fGZiPioU1rk0O>VOXu&ivEYQoOt+ae9 z-N4)#I;4ARSPItmXxKtQI`nKyVwm=y$FOvJ_b)0sZJe;^^OPD3*3 ZS9tnRMk;FvyAY|ysFKo$`YhW3egO3N$V&hK literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DelegationState.class b/idl/Security/.class/org/omg/Security/DelegationState.class new file mode 100644 index 0000000000000000000000000000000000000000..929a5b3ce3e467309b331c2d4bb9cda8c1858f8c GIT binary patch literal 827 zcma)4%Wl&^6g?BiapF4ALTE`JP?EMJ=3$8~1qsqFA_Y}yP$X8-G&PZ1$Bvw71m6UU zP##4f@d11k;*7CSU;_)^xewoS?zuDHe|-4{-~sNJV4<$fmNwfqO4zaK-PWdIp{Y;T z!W|2D1q;IgwN8g)$m?2S+FVKyhw+ z|JA@BYb6s4_c+JyAk1JmU(Z1Wj)TisbZ}LhHPjqj!?J_xs0wWUYc;xKU10HV>bcg| z!Qs;<-Z)N_*5S4HI{T60mIXG_t{~3F?J6o7{T>*%c)KOumkkqDEWn{(<_+d>i7{uU zU&Yc~{t9EtNdKWQo+f)JhjxY05>KJC?gxmsbU*?M&B~9m^3Lj;v{t9hr5-3#KONxa zIdZde7&9?TGpn>FjCI36Uhg7TKLPrOpOXLp literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/DelegationStateHelper.class b/idl/Security/.class/org/omg/Security/DelegationStateHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a80dafcf09b32e9fe784c78070e8a7d9d1107dda GIT binary patch literal 1984 zcma)7Yje{^6g?Z;k*sV;Vv-h8NO3}_Bhv`_g2v&IR~v(A3Qp5fXkEo#Jfe=|QDh)L zg{N}FjXTRr#wJ-;oQlXX3@%!>e8Kmw(CL%N>}CqTFyTZ_ij2HBmJ^%dv}|>4}^? zNfA#x*DMprrT2kE2lqu`7$&&#@3+kQrny}c)Hz}vR6Nr#@tAr*J-yKva--ozm`CfLx>&CH z7sqiLQwqN4xQ#T!x%Nf(>)N_gs|Z(S-BD2F*u)PEqhiZ0tK72z5Rd-NfNXn5e)f~I(zjAqoGwrl~cgLVUaGf2h-M{O6M4?{> zJsmS`)ULjCjyHqmKL;V5cqTu$6;IQXK1u%&rh~3S;M!bnc0FuO6%!XkF+GUuozr)~D zOzCei*o0EZzC-LOhO%!Fdj)m>8R7-K39W^peacXXW!h(Zj&fDRrj`|aBKc=97b0IF z0+M~^1^C}cC;r6nO+A)6R@CFEkzxy@EsUj71bX}>IK{{kNN2Rhz|ImBJrg0+hz~@L z)Ofp4dV)gdIPLNrm7peC_@Esz4s%-Q+)e0v9Qg8d*=L<8_67Q`yn#e#tWALWZ_YA(AT_x&4YBpEGm6F5F zD#Ot?K3BNCI5*n1Bh0eJjjL9>BZ`7x&8%ejOApiul}Jsc6gpy(qm)FiO_X>lJ#K4Q z=8odBaSo=6u=<8=%!=v&;tZzTF<<|Gr}w(NBZELzVp*boPGVlVzJF2{P=XC;7y}bf WGb4i}12Y2)kY)w)m>AfABm)48lN|^E literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/EstablishTrust.class b/idl/Security/.class/org/omg/Security/EstablishTrust.class new file mode 100644 index 0000000000000000000000000000000000000000..a7defdd08254bcfc45981ec7f64c9244c6f1f686 GIT binary patch literal 311 zcmYjM!AiqG6r9&Irj60G>aBu$YjaufTm-E>2tq-nhg`}wE^$lT$Yv|}Ssseu!4L4G z#J8y6WoCEYyq($4ulElCr#OfaVz-MnQV+cd{Rn#z_6e!8>&7j#SrnC4#t|t0uR3W< z#p>2r8|}^r!EiJuv?ukwB80;{AI%fQ*iI0klc0+Z;i$Hys2@vltBSSN?nO)+Czq9O z9`1Y`p|_IHQdH8EVzykVf~DiXrOE8(;#@q{)~_gWb$LBCjvv7ZcMri`&|>5`{v7#4 qX0LDy#)NNuW?~MrH_$5|yfMbk?|8uWfVI?*v%v~MqN$B1uZd^=G9 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/EstablishTrustHelper.class b/idl/Security/.class/org/omg/Security/EstablishTrustHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c1ab538ac3bc04d2ffc353551dffc2e87191dca1 GIT binary patch literal 2263 zcma)7ZBrXn6n-vA*krquKwqS^fV72%L`hqpJ z;8$#GU}WsHpE~1Ta>nu8-Ay)G$jFE6-JE+~p7WfS{rlfPUjeuap<)R4RNTkM3O-R0 z!i0(pCKY_Dq7x5dB>7Ci=TbPOVi40Yddw)8jbbi_FYr*>K2p(z`6w2o#-e;=qgawR zUq-R4;42kMoS`pk*~PTATTIU^Kc1dSuaI=c z+Tt08&Pl^G!~=#EqjyUQerG%N#@eXFe}^^4EGa(`zdoj(-7r&p=ujq zKRs6w`ew+R<0lO|sQwpxisqgccv%>hsiA-^4R>%?!@C$}=&y%$dyB}a7Q_wn2;DAnpshwb4?rtHFe&VGd;t3n(l2MT3pX8TjO-vdl5=v$VXq&1Fyb)Wf=* z(9}?G$(k|T^gE#qCTBhZ9;h(n)g8OM+kdhj8Ag3~ZmdSD`dW^|UT@%9tVd1^%4z1b zNcQwnm7)#*Z-Y|P6lgjGr#$=wi)Sl^%lIW?wqqr=`w^G+AWfQ>+np|-{m9+NP85sR; zw6ShpP_%TNh34Cb6YFEE;bHnX4bi8M>Lix}y~XIAwi7*X(!U-$8J&^jA=vNq0#c+Y z_pam4B@jMB$ANPj!!0Dd+bam8gQQ)_V}#aHhX~gYah=34hNP#KrBkXUlW)-Z41>wn z=&V7>rrsd*4Chj>5qgQ}!EXp>lQpPEICnr63I+(TM4KYpC_;nN3f`0W-^aM;Stl)t ze&IQ^x0s3ig|5Y9=onpVz2^z>b9C1bXNTy?CBu%iw^e$C3rD!vdx^qcegTcV$Ryo} z5wL&ggCCRY&I{M=1Or07@6^elZR=f*QjRjq{$up59pXwhMPB>=z*XPJ9EyNnX~ix_5K0i6v-fDL<8_67Q{L>#IY%kxQs0s+cI_-q@HFvIz!^t zvKy+^YN#c>=GX@Bt5;pFRZXM&P_~^e&oTJVjJCng8N8|VJ%cZA)rpx*&7}&oRIzof z&T#w#&lm45FVv1@i#obmXm=c5;sk5u1jAo>q&}!ZY9^)V@M(@z;r$L#;;Hnct5KOU z#YMw81&dG=1Q3+5t6&fN3KBR_aEJ)Q(Ht9YEVHiL456mh(^OMyH`HRasnC!aEFGV1JqC%Il0W-3m3IahJG0K#jW(1OWeSfG~)TWR?u zx{=FtF40$bn4xIq4eXf$7^auqbPOJPfS^ccvaj%rF)IkUn5c^hWU>Qze?h`n{R_!v ZUf>zPH&$6g#DxeoMwNU6NKc{-;2WZu$;$u$ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/EstablishTrustInClient.class b/idl/Security/.class/org/omg/Security/EstablishTrustInClient.class new file mode 100644 index 0000000000000000000000000000000000000000..5091663efd4e7563380befbb6a63ddeeaeeef742 GIT binary patch literal 140 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gT~iZD6g^EoCK(!mARwYBAesc1L3edsg06thKpGJ(!5ol8Ivy*A?o9I{Q^EH)EJmC(|*^=(vSh9lzms z4Radi86u|KDhq}a*^*l@N*e`ZX6gR)l(9^wGo^KrVTexJjxBF6gp#QhhOj!O%`CZV z4Bg3807-BKvYm=>B|~pAV4rffGC37U6ECG}<;kb#FrQS8p)Dt^{EJ1aylkx%1*J>( z*7=@1aBlCpE?&2QDeGsFr{j_FZ=0#cBC5K}f4>(dtbDTh*h82#7c*L=a#~i0I zz;OXdhWPBJaHOgg#}oX)Ff@NFJ3)OPQ`B-IU!`ofj6JW3OJgL!KRNz_so^Pyg)GC_ z-8>Eg=0ve9T*_ddgbEghK65Wuh(V)h*ybc@wIxB(vTU)gp%TNA_ah zE2A`)@HN(i9yy?$z2-N-sq>pwu}ZfwRr5RvLJHGX>M$#wJQRF4fqMh#L&Jmg#P!mX$)GFY z(^s6nY3gV_MSq>NGuk8R_h4`61LR2a;F~)GT&wUtu8q8POWF?C2MSUZHjLGeZ9&w*3#n*>ny14qCSf zp%INikL@sFV+ajQYdEL)kKnu?`5F;W?1$fif5j;x`4(+899!5y`wlu1ofI$e4xG%2 zJ(ZBw5ZD=tLi6rNY4>7~Ayym?%O*LPBB_u4aLySyHy9u10>A2SVb(AK;HN z&I(@M%)WUu@9p=`=NEu$T!rvatD=m$gGPX6fL4G@LTxR#I@>+1)LI)=5GWy>9Z7C( zw9)pK;PnS{LV1|46v6K&$zUEK#Ce1Ol?YW-2)(>WMZQf%qL#0PwmUI;x5~WeMW)7o zE`-KLzDbculZx45qn4J?{a+i-9`EnOb6!}<8)EV>9U04K(BsTLI1NgSY{;J?=gHME ooP#mqSCcDo_2UERgBvFdad8^AS?)1ccjLIdM=9>?;T?te1vQ{IbN~PV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ExtensibleFamilyHelper.class b/idl/Security/.class/org/omg/Security/ExtensibleFamilyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..25af1608bea43e95afa5afb2b488e817ead83979 GIT binary patch literal 2272 zcma)7ZBrXn6n-vA*koDSkiJN1p;9bOHcHz1))K5jpcV+C4Wfv;F3BZbNH%e^LHH^C z1%Ac021Z7w{p5^)$r;CUcQG zC?kMr8EMQ&_(VoO9!1FVsf5pjaaP6{<|6dSNSF^}A%e&FT*N++F^I)5mW0Q$cx1y^ z5j$Umu`1z98N(vWS9ltsx14ya$@m)U626h}Ekj7N52~DDI9subsYA&JYx4TC|F_#c(B_@I_L%2r|qXw`_)oao_%|d5~_Iay(zR z4ErFpuy1p-W^9%CW4&yY4$>l(#P@AW&lAdnvryWZd&4jc=4?H`yP{XubV4UdiMxB| zkyG3|PTgk|7%r2?j=ra-O1fE0$}&~pkHp2?S-%TsU*6B0HQe1}PfJI%}PDcqAvslY7}wkhFz1wY_N zhA6M4Y@^_n2wkKC4L>Q+L6vZ+E!4t(o>y(7Vk*d^px_?vD|j2@3?t3NZk3Tl^}M~p z%Uj%HxUlV9y;k7chRH1nT){Sq3ZB6bOm?WOTo(nmF{vPhyF|)gItq4CVn{5`XQ!#4 zr$ox0=bXMbMHu5vT0Q+Flogn$C|E#M!4j$xepXeP} zict4ZeTh3`m~7WVPhL)+_%P^V2-j^u&8ZHN z_ViMnvQ3<$NU3b{)Fn384AC-L&FLAzwB0s7s-3+>9ojA5T4vcWsWl_^u2!!-qkd$# z+T!6Nxjxj!(IU6Cs%4Z7+t}lpooBe)mb}Z^&!%Hg%*RiU2!F=rF!kA~LIsc`dDPQ^ z6rh%H$ZVd4+^!(HGck@feV}A+^;F03@s87E!f>lwxz=5F=*uu5CS6NO`T*n@82u)C z1a}T82E`d_t?*zxmsk&u(^u*yeFGU}F%#%5Lhm%5==l!)8={rb8d8tIexnzVBelD? z9d$N=;4%6Ro!toTAnxs6LlAvr9aK*c*hn5B*g(hyi68;hbIZ~y+*I`q`k!M=eU1JG zq-^pH0?#p!e2u^>gb#m3Fsn8oA7kKv0((p<|Mo;_`ioK4_PNK!G7rl zl)sS){fWV4HE@E#jo1ZZ`~nvnh_WLL<Z_w(B7{-TP7e(j@F(T@2<9}2mPtX7W literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ExtensibleFamilyHolder.class b/idl/Security/.class/org/omg/Security/ExtensibleFamilyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..fc5cd5a9e026a5bb0b531f01c828285e20ab418a GIT binary patch literal 826 zcma)4T}uK{5It92H*G5|wX#n$%8!SoUX7rnND73EUS-uqR#sQGyO#f|ph$Y?2lS(& zxw={gmMnX@J9EyQnX~ip`SuRr5W7Lhhz8(CEQn>Sh+|b8aT#ke)@5ukNFB{|bcW=W zW!F`!SyxMX)v*oURnH!{-nug?rhcw94YQkL@E;j1gC8?^Q|VgUCz zt!p)g{cl3Pczt@Jwk?}$B%~HvZHJdQ!J0Y2@R#qY7t%;gq!b-K&XLNz+a^jpl^*pq zkh!6_XgQ}~7K(xZf-*K0Y++kL0y_$lh){d~T5(~SHQiez%&^h8fBi$rb@Xy#%`r!(sM%iy;W-Xy*<>)x(949q zw1^Vj$Zb03=qudMP&D%j_Cx{n)AMdR1`j zeo?x9er~#caB6aCQD#Y{zI#!AX@O@7BZELzVp*boPGVlVzJF3yYH|r1&>RLPpgu+h TNd{&H79hL%;sFRUF Sl7X3l1xT}k%wb>yk_-S8ZyWdk literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/InterfaceName.class b/idl/Security/.class/org/omg/Security/InterfaceName.class new file mode 100644 index 0000000000000000000000000000000000000000..8077bac8e272b52013161844e6e5ede70fa62656 GIT binary patch literal 131 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gNdHR$^JAeokUuy1su>R%&ty8_+Zc XCXj9hNd{&H79huv$T_Dv9!&0i||wU1-{}X z&}d@d$;2OJ{HEP@p{?>Vv-{oV%=ykYzyEyy31AL!8NIkKV;VsTGcp{QmC5`-!b2Hu zJo1v|v4khW_*6y@=DoBm$OvIk{5})Qk_XR4i5DI$3(ve*!V*>_tTMO~=24zA^hI(; zI+)u}2Unuo;pJeQtSh+`4>7nG^{j3#F*y8FI}A=?rY(^(b{Ts7Q+1h?E|TWRUXwkH*UB{JYF_|ehNI^daB&;cTi6Ms3YC{`2TF+%t+z|1v zB&;jgz-xvMUI?0c%IZILNx>!}3bycuq08oE?J&vnrk=|xh~ljRKc*DiM4yCr3hrP+ z!61edOyVwsx7Jn#+lVoYZ>&ZZNM+LkT#P4+M8%Qa{Ds-+83if=m*6)>t@BKt8-&;f z72VzALN1-vOIK7(TBP0yb{Ix%x*HiOtFA7YD4>EB9VaTS6|H8Nv@2DPsj0w@Di`!w zGQN^M(V)R*=`@)%4MjR_@P7iJ&Ll~5CQs->fQdp`fdZl}!a9tXm3oQhMoy|Uw_7J@ z8C@$R%p}8(zi~#ISg!V>Hfi<9Y7XZZJy*T-@-fIlQS{}dZ&Ed_x9G2vc1F8PJp=np zAD}=|o8|5(I{{}2EhlBK7sD8_y!~*Zg{*Dr4>;Zj&fq+St5U>^QH)t(5!ywVs$Rf- zjA8X0?o&vSzy%z~Xbqgh@eQ7nPjE)mQ^+N>o=}EFAjZmQ$0^qX$1uIHw*`Kh2&?iO z0TAeizCihf-V)k2OSn-&yRU;Pb$*3H4uPA-gjNSwKjqULS^4edY;yQ~)!WhRSiHiRp@k?2lURTUURX*SBRsCX?N^@O~_N--2? zVGNnhNHx!pPP|sG&}e!!>{2rOG79@0FOUpQxmNkVG4f5x-B-`~pv6yp63ZNVfhV7k zI7zh`<|4tn4KWP;5uwF$<>ZWyxa0Gn=hRQngez$m=J6X>4Ah>61`epBL)TAasMEHE zo5)+3N5Mi-nI&a5uw!8vD;CzU&S3xh_7!)NVg70-44Z#Ms`bXvQ)duHQjO)*o}C=i zrI2HW^_b;_N%u`j1NQ&+k1e`XCf$%Z7}T7FJjK`OlcsQ;&NKqW%UGDo-=H&173UYH z@+HdCpfQ)`C!Z!Q8kp=VoeJcc%Gw{n-cbPL)G8AAD1q&jw=uRGTh$0+`Ud&i7f4Mm zpwXjG*n~0+x5#FouW6bFT`elnD-lz1P5Y8cu6_c0PbbCL!ZsnQrD9SuYkx-O3k;=5 qRp`+PxkIbDi=9MoAMwA0?Qh7w&@PetfRqaLIMh^_jzj%-9sB}JHP65R literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHelper.class b/idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8a39c8c545a42a617803dd85b96a8ddecce0d3d7 GIT binary patch literal 2151 zcmb7F+j7%Z6kR92NEQktCZPn{vTs#VmB?Nt*gifSJaU_iX6zN z@CAKMFJnCIz`#>y`ca+kBgv6t!Te5UkIe@GHxg+;--RI zD2c~y1z(~p;VTJu7!oyauf-WommIgDJKGI?y}VIa)2k$1cj`RPkX*HF%e%r5%Vakh z;zCSE&2hIFrZd?APjVMdmc7GWkD-tm(68Bh`2$gfn{C(f_Vl8?>zIaTIrh5C>)iG% zqq!qULqV!kM9H`tmSl)fuM9 z;(@Vi=uN|J=oQbk>;{D!cez2@jX`!T$MwV|6kn_DkvTWE^GBqcct{zdj8|U?UT%94 z`cZQ$ubNH2z$#|(wuB8870fd%^%`PyPH#BPI(LPCRl?UQHt`L^1mDp;s~+|fRb9om zxU1qj++#Qy$ z%|o>!Mb&T{-0Kson8Un^94<1OEa`9?ug@$5LHfh`H9 ziaNLmm_F{SXyE6gWtBHu+&z?r^40?`reLyHn_yUJr}dEcg`v@UnL90{U8C8i+b$lZkEx+d8ZD34EHP)b z9e>aS6k8_s( zVWbqJOK&N9r*%Tlcj#-9PDW=!djj?wy?_j94ny^XuLR;?g`=@Bm$5WE?^-vE72*;H0=eFk1?w~N3sK{lzV~LV;svpN9<3?`@bSy(mGJO zIJQq760x20*}hA@GGem@2^qmZ3oS%05COsd((h3J!9wyW#&2n{^zn)oPoJo0iS$IJ zi^(q1>63&!^#@ck6mc*J&=^>j@Mz3m!f! literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHolder.class b/idl/Security/.class/org/omg/Security/InvocationCredentialsTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..39c40ce028ff285781dfcba94312bb8c4b2eea8f GIT binary patch literal 880 zcmb7CZA-#X6n?Hbm$u%u7kjmW)(lpCHG=X>K_IB~Ri<8KvbM4AjQ&+Yk@TS-(2t7F z)ma$`$=GGP=Q+=L&U4Pk=i57g6YQm+B9lY{ODQa4MINj2$f{UVv94l+LFrgd$Qcf= zy`W`!w=J{68)0CJ2lLA9cnwR~o?8rfle@yUoV)6S&kGERQ`@!08N-BraKjKUdQBoR z^>J8aqEZXE)nwTJ$t;%27w4w$1;VO3oK*Oss0f1H7Gy@Ec2DZ4m_9P46pG;-r6x!= zLsmcd7T7N%+mYG}8m6FWNFt?TQ^OXvHRQ0PVHatJqyL+8={ZdvFwC{Bj%7NQ+cHb_ zHg5=q+<@gzi~a6ox8qgfjxQ_4`xcf*`Y~kTw*mi}vl5wI9Z5c9_BiCdy^(XlF|DWy zhDmyv909GbLSHlyI;ZJxz89fe;}z_QF3=0lMBydG=mAnPY~)`M8(?NJ7hy6HCTZlm inD_;m$HHGo-gri=i}-+L5$Omb*%(!dccDB=8Ne4Yf8>Jz literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/MechandOptions.class b/idl/Security/.class/org/omg/Security/MechandOptions.class new file mode 100644 index 0000000000000000000000000000000000000000..67de0074528e39372a820b3eed2378231eb37705 GIT binary patch literal 362 zcmZXQ%}T>S6ot=iYSN$BpQ!CZLEW|KV!*8;Xmue}0tUJ*X%b>eI|<2D=wrDkf(swO zhZ1j6#f6(Q+`~8boSDzB_YVLU=r^FFQ$x3oJy?Yt7&tU=WS~cAtwR6VlX1S9sZAOZ ztjWTA@x;=Tk#JQO%jlBOO;QynGN0w^G)*!U1_W{m`c*7rbxqI)!zrOUP6A%h8~oql z4yPte>=RgPsGDe@NjOciNF*zc3jK8!tBrUp`vlG|kkI+7uRL_Q0Li?FtM>X$RnwBJCsRoOy&WxK#lw11#u ShBWrtB{X8jKG~wW1Mv;4YDxhB literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/MechandOptionsHelper.class b/idl/Security/.class/org/omg/Security/MechandOptionsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..aadac9ea9c2f29b7a65c2fce12c8f0e67ea1bc3c GIT binary patch literal 2377 zcma)8ZBtuC6n>T@+~l%pLt1LVLJKW4Buc2&RspLN+CoW;Hi#l>yd-P5kT-8`DERt2 z`V0JuwGB)eo%WM6{v~G|&)%0L1Tyl0yUW@0@|?p6fD#YEZ2$IHch zd@l9q?reOSq;ut*m}cmn(M!5{hrtsWUt#b{F)f+0vChyJ8E>;Bb7`cPs=_cCZb#bA zXG^=&4N+QTYld#_#*-qup_Ou}im8`N)oB?>5j&=#Wy!~_lYBJec5=cHOq*JEE2&kM zwe^A^b_utg@4zwKEg5&|IfnD3v8ioq@q$*$$J3^vm-3XD*AN<=K4^zjDI2B?5??G; zY9^@*tvG!ejK0T201>*_(POG+HeH^II{!?zU|kx=D8>|IIKII+!>D`79VlBU7jnXo zMw)_kjw~qEkf_E@J?9h#T_1QDiMrx>aCmP zYTT|~7e?~vhIvoboMv-+jY16>q(wc9Xb*Q2aY zhOwqQJ65A~n_8B`u+xA?tVfSE&PnDpShlr7jiL?zZ^2R#WvN?CkIPLf0dqK^45(QwU~4BuX;u>5o*YqYZ2?H! z=(d)D%DF?k0PSf2()T+3*Gns-)fe3d`;9grMH(T_amYFZ zya(vovrYquBIca-!;3DG2BU}Ytj6}?t;1(K3E&O9>8K@Wm1@!GD|A1>Q1m6b>rfK0 zSMWSRPwXW;&*0zt72ZU&4)p*%dt{+tkg!X%6J+a$XNZ0Z#3lYo+;BW=q$SZmdZ>z443M-EZ3nruGl2{@$Qj}BJc1q0%{-QKdCou+3BfeoY-i3nGjlp$-yfd~ZFHoxTrYZU||Sb3s8s6u8crQGJ@9I3*)4pEYs?5L|j znLCP$h6@Vjp(qF;EMr^24t5o!u%}=jF@}Q~HeA|fU3VEGO|7G;re-zNae4{ohHRm!+wSV_wcw>@R@u8b`EXG8pFQWx`fk zK8bGRGMx+b742szntKO(p#b{nMK7Izj~*Z_(z*N_d_&95OL$kp zdol#PFJm5;C0vowkA)CP5)u}F(H8S6+& zxXCSU$w*;?pFWb1mhdq{U)J3%nGB~=MJFFG-p|L^(zjPv;+rI0E9T4uL;s>>TkbN0 z5RGjyh+IssY|+_fI2ny~c#=DJvh1?yxD1!09r_h}H*vQq%a}&RvE1GGhH2c>?OeL# zT1C5@;5SL;L)Xy_0+~MwB-R^+VKC$B#&;WfX;a@Wn3O$YUXOU}5c9T}16GdV1X=9p z5A=9JxAXCg>sWT4LK7WRC+&JCr&7^z`6cnBU8=ZbZtC|F#~>-;6RN`xlm$xb&912F zira$i9Xd~7aM37uwNo&T2?@6qWH7}LYt*_+_ET2bT`v}Lro$aKC48!23!gCzo8`D` z<@_F@N-FpqcNBcVLl|x4>iR>&^a`oqF1}RoHr`S2CL#(ZF(u(E1yRHle2uIE6&geM zVEH)#1>Znt(300u3)Gjhob&(iUAQ=VLBh5I15}(dJtE|ks2jdjkjFg*aahO9idiU` z4ke-$YkGUf;ZP|L$@g`(A-?fuk zR^FI}{V_Y>J#%O}n(f`@PJR18FI4EZQG?puHM17){cPE5e$JtDJ2X++hlGM}ueVW?MsDWz*|BM4q`OP`z_g(M7wjM zS%GdOVq4-A{hP+bM3-nhZrL>n29%Ddz z0pV8!_ntsZsa41|4D6AIL@cK~w&%$=2w`GX!dsj_EixbZ3K8J!&;1PLcZ}CCDAe#; z6+^e^Si^95gaE_8Kp{P+Pvb#P0c?_BXbbud*CaumSc*Ky z$&|1>9{CZ&+PGT7>zPLad-CsJS_^*=fmcu@%rf>jB{)R8?t%|CPhbLpMO1CSiZ_I% rh_+8isur26;nbr5A^ph{SSK1n;2#7DBuw#NJWw;TK_8>Y>gmRR0^3r~ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/MechandOptionsListHolder.class b/idl/Security/.class/org/omg/Security/MechandOptionsListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..42498f28c3f48eb1e559ec7c6c44d17f2182cc7d GIT binary patch literal 871 zcma)4+fKqj5IqZ&3RcAnc)#BYJT&@>F;QO7Xh_uf;sdGBU`c74vS9ctO*9e{{Qy78 zI19xH38@dA?oQ6xGjnFXzTZCq9AYnyF{EV7#~@=Njzuhquq?ugj8z$HGS(TSmTol- zhON5`$E#{iy{cUs<)&xywsvWhA9TA?bh+u+jT}St$h1v<%n(-7w+xZIQz7cE8q5`N zspJ`Yg<)U)mC6^dPERz~@wk3(8QPicHu*ItSUo2g(b6LoLK5moO0mfYIZ}zYU7{?h z=^>dL%8QC~3KUE*tOqo#AdYbv8wxhDrC=L73U-lXNCyxv%myzwR>klb5;eW0YnErvD07C*K7FYBUgN@ue@YmZDYf}?R6g^EIlMIbO@QI2dK0>05Z;_z8fDe#i*%cPw#vydY(J)C(8kC>nFYqfq zDpI>umVUCzAGNi&XC{zLf?uX*`rdQq+}r2&&;S1U3g99v9S1O?!@zkB7j#5$QO6}* z)^J5f99NUHb4|mj+Ptn~KgN>u$R#n38wzz(?fs@6zb7!Eb|w>;(s2v7b=<*S4bvKC z7-D(3Q4tIW&9YlG%Bw|VYX1J@gt17wQ{@$rV~CI2jxBF8MAE}c3{kaBOTO$bGwe$b zhmZtUAls=5S2Cp2q4y}ZnoT9NHUE3+<6tgDYO4lk7=uA7%a4U+TYe8Ct z*K<~7(ONDEY6vOwE9!4i)=*Q2y~41UGFpTX-W3)_N5dK_Wml@77&A^~O_FY5t>)S? z#NN2Jq#lj!N-@7CcQ{%_sBR?23nj1d9Q`<~;U32<1{nIA56bV~bh)%5T$O2RnB({Z z^9((rYDjw}I8o|5$DjC%<31J``gSV6{k9+~(k?q3i};&k7#WU(IHX~T;{hIWJi=p+ zqZr^ggETdLP842Rj$K_0U}z-ju{tU!S=%97C*^C!MKi~+KQx+t4oz=QQOJD7wO4IvuZz4aFq{uJBuEacX&AEZ zpa836TUC!_sm-ahmL67BzlwhGs}s$|wrdGPryA_-;)iyDG>#?%_eMDYMF;6VJwW#} zgRTaI-jeiA<4MmW^wmo%qcxWK0``GkK#4RrLAb{Y0?{pWYG19U^Q3k%37KCzbwFI2|yLk^rTC=p*s>EwVwb#tn6S6oPB%~;;65^R`4g37+ Q6FAq@VG1M0NQfWC|E2)OQvd(} literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/MechanismTypeListHelper.class b/idl/Security/.class/org/omg/Security/MechanismTypeListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3662a49aae1409655a5b0c3a8c69576d54c806d0 GIT binary patch literal 2119 zcma)7QF9Yj6#i~D?Izn>o2GzJ)6zo0WTOof7234LwxA89R7tHOYTRzuur=Mp%?9Z^ ze}Y$EcrEIL3=AE3a>ieyua1MByV*2pvT=Oby?f6+-}%mW&pG@1>t_c5X0W4R6f+7g z;XN7eE0FMkg3GufV^%>w=EAg-mN73j7ZjYrVwfIR#p*)^OIQ}JE8_E72-n5OMEspn^Gf)*F%0G$P5*vPD{p99MT7JqZjGEqySTMw6)?9Mj?sxOCgg7$ z8d+yMNt8>rBZ8zdR=MgBaYNfp`>~SoDM|aIZ91e>x+lzf)oJ1QBquZp&Fe*1e~vMX z%ec*v!z3xxysw<0S1Hh5YR%B^X_i^p6#@z9>h8W)tWvZQo$Avu@}?-(e8sI+!J)HZ4^i5ynqjIbg#VSTdcsD% zC>7&}s$uCy-q9H@#WNjUf7p4Q(GLv_Lmre?G_{J0vl;JhPoJG8(~i;gAEC}1b@7vc zK@nphUoDobf;;>&3|D&IV7qv}L*;CbknKZ&VZa?4&7i?}M%33_Lr>275bo54x? zAB@ufh0+o2ORF%gX_V0OG<^-zo6);ZeG2x37NCRF;+{F;8i8OPfqmB+#u=RTtfvq} zfOZGf=aB9spCVX8UjrnJDV+0;W$7)Bsp>2AKf<{B68$yE+2kuok1&vY3F%ja_8%jd zRclb{7}zHdnOIJ`Y|oQ#2-5hnjJE}UnmiuzED;dwr+xfRR8ppz$OTW#+C;&=KUJJ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/MechanismTypeListHolder.class b/idl/Security/.class/org/omg/Security/MechanismTypeListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d067a3281be09701b60a481ef6b58695adc51417 GIT binary patch literal 794 zcma))T}#4H7{~udol~1-nO64xzVu?$T^K=mQ(y=g-E<*K4>p;b%wy5FDkzemK0qHT zdX7yX-n2WM zA$e15nD?e(n@-&*3(s=ud4}+j(R*y}IEx z>qen;d3s{BTu+#{HaE_lR!2~JZZ`8WB3ya!EI~Q-u_2|77>rRW;;}^`8GUc4%oX`% zi+K$i;tYx5ku=0Gp<+$LIyN+HVoSp|QdGX*Z<$v+)X}4H!K-(sW3`(yY0+wnGuN(h zZy;&uw!y1{VZ9$cH0|%8a`69E;C4$^2>q&fI98GY6-VrXHsQ;fADd%9))6^+`<6mu zpKeeD3{iTR6p${MLMM`#>?D0HAV4P|o_zz$20svZMevy%=wVYnmL@DfzE}^-{b3TA q_L-E=M6~GQA1_ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/NoDelegation.class b/idl/Security/.class/org/omg/Security/NoDelegation.class new file mode 100644 index 0000000000000000000000000000000000000000..07aab48fe1e8e783b82e1dbe292523224203c5bc GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_+NY YCZJ|U21y2H1{NUA3gj^{umMR10IuyFa{vGU literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/NoProtection.class b/idl/Security/.class/org/omg/Security/NoProtection.class new file mode 100644 index 0000000000000000000000000000000000000000..c20b45ce55efbc925d6b6488b54bf0eae65b3416 GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g9wUQ5R$^JAeokUuy1su>7EqK8Xcz+% WNHc>Z12Y2)kY)w)m>AfABm)4C<{cjZ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/NonRepudiation.class b/idl/Security/.class/org/omg/Security/NonRepudiation.class new file mode 100644 index 0000000000000000000000000000000000000000..a26c14b10448c75c0740433da169fa0b051c0b9f GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty c8_+-oCZGX~43Z4Y3@kvJ706>^U;~m205qWREp-5K{PgTG?myxlPv$3q}EPr z^6J>Qimx@4@Qnrwn<}<6l(DVBM&-0v%yQLqNdJ)G^2VkqOC6F`?QJE%Yc{qF%OW$y zM5nym1ymS1&Ag_{d$p0Z5*RtPActC0vfC1Vw;i#*a;%A-cR`yuS?w6*I=%H3*cGms zw`7atYt0^!9D+me9HqUN*pWx$UR_wSY_?*=-O5)AuF3Gv1*XMQVb{h>rkk%i*0$wZ zJ7(T32#g0q_mzWW+U6qR^RJoT)=j(M;Y_5mL9eap{|~4hAId0OMy<(bEp>d{PLKq0 z@IPE#K5BAOas^^?tn>A9#V$2hRkkJaGt2G8E*m}ts(pF|x|-A80t=_IvVnY|4;M~x zhlPi@YWumr=}V3qzoPu+u=Bjczh2&gcZdEM;s<_!iX2J*Io^B(!utsAHD9B+jA8%v zBEkq!+O7WrECPX%IxVB9l4SWgp*4~a9aP`Rc2$64x!X?2NEXJ?YXMsmvR zK=OOU(*u;8TfMJ{hyVPUK7{W^=oz|Hj0y1gj_9&MPy?^Z}9d mbaJAB3-?1r`a@>X;~7QhZ$t=^U=pq#DI9gsAsCpKbNmZkBGg_0 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OIDHolder.class b/idl/Security/.class/org/omg/Security/OIDHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3dd9f1761a9a67472c7e45bad709b9a7662353b1 GIT binary patch literal 675 zcma)(UrWMJ7{;G7H>Ycrm73XKD`?J(QMX2rc99SW8QpXtQ->(ijjF`Q|4j@LGvUfU>F?@QN)>v+D|uq~s~ zcLTrX6V@woMYR6xb$lwJEtOOQe_kWi{h>>etd?JB^Fa4}qN0iws4C)6WE`kC#F2^| zj#Zo>Ny6!HHLDp=`=L>-+}t{L%kmf!U2|X>w%KnR)kfE9`V6@#zp%_?55Cv3nwIVI zn&QNk5;G4 zJA_xtF{ai+DovC?cgmP5%rNUngiI=A;(B3($PBW9%|)c3zd;y5oOaqmGDLVaK94wp J^uosg{s7k&kh%Z> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OIDListHelper.class b/idl/Security/.class/org/omg/Security/OIDListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4b6baf3c7a4dacc1ee06a10c4113243f1749d2b2 GIT binary patch literal 1927 zcmaJ>TUQ%Z6#h;oFv)Nb2(1DJgkC2zN?NMc5}*RD5}O*^AX-u55RP#$P2yxy%X|Ms zUw!E-URIi=OIG{jTKzTk)#a-0GntSukiN`0bN1ff{`U3Ri{JMF%wb2v1m-kc!rLm| z(V*a64VUqriYprWF(0Lul!^uUxTs+qOHukhBc&B zd?Yn)XvpBEynU=9tKt)ezP!6z6%1pUic?Hh?iQ1)+1o42$#r^Nt!#@FL;r$Zw%sKL zMNe!ngyl0G`HHi}a8geMEXiCN+2xvWT!wKyAYU%;rZzWMB$O)dyN*>Lt+C^@5~Rj3 zm~*Yd_cyKTy0ujj6hHZHah^EhyNh+m-ex#K8aviKD_OG2#bnNP>~fLFg&kp$G!b-K ztvIf9l1!JYb(hqIbvGqhsJKO``q8mnirnmJmaV%TJ3q$ALZRg4k7E*3DsFS+FvBp_ z&Ua1}>IA%-%%-np?3%k)DQyc!YOkyKlw$**F${}Z(zUn!;!p}XKF1x7FC?+iPKej< z7ev*yD`k#Ne97@9-r{&2agJ%ssQ8LQM}p&Pxd!fx0iBA>zmZOO8IFhhm7MCbhg+rlq*k-qOgsi^e6?&wdkyZy%A5o=b z>ZqG^Kbrv^N(945tJU(Yddd1Roa+X(qALf9Zc)0^DAV^1`WvB>(b;D_ z2K$*VAVnHBUp(vyfp8O{Jx?0NDV+AD;|L=}uY<-PQ0|zI5pJNb1ro&>ob}Z*bV@bD zc#8gqm@=NAzX3I4K85lS1LhMbzag^s2;q#;fY!vo9$Bcwa>iqOj%*`Prf83ym;7l5 z_{dj?fMkE>7x2F@*~FmI#48O9-Joj|!?6(pjQt8ua!H@Mn!XCyG{MjU@nMEM5E8^j z+dh|PZ%~QjV4~rJy6)A|Nb^R_=5<&09P@~*guru zC~cMtKGnEMU9rYy$IeL^zK_*@fX4?=|WTqdwZG>Xu_h!9AO;=g#PW~75Y KMv=ABjsF4PU(S>O literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OIDListHolder.class b/idl/Security/.class/org/omg/Security/OIDListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..95567e6c0800dbd5bac9f87705526f8bfa5bd13a GIT binary patch literal 696 zcmaJ;T}uK{5It9SUA49BLrW{mK39EM>eUF+9ufp0qZc1!)kT!mmF;TyuL_DJs2|Xe zistGHD%iu$-kE#O+%so>em}nfT;ePUKcWh@15mINL=15ec174zu&*GY;DA9M7*^k8 z@K!202H#by+v3-hYNYS;6pCpPd$`9@xtjlR>O1{!fj(<=$6rK>ZMxStaFCsl(R6^ zWFRr%e|=4>C;Cbgk5Wqqp7UsIyX=~jS<0C+$=!w|Y{CWY*AIpOeN31^>zC<722ot4 zECvsqfKd7aEbaY*=N;ZxDqsv-b74_}d8if~!!k3NFxFj6#Ki>CnGvKJ$ObkSA(`|W Yyd%idm$ndbAz}IpLDC4m7a;@q1L1C#Y5)KL literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ObjectRef.class b/idl/Security/.class/org/omg/Security/ObjectRef.class new file mode 100644 index 0000000000000000000000000000000000000000..0c0b83584a536efd6cc727ae5a0b817665cc0cdb GIT binary patch literal 127 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gLMTn6uRl^ro9a*HA&MO!OwCL1Q&jQ zA0GU9Y+-$SJ1a{V&l}t8NmvRiBT69#D>iS#8B z&uU)ev3?UlCO3uh_J-Y+e3fD?lSl;NO3gK4_&+iUp1eDerMZ^jS_%LD@gdQ?0+)Qg z1-6F4$d3FZRi-;;U*;ND_#nnZ&U(zmTz5Y}?;KPE9d!5dklRhJ^()!EDp7MUN*L~- Ig!$KvU-bt#;Q#;t literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OpaqueBufferHelper.class b/idl/Security/.class/org/omg/Security/OpaqueBufferHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fd818ead2c1f47dc85e5392ce9c77963b58e3baf GIT binary patch literal 2431 zcma)7Yf~Fl7=8{(*v+z7ptKg0QfR4Rql9X!6|l<9LJ36)q7*f5l0#ewo3PnX@P7Ff z{RMu-+CoM~r~TxNf5{og_v~(NOBno+b57pt^IrGwe}DfI!0Y%~!8MF4n7}&{?kEW0 zT?Ox9Qo@viR!oP9G9zJD5Z_mD6?emQ%t@G+aZkYl;tJZaDC2$@OZY$-`cTHQkW7eU zMaD;hxGLjg37;tF72X!G7N*w&1?%`!ygn1h=Yo+`@C9@UDG6zYP}1HnaE43qyp@gR zx3jV7rRAx~*a}gn^BF$Q&^lq5hJA-25E))&2nsS?$-I?fxDXlkX_C57GRz{kY=&DA zAAi!^AFq-UJYBL3dq1{R(059Fs!NKjG7Q}$v8nIsv7ByZV+q?b%q#^Jw75>(SwEmc-m-<0*t}UN z*(A>O?eVh_h8|Mrl*+rO+FL5wHG}^nY4Sum=M+oDD~L$QsNje)T&)zhX|m?>xeT|2 z%7%ojiZ5X>bns%#HZop2P|;LuVoOC1+YIMx$(h|t^MY;UO%*2cD&E9fDu!^Kp||4H z?I=o1DQz$E?G(4DKT=MqB@|Q|k~f6&9R|5*>y}-}7bOs$B5V~U?2w`032N@?1g0+EL5aQfiZnp6;w5aC1X5L)|4R$1qsyhNkeG>G0`OdB~P`etLIAOt^bS`rN&9qY}h<$h(Spf zok+VY14`w_1C}?_QzaBMpnEuQG#e@94qV1LaQ|vl~e4f zbssJwSBI`{Bl%Ln5b69|^ka^P^oconaC+#UqcLezHc7=g9u5rT&ZxkkbmLCh12(=Eg_?KxT> z;j;D&t%s1}(dP&}LR<710#6_x{DNRyJA_h3+W~1v=)-`6c9e8w1TIfWxFPV?grUeEnG$2kz_>Zv4$7Qe?Fp_oO~gU9GyJHkuxs8+_y zPtg}8>zALR-@C6wE4sJwwx>Jf>Go*RC+I6yvy4@tp7;7jbc|(X1aF>n$ E05}YGSO5S3 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OpaqueBufferHolder.class b/idl/Security/.class/org/omg/Security/OpaqueBufferHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2c664e7e30c84c7356e3eb6eef95e7e7b83c6bdf GIT binary patch literal 802 zcmah{T}uK%6g{J^o3@pfTG@xGL4G_e^=bquQ9&S7^eU^4qO9(=>>B>7f+FdmAJC7A z?&xYMm<)5-z4x3m_nw)r?~hLaCpZj3Ml=9FVnJ+TON4C^;xcw*?8?|vkBHI2!_A%L_LsxW-g`d*wY-TV)sp=#537RPorb* zDKFYBC|HJ~Ab_BZeFX^|C`cluAdLt^`dy5QN?lL@zb-%xc7+X7S17SP2dzY){Si=Q#R~UX32FdyF_YX$29nw3i_;8 z99KHYWbJCrrMhWsPLhO*PnoA59m{3d`iWMHHTS^G3otTOEH`qep%48kZfjV=pg>wC#np9FmOUgZ+}%uu*LZ9n zmPlreNl$rs45%;%H1is);MGaiOZJPzRC@>Zb-B%8hX_=9P&wtBg>)AyQXFQb+dTnlkmq2y-P)6A@wi{4TGWt$>Dv)p9tvY`{8S|?ecqcQnSuy86X8^{;> zaN!j9S$L3Zx0kz|zU18TE6Q&UKFuB>pqIeCLe6<{Jsiy1C(0(8N`ct&mq2|)hpxj4C`YDuO z5ZQfza89oywug>gTBu|>*kC(M+X$3?F1^{f?nMbSfnJ2(Q%9 zRY!b*f<1I65`^vf85*@@5S#~|3dAtMxNv;1t_Bnz5~rG>a$Wh4Gt>{$YJgCur<1=$ za>`6!@+ZX8eUzNZ-&4ecfB#A!z;`0_933h~h4`CUjv|9GAL}Zy6k;Xy^nM*@mFZ-9 ppGbN-IbO%Pdm$qIDYNMDj3V?8A_Pe=36~EQjyh-)49v?p{sSR@+NJ;i literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OpaqueHolder.class b/idl/Security/.class/org/omg/Security/OpaqueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..c1e96f2fdb02d35ec6961d92d3f4066dc4e81022 GIT binary patch literal 681 zcma)(-%G+!6vw}JZcc5Lm6};rR?wUeqh5_5eJKcpj9z?@sY8_M*4PaHtAZkl=nv?R ziq6#uDi}T7!#($Y&adzJ{`vRopVZ9=c2-lz7jz=lfr6CpHn~#y|-q4|tjGA94b5HNQqoRTpC<>y8$=FwLfI|g2 z94Ra0B1)jQ*qAEJFzbj1Ofq1iT499H46=dEMWmp;LKs1uR@y=$KzKIZ Mk2r$#%-aBd0Uy1S-T(jq literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/Operation.class b/idl/Security/.class/org/omg/Security/Operation.class new file mode 100644 index 0000000000000000000000000000000000000000..19b6807acae172724f971398828489a36222a145 GIT binary patch literal 127 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gOm+(4D`NDL)g+}OH2#?EDxp7gFnC@ zCBCKBix)35yYpuE&3m6;n-2ijIQ3wo?V^c}fv$ri2geRh2#%iDN|&z$N(k;mRat5T zLNL@-E_9KLBuf{Ss^3JUi(*l#R2s)%XT2fp-KtX6cLb{+j0nw0Pcp()Kl%3`!N^Ao zz7GfcK3sT&i$DG2ZPwq;&r(%{&Qva?n8`91@p#Jd31_>fQT+07FXpC zta%ii^B!z)ax@sZDKCoWhsSIb&cb-Ww=Od=+u<7Y&Ie;`;qa&2W4py#+myrJ3XSk` I1#4@>H&ifJqW}N^ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OptionsDirectionPairHelper.class b/idl/Security/.class/org/omg/Security/OptionsDirectionPairHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3739f30a8ae3c0234407741f85cf6f743243d1d5 GIT binary patch literal 2597 zcmb7GYf~Fl7=8{(*ksw*Kra?7XsOV!5kkFGB~VMD3X+(%!78H0&1Ov(a&xnx;H|%- zzre3pTga5D(|&TszvPVLd-jrqB}DomyJydNFVFkDmy^H$eflSWxA8#4C_WT1gM@%t z5kAa`xQ34eTo=)c`4H{g5U{{E7e!pe%@9347Vt?BOCc=dQ?9!rB8+4ZDG{F`&Bbo< z$L%2Q@Z(Gns{%e3G00ur#TOx3eaU6l`06VW>-d^~ek0&p0a=DX*4(LT4Cj*-qY$r@ z3h{;Xog4Ge=NZnB#D=n^#EVL~5YL!~UM^6OenV5}H01?Wtr#YE z5??M?>n4e7N-1%2q=EZH2~nIr)^56PwhX@nnZa4LXeCp^7{&#BCqcmkL(ENnR}z;h z#k^*4)tmrTLLLM%qSfN2o_ETIk}KhR6eQe(&TzU#+RbfMvvMq91Dg`w#d{Ji;Z24i z*STGJL|0ukQ(7sf8I=BtT^It25=tmbsG!Or{J;>(yVW9qU`^wSgeWE?>b7?%XPrt) zLJd?(lgo?A87lTE?z(HtGgqdj8OB_QU1bH-C2Zloge7eA2#JdneiZPNgrD(?gsb@V z#9V8|Dvv+XVlbWCpx$8Ucfr_vQNK|o@~kq*t%~W2)aopc9ZDV9w%ayq*DSALhVhnB z+heo5TT+(60jE_DX^$Ogu1@MSh_;ksoxEK>VL4NAsnl1dmeqNaWouTKakQ;Q^T2KI zMyij)G_EeJ=w)i=khz(y*X~gVGn{K;u`Ss$)cBEtW@f8~UeZl{OUs%n!?c$rN7##| zZL};#j}8^DM|TW+_NjikA&d4&H;`t^7b>Mvy{xMWpQO!^y5yFW!y7S1jb?#g?}VgP zd6Z{9@YX#bXuH{|ZR5@1%0H<7I9}InbmNuEEt0u$1=y&`OY)@y4<^LgplJ_#Q zmyUtnK7bh{YhX9Q`=c3tbKUkYQwL9E}ozq9T_FtsCew6-BFo=A1(keu28s+r7 zOke%O~V3@FTv{R%T zgl~lY?8G^K8rzQLb&}%f7au|T3v+>I2(QS#1BBNGULnMfaB2?`wvYad?6-CY8aQoz zH*ltbvjgYI;j4c@B7Gj7?JEHG53Z9Vx)mHprz|&sZ{WO316@bX;W$Od;~P4_;MzWh zk}=<_2WH`Kb zyt?Kz>sraIwmr-5YP#!NPV4c)^2{nf-5QoxV2GSpEz3V;2xoH-3_{VV5ns*Dn1FM{ zvS%7KD*8(*>UZa7n(KJJQL#CnrDNAjk0I7DI)-K&t-7XH8YCG* zW|&}Ny1`(4(3y*vw#$nM1L1C_sxT(pXzc&qR1DPBr{*0~cgDQ^_26%SBU(ZU40H4| zE;lWxNGDRC>;m25{Rny0cd!?7pdVfg!YPF417sdn^KS?ZF-wRAm}G#7s`(zme;{!z dPeStQD?&X8!z?RE1Q4E$Q6-@V@tL;)`~Yhp*Z%+j literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/OptionsDirectionPairListHelper.class b/idl/Security/.class/org/omg/Security/OptionsDirectionPairListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..34807933fa98701fb2a772e2eff391502c9efa31 GIT binary patch literal 2343 zcmb7FTUQ%Z7~Llmm}EEzgjQP&2yLm!j539)wFIbKs>Fr{8$@f>I1FPPOp`d7)bidx z(N|ykikFpUwM$m}!icU^1-p%RD>03*S`UXjti`!O$p?A(M*zN*@ z6pL>%1cjJh*`l+>a5@(6@FaKPWEaYo<1#G7I`oT$-Nc=yEMu7!$98x1bjh`gh4PB+ zSf)6w8@7`W_sQ0M*D*|jnm-CE-YphGf5tV;Z`X{{hOw2mD3cULJ^GPDQMAP$u(ugb zk;RU2&(QNmA*W|t$1db3%%Ec#q`le6tW-#Mh~1=m6Tm}SBv>=%MtDyGCt#{<7~&jXBFmvd zqvkxSIRp)kuV64tCs$Il)VouH|9^6you0ZRV~fKCm2R@Dm<37dn6Ei<_=ZD={lBth zWru7M>Iivm)Wn|F0h7slO0HQ*XtUj;VdaH`oWw>~3 z=e4Z75smmGdcb?~&`dRlqRpN9{GO4o&~3ve4T)=IZ80&~vNtkI;s{BDaQ9c8 zJLqy$CKwd4lCqV2v5@mtc9LQ3*h04FuodHpDWt7;{umzZ3yGo6TVM?)!B|rCUiw%n z?aqm29Zsea-waOB|89i-pA@**A#@7UnbsOTU!$)fdNX?WsE@&Zqyxy1_KdF{^prrb zhQOYu4dWcn``WVzB0$o9^(my=+G7N(=&6H*aRHOQS&H7mOjVzw_aVmAXXvd$PHE2} zJw%`O4AL(M?L9&;rBh(GO?WS*j^;x5Tvms8LtcewEleLt3*Jszwi_IZy2qi zU#j7yDh6)Qv4+9O5CKMh1}D9sPXj|w32dBTXm|QB10Dz|BEyX!Y3cgPYh)iJuW^Dp zH6Q&Ir&H3xX!HjRYNKimFJ~S|?9o4eYAyVJ1YUs4m}2ZNN^qF=;UypJ3V}%k7FD(V wDqfN1quM?psakZVhBFTWg!G3JzeD+R?O=m+>w z;@mbBTPVauCX?ZuGm|s(_5J<{U2soEf-vP@jcnH!jiipzCj(vUF*^Dc$l*Fp2MYJBBdT!wqQus) zO@})Kh9o^q7*BUCQ%3uuI6_}Dh*1Wl@^4`I_y=OIh(A*SZP;iC%MvU`HMI>Z{K2F# q7Gg3XCYdj^ApL=iW1=5Y$iE=og52#iiA)Gd(_0KAwUBrcV*o#>QtfpB literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/PrimaryGroupId.class b/idl/Security/.class/org/omg/Security/PrimaryGroupId.class new file mode 100644 index 0000000000000000000000000000000000000000..57a9560361011bf0a750fa8deaaa59807f4a8cd3 GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g_;Q@i2h|7De0;u_WTA2s4Qh+)C2AEutL5 z9np7VxEI5Hg{fxUZoR6lzx397p0-=s@mvK}RY+GncTZccZdl!Y+h7_fOr8~;UGsV! z)7$Bo^zQc@eQ1*LvBG#jUUjwI5nNc5!q|Z21Xjofk<7W}v~5>ARyT+bDNGOIhnxzR zhxu3B_E3;yG!*8CGX5K=5N#evrwWlk8-*g@Azbm=1mjyhZ>QT;V;S48M z$o~zm)Ha^3n7dw2OBZJK+1e^cq7N13{9BF}6kFHqXXm6`%=2%J@Smipb4X*9_83PH z!Z^>Yn05|Rr|=BVY{JL0r|@&c*_V&!PT@1e*{aXUXP}NS2V17R#M1<|614Og>H`h1 z6h21aejd2XGw*$$=}Z0*YPr6^eVu#p2%-KF4DK*@q_6r!`Q<2Mh~y0}gykgz;w*a% z(U~kABU+mM0`-w6xpEcP=n?WvkUU=cir6>Ag>sNCOiuxE6j2KJ9{D8!OFxi!V;m#- W2_Z4VzG;XV@y)Q9QQwRVQsNIAD9{W5 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/QOPHelper.class b/idl/Security/.class/org/omg/Security/QOPHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7844ef8fb07093a8cc3d0ae8521a5930100bf184 GIT binary patch literal 1926 zcmZ`)ZCBf57``5wHfa_HWH1LJj^SoWC)wsZMHJZF>bezHMCa5R+J_oelAe&x@l*B- z{EE8M_2_YD`{X(PD3AA(q%@@P<$2Qk<+|Ul`{}>`{rM8W4LnvcjrUc2fDdJSq#}in zReXX^Wh|=5ppYfWl8n!Ua9PEh_&iI;7cy29tSVSja8to8q4-i9w-wwGU_}LAskn=h zihH;(j8iTkHp4`2KH*93!pU~_x#u%n%_a0J&OzZwRN=L@XZr`{MtQv;&}IJA_pBN@ z=1+3$2Rr7;FkJDi+T(jxYt!0pa_SRh7*;klkYTL0A-m2nP8Pe?6U%H`PQ$GDp6xWK z1j*wTX_u0Dv|P^@LCm7lYWrl)t-ZpjiKTy``lw&ar^1xmejn%b&L~T@W-tg1Z{wnj zO$}dTj$x`dxOhkIxXn8EgyoiuZ!~<1hYX{9-}LQzG+~;9hVSr5!}s`s;atB1x1QE` z%eP%e!;h$HSb(YFEzA%?-zaPogHB;-c=z3P&-HmtxG{``!lL8zh8QpLB$TYV&W>H@ zj&EDdKt7wWTyg3N8x5B*r{OBzBL-3=4L`wRm@eKdEfQZBMEL}AM5D#)3)f_9Yp9_v zgKOA9L)1t=e%4@P_q3MrW{Z2rYAkQ>Qbi17y%vYNK@2B$h*>a9_Qx7eBH(hujT%l+ z;a*fj+6WpkT1#rZ91mLB41dfiDW z_J_W*^iA7K=Pdmiqnpv4HeP`JMjs$UVtb?>4U~Y?#n54(&Eg$gjy~@-f%5*ZO;eS<7Bt7&8^hZVa z(`hM=vCDSvx#!+L(6s$r~ z5QQw^K*1r76l8I%-~|h4T=7t4e`1b5<><8J{Hg59f3}BrvSd%eYl^bwv6i=P0hxUwmAl zto8x+N(qe1>wY&p($nqF&~rkF;Oi)Liisfj?G0#UVB4m1Yydug@g~` OY>XxeBZx124d55@@~oo( literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/ReplaceORBServices.class b/idl/Security/.class/org/omg/Security/ReplaceORBServices.class new file mode 100644 index 0000000000000000000000000000000000000000..590f366604bc1da89380beb42c8df8641e6051c6 GIT binary patch literal 136 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g>;!X($YD!#F;<||v>L#rlN;C{Km9`Ds zG;mA68uWax>%W`^i9Zn#ZGmztjwaHLWZw;^zD86CEd6n<)`^p$6OV=t!_y>?ubl-( zZ#o{wiJaWauou3<5ob7ykU(KDQ#}OonbsOjGSFM`5rf6&Njw?^krb#m+Rgv!S?)>K zd-22_KXng7Vifj*D3A|`NrXQ8C%${s^(S#SW46+0c8=Yd>x6DJbPf)WeNU3Ox&O-Z z$1>m^4BRG>Jul2)NU(3A0?WdAEL*s!#0GXPT*9h_%cu(M{Bt>~WK&@I@7@C2i`v#f z_t8T~tx^r*v>$i&BgsVzY^7B}obl~Rjx_qk7(0C45?{~1@ea?~I;bhc#)^HxmHF_)5LPhNl5N~OK4LE6*zMrM*>u=IrjWU;7;F#+309Q|t zo1Z|Ni+LJZr_4j!)HLX77a7zl3stFUpF+1cK0>^sry#a)g&D=BlC>+^pOF8If&yd% j9-WzO6uE)j46lat`(o`YjAz;@itmwArkvGdZ6#h20BUw=(F$smxrgg%_mP-V^LL6w5K#7TIN}Q&p6kNq#Jfe=|$}*5g z;R*UTg^uySz`(E0^r1REt4rhyp2?rx)wz88o!jc)|6aZU@EK|fW^hrV)8`VtP!PkH z3ckYE5-uqi#pNVP7A53`a7n>QTuIV$Rl+wizLl{oL@Q!hm2pkLT$k~kf*V*En}z7DR;!(k9lT*dsoyWW|d)zEFKz<483kx zHNE6Ird1RE4mU_!=qDwZi%ax^)o8h7&W+vt;aDafQyM6(>q9X&T5be-$OOtumAY3v z6(3<%!VfBLBh7FwEcVdEt=aV|cZA!fgp!Ia{KzoDo4RXOgBGDes@TR)Dt^WthGS8p zu0N^phHKiEieGS7#iuy0;uJn4gviLxCc_wU2&?aZg*~9+6QosW$dO}c5-EShJ%()I zT5*xuc0oimG@8YW3l}8ZS5d}q5)2hPs0iBhQB}e5;7}>y^#*r(V%XSu$VGcjhWYe| zhem*!L?oW!Y*f&p^t@*8!=UUEu0KU(zm-I5^#J;}9dun}FM!4Gtl$zbEkLV zkx_5aZS#ldG^%}tTHWPkQ}lhg={3G!8ufl3)$RddI1;#XtF>EpD-5?YgJU-+xjQK8 zzp!hd=Xz^&5Ox<8hNPJ6a^1FS-g8%ANQZ7itH&TeaO_O-jMkaw=Xl@ zW6q#>&q6>bo+)Iv<7s-`XXs}^N-@OLlZQks(;nNi5(M6OF_NKfsSN z&O$*ULCL0*?aVoIIXj_6fFq^`}Wo*gVma)Sibv51L49OeA zs;fq;u9kS!u^M(yz2y&1!{VKiW15C#cXAB=vqrmNpEGz<>3arW-l!4xC^ZLJ;H9#~ zwHm|m4u|joKvs}ML_^T8M_Mhu&*G20|iM$sJ(xsxH9w_w-`cAt*fcJ)~>6?N|RS@hQx?G zHQ8_|G2~nYxNeF9zM)`+nbS`QHXiq{HoN+Elt|Q?$`BxX>ynf--|(KrnDCqus_U<4laV$e-0hf)@RN zepGa3=wsog&3ia6&-wiLe0v9QjAj`o>LqO1*npeKwuK!FyA~RRYO2DiUX1R8xr&yA zLqADFk<3GJD<_Ys(o4~M)-qnGaU`#E=#*gVsT}2%1lOMhPl1Snm}_*Z;*bIJOvOr{ z6O2}SNGNubJ4rZc{iFMOyY|q5gDQcwjEaL2Y(isg(Lr_!q5ii|e>{^Dw)TJ6Zhvrj zAs&)c2YipXx$=9l<|A>ye=$L@P+;W&{5#5~am*Z^&$`K3GtYsF_X_gd!V1O<+Zpbl U_6_YZWUyDuq0S0L@8}oA7nd$v-~a#s literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/RightHelper.class b/idl/Security/.class/org/omg/Security/RightHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4e088954af8406a9a5fe8e2dfcdd40cd48a6d720 GIT binary patch literal 2442 zcmai0ZC4vr5PmL6*koBOq)-b5v|uUOSVFB<1&UChf&@`O6j9?Q*@lI@xw)a>+yCe< z@GI6fgDI6hA2I3|EsSGnXh8 za*5fM)%!Dvb&}4Ovibx=>!eXM_!L86B(}j26kc9x6LPne@Wlxrj{YoTW6Vi;e56X?Q2}i>@I8NbuFFOsg{J& z&aU?q$`kpu7+Hoc(%8}Vv_xJj<`Qe%G>SP&BWUUx-A?(DluITTK@y9_a+Q<1t`#OO zfEId0SyI)e&vmp?<({XD>Jy&KV^rF>R5g>G6xMnM(? zqeHJGxRG^wO&wA25IF_gFc>a-b(r7J=w)t{iVAkHtKeO{r(g(gG4wW~*>s@_R5N^8 zFQj#o8exiVR#FeOf{{OvkXJB<+X6#@A;P!yl%*hn{FYEw@B;|p2x1Bi${ix5#Rdfx z5DNwt=aS<@%ux}sIk)lKqhkzL8c>=q1=^~D1?)+9q+lO+6eK~J-o=j+ep2u=emTEt zdcG_&>F{c?lHSn;D?1zE?97SoL=({vhHGATo3U8L_8C&u$(cPSDVsrpQ4GVL7dwPY zHc!iP7#f$}~%5x*9XU`o0JBB;2J~@#?Tv_$#Y6NslW|xd24R3_+3h*@0 z#1)_Ux}`&d-jUOJs%#nsgByE#if0(c{C#kg{pq{V$cs}k3P zY(hVYtkw^mgX*L&2F2RKF0Sq~S`*s{UZ)T0AbqnLWU=e$Ekf_KYw3BDes$8x=nSbx zV87D~NRgJ8bKPNG0>L_34z1e=RK%Uz9t6=s(suP2fz9|4f;EI}ClS1jTaH?iPNAl% zuh9A!1L{k()*vP0uMl{Qw)jf~o+5ns8-hu-2Dy&5L$Z+2PuK<8QL+sqFhKt(5&}Q1 zU&r$nX$kamPoVsTd!ZL-Us40dXy1&!R>viFgpM^eX#MV_44xob!(~faM^_!)(JK`2 z^*^AHy-3fF6$1MQ(-esIw-e}+6$S`IuQtj+pAYA9n6eZ3^&X>V^9a4kxLU`xXXuNQ u_x@)Xh&OER;(f=a-?8ab<4@67#~b1tsNqe!d|`ah)FSeZ5F?=WHU0z5orBK+ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/RightHolder.class b/idl/Security/.class/org/omg/Security/RightHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..eaecc0948f89564a96321c642af5976747689e42 GIT binary patch literal 760 zcmZ`%+fKqj5IqYm6|4#hh=3Q=L@p1FzG8^VizX%{V0s%-Q|?dj9}$hT{+v#DWMQ9>O*fBJ7BeRFG1TRz_xz0xeq9n7q`7qNqca#@%7FDc5 zRS`r;!JdkJ9H_|PP{k3V4C()uzP8MkVKaog`cT(Qz2DX@bz!wS7jSVq@KrY~}k;u`%$ zCKbx&-@u+Jfk}DYEyv-b2MCFBzVHg)46}i-i;20IV7@Sh{}&{J&1Fa-{{r6_(oAIw RQ5PcA7c5mk%B5ERU}rCIrrRi@65OFpT7dQk9$R!s3~zniJK)9Q7_TDr9{I-Q)%18 zZ4-9{%7dQo?S^4D7`>2F0nuix6-QI)MzZgQ$G%2b2v~pKt99aJ7A|7Z!eu4aux;TAmMvUGRbcC%%TXok0*in5 z7TEk*+uH9w-gPE%BGn*H`$=anl3cXFMp_lb8Q-4dNaJ6OvBd{2^2tgtP{jf)+GQ?3 zhYR#cnsyaSzr`=n=N#!BPDX98hVxLa&|9JwDr&!nctZnhz)7?8!z^82eVyiNl)2Ob z$5g)uxPFS<{1n<;%+ts!r2%bS)1a$eWKhd2RHY^R47$Dc0pcw^1+jr^%qTXMtX;wW q2;&p-3XlzWbY?bD;0Crcyc*K~ivGdZ6#h20BU#x%Vv-ipHmwO4TW%xh72-gf1X|n}0&xhXv~^{BaYbdxqsWvz z3Qy3#>1B+k9T@o4nLbpfXC*nl;hFr|)t<|@-?^>+{qL_A06s)r!vZd9^!1T~k2S>b ziH1+{nSx6iCUH4Qk`)DcDO}ZX3RjY}TvhP7iZ4{GNzuAoHdI`bFxORlso^W!&``kF za@o{S#7zaa6l^gh%Km;+Fq|y9UfpmTbz@^|dwtE=A?b!&6M2ToRm-vbs|>MBc9$V8 z#k7@Oufi~&$qspvyL7UgJ>mHbmor29HD^D6C@P6+%d`A_W813#4xduEkTF1-$=ck_4{hUt=TR)4-}Hh0X5Ehu-yJ&bu_gnM7q6IP93jw~LTk4?ii zow`x-JlO9CwgrINvSy*u>p%?V9kU+qQxd#}4i?%!ob1w`x&~P$4;XagXC0+-Eq^ zOVsrzRnhb<*WvgU4>;b(2OMwVZ9?c7h1q1_#9__0!v48Hc@B37 z$9MRiAzQdsT%o>QmLZJ|XXWDZ1qDBFl<}hilcR#FAFcpo@fcM#v zrhlC~Jq(XcyG6Gx9ii2z_*Lq4Uz9D`_~pHz^Ci<>^AAz&pAd#)k-KnOjj~^5xRV*3 zyHUx5QPJ>)eG`3puttYr_fcU;%F!;{u2T=*y8=VH>o&G}4C+JAZBXz*xeGlGV_oPG zS?b~rWu|}58MNSChzP|qh3sxTP0#xR{Vhl-hl;+E^iA_k>$`NCrJd29(4T?*Mjs$U z8l*@)6DWar2NMT@Hi^?%inON?#{@~I^}i9jpL>RQ8;KAki8DAGnH6c5X1e|glTWdz zzrjp|MQKX!sUEZS-)O-hTbS;))L>BWDp^P!9=h}F)jgw&-R9qNHHCZ6Rh)k%)|D)Cc AdH?_b literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/RightsCombinatorHolder.class b/idl/Security/.class/org/omg/Security/RightsCombinatorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..c45fac305f4395fd44667b08bfb84372673442ff GIT binary patch literal 826 zcma)4+fKqj5IqZ&3RVRLRJ_6fFq^`}Wo*gVma)Sibv3J_GbC?p z$58F2p_cVp$1!1v_X?(i}vSTiRW{>mfuLN!t|Da8(-|tL)0tX6`h){d~N^xadb=_eIHMFj#T3X9ci`9l+;|z%r zd1|uZP-4ir3g}i_6z~lNE6kjJLa_0;f4!mPDtbLL=Y*njSbUY%&-Y=wm`& zT11I%q&C?l`U?*t literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/RightsListHelper.class b/idl/Security/.class/org/omg/Security/RightsListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..16b946bfbc88c36bb76b426e98fc61c7787a254e GIT binary patch literal 2137 zcma)7TXWk~5dMzkM7DB55~nRqa6;U)#g-vzQ=l}?rAbk)u?>?@eWyn;)3 zTgE#IB)qHOGTxJMMZq8z!gQ08u_!K=6ii?_Opg_Dx~gCmYr=G0d|nITy7+iMgbx&K zAT8rVp>ab&1~}AK4uumIR|Bf;dG{C7qrsdg0{Z7wYI8l)9rd`&qy&0E}E9< zEHg;)#12DHT+=I8vUeFy#uGi3WG;+Mt76y=gBI_RuUZGG+pW8-k+0gObD(XRg*#44 zIFOC|j;-g(cCMdo!q=E#IP2*7?{4blZGE?B5LXmuBfrUGadu=FF!vZvkjB1#PuGgN zRnW4IZCV9NBxoBtNmqJ9DVJ3ATZ8YCR z1xumDe9^57#}uYzY;j}}V~92D*v)JuV^*AvQgP3)g~7IrPdRq*8N;Yi(HwKnt21&w<>ajTyW1sjIF3w$$vCEMMQGTj_Cc-n7_FIku?r>-@|08LmST=0Rvz^N3 z?!F=VYr>adhOwsi#yn70Q!fa@8KQAtJ5iY)OJbDn8sm^_^oi&jhV#B%(AIJXBH|51 zm-V@04c+R<4s+_cdwQ`--p2FPp^lL=MZ4xIZoi5cddIhg(%ILPbCZtlvTb@y zs}@UE!CirAhGpN%b&}T3v70kmDziS0JI9}4$Xypr*THyNbk|j1-<`&(7V$m46Fb2e z{UIjlk3*@6`K42s&a_16`8s`#(VNkGKz#!Cm<}LCnsHA&>I#8i9f3nv8pavSdeR95 z5un>)^*2bjl1~tq@)Zg|M1S@t@E4e>V_2%=l^RBF(6Nru z$QS`eeg-GG2%lzvo)Xv$!O-6FU`AXJ5=6$ENz%gege#;UB&!*MIc`EuN zMw3%&9jCGnB=+c^Ka*|zVFX@+%a~*AFCsWhYwLmscA3B=0*k82qZ(e7mZHfcLQ<2_ l`8rNN2oTaAg1|@xt0Jt)SeLOOW0OJZ8n$OL zWbTTN+t8g>Lob^(&$alIer+}Gd4VB%Y_%pTKuvS4RqLoJ~OPSR`Ny+1*8mYpcIwV<9b7N(0=v*{f zP@o{eke)oAf;gsSY$?cMTfq)?73?9!ke$pw6s-q->DYDCWk@!SuA$pTyP=n=O|!;_ zWMjh)<`i=eF{4foQk!;1q>c>SI}NmA#J#|qpnLF5Jqye=-saY!#}3Jfv& zn6Qr?oJ1?Knc@uXG6>NMNNDe1TKE&8H-um40DWxM$I^s_=q%pH@AfABm)5BdmtPD literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecApplicationAudit.class b/idl/Security/.class/org/omg/Security/SecApplicationAudit.class new file mode 100644 index 0000000000000000000000000000000000000000..379c65d1f9042b0a13f37f3be725463496deb75d GIT binary patch literal 137 zcmWkmy$ZrG7`(5wjShmVyL-SlC{9ieg8OF-Atg;p{ZjDN9DD#DN=%pggZg`?b-tS-fta7dHWX>j^#O`g2G7SWAk@P@^w*yV>8!mj6; cb>Qgq<=$H(WlE^Z2VsvItHMoj721OM1GzvS!vFvP literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecAttribute.class b/idl/Security/.class/org/omg/Security/SecAttribute.class new file mode 100644 index 0000000000000000000000000000000000000000..3f35db9dc5819c7e6b64b1c3bbb64be9d18e24ce GIT binary patch literal 412 zcmah_O;5r=5Pbus6(|UZ9~Tom301R+SB(ip4<;leYPj@3woq$HX-Tss;b(bhOg#7l z{87fKiWd)F-rJdZGxK)dKVIJeoa3MZ9nCUIXyvezL)*ZvfjtBJgt}BJ3EWh96SZD? zgw8Ndd=W2vaqmsjBv5P7-$))4dNMRkGucPc5KJ)jZM^0H?f7Xi3+MFOjHSne|)jQUu%TMT&|=DW#o&IJNKrF z|FUTrjPC5dSjLHxZs>{I>)}nL*fx&%96AUFij2IGk4E{@FXp|>1 jUO>C{FFN^*ErYC%hpMTf_0jqXq{!yzSZ~y24z^% literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecAttributeHelper.class b/idl/Security/.class/org/omg/Security/SecAttributeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7716f3fb7fd171a769781460679dbc5c50580f8e GIT binary patch literal 2428 zcma)8ZC4Xl5PmLs*<@W5qP9W{2pSqTm8jLe5NgYtfCgfL(o)*SC0S!IByrgw^q=?( z`juLNJ>|4VKY5OSsps@`W_Pm*AsqN}@7VNymAQ(=+8(oWJ7E$Z2-Q80HBbQm*Dqp(&r^(2Rp^lj77vgF}TD-ZRktz8JTFPd8R z*_>8c($H`cW+Em71;`NSgOD&;9DzoBcSooWVDDH|pS zNz9fiRg?)?z#SP~T96@#_f;)GMMTFuOyV?CFWf zr_**Brv|wu1qSQRoJd}|)^FJkBW}wbv5p>VmR9BheW#Qs6-}1x5#9d4$SBb9u{%nGcwf>o~xdI=set4)YV?Db5;Kxs-t;QonE+{j^_XfLTF6w-vd z>H#?MO6+X0R;ilXc$qoz{wdS#C^r60P|xOSb$n>q-%r1igY;W0AoDn)Q<%;)6={vr zS10X)_JDc-@dq717ip-t>JD28_${>U+S)LNk#MzL@S}~S?dl;p^zs|RM5W{Vg=$~JfM&?Vcn1y?0|qT(p4jbX1%K%raU>*fkSk! z9N?o=T($7=9(s81-9sPmSNG5#ui1_u>DoqJ+b%W!8a);Uc<-}tjrV>F*BxR*7(McM M6b%7Ez#TRI2PqwdCIA2c literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecAttributeHolder.class b/idl/Security/.class/org/omg/Security/SecAttributeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8ccc1ea54e139df45e6e24b31fd3ef61e490e830 GIT binary patch literal 802 zcmah{T}uK%6g{J^o7+}eYGog$2I=~+)T=L5DN>#@+8Vo1D z;8OYivZ(iLhZ{A^)Ni{zmsdE!It9T9R-dQ`($6lWlwCf{k*a*qBT6EhoAxw5=7I8} z-GYi$s47BGWE`qU;z&gbX%!hn88ZJ`aAR8y(_sj=jlQ8=-P$HIHgA=gJFe!ChVjKC((-B zrMO1B$f!bD?H%le5*U@&y>c8r`T#|gwfq}=6U+v}9wz2tLRx+Z{~t&MoAZ#o_6pw+ Wfr-i%q8>!3F*+$Qg!C-h0Db_#`ot3e literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecClientInvocationAccess.class b/idl/Security/.class/org/omg/Security/SecClientInvocationAccess.class new file mode 100644 index 0000000000000000000000000000000000000000..99cf6e7474e3b18b950c11574501df7ae7ec95ef GIT binary patch literal 143 zcmWlRy$ZrG6ot=iZKH$W>MOVed;{s!$w6?xh7eNf4K!)MS99HpRQr8uUf+2hOM>Bme*a literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecClientInvocationAudit.class b/idl/Security/.class/org/omg/Security/SecClientInvocationAudit.class new file mode 100644 index 0000000000000000000000000000000000000000..a7e20bf585821e71e0819a8e14303527f2ccc145 GIT binary patch literal 142 zcmWlRI|>3Z6h-fwU$hWxU4m7>9mrHuSqSzqhLBpJG^U>sFUzLpa98>o|LTbv7+QUTf&5;8+IE(HaSn&*>3_ gupdn}dNS+yiAi@DPn&NF~6}qDM1EOys%K!iX literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecClientSecureInvocation.class b/idl/Security/.class/org/omg/Security/SecClientSecureInvocation.class new file mode 100644 index 0000000000000000000000000000000000000000..cbe611a5f552e5cd255dae33461c06cee87d23e9 GIT binary patch literal 143 zcmW-ZO$x#=5QSe_+vq}Y>lNGtdWEjKav``MLkKBx0(DyOYA!s0hZ3i5-X9*PkP@aQ<84UJ);fD~*b=_(O6*!eCx^j>168tw4? XsGE^Nl7X3l1xT|3c}xs!K#~Cftu7r; literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecDelegationDirectivePolicy.class b/idl/Security/.class/org/omg/Security/SecDelegationDirectivePolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..e318d0bcf1f7112444768ceff4e884faff7e2a04 GIT binary patch literal 146 zcmWkmJqp4w7=2%B8yy5!FW@EtuV5D^1;IUrkC2ik5Ys}h=HLN5l=yXd|Ge+-{Q+>o zMnNg83C(1}$OO6&w&xUI#l-ShvRZ}*!ZBs1)8O=-?U;R;7twKGXNpg;^Ozs hb|&n4GZ`IBbo%=2rEBFJm7EdwsId}m#8qeo@dt3fBa8q5 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecEstablishTrustPolicy.class b/idl/Security/.class/org/omg/Security/SecEstablishTrustPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..a159fb58974cd4f566e8fb82642aa33a424265f1 GIT binary patch literal 141 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gAfABm)37q#l_7 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecInvocationCredentialsPolicy.class b/idl/Security/.class/org/omg/Security/SecInvocationCredentialsPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..20cd2344b47daa571262e72b4d0d4a2dbc1de406 GIT binary patch literal 148 zcmWlRO$x#=5QX2gw$Vkwt)~chg|50%5ZsS3l$4l2ng)6`7aqVviPO#doROH9S)5xOke`#8T*=5Fkd;`LsGpOVm#*)hl$DxX d!Ui;xfeB~^BZDLZGXo2dW(D$?7}$U$0|33YAJzZ> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecNonRepudiation.class b/idl/Security/.class/org/omg/Security/SecNonRepudiation.class new file mode 100644 index 0000000000000000000000000000000000000000..97da30908f0172743607b6899590fe5af764be19 GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g};NbyykG>$vf#|NtPv~c*yr4 ggw4Q(&B)Q4(`|58x(Y^9L4++@EUK&88gy0h2c;At)Bpeg literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecTargetSecureInvocation.class b/idl/Security/.class/org/omg/Security/SecTargetSecureInvocation.class new file mode 100644 index 0000000000000000000000000000000000000000..a174381ce7371e2e84dd8f7f8a0e1feae47e6afa GIT binary patch literal 143 zcmW-ZO$x#=5QX2gwy_Jrtygdp@CvTFa-p~%LkKN3fjA9#H5VShLy1#2@8{$3KHt|H zzyY0sF<29t!qe;t)Dt$x6d%G-t_!Pm*b(+A2b=D}p1qs%AkQUSI0r9(;`>;VV;NE; fY)39^Cyv3MZlib7>N6^RBJ5COrQT?((5m7G*YqMu literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityAttribute.class b/idl/Security/.class/org/omg/Security/SecurityAttribute.class new file mode 100644 index 0000000000000000000000000000000000000000..45c58b3c4216c079f2e523a846a86d8471da71c4 GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g540C3eGLjV8( literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityAttributeTypeHelper.class b/idl/Security/.class/org/omg/Security/SecurityAttributeTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1167aa5f6d35a14795917b16e86fe327ed675a01 GIT binary patch literal 1767 zcmaJ>ZBr9h6n-vw*<@J?1QivFB2|-MiP|?ys4bu^DY3LdY3} zB8FQg-od*D-ZPQJ`)OJ}FmPKNKQwU$b7_8xY0Tpzjk=?4AM4L2DJ*EqVhT$p?&6+_ zPw|<7WdkLFgspa)Qs8X4;nxa{ty*De^}*soVV%~c#-=O^BV`^mSO-zq{%HN1dkBW4l#vcr{K*-ynq{l=MhVD!b{sTds0JLKc93Kvdvt(~vGft|JRGk%>T)mSxQ+;zdQdyH^XXxWr%%9j51_zcFt8yq zKE)SsoG&W#>B-Qzo6|kKqHig*aqJg(G|0}o}Wxh=Un*H=MSpVPxNj}3+8*i-aV|X7U znNjA;`~iz@&7K|PHwJN$S@y&RyQU_r3P_pC7*f+{0oUQkWEYB=A_^iNKV=w7^q=nIz6( zHc9Q7z+4>jvgYGhh@+s;x4vqX@~-1q`(DwpJ=?6<@2#?eDk^l)uBQm5g7>I0jY3{QnHr&)xz{s3|b59I~{iI6b!2L!mnue;O85 z=n8~249(s}XOB0brxI)O_6-WLb$Zk-g{Z%VGg;nQB=43(@I9}$7P1}4GGtA2@YYOc(%Pg;0yKZHV)^sMjv~BL0M#XftjOC4OtK{*5 zlZE|~RrPGXo;aSfnCVi*Ps1YDQplhyg*19oxF|3va7o~bz;%H!0Rs~$WRXi@9Jdrk z&-B71?2bZbYhel_|Kjt@EAw+k)vd`RvW()wQi0FVJ5U(bQMT(hv+A+mos)K0Uy8pc zh4cLOqZ3`!yZLfM=;59nQSV1zfWN>!o78-NfFB^wzBNA-;D^a`6q>&r;77=FI-0*4 z;IEPAz%)M^;BS!U49SON++3rqm9r$?lvzst2%*Cxgeeh9loF%FDTzaMNDqbE#3T~q;l>9Mxh((8K9(91d+r!* zxxuecpSY8#yZpxs>2uS5U5VT`B)_9wvNkG-(DDEYJj8^b?+x@{7M6b^^*Vfvj?V~* h8qsQ4)TmY?qQE%0UvYXs)Tv0CFsZtxG7>?#3v#?6>&>MLBwYwZgYtuKQ=^s&aIY2 zd?Dcu?n=b_XON$h?SkamdsL0qxm0>z4+WKx)Z#jl#%BVq?aRpapyoqyUArSH^OH)O0_>)ke*)u8)<0qXe zJsr?F+b}zvdOAdH7`o}Kw|V)E_9M;>*&3qH1zH38`fkgxxzbdKc>t|oKB16mG8V8X zBZJE{BBbGta(IGeJVc%0QsHKCg|M~E%iNb6Ji-bqSC%gecqGHXj)2E98ffxb(gzjJ zLhH!A(i<(^9x85Wdq?Lun(8;(LptG=CYetKgBncSp<%kn9I->KC)*zE%ihd$3@|JP zMm>)Mcmz_eLB)sqkoLkDI1f^%MMfRzkhhCRgaZvzm2m0kWrKsX+;&mQqYZ#M5^fmH z499(S-Rv~W4h{RA)cB4Vr#u)ZjXDf%pYy}L8l)Zyg(1P$P`P25G-|Y?3k(Z=wL`ne zAU?FMCKbSKeIbbBP&Hb77y9-`Diq#J43fLY{J^5A!qQgs9Q~Tk(vOdr9Q^c3(3^G< zoo~_C6y1#OnEDLt7kYpM31mJy=`w+64-@+?H-U>t`P@^8VuGlX>Ys?*Pd`Jni#)@#q>)=p5j>g1tPyg-2WNTqS}Sj!?AtR5O9X#<%nq^8D|DNPj=MN>s( zT2qs8Wk%~^wujf0*U8_>-yoAZ&(3od0lPt7Xvz3qPPjgRh;pi516rm&bB1mnf=H(3 odN|#ecn9zL60?*%Pd}liyLh9EGhT&6yf@SZl0b}6FdiHK0zG9?A^-pY literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityContextStateHolder.class b/idl/Security/.class/org/omg/Security/SecurityContextStateHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..770e21cd8eda3c52303546be54ee87e166ca729c GIT binary patch literal 850 zcma)4T}uK%6g{K6ZrWB_YGt2R(7HY>^=bs=OF`{NV9DUKr0kO(7$WCZKjkjtiAQW~~2Y-`wIP`kF%;S9$& zu2-|%X3Z+{O2?~<-guLDTY^7{qOb+eF@(KfyA&n4au6X Y2=t+hvaBKQLu58aN=hH`{E7)^NCJLk@wd+s^2^YhoY9{?WXQ64rbI&A82w}3pV1)_U8)NIuC z+OToo#sh(JuOs`-z?Y#SIF5aF+KfUaPn3XY2^5(fDKAuAFF2MKM?hfl|2@@q6c5~J zIB=(Qm%#AuosQ%aGq@w;v5coD%>g|`TnzbVT_D>VYc&EHvs$$}wWgcV0XK7R;%M0O zLprF}TJ@_6Dt46DfBVWC?RonFX|h{>=&NU>B}rFcCYIj8t~`o@F{`Coy?yA7JvZ>e zfxEMRDEo@83fm`rIZ{3^&BjA&+3E*|h8nvLN^l%p$E<^!IxJ(u!7a=?SVUQ1^D398 zyH*5d{~j-}K5cLA?7n#Jj-ps;FK+8)dplJ8wF0Y2mme9)9Yt5eOVPN)w~^-`E+B(4 zX5bJP`9D&)#+VBH`3Xq|r}*$rM~7@jjN)4jrw$mN$Al7dWE z&30B8CUW_hCaDW0(^}(>%P^OV@#n3L;ufjO>mA2*H}vpPvMratbcOk%uqM%mW7G+# zxD!xhJOtPgiD9Jb8ub@N=*? z6#5P~h+B#K)wUg17}3jCyW^5LH&%;#b~N=H<%9Bj_kUp*J8p!#_e{!j^_Evi6<=UV z!jCHMAWjyQEHjoazlTDmhf3s?yPes#!~SmvMMwb$Zm`$ zimBpPJZ3mkzFwK77M~FjhhkfgzRsIHKXXpP6BRW)m0+k?L0yDJ9}N{8&-R)%-fDAa zTbPS0&$;O4u`uiYxY5v1Ly7V*(=A<_sF&L@=LHnau^E*#;BEzW&(>J))q>+>d zmoA$|p5!p$dmdU!&>IiFl>q;tCorc5ZHB(GVZOt1M;cPT5F>m`vieZ1C&aKXB z&8;)s%MA|dAmz~@DQ>WD1svaAsjbNSTwzFyT~KS;R?}OPWrpccZMPaS$j=;mmE!m6 zUXI+@O^bHVi4Z-OpZ?vzpm@6^a4VTB=a-XN`Zr9{uZEan1nHHgH!TD@kI~l{-Hh&( z_8RODdVmCJx&rp7#{`l+3~hScG>+p$z&(m2hKM?%y+z_-;Wd(7q#}WJCzmZ*(TWrU{Bx zNC0)f10qIdJPeffR=^ymTiB5aYNCfjp~MXIKw^R-6fvf?LKla-IO3;4#<^{&CJCe% IIpeeO3B?s0*8l(j literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityContextTypeHolder.class b/idl/Security/.class/org/omg/Security/SecurityContextTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..62258f57ba905be0fd3dccd568f7f56c18fb2782 GIT binary patch literal 844 zcma)4-%G+!6#lMmE^U>TTG>x4YR-pIuSQV56i7lwuQK%_%G}1dv;40Lilm4Bfc~iH zUY(YLBx8rWd%o|S?|eI7-yfd<&Ttfif>aa{q+?jeh6tM?WE5;E*jBJZAa_m6rv%3( z$7>o+r)gAZ-S=9oH$D^{o6#qB-*ah!AadTaTkL`$tmPgEq@vT{^qe*yUr^+#N6iMo z$uFl^zPq|KT*qT(&7#JQ?fR_3IIL3;j7as7E8=amnUu26COLAIalr%`EjN}nY$FB{ zstYO>p{j@?reIga9`;paaiHQ5NdkQyL#`dGK|O+a+w7W#W!g=nTx-)hBgl^UQ^O7C z5_8VmgIccWAq{OS&GcZxw(-#a{7*Ts_I76332WyoJJ<~2KTi4jDIi$jFA-Mr)s*>( zJI~`1|4Ixp{8oPldEplrq?dzq8X^7wF_G5uZwQSrD~Jb}RDg-<`98vbAPKBaL-P77 YLVZZ1Dr-mv5K)crPEsH8vycJ&07`z=od5s; literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityFeature.class b/idl/Security/.class/org/omg/Security/SecurityFeature.class new file mode 100644 index 0000000000000000000000000000000000000000..3ca2f3e977a97aced1d28583341c8549c6a82749 GIT binary patch literal 1808 zcma)5Yf}_g5IuL_y9|m57%;wHus+t9s7WL$E}*L*$|Al#P~+}(Gh}vVYj&XYQ@$tv zB$W@uBx-4uKfoVldHT)>BVy@P^_erLyYKDpd*|)DS8o8E!NVf@a8=-%KuzGfzzu;J zfmwl@0&@bl1a1q=m(Y)TiEKgOP9BT$zMIFrJnk#>E!B17ra!4&-LgZ+_Y_o3p||RL z-O%>JMcZA`X_f(n?Vp4mobiKJ#c#JNbgcwV_;j62Ydc&C^aX_h*`n^WJFec?MwV0x zJGXEt?2?SC-|qNbC)|{jQW)CWyWY&Lzz=mpnvq@79}3@)*`MrC^FrN{q9rV&U?nxy z7FFRrcADA?9ovl~vkLvDf{#23`#xH8!fSGdn{#stdy~6-8WndjsilQ^-EnPGUOws~ zDJu-hj*&F$bp4>I1IKGgHwBJ;E1$xM=EXg7YF zwL1%JhfCzf9nT3ba!D?*sL&H=yE(7BzPn2A!06b_vb}0oT-$3^<{m9`!n~iQsV5EH zk?YdU;{od!Z@BR?tZ&i6j~KM@4TddzE3i-CpuiD)qi1 zfBb&_$2+kL!x+FI`4CSnWxm-U`7lNj`fh%+XQS^)=zFPg3`XCd&<{}KWQ=|&p&zEk zVHy2sLO({0^E3KbLN8O}NR56Xp`WD2DI2|#&`(q2;EjGJp?^<}XJPcS3H=;39uM`D zoG#y4&Vt88yuhy=d@E7Q|3Upt!XHBpFn0eDyO&4)GQO5UUVpwN{SvK8yGpx3o1@if zcWDo4OSHx_q}HAxP0P@-v>Yu@E6|Fx60L`3t*JF;C|o3NgEgMsc#x3`6W2Awc2bNf zm0zH@y!(HsfA}St6SzW;)HV>;UMN4uwwKs0D@WC4=$S+TQ<#p|`xEk01HZpU-~IFp z?D!Wcp&3KdLbHZugysy*3e6ju6Iw7dFSIX;C>S1v6b+AJN`@Cre2?KJ!>yFEzD;M zB+a^IKFg4tvmDF6%@9jZt~11im>xyf+hiC{Pj+~cyKu6cI`@2rTj>t{yt6lZBrhEL|)tj?Z^Wa1g+ zfO2~GRLIqa-@-gw_T;&e9TZN*HM}cfQ$-0n!?k9iPs`e}YnQnvyvh=|iY-(a26#Q= zTji)bsD>(@z*4b|rwr#?Sz6jH@tSYBjtU!96(8dh74Kkz5L!lIDjE8T!hLs<+q_~5 zA3`FDVO483ZbKt@EUbL=M+q@!l`FZ z(q(Onc&M0!uHr*{6s91UfT;0RIB*%#xyAepP2;pE76mzRNM>$KUzbo*@gqD5brn7u zq9XLMqv9EM&r)n|*SL4AI;)%8baRHmW}}1~f##ZeUvw11M5|FxBNt3?2L!bZ!G@cm z7!HUS7^2z23xgfaQp+j;)S{Je%zL71l23A{UAJS}4T?7Q{{uvwSfcs$dC?NXT&xGv zEQq!Sx`S!^)H9rm+_}@J7X1>#!*us9>6UDCi#h|gZK<*26*{_g8x@9>SXV{c75z#Z zJjZaQ>2_M}800O_ta`Vo-ur7tx8QbCc`wtMt1XrynCJ z#ipRQ6ur~VqBBijgY;zdOz1Dcex?_YAx%)E9te~`{183+fi{IHyccOl5JwM5`}E%t zdpz|L@dG46kQCm>bYzyNr!dp?*GN9csQwDc14#L)*N8nw@6;>AeucdM6XJRO0LmeH z_sK)TWn2x|X2@4YY;-}wb;17z{pLgV9uW}iH-3To7YYNtf1vN49@EYldR*%_^n^BG z=t*tR&?QYXbXhxZ=mSY@h)zixrc>4~(3#TSpi|K<8iyD;#3k)b;_=oCs01r+%^)Zw z!2ZD_ich;Gir*hZ2V&agW_D;NN6I033UV@mjUM9dro~O%iY$gHEg~@~ed+*L4sbQh Ros3V9)rTyQU_>WW<3C5DTnzvK literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityFeatureHolder.class b/idl/Security/.class/org/omg/Security/SecurityFeatureHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2351be200eaca1a62c2afcc81e6b0c4d6989fbcf GIT binary patch literal 820 zcma)4T}uK{5It92H*G5|wX#p`%a4bpUX7rHun2^TUS-vbD61>WUBiD>P$WI{1Nu?X zTwN^%GnT#FojK>s%-Q+;dj9}$g8d*=L<8_67Q`ynKT^Z4JuYQ(ShO z(=ZQBLjXY)+ZuMTt094;hCM_W4rduru*@pA8A1)CW9X*Qs_DgYgI5GYV#u8sY%r6Y z@jv?9Y)gILz^=m7*~jb}4g1IcQ(QZ*r%I05Ia{*71=4RE)0(MZn4_0TYiR`)x{=d# zF3?xFpP^{x4eXf$=%*LmbPOJPfS^ogvaj$AF-r)!n5c^hWU@VYe?h`no`hsGFYxr> V8>*}z;zFbvqe{LWlqcB+@C`zo%p(8* literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityLevel1.class b/idl/Security/.class/org/omg/Security/SecurityLevel1.class new file mode 100644 index 0000000000000000000000000000000000000000..71e50978bc39c71615b8b76291d89088d537419f GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g(A@q@6*M Sfti5?NV5WYObl#5k^unO&mFV? literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityLevel2.class b/idl/Security/.class/org/omg/Security/SecurityLevel2.class new file mode 100644 index 0000000000000000000000000000000000000000..8173c00e80b0b0147dd394ecb698f144a753a4e9 GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g(A@sGX5P Sl7X3l1xT}k3}avek_-UaRUNhf literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityMechanismType.class b/idl/Security/.class/org/omg/Security/SecurityMechanismType.class new file mode 100644 index 0000000000000000000000000000000000000000..bc9e6b89a00285a67f9e4022a7b411ebba19f9dc GIT binary patch literal 139 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g+foxj5IsXKn=FGs5L8qU5etd4Uyui=7@ zFfK;v=8}d{b$MAw55}Ujq@x(e6@|L0?yjljdIS^dW-@{)9XD`O$1U8}Fs)&RA(W9D zCBd-YDB8JHaV3|UntM1oky@bJsp7IoGla*jf+epq1meSs3_*2GTc&6)F?7d=eMo{U zkX2X}wq%IMefEjMM%s8|uA8a6S;(d4rEL{*X%$%$@1<>K33Q?vXt)u@&^9m4?AyC$ zX~A5|3n~aPb2I8~U{;e;i?z(KmpmGX5Z)FhSx5aGN<~|$pQL6Ar8P;sg}IV$8X@$~ zwj|YP?4Kd#*5q!CMiQzTk@0NaDLh9n4r;i=F^fKi-ugzl^_wo{mxZl74GniW?qQCh zL#(Exwd{42>dtW=4>%rTo}p_u^PBIpq9mt=q9{uXN_OYO;$yrjrjN^6-_M{J6if7+^{Yeh-Yt}o8Q z)T~t?O-JQh6^jOrp~p9ut`CiFM^4C0$+lK3X|0Ql%rczz7sPY+v#FV|b}s=lZ<(u3 zki{llX-wVEs`3u~=T}GTlWkTKhE_Gz)#R(HbH!7I)XpX8+?it!6da((bRRv=47!>Q zIz{PBvq|eA`s$>e(H=@{fqkL_$dQJ|Gj}*fAh?Z|O~)EVKaP0T0|=spZrc*y5qO&1 zLa>aG8zhPW9QE7`+Lc=(@e|<>=u7M%T!v;Oeu5kVtShQ5u~O+siy zW58iMNZ1GheUloFDgHw^?nNFY0*d|MXYgM*L?l0>t&Bah+i2fLN34_L#lC=(S+S?V zr8NN7Pf_Sm@S?OkF~|_>s^mzoiD&GhU6I!))LtW5aY*8%=MW>aatJ4qWpumQM{ugH M!emB>5fRsnzog&AHUIzs literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SecurityORBServiceReady.class b/idl/Security/.class/org/omg/Security/SecurityORBServiceReady.class new file mode 100644 index 0000000000000000000000000000000000000000..6db968fa0ee1a5f6039d1969a45238e09df790d7 GIT binary patch literal 141 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gAX@+c literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SelectorTypeHelper.class b/idl/Security/.class/org/omg/Security/SelectorTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..889d06299cb1cd388a6055581539f67f487ed042 GIT binary patch literal 1740 zcmaJ>ZBrXn6n-vw*<@J+LR;EWsT66GproyDm0%TUl}IYuAX?wnCG2FjU3N3e4VItM zU*H!$XmwIXXPowvGyW*Y=k9LE3)C-r@1Ap>bDwkWbM8O?{_z)po7mPdi3J@cT-R_z zM*=r>yoI+lyrUzHceAv-r{R_|zOUmP7PI`6vsl6h3UyoAK2)ENGFVoYl?+yO+`(NP zALA1ZYZ@v7DN`OaZGrPuKWLQv-9~A3QpIbwB*SfM zx2!m%ehM7Pf(tK2Y_wz-5|)-(s=Hy+3|z#NhEENwW17wAZ*s+xYreZ<2P&+p;hurd zupuyJ@0Fyp6JG@zX5e#tVcT@ zKN_%56`1YRaw=xccAIv^jofw@q0WxIS2Z96U&-XEH`( z{+8=ldts8T{K+Xf#WFy=^E&*`QCIpQr*%X?SJT+3o$m`=)eDH9kDr!qn& zXZXxb^4VlQC4cU++;j5yy~Mw9u7Yc-_zdD#ZooiJMeH66oj~#kL%)RHEH2}<*n0s< z4ADAL{1b@>Q_qlWBNZjdVg^^@uqsy-RxG|i`U$3s&yj9JtIoeb;t7W5pCj=*GKW7S zSuM7qA7S{A2#qvmLbkKSW{{X((eS$BKZmPv=36A7*v~$N@i#7!4qH5Pf4z<40Pxw)7yB_NJk*&}&7o>LDNq6>?wg5+Z4~q^sc1@*qMF{Q><^ z#aW`aUf$cCc{A_L@89r9&QMgFO{mL(K&%ag1eFFS`pe) zoyS6d#9}midmV~lwtXR7^ph+x1A^1-MTGK5zq9tP8~&s2MLz2AeR!z&sG>%=KkuBY z3zHVq`Zy tnXDnRt#Am&Oa8T(iP;SfpdCM~u#T%!yTfvaYYp2DI(w9Yr#+lPh$E7`Kd%4) literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SelectorValueHelper.class b/idl/Security/.class/org/omg/Security/SelectorValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8c5fd121e107d08dd13214632232de8c5e732284 GIT binary patch literal 2354 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 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SelectorValueListHolder.class b/idl/Security/.class/org/omg/Security/SelectorValueListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..31bcafe5b879318a302291b6d2ba785f53b9eb6d GIT binary patch literal 864 zcma))+fKqj5QhJyEfp+^2UPHUuH~Z9Ta1Zvp(G?EVz}{w6ln;i(xz@TzLh2#iHSad z4`rOiVuS?nqTAic_wUU7v!7pY9{>)p6UP|lRLsYqVj+$+GGbX2%aV#^6)P%M8I(KA z32cV-%cAQyO!uZ?mhG#+Z}JD)IQA8H{fa>KAm`mWDYx{IQb8+K z-?r)uyZUdUeChn;*z{bVTQ$cv3oS3;Wlq>lPAH<)dn$u6=mRCCfcI*YDu3`ulF|42 z(p*qn6r9tbA;GXRyj=}(jH_7Fu#OE4o7mE@jT99#Tvu$~@-x?|+df0`+Pbq$$7(gq zQtg_oB%8bHzTSV@7B>7ZgY9@CgZ$&^=|F>eJRLbFno?+aVc?BDmXEx#^G?J_uut!B z3=A>)m@t=~sX{v%2CWlxN+Uu$AYr_M8PYoHNv**{DYQz4TI mnV6AnL;izIW2PU;8qbj0P`a6BkqVI{{Y61?8_`Em2Jj7i-q}Y0 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/SimpleDelegation.class b/idl/Security/.class/org/omg/Security/SimpleDelegation.class new file mode 100644 index 0000000000000000000000000000000000000000..1ea35104927966ce9c77e03d29cb0f3a27746b2e GIT binary patch literal 134 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gb=< b4WyF^XcHrYBm*-83y@|7@|YOdfFuI|IgcKt literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/StandardSecureInteroperability.class b/idl/Security/.class/org/omg/Security/StandardSecureInteroperability.class new file mode 100644 index 0000000000000000000000000000000000000000..fa4eb53d7d2cb7af50373d42ba952efe1c2c68ed GIT binary patch literal 148 zcmW-ZF%H5o6hobsHZUNua*8i;1*T36mDqpVuc%c>s*qOVY788JLm@sawroH7{dv9s zoUpU77F&aAWxt4lX$ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/Time.class b/idl/Security/.class/org/omg/Security/Time.class new file mode 100644 index 0000000000000000000000000000000000000000..85aff1b31be9dd5a8225d61992d3093e96d4906c GIT binary patch literal 122 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gZBr9h6n-vw*<@V=f{I$26sekomR0*^3AF-hd5NW!l&XE%F5ymQHEc4=hRRRz z7xWV|t?fjn&N%w1GyPE=pSxL1vOtH)-pf7bIrll|Jm>!V-`_6*T*HQrF-+?)aYe&b z9Wh+f@ew}O@QIEjK27uFGY!|(;paNeU?$B^DUDftp-?x}*_Y~bGle;IGM~bNj$62` z;|{*ku&7~4AYu8tO(}4;-0*5Rv6IGry~rpJX;}r*#6&5FHI zmrR%UcKDt@bZ-yi0cTU-6g?iXMjhs3X*<1^vHv53`{--QIJrDm)3plAlp;~fpl23C+|mHUfaZn(9@MtxIy%CD^9 zu7R(yDlja!P2brJd%=ns_y*q^xQ8`?(Qa0^pHyYjcN(sN3cfQ?K+(WioYSyw;CtLR z@Bj}Dyo;=X%g8gCinApv27bVg0@O5rQsI? zHp&9y2lV@$7iGOEJ+kf+TitjhRcA*I5FJ%f8|;9p43~URs)z@3C8{GHtJ4M56@g2~ zmcQ#&QnJc~vg$)$JS3O5{qBLYK09{3#oGiMKU$>*d}%pK5Y~2}2*o2R__vXIl|%jY zr(RiDaa;<|@E=>PIvcNklzwD7I&ReIa83GF({r{Q-`SCtUlq6#EkWoUCDbzsLtzef z-LbcWAnWTzQayKR?m2P%j`P0}u7Yc#_#EO7Za_y4Lueijj6i%J1HT8>G;(+^w4OtPZ!9oa ze1X`5+;ha+NOXdvF@X!ATNwlV1B%7hNIpfj_zKB3wDQzz#Gc~B)GNgPLTc|f#LLAt z^nIMzBT^%ciGb}Su_?r|^BUe){4e5C82LKl+yRr%VElt|l6;22HcqbWV`v}4nGwdz z{0W0*#hz8+foxj5IsXKn=Fe!xPzdmVAuc)c!hA0n}P(R5UKJhwS*~ZF(j$Y2H{iq0$=e` zkkTp(o~-htEPFPagbm=!%x<6Vp3~iD=Fi_BzW_`iA)_55GDe|E7?a__xJ>3p5+2L& z<4KS#PbEAP#^*BHFd3v}N=6jZ;&({1b4lk0@e)Dp>MO-mf2t!8osi`==s zAHA8G?~`d*)Uvr7^TZ2QHPL^X6PQk=?O`bBLbrrv1uxOd&{H0st0^nl^bR+L>njN> z3Rdx&p^4`;%h++oOv6yHhM0nNykTgmHevZN#dDUC%_xZDt%5Ly6m+0d!aD^IFreTz zdKC=fA@xa2Pr(K@8G2WjVpF7}Q9)^wrwUa2kv-n2@zF5_Dk7Kox*S$`I>$|-SY;94 z-s3_G&E*11>LiWPsiG4M-PNwTs<+it6G!Dzu97s9rMZbYG7MIeluoFOxawsm3_0?2 zMGssN*mdD_*$(t{fllkVVZ=0m6luxgNka%LnYWcC*j2?ciE>{Xo#cAj z(DO+v#jq8=D*J0J?&eo6Pc5km;O(b(r=6ZK23cr^zJl~klBKnW{+elLwENUEurKrh zawI)DaFY!J-XiKwY&3{I+;Pw@cu_~z2K6UAA0lV)p2Am362x8fJ8m)Bg`28gz<-QB z^&I|FNU_KTJjbYyoWt`Sfs@bh#?({DMbw{AghV9zZMOF)HULi_J(c$bf6}~@d4dQC z_Pt-B{6>2b4QoZ*DxxveM46huK_Ni!W)Mj{U|keXH^qr>w4(_Kh04{@?Q*~t+68S% lEutkBDLc@$aU4Pf3kSa%DWbJhcL2k#-VzKSBO)aj{{ZNBeTM)5 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/Security/_Public.class b/idl/Security/.class/org/omg/Security/_Public.class new file mode 100644 index 0000000000000000000000000000000000000000..6909bc9c6a496b90a7ccb638ed3faf82e458ac74 GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRLPkUj=U S24)5pAk7NoF)^?KNd^G3UmEHF literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel1/Current.class b/idl/Security/.class/org/omg/SecurityLevel1/Current.class new file mode 100644 index 0000000000000000000000000000000000000000..ab64d9049fa4d00ccc19d4b12929c14e94e3e4bd GIT binary patch literal 235 zcmaJ+OA5j;6rA{J{DK>IA}-wpy@6I2g+f73kd|j@iAjlR!K=CO03J%rMx+}DW;371 zo7emC1hB=FgL4cxh8!b~F~@{qX>2acH5X^fYFoH_Obw}x2y1IeJBC>)8!433xk%EI zGB2(Fcan;%bcNA3hWR%dCa3-GcXiR$W0Of0X-D=VGh$e^?aEjuQ$->=#7FJ?mjMGq N2R(E>`w09%j}MLKLVo}N literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel1/CurrentHelper.class b/idl/Security/.class/org/omg/SecurityLevel1/CurrentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f28e3c30c88a5f6da2c09f71e529071a9cf961ca GIT binary patch literal 1938 zcma)6+foxj5IvLICd(oaKmuMtg|JZ;P`nUC1E`=u5Kv2Bww7hYVA!PAjmoF!SD;o! zN~=^}q{@%7>`69vqP)zdyU*$F>F)Xc=j(R><9I6LI7VfRVLXIxT$X9MB9@6Dt_tzB zAg+u14H=V&i)Bh&Z_1d)EpfUnAt7N#Mmt6&%*vR<9SL_O+>bDFLlT@oz9Ma3gSv{i zb=5J5Yj9@A!Xw#_XkF5;H>JI6LmqL?_0qLM}v4$8^q21R(c9-htEj>te;u(COa zLgvPH{0Myhw-hSnJ>QgYDd$uekCJ4-GHg5Zmf?Cm=hFHXH|Zt*$HLH_v&@&=e8o5P z65EX?Y|oEC7o0NFg$7d4i#`bp3hv{Sf*wQ^oD`>i3{ZL8S}AydB*WmsTym1yaYVG` z;T4%28yQt_8fPRdDtL$`1?HNCBm>zB21&8nZ6p{K@Dn@P;+ z%ZZi5B13%w+6En!W;V^FJ|F4-O)IK%mW8_e@`mfKW`${-ZW$Iwwi7RQu^ zjrvkNFGHtEjpuMZWjWk_VVGQZOor)b<2W@+Ds^la|2mH}ZVau(Y1B(mjWy|yae?OYQ`ZM~Jk2$n&;P4XCi;_Iis^f>*= z46|x1bG))^)X);4R1^pWr<} z$DT0rhXZ*?pW!8$Kro!8)eF{zkQf;k+U62_!@&~oIh=Qu-DK|}R7j2OA(V$)3@n5T z7<5e{v>JSRS1slwwXkc-q306b-J+6(%O(E}(j=d|f(3Ux`H~{D_Mmbz|vM k58!9J6j9fE1l6DD+AW1u?LE+fAheoNlA4h8`o$N+UqPeQt^fc4 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel1/CurrentHolder.class b/idl/Security/.class/org/omg/SecurityLevel1/CurrentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..13ca2ae3b7514155a9df7c70aef25a9bad544909 GIT binary patch literal 808 zcmah{T}uK{5It92H*G5|wX!cwAwM1#do_X*!axu*dX-HtqO7hgcMbnlL6P*(59mil zb9J>8OqLyXXU;h@bMF26{`drNj&u+zq5=333t|_0GVIF`S8<@?P{k30GB8YsGbAdO z-O{aYORw>UW4Fby!Ux{1@$BTU;`DGua0QU&(3`F_l@xlwhT9bEC;{ z_KPl6@2;=(zGVyJ(d7DVukVPOAXv938UFecO+gJZODR=H%yX2w81{)0&tzvqP1@X3 zUd~(8untW_06`VU8cvYVki@Bm6e0}i|4k@cW|P|tp^h;ybkpdy^y*`WHv~g+%3N4$ zvXR_ywK_NZQr$PP>SpQQb5_k3U3zYcYh-z;;GB`G1jlDDeMW(>`@~~dkGeVgg|2_JC~V1yqsW5bA}K;cib#O5G>O4-A1564?AD=s zpapoIEQnOyTDQBJ{~a#&XiFMxjX|mZMxIK37bcw+MFYw!WG(+0%pX2Md7!A~b=VEl dC(9_O`HxWUn=%P(%Dc@Kc3mF6KvnPs;S(~$lNJB~ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel1/CurrentOperations.class b/idl/Security/.class/org/omg/SecurityLevel1/CurrentOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..5c8eb5c05d072561b298c3e95872c2a5f73ccf37 GIT binary patch literal 226 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9BzVy_R_{5TuqRgbylGI{G24{_EpZub9{ruc? z{ovH((xS|gN_|I|f{@CBRBKHvDu7DiimVwKG|-LkNi9pwG1PZ1EhJ18Is8p#EoFI*Us#YPX(ol)3F>nA5g~-CdhCN!J zWxw8!Cx8SiiJ63ym`f}qmI6EHYjW3`&a7{~3HO2rHVLI#bKhsIo4#>YVBM-gkx{m$ zvT9ie0s0FqJN7EXj$UB%B@X3jpHktpGPw=xFG{n(_BZaF52`Xuc~%^4h}&iY0wav0 JCz!@ZQ6H4aKrjFR literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6e252bba13c6b616661329fa8b873fcecc7f2af5 GIT binary patch literal 2008 zcmb7E*-{fx5Ir~BB*Oq9f<|0%4HIDicYNx01r)ZMKjXNYGC&YD(O zU(@Dti?eBMnWS@tRi0u9ORiI#Y2dn;8FEpcPB1tqrSSr$qV^f8#oaNk~)wLaJA@I}}yuaD(#AwxSdZjw|ZX z7VP4tO9gOaJ+*h(;A_gC9wXNgH@E55f&ZiOkZm|l;WfidD|Bw<1vlOQNHV%e9Q=;yUscN@FFaG=Rj zn@!K__tT5%EW=Q~8aXkvk00I-M$wX6UN| zRLD-0rFj-l&#=#=fpxiV*)DgU879|VlVLj1PRe#kz13}>NJ~T_Ekk#O(|R?l@eU(Y zoADM@LFXQi&NYyD+mGW-H^YhMs%x!iASy$bpmh!HWCxe#?ki=^)|?J@sAKq1V2FO? z{q(al$YQMNq|lkBoz_Ei>!Y2~9#lVpy{7}nkVfBAN6Sheumj(ASsM|9>}f~fFU#T| z;Qxib9bp!Xg-Vb!s>VQZ&%Z5j2`Mj7+O;+Nll*g`jr>MU!0`y9{>OV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..df6a43d4ed7a57f34ce635d0abaf228d2816d6c7 GIT binary patch literal 850 zcma)4-%G+!6#lL{m$phvt?Z{2r1N3qs}Yzz6c|EAuQKOFCez8BhW}MTk@V0X&>t0@ ztJ5-&WbCq?^L^hr=ey_g>-_^j4kuyAh=&kFB8*LJiDO$FNf|pbc4h1_NPXSvafZ{9 z?KCvI)zB*3=sBi4DDghGa$3PKc(;4S4YO<7?L0&9+-#ff1%p4Gd0+?>?K<(*^nwC{ zBUK%)*Qw|asaU?dENC6uarK(TwVQUQ=T=;Tweo@ytUgjtR3|-`Qtr949I5IKIz&mP zGt=J2W$r01+RiIjhN2*Zu#9~L2RKxa!jXbw#2B&*S#oV#b?z`kntET?EWO>(%C#mp zT!z#{;Lmj9!Ni~o7vWY%6bX!tyPfO8jB(Sk|GQJkbGJNKcgEcXbw}$V?f_@BgfbYG z=w-rgT2P6;$bC9j=r20TP*i;bd!_(J=~XYCfR7#^EYfQB6}|~(4G|9$_b?$fJB0ri fB#QOFkgWOw-w=U`$_8Q{M5r;U6c|E!5^VtAhr`un literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/AccessDecisionLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..6ecf4ee3b90d7d8021e5dd3d0e9e798b0db51df7 GIT binary patch literal 471 zcmaJ-+e*Vg5Ix(bO)s(5Ues0*d?=&=8|`B&LN6~upkP4|A4=RVWlKyXiG}`^f)@}J zpZzFt(kh5Zm))J&nK?6O&&TJ>8-ONuGe}`WMInV^8Y)T|l(DHIt71#Vwu%ZvdKAuY z#7K?UdF7+zu^UD{fM)m=qs>oQPKaiNPcO@=TfCX$R5|H*}dBD(Mc z{3!9J6x}Gao4Jp3&fM4M*ZT*64(cTss1%VywTxBNOstt$XDE(*5sH8-!LaYfN#MlS zfpaFj+eE5+S4>6NaeAI7()2`lGL>;Oyb%dk{LI%YVumsU3}7;=Nyr_u*@ zV`(`O!NcIey&ou5I= z8YWLCzknjWC5q~l*T|NduVBsA3$!PSGJYQAIj2UJQO;;SLwlUVH1!sbu1Kg(?Qboqol-Cl34L-4j#ZmiBUlp-5!tkd%It* z020J8Mlr?=6Couzw-Z`-C#o5$*|z9x!@GUM*CdZt`Ex-%>4fK&YBF94?b44XFIS6< zmsLyBr$sAz!L=~K>#Z`)4`#k$;C~vj*O(69n2if}&MfB} zn0dV)PXICI91#cSm~c!vW(;fVDq*jcIFjmI?e97Dq+^kEr`o3%X$)zGMI(DDv^13{ z%7&C@*!)o}T5{6Y*4!ADUp_4k+eGA6Nu3!_?kp8CtbXIxIxkC2BHQJA`~TpcPkK+f)hQP7y8Og0`Z7I{K0c;fmFgc4DgXQ}kD$&QwNc zR9%l4{P zUR%{><`<@O+7d};$}2p}5Sc7mMQ4g3m`Xop2njK5df8rP7)+%*JjtD$LN4skHgyYd z@1kRvuL?$G$yhECWT3dhFhCwJjW>o?GOSf?(XorxsvuFcUUS=F$fi2t<*fCrFIwbg z)h;^gdH#l%#M^eEdaT>;P2Bo!<3hp7#keQp!Pf*8> zh|b-mUK3*@qY94TsDy%o`W-2J~_LyyjQ5_3at>EEspUO&ysiX7n+R;wwK37ep7tDq zby@Ngg1^zfDa^u&NDb0w1W6`57>>~z1RFq1jFIQs=K%*3(FX1bob;4~WFH`}n3~x{ ztOnU77Q-o=_Dqtri{Oe{Lr5tBpa7i&Pz}9AZcoD`4b?N5qDUfEO5H-= z2lRYH{OK3;|H%A8BC~}=i%8AXuvbuVa|$8Qm!PC*ggvYTA&GDiHP{mC+<){bdvmm&2x!fb;W4ZKHG{fU8%2CdfUksd^$wUv_8l!3RVRLRD9wima=GMi!nhq8Zjhd+>!zlgp`&vQw)EliALhW5AdUm zGf+@SG|i+p(|gakk2Cl4>-_^j9!F8gNJbDwDvEV%2(u|nTE>=)Z5cZRQr|FLN^o4Z zotAEQTY8l?T&K+jW!k4^UN5@MHY+_CmPO41LHMj~wb?mAP|e;Ggi3akvsKj>T`;7Y zLyacE$q%JexxFarJ=uaagw?7~$F@?`O8k9Hrv2S&md=gC3`()$Fvh zG3So^MbiZZi%=9q5S6j3U=RBWGB{9hhy+2_ha8u-*`y9ZtYh>I-88J0Ua5CzgArsV z^tndIV~H_+mY`-&ln9MQyY?sAbmafvQu1`Y`7`T`uD-I4mO^NcQ@(gI2p0H9gv@*? zC4S?obGyX<;-d)nYHuLV+<{Se*$bx-;0K6`u$Fs8V1ije%)=x-Ohn5K5&Q*-V|5;q a(_Ro5A~eaehJ*(Z*$A%`8bW#!Z2;ePgV1>Z literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditChannelLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditChannelLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..bad6475d6bd19ee0e8bb8548d1b9752cd0fbbd7a GIT binary patch literal 465 zcmaJ--%G+!6#lN8Zq8-qk4lRme3=%meAEckUV?#;5JV5Mw#%BVE#?&buL}ABLD6%6 zRCJaJ5#iH-!iI!R31x=#Fq+-+ zp=*yB3YW&noSM34`i?$`Lf3cN45=g6ccWtlL93lJh`qq(f$RB7eZbbJVLyuEU31M+)r?xpU9C=iEE<@%i=+ppF9-Ddf^fVk?7f?8s$TL0-WgL%Qp5m-noY zGw5wU=;?mHr(be=6o_!r=40;G_2$SCp>b<@9(Owf9$2C9y0Cn^`x+FiDJW=I z$A*SYWEm<;jKA&MmTL-Xy1Fb{HZoHtOSL6Pixlhl?vmwa#2%wGH65i7NkB^EWV%wV6%vKy6!8?kE752o RXg;c>O6U{`hKE@>d;t*P#RC8U literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditChannelOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditChannelOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..6ee59b140805ad51b800e1ef42a29fc432cbee46 GIT binary patch literal 303 zcmZvY&1%9x6ot=NYbxFN7`l)Fw^_yDq96p?)QtuE4Be zW*ahw^-ARe55v)m!1(vt?=4@O;~Spr*^*PGseI6u8j_k!A(Qpi7xx4NI{qaA^o&aJjIU)|uG2@tXEEu-dRl?pXaVFKf+TU{;NXH`SFSSoe)m?23!>W;k6k3`} z6lFuoGwl8$i>Dycw=Z;!`{?ZT*tCEMG}_%nmaDTbfPI<+TKo8MJwDa zIF`Ge;cs|$QcD*$EO(xp)@v(gr$qJ=f9E=eNkFOnfNI4Yh(z@{+@NeT%^>-lA%Lx;8a2Hm=|VPD)r*@Bm8+9^#RLBt|4GD_ALC#u&~wa6zBcFKE@i);EBmzrj+Q zP0#BO)63~ahQUTn&A;^C3tRcDgjEHPK|?uIu{|h#2DKftyF8oc4nwp?qH>EFx-0%= ziW5<3j>WSx95!iCU9MZU%bn+j$#vH(4NDEhqvBq2*1Ejs>u8EdRHY`CnXFf`nrJaS z)!}YJ6)ZmFvA7Bn-}BFSbIowNvFd6g>IllvA?RF1JJZ6YvG+=etW~EYE$SFv3k=df z+(-X8gDggxP70lA(rG|Cr}L p?&UI|{y~uKP)0rP5mtYqXQz@@ee_TV!q6I8Now+>*Dt>q{sW=c?1umV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ee0e4ab04e347006e16b8f0caaf4a84de146d4c3 GIT binary patch literal 844 zcma)4T}uK%6g^|Eo3?$cm3>-Kx;`xVY6NBv1(HzFtE@W6%I3;8Yxu7Uilm2rKtC$F zqpPJL$*`B%d(XKaXYSYc$0vX+4kJ(z3nPSh1Z!BAW<#2UicJ+;Dz+JvwrP8u;i%}i zb;Eh68@Igbxt8b@d7Il=Bk$ELalxzBqvbSn453r2X^At2nN<3oAy{x~L{F!t<4cNC zcDY$&IR51nN;l_uqvg25tk~SRYPLLaD+u33DV`4rgtY^BI`2$(T d$~YvWzar2@aFAscQ6D0+F{%{oLV1>L06zza(>(wH literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..35fedd3d6d1509fa1b65a099624a5a1b8d060f44 GIT binary patch literal 468 zcmaJ-+e*Vg5Ix%_O)s(5Ues0*gg&H28|`B&LN6~upkP4|A4*J?uq7taq=o*Kf)@}J zpZzFtVl9YBm))7!nK`p(&&TJ>8-ONu(@0`NK|YB>3JQv8l(4BFqhL$Hwt_N4Y81|I z`AFCSL*dF8n=?~)P0!JX;Y4^&n;~%`JQ1EU#I@Q5gVghFPHq7yX|;bqDpag7`I*B zTc+DJ1EN@7_V)(o-H!fU8C;LK6*5$pwN)G#WXttE8dcP4zoc0VX-oU0X%eI%omj+` zRF6?ipC_B8+a6?!fPDQKtS-GGb{WsdhmVl%DGREtBlpu=As_W->kp8gAipC)`;IcS Fz5pGIZEOGl literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..d0e2093e93f46019d86dbe7e363d4e34501c59f8 GIT binary patch literal 703 zcmb7CO;5r=5PjPMwWX-|f#}VXd?^NxH71JONIXb5=z%ot1e=tWl!b)<1w ze?Ny~-i91+hkz1OW-Y_I4ufT$trEX0d>ge7h+6#}$}3wjUW1upihK)x%hukYyrgdK iJ9U?#@&U})U2iO)s(4OOJeU+!N|P8dYJrSEk_o>bAh&k_ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/AuditDecisionOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..1853334548c70252e9683bc932d9593981b89a11 GIT binary patch literal 259 zcmZXPu?oUK5JYFACJGAvg{JYqHkGKIkV3K0Le9$)Bj-huOCY~y;RpCpVnQ0xYKP^` z?9S``cmkMX;KB3ICk$l~CH7>PBaR5`=_bu$k=|mlWmRN}t;C`s)+HOetL_{e|A{SY zRyNJ{QWqTf2g0b0RTpUtYrv)}vQ*osw>C#ebVoJm`YoG`x1 eQVK0iEW-1({=+2@oVq69bO{}FfqM4fHmeUpe@=e@ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/Credentials.class b/idl/Security/.class/org/omg/SecurityLevel2/Credentials.class new file mode 100644 index 0000000000000000000000000000000000000000..2ef818dc8acd36dd4d554f3cc9d0de001c79fa3e GIT binary patch literal 214 zcmah^I|{-;6rA;w_0xC&3$Yd!as!PPfj~e{@UlKb!kP{18pzcwJb;H1x3REtrkoEm zulM5#AjVuGl8_P;iK)a)U~OHg?6p)U)^}I=KI4u}tP;m(ZhS@NCa|cfBW0*5RbJGr zy};&wE^pb9uWS<7 H;Y+{=<54~a literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c263736705872c51bbe418c67dab4e300eb2b246 GIT binary patch literal 1978 zcma)6SyR(c6#j0vv>`~TAQe|!ONs<=r-&ACL5nCLj=p3?hGDa~LLod$Dv|JF&#V9Tb@#QG4 zi2GF;QL$USa4>4K{g_J2{11*!~uE9dPHO zW0)`IjM9>^QXt4cewCqzJl2g@hE_1FHEq$c^VXV3B5%Fqw!<)D^|CQqguqCEBc2 z+H@#&Zfs=sh#7uOX;Tk!Z9(TZof_(13yxTZZ5LlNOf=)pudH*^*=u_7P0M`F%@=%C zuOeP+gZOlh6-Ot`LWNig4x(Setb)5ZqM#2+1&76H04Eqa>fTVnJ>(eF*_qrpQFT~Q zw*5Z*+$jO5A3M*9OLYR)+4Xw>!=> zl*C)nZif9P5!2y%-g3D8%rLp`m<*Gt*0F1q)ZVt`n`nwiW699zPOVF4r~I#ql4ZZXk(KVtjqHlZ}n?T^iqAsf?%Zbg)ewgUg`-`g0G^ z-_0NkD$_}!GclajLv-t=ozWgvKY_ic1IUo*?y2JyB@o&{V7sD?2?~4Ka|l*s$qxwr zME8y`3nwCFNFNa-nebpZPHPaX2Qe{1o@PSQ}&X5fV^UAdIzyGWH+%G zPUDPclB8V(SJW~(a%85=4OM~8BIN@G=p=y3=%nQKRZRw=dM1+;NyJL2yXbm{jxUHm z`GoFo=^sd>caf+Qsp&HIi&Wg2LI`vvs3;m>4=X`PB3wib*2Oya7kw=knf!-6{}C^j me)T89Y@0Ibd5fs}9X;FCwCbZrIuM1{@RXz`PwKwgG5i7GaOF(^ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9105b080890c8e1315013684879c0c26b2dd7c00 GIT binary patch literal 832 zcma)4T}uK{5It92H*G5|wX#o3$d895UyY!AsSt#WUS)MJqO7iLSHpi*P$WI{1Nu?X zTwN^%OP0OdojGUD%-Q+;dj9~BLox^z(E$921+j@Od2Gugu3|^Uu8KVdrDs@O&X6qH zPF=TKb-m1MU8f=XMc(69PA@pzhgQGBgbV1Xb*7IKZKX1dcQuBSKpLn{j1ZCU+P@O`~V%meH>3rD~Jc1VduX zp6PQmm7H=h1#Weuf^THm&D{B?ESn7c=YLdOQ;TzpPMNw$(cwNw-*HMSr-EULUM4N3 zbyVm^j?=k9U*TbfqM0|aX9{4LUUkzkc<2FwGM&l3!ZXIKA>?ABE+&x44&eO-31fX0 blFhupGk|YgWdjixBC9b{@(rLo$u@v*AI#3@ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bb07add83efc3b4f9786b2a94a4061eb98f46611 GIT binary patch literal 2295 zcma)7T~ixX7=BJRu*tFrgjQP&6xvdgO(iW=YY9++R!Lbz8$@f>xFpB8xZT9f2Frc_ zL~p(6EmbGY)RAegoblJ_t>aYRv)OzQNX^ae+4ti)&-=N5ym)#5U=}+H#xSek3f_|O zwgL(7D7cDuWn5FxkGU{OQZnX+a6!RoEQaZEU7X%iu!Lpdx*|Srgm6=QydS~`3RaPp zaZ6aNDbTSlP9MtHkns^iU)J3#afVZR(J3U0_X^3CjoZsh$xV{36!SdA&_8e5rn|@> z#o}8GK_RABw&-j#oQ%agJjq=+nRb~wE<-BTpLNS+v1c%;$M$@>!8nRDY_syCi8KBj{FKoUL948V?xGl6&Xx1Tx`_6dnI(U?5-BAJa>feri@QiY~fReVO~zU zX5McZDy)jna7V@GB9PHm(r(_*@sev6Z54O%g^G)KQ^o6us+h!-j4xHh5LfXPvMMwr z7>3&VK-{k4YZweO=^OeS_2`V?{Bpi?muD`?*jAAPRq5>i2Ps%lXMCfgfNxbKVfLOI zZk4!0>1ai~vAx4Z*G~6TABK?z!TR*k3{i)PaxuhWJz%R_y2+I7ZT7+xu0` z=B&FMmj(t!teb4bD%u5a5vLh$b**B10$VY5&mXO`bBB31NwhB;h5>ImHE0B5Y0-6h zS03%osb&#g!Xv&FoTC5N82t|^WU(UX6s9w+EP9@yuMv7PdiQBhz#h{9WJqhoR}Xti zAXr0S-_wS17Uz8JX#^1<>7e#2q&tZx2v*To2MOamrhPM=-oi}No}>RECbVbhuR_)n z&mld;K;jvsUl7`VgrKffq0}(2PaZO{obuRSAm0$AiDemY2>!I)eB^6HK(Igm6V%@^ zUc;bN!z)z`tBfJt4qlJ| literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bf7b619207b8c524fc547aad30fe24c84a0c5883 GIT binary patch literal 892 zcma)4T}uK%6g{J^o3@sH*oS>v)~dl$uSQV56d6KBFFnYbgRHEsY@^}7Dkzemen3Ae zx?@|E5bnd?ow=NI@11k*`^U>0fPHL7F@`x6^AV_6h++{*8J1*NRE(lzZ4 zXGmWc9k*^c&AL(MHyzg!y&~^&d*3LyyvAF?GVR+uL-@dIS>li(sAsMiLItNrY+d(7 zmkg!iaS@*kzt5q~*KMfBQ4 zN$Qy)&L!pL(0L6SVhpL#&(;vdxQcZR8%Sx`#FmCM5)8Yexkc+%oH%xkyA1J$*){Ak<(LS~!*!Us@3Kj(Mp~Q3vDKU{G7W!8TUO-TM z_M^m!wIHG{yF0UU=FH5VxA&(P03B==ki&|MN)FXLWYh|%V^u~`#+rM{#lJd zKR&X$;icOSBWl5&>&Q!H7N2szW0(;i^C0nTKkn|ecNG-UNs9`a*kIU68N~dDWrdFI z_wAU*Yb>(O!Abwn_(TR56YeAotp)aXe};_XhXEC;soFPD<|TU4HmR8dsYgdh=On!a z^6A@jm*};H40%9Be+1K|X9#CvMI7Ekx}_)xTSoaSw@Eh5E$MfV9*}uOmi7%rXng>} CH)}xv literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..f01390f7226ffcba86f029336db1a7c98ad1c6a5 GIT binary patch literal 2017 zcmb7E+fEZv6kVqUO3R3#<&KIs>;)OXyC7PM2wEYr=z~5q<)vKv@MQJu% zOYIe8Q&t!ByerGnR+drqw(8O~l;zmoqCn4*Wm{@lU_N!W)bu-nuDnyGqI0SA*>Wk< zbn1Ho)2GU$ZN|#dQ?5fP(G*u6FoS+dYOl_%hiK^=cGEHUn>}K{Ht|U_X*AR>dvZW1 zd1~LnbeK-=KWdSf4R$YHljg2rTV9RiDDRWeH1w)rll{uI>WR+^0yy?Yb2izX8wF9-q^m~DRkLnnTdjHr^(i7N7eF)9W9dbg1+iL~O zQ|nH(EZqZfZsMqTK1{rwy?@H-lgbP9T3)GXR4wv&D)3|5s>v0@llog_ZXel1%#}N? z^mYY?19E=r%}P$s*?Y844P%(nFoMw-HZ@$rWer#O%T-*{a2+=^+{CnoTSzgaHDox- zaFpdJ%h3!+GaTKT=+u4A zh;L0F_chT%Jks7YO+~m+A`qgX=^)e>2+>f53u%E6&0GhebAb@eWVld&AVeeELFjxS zL?i8!MiHeSpmG1%nHC13ZI@`~JFx}>7F~+4g4q@>MA}0_m!<>hVx(P#Co@{ojo D=Uc#N literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CredentialsOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/CredentialsOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..6135dfc91f26619b666c3a712d9ae44b3fea41d8 GIT binary patch literal 972 zcmah|O>fgc5S@ikw|tZ|gaS?ZI3Zg?Sn4&WGzd{CA`%H4;9zYx(_|}q*X*t%<*#wz z2k@g1g;*(~V z7j99GSQ8TKxFemYNoVjMbwbRdTOk!ntq9v1?0M@6Cu zw6cjU@?0B-Gw)_XX@rx~)X6T@;Lk#mRR*VWW2H%`*YI37cjxF5TLqk4A+2x7>gRAL z{dlOetWZ@ZA858Hm+tQpZ@$;ZwOT*=&fw6}9PY^bW#P~=xCnnVb`EYh4Z@qZk+klU zPG@M=;-!gg@nMtrrrUqz=(h0;_N7ghJe8F3n>vrF%ARefd-}Bw=7d_6=_^YId+V#!YeZs_ITvcdGgcbba4bIQIAqo_l-&CmwrnTCVgD(=8l! literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/Current.class b/idl/Security/.class/org/omg/SecurityLevel2/Current.class new file mode 100644 index 0000000000000000000000000000000000000000..82ed16a5518e0fc8f8fd9748717b9cde5a9ee91e GIT binary patch literal 244 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2D$vAbp8C?bp7DeMmv zGt1dO$jMRPCqFqc$1|@awJ0qyIhBz?0adynzo;ZJDJNCm)5XU%uLS5^Hbw?U1||j; O24)~;WncsP6bJyW6h@=~ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CurrentHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/CurrentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..acd154bf87e2daa1859140ec4f84fe908340fa45 GIT binary patch literal 1938 zcma)6+foxj5IvLICd(oaKmuMtg|JZ;P`nUC1E`=u5Kv2Bww7hYVA!PAjmoF!SD;o! zN~=^}q{@%7>`69vqP)zdyU*$F>F)Xc=j(R><9I6LI7VfRVLXIxT$X9MB9@6Dt_tzB zAg+u14H=V&i)Bh&Z_1d)EpfUnAt7N#Mmt6&%*vR<9SL_O+>bDFLlT@oz9Ma3gSv{i zb=5J5Yj9@l1bw#_XkF5;H>JI6LmqL?_0qLM}v4$8^q21R(c9-htEj>te;u(COa zLgvPH{0Myhw-hSnJ>QgYDd$uekCJ4-GHg5Zmf?Cm=hFHXH|Zt*$HLH_v&@&=e8o5P z65EX?Y|oEC7o0NFg$7d4i#`bp3hv{Sf*wQ^oD`>i3{ZL8S}AydB*WmsTym1yaYVG` z;T4%28yQt_8fPRdDtL$`1?HNCBm>zB21&8nZ6p{K@Dn@P;+ z%ZZi5B13%w+6En!W;V^FJ|F4-O)IK%mW8_e@`mfKW`${-ZW$Iwwi7RQu^ zjrvkNFGHtEjpuMZWjWk_VVGQZOor)b<2W@+Ds^la|2mH}ZVau(Y1B(mjWy|yae?OYQ`ZM~Jk2$n&;P4XCi;_Iis^f>*= z46|x1bG))^)X);4R1^pWr<} z$DT0rhXZ*?pW!8$Kro!8)eF{zkQf;k+U62_!@&~oIh=Qu-DK|}R7j2OA(V$)3@n5T z7<5e{v>JSRS1slwwXkc-q306b-J+6(%O(E}(j=d|f(3Ux`H~{D_Mmbz|vM k58!9J6j9fE1l6DD+AW1u?LE+fAheoNlA4h8`o$N+UvAjdw*UYD literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CurrentHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/CurrentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..4064d0127555d88e3dec003cc925e300f2aa68f7 GIT binary patch literal 808 zcmah{T}uK{5It92H*G5|wX!cwAwM3Ld^Lg+!axu*dX-HtqO7hgcMbnlL6P*(59mil zb9J>8OqLyXXU;h@bMF26{`dq?KspE&(E$921+j}g8TMs}t2j_`sN#r085pL+84?xC zZs}IHrPp}FvD;!;;R9|K^pa!SyeEnb{)=|6EiM_nnd}3DuVgien98hTO0ZJ5xzS`e z`$d=kohF_uTXG`SJ#!j=dOSNC`-b$cWe!u@yxW+c9L36A%}$BOouJz!2^E z(_6D=^+yb;D|M((^s22pgR16xmNRHF@W+;8`6movrF6*@pk%WvTohrB&C^?Up{G{;~_^+;WC=u7{@KGZYut>IN7%!*(4qNh_tLADzpa zk$oCP3=C_uL&5uKWFgAw&*)6jO#w$4kS{-jmHAhMx?wr2bt7^_>vA%uJ%Ya{9K_my X{H@AS3{;8o1NbKh?+|I-&3O0%?LdF1 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/CurrentLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/CurrentLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..f7c852a83e18edd0fa7c5fce2e23fe9599ed7387 GIT binary patch literal 680 zcma))O-sW-5Qg7PKVs7OQLU|d^P*|0270XsnrlJO;>AOW$r2V~Q?}be|CNFw_23Wi zM~M^I+Jjnp*`3*WW_I?S{rr0W0MN#PjWVhhO4zPo2eo|JHBmRwV6gfzPk9n5&fs-3 znfTdb;@|RUEQOkO`Glu!KNw5N2kLsrWvE0p7zun2s3E{;zVQ6M_X#ZEqx8^+Tnkco-{A6$1DES0Dc69OzAl zywm)HAccOQjspvO4os|>*mtmw4F{XpVmMkZXg7<(v?oZ7;}yWGa71Lm%|&#V^NUI0 zkmg>df52em4U$zP+k#DNg}geQ8?@Wr8<^L6h4D;Y&YN&FQ>C5JS;>2W@ub7_N*%82 au$_lzC@{C&BA7eb+;CrHCsQesnLEc9wFJb;H1gW$rY1GAZr zd5`y=uloZ)gb4@d=yMD>h8!b~F~icjT-Zx4PNZ&5`zE29OeA75luNH|8EZ$%>zWSM zXw@)G3t3BHWSNUJD*|I!{i~8z!{Nl{kHk&>_~Ba81Od@tdFgf)hs z?w*%8Lp)b>@>=mEudQzFtYox3lCBnyc$y)!WZ9Ox%-~N~m_B;ZIb;|~Otm2i zPM|=QcDzH~MBKmY8s_n)QQ9*O3qk%`2Aa~;DZ(gz=mi{*5mD2R+?Qc*!hOidDfF#wDyPc!-+{t|PAC zhS*Ku7Q^TY*Sv{QCy95=H?Kb!Znb7zf1suTz|beg zMV;+-7f5SOD3t+F2aR>fV`@JzLGyo<{v!;sXaU+Ow5QIX^&>hB(wEUUsJ;PvNgI$M zwTY*WR+K>C626OyHX_Q~)6T$Ok;PxZ{~m*v!YmjIl_9-`pJW2T@F}f+uwg_*>v_-t zkJujz*LZK^Gfz1}_C7*I)Z`^1WysaQBKRD4Jd-$mg>ywMqc2Bh%I0*9XcCD!k&kwQ zsEmFJ?pn=c3aV$aOrC_Vg!&ExFVOb~qCdUC;GfCA5lg;9tVyIM%NP=&RC5ZzHxQ$w zsJT6^7%>TVA=TgHYvu#`Ml3SnXFYt%i)CDWk086Ch=!jdtp0`Ji&|LC-a~x|Lu+|T MQWKJHzj|Z%4|3uj3IG5A literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b9c4a332a53892accd28c40d5650c78190c6b094 GIT binary patch literal 916 zcmbVK%Syvg5Iwgxjjd5zZR`6{73^aXEa;{p_*f_i6%`RTC2cPuB_<)8ip7N= z;75sb+f=R4MI~fNX3or+IWr%hZ|?w#*or|#DvAiwG0b6JngwYVRV=AkRE7EQD@lx$v-Y%9v$kQ>kFf5bN$Tmn&L_j?7k#3B9#Z~lqj=9 zQ_4*-n4?rg+oP1lZ0@_w9?doRy zQ*^IN?h89~#wr-b>1A>?bm9tq(Wb~w(qEz*A#eT_?1>!chNpsX8XPx# literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..17822f03576bd3a096930d1535ec429ba77b35b3 GIT binary patch literal 543 zcma)3T}uK%6g{K6u4|i_ADL!B^rAkf`BWM~>PxU-Bm~lfZ0oR$Y`d{;g8!)~d zUp0n<(~jP7udRyfQ3!6{dcvRTe8TN|wZm<08NP6xj_|nYiwQq-ZDCFu`;{6)VUgPI zp0`e_zp#dtpe#*80ox3Rfjos-I)v_;hTSs8R9SA$oyGV@x>qAgh@m#emQ9^OHf`4- z*>thA(A}9}Q`)6(QNa+S6$)ygzYCF1{iA)2PJ58a1G433u(JG$P(Pdu_xe&&>ODff dCkXT)f%P9ko@_vfmmeTMA@UA|<{jP8_yUtZhC~1W literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..067fb76c6a473073ed38f57cfc9c4b359a0ea365 GIT binary patch literal 850 zcmbtS%Syvg5Ir}2qz+mm)1p~D<7p|+l^4DsJJa5xs*U`LK+MCCl?Be=)w>1 zqr{0#sf%oCH*@dIoH?91_kMkUd;+MWBBOv!2_ni0wy+(CojB~qVNb-qhywxzF38O9_bGL4ECJ@IPcAS7)p)=-Jp6ggq&*y;|QhjvBkZ(9c zCu}mD>x&Ro?-;Ue&n7`ly}Ae!Ln&E~6!z_@bOt?zH*HB;O7VXe?T3+1f--vblGItA zA2F2wu(W&EtqWsf3QdVNABBNOAey*Sp+Hk1K^AeSVg;)zida*zj*^NEXbi{mI^Xpy z)4g>_)5*U^Tjq#nPv@PTJvb`#wF>mr7=(B=y5;GvK&7}unMQSiPPz65Ry%ry@Jv~Z zm#~~*igYrnS DH6_wJ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/DelegationDirectivePolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..0a4541a6f44a3d298fcd1d213bf9f93151f310c6 GIT binary patch literal 222 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9Bk(AV&)bzxX%>2Cgl+2>k1cbRX+$K6J2$rqy5T5rt);6rVbf5)SerBb)aUluTT{+k0 aH&ZhI7HB6#hE5Nrpi}1dXVxh?g)?hKrY7f@ruXXb>c*r7u&%(Bf#Aq=tzuKgInO zxLXw|ty=X(tNc-xr<2K@RFRjS?sNIhIo;nm^YhoI{{c+mnT!({mob6K2nI1F({f!b zH^R6n#J9ruQ=I>jF^!a1X2kKfj9J_fySoz766Rz?F)m?V#sU^4+>>x$!V*JJclQdM zA)d)Q+gg5STbo~9pG#{SB%RN1@f1U7#TW{x0z))vD6dAv5>8d}bYc zy;Mz<Lbl;J`F9M9tpQdy zUvty#I^k&1HeYe`4d2qM(Dyn(zv%Wd!ZT*BOh*N$FeG7F!2_ICa1wC^XT)w87l=iN zy}W{l$S_PTFJz{P>0^TNM|j`qiLr47f8d;i6$Ov5s$dO|6(n(0!n%TNYIErYeJ#D7USSw+*3|vWZ?U{n$Vu2x@C3x-WYzWvRWM9+VZFq2 z1@16J>#bNJ14DlmrZOm~-HHF=Nf?fsL~xhumhE!qrD1a2H5q0T?G4>7sS}}X0JTJ< zhG*!l%mcle)kFt^)w-btRSbb+-VmsP#M`Eo*8vO{nyaooOG9Hb^oTJ~LmTPf(#!;< z+}$;&QyuCUeHs|1X?}wK3JkKKJM9$OQy0*Bnoj-nW%LcIAHhD*24qMr;i;o#B@j4( zZ@;XK2vU36Yw(w4@qgj}f&K$w7L0{Tkp6?8WWs~tJgt7P0YpTbd9HmPus;^A;*Q{= zryL}EA9+R8Tig3?GSxE7n%IWJpXYomm&2Bf^45M8hDSe`V|BF)wCL;hk6i(*7TI5CQrKk%8lVS Dv4{&) literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..af6a2ea3d65918d6c3c86154d5ef4a8de791f82e GIT binary patch literal 886 zcmb7CYfA!A5It92H*I@ZX76{94`R!&MoRK5H$+E-l%$YMYXXfMc?HxcGdtsihvW?7mQ6{{-NRID>7ZNqXo!$H<| zs=8gT>Umyv9aD6&yv?n&e$f&}$ue8_1;=fPYuhr*oeV?p*ld{Mgux$A+%W{s?Fz9R z#>b+OnM%>&MulPjC-ppcb9SmXZAVt-`cMg9<}(^5p=k&qtYSmMCbl$eV@Ja-q6|l4$a861749(1){M5HTSlX* z=SnqR77W`1nm;r4$CKlZS&CatSt`&MF+Wm~ArZeN_}{J-Pw(52>_d8w#ojv}xf>kO zp{ih*pqI%t&=D*2MOz^|MSqcAguKaDuqSe$7oPUQG5F{K!ZMspy}&oX%wX2TEO?ku lGS!9u7bJqYzmQb&8NMz81D1J2J&0suR4LGf@+jK?z5pBa<*xt$ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..54a3858305530ea5e2bdbdefb796a757e13b0768 GIT binary patch literal 528 zcma)3-%G+!6#lMm&e<~aN2Xa2y-WjF){{n%) zNc>e}*gHK|tIkco?6?%d(1)(+k5yx2SQX{O^R=#Jde;~3(DTn6%hbo!-SQ4YVV2cs zp4X3*Us%FIkdY*zfOUrbK$#-Uqpmu-X4N&1^2tqU6ZvnX*&P_V&#*nk=J+rJuUn2y zifOqxQ_hK2joYL?h+v4(3I#u>W`)S7g3-Q2r!Da00ol?sSc!i{s2xs*TWv1MwI0FW d69jsY!150vPc|ULOAp|m5P63{^Nwz4d;yrnfTsWe literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..b0d153f9b1a572c9662bdd0128217662f3279031 GIT binary patch literal 800 zcmbVK$x6de6g@8;(hLrDh;_EOY3m|T6>&hY#f4C)Xz8}ZG}J(BLh>r)pIj&?q6Z13(o;896LT5K&ODjFqUYMrAE3>moKpY%)lluH{%g zgIf#-4cG7K?p;s6w#VW~W!2t$TP4jHx+H2#f2wiWMZlnxI)`fjRJz918(>xB%3 zKLYjURqae4j!i7FYX#hQ2}F#x3I&=939^VS6*HJsk;j~hc`T?{gvPKtMyw6jG@O=A zcJ{_))r^2>`(w~X{}4rbC^>pK3_>&u?Xt92pi-TplScOft#aiRtg`b0;fYQWUcz*Y z$n4i@EEr#khrbIZ8>VcA;s{Ep}dkYX@-YbhvH1eWJWrab}}Z*Ftm$rTTs6n literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/EstablishTrustPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..7cd3f21853f5c1c7255a4e146f8a67aac80a211a GIT binary patch literal 197 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B){>&q;u1y%WerWA{GxRI{M>Z?;MC;OqRf&? zeb?fW#H5_e;*1cGB5OtlQ*!HjbD4{~zUN7uu~$iT?J1jNihCo{4zGO#eP0$B_Iy~R11 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicy.class b/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..210adf3642cc0071163ae3420756a5749dcc09e6 GIT binary patch literal 274 zcmb7=O$x#=5QSg-i@)H)r3-Hm=-Q2ci$bBICrIO1T4GXSEc9wFJb;H1gW$rY4`wru zneXwQuloZ)gb4@d=yMD>h8!b~F+*fsF6<>2M^ZOe_$Hy6bR=R^TP1yA&BoD*j4!0V z?yW9V!!RvnErpgQ7im_K@(j!W|D+YU58=u%`<`#o!+IsYp!x4Q36XScJh`(}#IX3a dE9<<>G>Led>_TGS^cWag=%5{@i(cp<=nc8kQeOZ7 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..aa17259114297edac5e88401a0983ccd073c3096 GIT binary patch literal 2138 zcmbVNZBr9h6n<{rHdz)4;l+qri`Wu2!a{7TC6pSVEwM?VKyh@O*;$q=T@AaLbwT+l z^;e+IM5di->ldBzM|FB`vUxX-@a68k=jD0Mx%Zs2@BjPrZvYwGl`)E08FR?QFoGL0 zEnkV{>nOev;+s+266bGa%p)t71#$dN#v;BKyW0|S5|(7dF)LwN#tMFr@S}vEB&;%o zb?>Om8IlFZ-P4@?J#BeyV=1R?k#yPFoMF( zb@1ivqijR8$;|`T@{S7pke4!A-ad3p!?PTF+2y<3_AI0HWZfxQ=22GUBJpRQYnTL^ z{}605wNv0y?k+bdllz^JWykeIrW98Bz@yZ-v7bF7NBAkFNq6?3C&}7@*JL^C1x0Mb zb)BaSg-)Keok!gC&KiFFz&3y9=3~CA*BOdE81A3(hN25*sam)SE?`VTUcnt)R&X9k z1((Eb99J1Gexybe{EPy_e14@cPpvT{TIAC!VSa9AR>5buBB7|@7py5*$FB;~xGrHs z!Dj6+!!X&_dwNE{p*3oy^%)t?w^?dSxfOjqw~;F{jJIo={?&KN@0UvwwiNsZD*H^` z_S2JLxOIA`RbDD{mm%J4=vvt@4A#+V5CYo%+9buiM{VCb(+6}=wST#p)Tv`+`Bm?7u<8PWhrcFjD$R~W9gXWe+DmVv;~ zC&otuZK8)udtE5ianNwO&?Aqj?a(;=6GrLZ!XS%Qpq)Z{>JVBl(rJ*sjJ{#@HP{Q< zfDEZ!e09941VSeW99Ok5QR2RK8o{b8`4Yi*7(5YX;Y6eY=@o(`6CMno(;5UDMohGz z?>gWE2NTgc?gXy+$`P^;kXKAipCDF&Tnj9QFYu*rlBBO7SJVpn3S_1fuh)Slk!k=1 zXeWRw=%?V$)lH_L`X-CSB)C%Q8w@;0-(QH|dyT<=(r=MSzd@o!q^2tv5~0*`3L!9% zprok5eXIl_3A%_HY~h;zfW8@vO#U;z|EwR&nEDQ3c1#fs|ADCbFNTlnVYRYH`VfWI O_LQV1PrCiujp2X4a3^2@ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9dd759d0f450506352174039269a9527d7229d93 GIT binary patch literal 928 zcmbVK+e!ja6kSIhCv7V2V)u&`7ftk zqoRFutPFfehS|*Qz4luB_VM}l4j_l^C{)Zv5Jn=3c`Qh?D9w_JWfdzbRvDC*VKq6! z-nrw|bf;0%uXv^DnWBBpTinX&XLie}7{YYyg2$`e7N%j{UpSUoY3CWjho)_cBZgoq zeZvqcI8`FsPmRJR36zq@jVi;=4@04Nd2+0~jwg(=#i<^*DXs*;8hM!!E)6nc#HNNV%rYGOe^{rERplN- ztZuXn-7@T&UM$ynMKC1$Y=2tqbt$_ZO_5u!R1Eb-dOLJJ10($&$iMDD@t1HnRAgWY zqlk3xOYRN3bkZsq#^_~oMRe{8ebL6qPS9Vx8zFDz73_%|=!Pf#Z~_5(fT#>-vM&hq tF;j^7m^mL4$z(eS{({6Y{TGtWJR{ISsLwKkSsxtrB0ZDM@IuLSd@dMcQ_2T81b5ej5O!b;^1>H}i0&}iP!4UG>t;E53c literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..cccaa03c87548d211c113c8a57ac5dc5d04e9f59 GIT binary patch literal 846 zcmbtS%TB^T6g^WOg|NLl3CXE-hCcYkTkG)9f6!*O%HARLl~L`iRv zA4?2FhQf@WX6L$bX-oz|EV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/InvocationCredentialsPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..b7907f0151ab384e8950dcf6870f7638f1c83ad9 GIT binary patch literal 208 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B*5snplww8(bq&pEpZub9{ruc?{ovH((xS|g zN}trS)EpyyXP}bQypqhsoMLN61{)lzJoC!(lM_oa^Yf6@2ju5uCRh3wq!xi?fEEd4 zC6*=X=OpH(>-#5Vr6!j!GRVP9boLK&a@0rH!^X(K$iM`|%s|&OvM@5RFt7qy3;>CM BJ!}8~ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicy.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..3b7975e0e3e5bda5e7d37f2f8d34df4229855df3 GIT binary patch literal 250 zcma)1I|>3Z6rA|k_yr3~3oF}*H}F>oD=T_}7@lh+CQCL7Ud_S-cqlQA#dZ!%Gs6rs z@6YoEV1_;i=V)=XIXWC&jvm9r`CPbbE)Jw_UWZ3YcQP}vC3Tiom)D&$T0IyB7kQV$ zNSll7cp()SrvGKLg1ijc*^*)Si!8JKVlIB=qpF-bCC$bL@+YZ?VO+Hf=Yu>N5}Q@J UwjqvA7#M13pdQ&o68}bg0hfeGVE_OC literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..68d863eb6f89ca20bc45cc0c4cbb5308b1500ad3 GIT binary patch literal 2018 zcmb7E*-{fx5Ir~BB*P#ff<#=wEle;2xD!MJxS)w3pq9Q&4Z{^i!z48hDxacXfm#(Q zt#WyhDnH7yZ!%diDld2G<#hM$KKJLZPhS9x;gO637?ClGu?Tu`PNwC&ST2NdQHU>v zaar82$QVajEED2-RmLQ)iPLon83|J|q8O1dEn@~ZB;1s6OTul2pzdxKIYT^Ka8|X# z`l>cPw=k8_mPk5XSm9}g(1c}M?j(ahG4zljAjGuk1!tL|H!;-WN$%tnsKEB`Qa1p1 zF1m*KJZBV_jO9E*`m7a(9`bl*yfn1DVXtb7u4CD&A_>cW!5x=jGSLz*V{fKwqD5|Q zIF`Ga+^-YWp1WL{t|!fI)+J5SN{Z6FXtavRHMTU%J^O@OtIj& zq9Se9E^fF~0yoyvd%z98q7vvm=Gy|#ZMb#hy%Zm^4aX_GVz}OlJ-7Ufo9|ax;4ZQZso9zA zIE`^ijPu_+I6j&hQE(K;B;*v_!<>S7+*gpqu!IE#igX%}HcXR+5()fGoXjusaw&B|)_7>?8G2kSvZP|9=d@__xZa259iPI}5-viFf!L``lZ zQi5DbEP_)w?U}@B7r_;^gpMqkDY@Y)&>19ZKt4JNpb|PMxqVfWA*i0oBt;Uj66$w! zy+y}oL?3@d_t)eP#FF0;YY?f)684K!Dm4Y*>xxlPL}U*uMo1!DNcA_wI{OEGJr|k$ sQ=b2bmrK98gCN_YjC$T6tbRk!RyD20=%EgTp*6LV)Z|I8UwJY71}QrATL1t6 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1489943f92aa7b0e4c394dbc5958b0ec649d54e4 GIT binary patch literal 856 zcma)4?@Pj95Pn{DE^U>TTG>x4NL?`Us}Yo63M{3fuQKP0P3AV%H2kj$ilh(y0sT?Y z`|7k5q%n4Ech5a{_uPGbe|!Qc;2;VS$q2$oMX`!CZq~U;i`WpcDPoI2=&DAC5@gGk z(^RZ>Q@N#D$I;zhnRcmBP_C%6BwVyI?QsnlCk za|tpdhN#{D!~?vxJz3NqU$_UhX6K g2NK8fG(^t7BG5-@#Ik~f2jOglRSNYXJo7eyAMZlgi2wiq literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..9a9fab81383896fba7fa77fd315d183d41c7f21c GIT binary patch literal 513 zcmah`T}uK%6g{K6u4|i_ADL!B1ff2-<)cQB_7ZFu34!z=+d6C`>u%^K_^%53fS~BP z9~IrrB#EeDX6~JP=A60r&fELb3xFy%Vo;G(kcuK5MMgywD=}oTsz6haQ;=7%#-Min z$rbO4-iRS}ZuHHusXL}?>urB1T)WN?*%Pkt_Zh;)(iwx)^m?4kl#(fyej#aCM4Tb< zQ;nf=bZFGPfnD*2^aQuAhr*v2e9WDye$1^)(-ot^iRTDwQroTUFcjtq&DLq-K>vm{ zECj`98VXov&;wBt|3}#HEYoS2BdQ`dV@#Dlk=8|@TRy|~4EsAx2HA2vm&DS=(p>+h zGIeQ_8n1#OMk^HLOTQB$pE^YQ5}mdnlLutWk6>l_8KF)%8E$u^q}0BLd`l4MLITTQ Wggn`R5HH_Ben8|E3e6je(D(okw|W!+ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..0f3338d17cabf6eb754c59dddec41f1b63e9abac GIT binary patch literal 761 zcmb7C%SyvQ6g|^d+9W=zw$``ZB^8VmT`7X?N~ly+x^W>xI>bntgd`UFPc9S`(S;x2 zM~OE!r7pT?H}}rmd(PZ5XXg9o^9w*7RT+7#79gRbU=8bW*oebs9JVBEOW0v3+;xQ` zEFKAlddmwe!|PebwJ;w8I~ue^UpRH+LYVj5wZq<}=h)_;?Tdg%w&#Y&47n5AwWCvp zBW-rN-eJfzy)F$u)b!c;403OzEo3NZ`fclh_qpM4mu?XSwri0_#sAZN7Y%%xl-Bff z8f$v~fT8klY_omUI5UQKB$m__VH9`-B1T7rg0hMNWC^<}7O<$Ih$R)vSW!_znPGoA z`&ypKog15!7&8zWJS4`!bd2!}p-Mj>Pd|bo6^o};j@AlPigUCpQ$0mluDyfR_TG?s zpCv9>dX_u3>9JfD^W*A|}pvjmF!&7n&`8OGp9iKz?PR8UI HhH~)>D9^4H literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/MechanismPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..b811685a61ec7015ee8845837d19975024447326 GIT binary patch literal 183 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9BuH4k*jKsXm;@o0J22l;oXrHXavPAuy#JqI< z;F6-uymV_u27~;fbp8BXph#+RX;EfLrB7;EYL1b3Z7=$Oj;-m2Z7G6LCHrBohVPQp2@Nf8CBQaUxui(`zJb;H1x3REvrX0Ru z=JkF&0ZcK_=xAt-u0~IzuP}+JH1S-TJ=<$?a?kk2ermSK1?wvE^Q#;=h_fUyDGX0^ zBjYKQCNEBGMPc?=MP6|taWPyJMqhH7?-p~DMN57Ygwug6D~x~RDkh=Av)Qb&b-hUL Q9R-C3nzdVK*AHub01n7UIsgCw literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..18d0b0c0d498c0ab050754e117dc11d832c94e06 GIT binary patch literal 2088 zcmbVNTT>HR5dKbXlMI7|2pDnK6)$U;2*brILEHc;XjoW4t=*TYVK|GUVUik8RDO#7 z3RbHkwN`m~S*!L(ZEc@qawk>b%b9b!`}?~4obH}~|NHwBfGIptF@y;flbDKO5Ys9x zSLJdoitAE*BZ`~yd`ra)GIE)f$J;9Aa7XTbQIJ(IuOf~K1q&(`aaX}T1@{#!F@#OA zSL6)IT*2Eh3cEYT!s_~b*4QNJLSdU{7$UQd>xemqU~2R+Lr9A0V-~zEhQZWm8oHf!WdUC949{*^>$?R=#)HJrwl!wyhjE6> zEj?vUnbStS8k%2=;Z%#IF`r#D*Rt!`6^4;kO#@$fljYrFUcsh@N1&P>tJxkY4~FSu z*)Q>Yk$VjBMtfEZgQ34hR2?2P0;nJ4(=eR0so(`S9anJgPs`?}uo>o3olV{;X_Q3A zP-^o?Lx7>TIwQ}jXbp1Oh7Gj!^wFQac*{{Z$EZ9s<98ooMS zQ39a@1okW1m@I5xJBDCImVAfcH}oG!vv49(hVmXkl1T)^Ia-5Y1Bl6X^Pzn{aWE0B z@m|11UpYwj0Yb&}^Z{aJsMWw?xP+g5lO%nmb4@R!Cr4)5%9R??Wu)pv0oqBTGI}Yv z6E%}j=)TDud6K?T`d9S5MbAgXfB%5~&*^`VNPk75Nu;OCI4MJ^<`hDpFF{FBTl-uI zVv_D6da%jY*dh8xEGps0ef)$U%dq|pVYW{Z4ZJ~A|AK-2T3F5ABRz=1Xn9If6OwMf HdSmz>g&7lI literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..767097d04ec2040873fb8171a8f991c6c1adebaf GIT binary patch literal 898 zcmb7CT}uK{5It92H*G5|weJrr$n;^!9*w|yDF}={A7#~xt*pDta@Xiz6%xK&&h6eXM2?*X z@f34o63JYp>T#pNu=A6AT)8+Z>#pMoqh@ja)OLMwDG1gs$&6_Ao_eHuxsfRqUkv9c zRq^0b%2ICkyT^W+EAq?sOByDjX^0`NVok$3HZ)|hsbLE#hW)W5I&rK9_ZSi_qhsin zVK?_=g?pz5}za7axr23fry)%+K z!X6#13Wf=KnOp}Qv_fCB9kNsOm+VEzn|}p+A_scm=^&gzh#nv=!}-DsLIcbU5&Omt=dkGedgdlp5X&r22+m&?`{8t5CASin7 zM@46|Afg9{nK@_9nJe9dulck zJ=q^KWG}5DpK{aT?!fFSU%G<^L-bI(QXMgbOXYJ0t?l&%nR!dTRQ{*QfPp23^j|cF z{gY#>?%fQko=+o$J@KWQSz;=jnt4hCZ8_pjbE2+=tEA19=hyeDy9N>g>7;=oHW&_q zW&&9Z!18SFwD_1v7k(PsowHWc{K|B$hQd}1J3qOFSTRIw$8!lYS1SKfZI0H^wn^?7 zNM1UjfIWRkhp+6zJ#;Y_&u0PT*VpxiRj-?c@uL2asX5A6|= LH$-XQQiRqgikEp0 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..5cb324acf06760763ae5bb00b2479f2f9426779d GIT binary patch literal 1145 zcmb_bU2D`p6g`t}Hv18+^<&q#RS;jYTP09XkrZLOFBTRmR($EhGA2VBNi$0_DfDmn zOB57YAN&FS2mgwAXU%R(w;(OPOfqxNx%b?2XMXtYp=Z_&B-Kg_Q93m5n*a1D?E% zX~fSi&)elW5!YOOTc2NwUOgB*q$g?76J;=TOY~>be+z9|ZQ6C{+@No3@C|IR^%cfv z+G%_P*GkL=eHopZgD)^Xm0|Lw40p>EZ5`g4Va>n-M81`vM^sx^?`lx*@e`-!m`>fX coW=~b=8`}jmxLY(HHol3&#DPCm}UvYAG(A|%m4rY literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/PrincipalAuthenticatorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..c3e6290aab03d2ea8711d41c14465f1f7db93f90 GIT binary patch literal 601 zcmb_aJ5Iwu5S=9<=2uWb!vUOXr8E?-Od29tGQwpFYh#a`jhtO;JsT<4;5ZZwv*^rX82E zc-T-2VDRL3Lpt7GO6zGTy2o_S{!i}h&z&ClAKU>mS&8zSO>N=|jUZ>&9sIICcf8tQ cMiT}Mj@+jK7>yZ>U<}~mF-)51!O3Uq16Co(VE_OC literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicy.class b/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..d14c20e44921f554f3016dcd23a30b8becb2c6ad GIT binary patch literal 238 zcmah^%L>9U084$WKEZ=W51zdg_6NQWgTbbLL09V7sO_kAuwV1w2l!E9K?Zs5fi(ff5f~!b7Y0q59uVJ55Wvt_wk}TTAd+q$t QfPkQb9=e`=1pcGP8!Y5Q3jhEB literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..ef0d39c45414c8202bb1cf84ac85fc06941cee8d GIT binary patch literal 1958 zcma)6*-{fx5Ir~BB*P#ff<#<#4HIMlcYlVN?z{L%jxdhr|+M?U%mkt!xI@tFd}0VV-fV?vP{brv0M$~nh;+P z^TE-0SO1LNCzJytZpziDxIYT^Cus5{A z)`m8nU7AX3D;=zyf(DFVQpy3j-9hML=rjc6}KIR8;PcPX=^9tiI%y! zZRebw41dk@W7?za;$k76Gj~!VbBVuoY{Mjw>-&M!3TcZ%b=lmYEN7bmiUr#dRcLco zaoeG^xv`Zx5MuBRB}~=Nw}s4ZJ2lLMl^U`P+b+Ce7;i?+u5EJDIaq4ZZOeSY&6j*# zui~ZJ;5|D~t>FnXUnY}+qv)3~r(hl@6!amk;J7#q;0!~=>zjfH$S@@4W-{YM&S62) zcHJ2t9Uf6|5~n0AD0qmhf<-)1ki?LLB?Zfs%P_;m2CnO4`en`QU;Se<^fg#&Q|TFf zF};*tU>IoB)cniuJGWKLOIT6x7(~3&Roix{GhFze$t=$oxy=x*4M(Mw4Bb`V%IMMn z5>Lf5GaNRFhz{3tmc#AmhRJouWSC5}j##Ut*3p(Pp(!GbAVX(mLiK7^qivYt5x5Ce zOz0tZLOqap%m3l>m*Grf)m{VY29TjcjH`!swv9_;&z15(dQL~%)G@dk7@+_42>sIx zvY;@X6gm^LX+1`_ZrT~`LG?4(2ReWZiRP|4T2=yqJ@|IZ+K8a9tGxt&Sr-2Y|8I2f z3A11Iak?B_CE58sL4GW z{+|4WSn?-gbs{xc!eNn0rKSLUT`?+(hS$Z45t0ZOQvG$YF72bQC7vYVxGlue=!k0jT=gtpET3 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b4a8f864ce77d2cc6a4f628ad9538d730ab0f8b6 GIT binary patch literal 820 zcma)4+fKqj5IqZ&3RVRLRJ?*WE)R{oVoa15G$i09zLEkP0x6Us%;|i7y?+46;Lr~lVIRDR__2-+acqhsDq~B=wu~JHsjKNWXNVUJ zv#uJgx_ZZ}w%M?H1>WU)M!hMPN`~I3_OcA#vqrmNoin%-$p;2c&ZrUfC^4Ta;8NM- zT8-i42cIk6US6mj!?d)D&ef}S$F}Y)g0-@O;VnN>CsZOalTx&;Nsd&udL5!f6UlK~ z!!q|27aeC6EJ9J>gI~t3f<5djh#{`v03n9sc}C<7y~a(3KvU~#s;;%`YO&JfRf{1u z;!X`VoJq|1AAPQOguZ8JSAOQ~6LyV<{p0^hj-A&tB`55hFFDu(;Wtic&15hv(949i zw1N`d$Z0y4=qotLP&D-h_Dlf`(#uXd0vA1iU!+s%SGY!)6$Bhi*unTx=|0@QAVI87 cL(-`ixccynRMrr3AVQ5%B~KsHlV}6@2EV_^hX4Qo literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..51323f50a5cfa80d1fffdef821d25840e67b5b2e GIT binary patch literal 495 zcmZ`$-%G+!6#kBG&e<~aN2Xa6y=*?X@=+rwdkF?wLLfcJnnNaQ3tfW$RY5->D0=RX ziq0}gA}{yebME=h_uX^P{rG%&15m|Q0y5GPGI3<%$jOLfErC4NB`6XK5{eQw2y!== z+}K^GHzH&%je$8fb=UOzdOH|8UcXL=9XOs791^0cc0mvte$QqzrQ}rYACiJ)Bnhd% zY6SK4#Hjh#{fa;2D{Sj_=mZnP9@}nJKWnyHzUx?%+J0q^P?}F|G|!KZ^j}!PQuqu- zK?$1#EtF%~g_4GEneMSU;>ruN+^Oa_(!3hjRzTREVT(#5h?eVnER$8Wxo%Ab>cS4U zSq34&D-zboe-UAy`@#DPpLQX#2jt7optAUiNGF<(wmU*vXg@-{X9%2-!s-v9$TlP- R%MTEr5POHj^Nu4tz5vt3auWam literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/QOPPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..f3d6c19e5ec39b5af5d0660de8c5bde91321b385 GIT binary patch literal 721 zcmb7>%SyvQ6o&svFKI4b>Lu2@-6c^BbgKxqE1}SOq1zJDp#)+lrcuZ{xlm9<7e0Uw zC7#$w5dzxHnK^U5|I9yUK0e>x0W?roQNfx588r>-*hs@>8n)7~En`QP+55DtW-i zaU=*LMNfwYLx%!Y#-5G^Eb6FYNyjo)bgaT)F#j4&|x$Z((ap=sqarD-1;WeUa;1MkYEfcIW`15VBZELzVp*boPGVlVzJF3yYH|r9 lgB(o1vwx72qdvMGHbw?U1|}e820D$Ag^_`UffdMN0093_F6{sS literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentials.class b/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentials.class new file mode 100644 index 0000000000000000000000000000000000000000..a657fa5848652392a8f99a73d27ea7e05e6502c0 GIT binary patch literal 272 zcma)2I|{-;6rA<9e!&A+h^5U!@B$hwgg`(~@LZoEVa5e*lOul8_QziJnAXVjwXTm|K@Ad(PCJ_0{G6mT=7`Qaje1*L;i}AG!27nTx=< zpqiASGE?cHVC@AK|NGO59r@grA!+u*_Ek6eh~jj&TB^iqGTYL#JCSCA>G!#^&eOrL Y+OCsL_}Je%0s;-R&HB6#hE5Nrpi}1Pypu(N)7lnGn3}5@a`kF6;);fLi)8HB5Th(J)C311vwq z{S~NHkDpQI@BZ$(@w&($jq|-#Mqx`Fj5U`r#9RG@i*ggOrR(q$3!{luXMl zvD^;hju77s<0o$1t7W6SW~>(p(q|PIhREZkv14dO!`{$VUB|LFL=u+0#T}PnF3}M$ zYwu+mqE&8gJC?hb<2$^V*7Drs)($VsJG{Vc*D{J*8Bv48|8^b2B)IHRaLtmAfk(AE z+@Q?!olxbH=qJ61kZm|lX_sN46Mtp> zB{$uZrW@V1&A+($iWl@c^8FsjFHU$9;Tf}79Yh5q7?rT3;CEb5a29a|=f!Reml;kU z(Q^fVAjgniTF6b)h);-7|9)quCnr)0F5(9X%L*Q1MZqIHR*=LE33&ypwZjC%^)~M4 zX?;p-^uDz{3}@RcwYltq{wSNzE;Ed^YnuMmJ}hmPixSopJOPcbTDSdv5e%v08!z%= znL7;8CIM?>z%W=xsXY%wa+-V54!UuZ2HWMjWxL$@(=fU2nhdjvZW?z>nlsS#>~usV znltp*UID$H)nt#^YS5qqRdD~5$NdIKyz7nfW}o45d)1Amv=Ex1Ptd=CcBO|)`y41$ zS~r|VdekxgG%!YQ_!;^aFvw!mX{XSh7(nYeIt|j7(Ko2R2YW*skRj2*Q%9>xAaDTR zepMS0BkgH#!e5oe-@^X|g9pMa7zhTqQBg!_4=YAUB3wxI zx5T=6gua=JO#Ty|f6B{cRQ-Y=+oz0%UL&mji=q8`TCLGTeF#HqYbB}4lWxCuWB3M% CJq0oV literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsHolder.class b/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a58d306f63055a7b5ddbd5afc890a539b4326ff9 GIT binary patch literal 880 zcmb7CZA-#X6n?HcmutP)`+HeII)hbTjiCHe5C|%LmFX_Bn47HYqJLFTBz@=y^rND4 zbyfyKGIrR`dCqgrdCvLxe0v9Qf_)7t7E?%KNy9Q$q*;|_O~ty34HcUVN@%$q&Tx3` z2Tjv&HO&fdbOJ{_T=S5-CuW&9xD#@_7;u|=!m-@D0z>lD@f>l+5YOgr7!pO_CK59{ z4vS1wY5})whJ&BXVyS#_ZnphESap}1S6;g#DuQ6Gg3L(P?x{N}mK~W=>WJYSr6wNQ zl(Lr1eK*)IQzgIby`WsCGNImr9@xC@<=^~B>WcOUwc*}v8yA=hr}L-ymvQpFF2+X zRlzVpFOw^v^Hu1JHbQoa{?fe&d5u@FCvu<{o{qvxh|vRRGHm2u5F21-FdJbOBTUN3 jcM<;uNn`FWByT(;)k2dlB?V;#8w~0o zoL=#PaK;R|b8}=(EW@?Dq0tKi;SHM%i9_Lu@Q5K^sh%-NZQtP}W{^Uq`U6PAGSUp0 z#b^xm(-X7dUk+=2Kos1*4n#OL`GmW5qswhBCfsQU+~Hm*EO*@4ukA7Dzkn8;H7rHt zX&N@M#c&YO5ZynhOy9QLmNll@N^?}Z(`_9apO((Wh}$9MGPnJmJcDezzDEJ`mFl<7 z&O$Y%9U6%Wh7_GxlsC;SMmqJ5?iG6NLM9C;>W^T${ES#Xo{jhVQda8SL%t;w$RUH( XFF=`O1W4<5kROnEg+lv=erSCFe%FNe literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/ReceivedCredentialsLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..b0da65b53e7e410bafae2406828ecdc316ab8e72 GIT binary patch literal 2414 zcmbVMVRO?)5PjzaOp*ga8$!T9p-^fk6ty9wK!Db9prkdVjSX#~9gQj8>N|+{qaziNFv=pbymzPYKuh0&5j8Brc{UXnz9(9g?_ zNQu&OyNPNDj1@~Yf$7vNT5uEHH|@Md+*#Z8lxQ_(k@VrAo$Y?2=ia{Y9+7C@xF2=4 z1@aA*=s2Q?E<$Ea4<+d8?G71t$)>j+_9DNZ&rqgy;*<1@*VS8G&RxPFp^{Cf{2wYO z)#buZw3WZ*g+bCLIokK9*Yli~7g7i5nCd{3f+@Rjc z^?*Q*Euv_S;!`+H_z6AD()%3!PtL!9m|u8~+*5jDegS7v&Jp?-^lsn$GvxkBm&xaJ zc{W|1S)P>t=Jyx~v_*f|FT25D1=*f|qM zhZ@MvnKT^gFFR+-aH#$49BKTa?o2ty(o#*a&xIWv%w?CR?zIaYGD6hcBZLkcA!>fR z(6kYv*%%>o#0b&s*o8haLNr<mf{FzTd~pe15%u0GMKs<08jpjw`}Q8^i15Ygd|vE!WBGDiZF-lUZn-3M;1yHk-z$ zw;8uwP1VyM_ei+bF$Uvx@}Vw+m_i-PO=L^xjVA?RXt`py?Z>1O6K?m&)$=b_{7|AE z>?BvgO7Q0Y;EO<#dpI!oD;xGL+nojGYi_#HWaZ&fw^~)Yc51#@vPp#d1E#%(K7nu~ auP0Z|GD3!9`4IZZyLy7tuAbps2z&!u26)f_ literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/RequiredRights.class b/idl/Security/.class/org/omg/SecurityLevel2/RequiredRights.class new file mode 100644 index 0000000000000000000000000000000000000000..3f82abe34eab7e0a506e21c7dcad788a6289fb7b GIT binary patch literal 212 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 E0Ge1Y;{X5v literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/SecurityManager.class b/idl/Security/.class/org/omg/SecurityLevel2/SecurityManager.class new file mode 100644 index 0000000000000000000000000000000000000000..4bb54de3ecc0ceb7ac3738cb611574d9688da776 GIT binary patch literal 222 zcma)%OA5j;7=$Oj;$!0hT)1)@=?#1>3YCJM;BWXXEioxE7QC7Z58$E1Y!uu%vl@mE zW}dJ613-d_#6Uty3?)VqV}XV9rE=#|9a&#}6>b@~Y?5!>lckcqz_g~8lp$NHyr@|R zf#rW}-ms@oIeQV9eUMFlSg%y(G?~-}_9xOTF#oL^=K~dnRl3b~HpF!U0f7#>(LMCz Gr>Hk&TtQd> literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerHelper.class b/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b124419636d43b9fdeb12a283008829fb43a5f01 GIT binary patch literal 2018 zcmb7E*-{fx5Ir~BB*P#ff<|0%!7#xL;7$+?;DRQAfLi)8H4N7n4U^P3sCE(3y?LPPSpU+|dQHX@u8Y$R2^k5~GNKrjFe76YHznMXa9hG1hM?|jmN`Q_Te9<7 zX+5vaEG$iDv=x%hl-78fAv9UA3eFURKQa7}At1!G=_PxWp+7O)=1K146sW-t>`*rW zcP~4J`66eOSB%vnLHY`741MJB+<0YZMZ?N#%Z^>J@*;_X^^)5T!&IUzUdGx?*G0?R z+^`GIW|qI=#c|EM<_ycob2}~am-rjUHcW!Lwi{HV9M8D}7S(8TgEF3PhbfnAM^vQE zS>+9fO5nzNdJnk4*Hi+%$6`m|g$<{HyqDrbmSNka*9u@_dKbJN*Nn$Zo*e8$Ze zd`?3wJ|!HKcdsDfiSE+MC29t#QIWwRSV~ zdI&Yz6M1Q_#q%@lH)(Jkt`{ta+fNOX>yBCFUjxOZ=T5>l`n}^jX^TkoW$3Q4TlcaW z>o7<4QEx*Pyx!;Xx(*WG@%Okh&Tz7|>UuMp2+PnV=v_xU)xo8;|4Nm*b*Doe>KJ|) z7^J`X0R8a{vKVbTDRicZr}Z%1dTD302h~qt@96+Cr15vv(W(*%Y{R!z)kef9yV`T` zS7q@J@c%;ZwlE9ELKR3K;U}5!U^qdmAFK}%K`Ga@#|8Gs!XEA^oOYG{WbY%dh??9+ zqyo8?SOjM<4RX0nt+VL8!SD;;LXUESQt8LY(mm>(BHQEh!P7q9I9totpQ{x22+zcW}E_>9f z5gh+U<%{>17pCiY%&OSbyl%T4R$?61%87_j`H5F0DxDcp?6Aogxy*Vl4@ssoK4frdlG2u|h`<;t;Z)FX&At*&L-R=aK%D@|Hu1gR0j zRC~kDM5ps-p|&fsNJHsvXX-E^-MI08=PLUG-_0bR5O`kV!H$SI;FPbT0)hqp6CpWY zQ<>lR1o*kcU(tbwTlII47jD47z3jUa2=EV3gKBN)L8e%>~uo0d~>O+1OWdJ{sli1w= literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..1b9d17298e16f0c41a210d3a1d0e69b90cd40a8e GIT binary patch literal 474 zcmaJ-T}#4H7=F&2&W~j_wbCN!Mm8^8d8rYk-2@9EA&4&IG!J94wwO!sUlsHLLD6+T zDtebG5z^tD_xpLz!}Ia^@&=%Z?JUw*Q=p|$%s@dYi!#;~

Zu*i=wq$PA+CjTpGY zF+=gv8u1A?J?=YZKMGynX)~k_T;Gij84|j2&LDS#p&&PdlyzeXNQH_OhQi-%42_dx zs})>3jUc2ignb*j(bN(X;WZcODfhV}!q$FcPenFnn^RH67K0h12)!6xj)kxS8Lv7ysp9e$I_5z=lm2~5mK(jS%d6$$;gOsEv#e7M7iDHs~ zY@V_mBq;*4`ZHKveuZ?A&=UPe$oEtQ^;S{%nXQtKXY=(3$WKVVBSrU)Ds;X873*+3 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/SecurityManagerLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..bc1a60db9547e7ba2898ef1406c1f262e884f8b6 GIT binary patch literal 1495 zcmb7^U2hUW6o%iSA6VFyYAaZ))@rp2Xlb$a24ezvV?slNjW=Fw#$`gs!0x&`)bw9z zqA_^k5Aa7B&*0Lo;@Ek`|J0Qp8(2up29L7FTucW8Yc4E6tpR7^F*7c z+U#jl(q>Y^deMYnvpJmwDX2*2qG zpDXD)L4{%Qg>6NrXNo%N}AUV&Mjx9ajwRm5h=`?JvT%X}!dX$rqraCU6Xc=zXA_!=twhU-K|IMX3 zWM73SsaJTvE!CLVoSs5eqhs1^M<`2iUqAloXDvDv^=7M9Ej5Q-s!SdB=`hGdt9$Ob zuwte)G31z8=~K3*GYi6FZFz22+7}EP=IbbtzxkaET@?eXI5e<=OcF;1)^XE77C8gA zuwmdfHVxdtT?6;9W#B%x4Lra@13P%cuy?g<)NpOyJ(YC!OEU;+JRrrKsf*gbnl8Gp z*rp%FGW|Fh61p~eOVj%*u9Lk%t1Rs&=$R^f2P+i6A@PM)nqR?M$Y_?)-a_Fk5}!ji zH7ImvLw8EM2bg0RG1R|!WggrK6Vax5Vh(=qN>^0%$6P7#}YlX$j zgi(#4=`=T<&KyRWWMmb_q!CLVQ67^JlSGfx7?fxs5!~)}87?&5x+EQkP|B3TKBHWj z5&zBNS?*m%HR=*ce6H8T&h7|aN?p^|1E#SiGKF7#cARAw-NC5ixdYo$duK(D)?}mV zshBamWm`-4#gez|s`-SVnkG}(A>deqoX!zkI`^v}Klz6Cm#O3C@A+iTi--CoA_0?w zm`P&q2|;B-X2cCi6l7!O5g^zz7Yk6#A=rl;fWZUETP(n##UdP8JcbjCr%Ug9$(tXWytK(1!t0X&qrjYSH&|wOGek25JF68o zvs!v#X*#8?kThLb=ShaZWX{StQw-kN@G65(h-uRc_8LQfY`Ddf+{wvTfgNm9Hvo4p zJBImc-YBjZYk7k7SWCQ=wVkYqmbtlQ z=bY^ff5Y?R+KORkxs$f}I=7shk$;^O6-fM@V;d%c-QEkVUeLa1RHw}i%6hRCs93Na zQI$4l6}KEJgBzR410nn0QX%vzOC6yXwwyZl!JZ&s8Ma+`%P`%FzOc5zP3K^#hPN#9 zB{yI3b-jw4?tuIJKyMJ7H1p-*Q*ac666O>zt8SQ@c3)n|GfDDNSt~y*+0=`{%cFNk27-v^| z3Er|S`U&1Y=-m}&{z#w%=`*|}6CMnwY4w8jAtb2fy7suh-bk>Ddlu(hWk1<_$Sb7A zcM&Qx+%FsRg+<;uE`Wd60u_H zFZ6ss*EfWpeL?S!_-{nwzYu8cCi727IyRO~V+J=5xP20dpx zb;EAejUumhordV=c#m6YqhvaDF0u}<@wRA~)qiFI-<49orFR#p1?oyVDg#L9kXvX86mG)ESjZ%uLC5#dMBR7X1#T zY$cMD_C{q&aiG%P~X5I|7Ho`!uKXo%xb!x173XY&ekV_P-uFoc?B&onHvT{rTT zCa(&H_?Y9*fTP*utpBOQt&XhY8_9P!Q;RA2Cd1FMU&WQVFq3*p=J~0I*CO|Ub2>{E z3=8x!DLtL6LSM8AvP<+A9!AKkzkxlI1HR(7oe}QKJ-ua7*+BOpghSofNx?8-E{x} literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalBase.class b/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..276956bb8c42e8212947d815fa940fb2358d131a GIT binary patch literal 533 zcmah`-Alqy6#re_oU>)-N2Yy%^fLG0)JKgV?Ijop8G-a5YhK1=Z84YNe^t;21VzvN zQPEi@ghXEMz31F}&hPxr$H(W(8-OPEQ;?CBkV_(;L_tOpTPYN=EkTh`l2Deg!ypgC z*$p2$qX|Rq(iodlQ+G|z*85@Lcy^m1ap-tXc*GD_s}~GH*B@~bb4Wq0{sB_3jxywWv5n z!7la~8W9PRtt2vh%XB;Dgz73SFx}o+=UD%?^sdI-3K`UeZB^n7qUHJ?h0CkeUp<`% zY6}$_h75)jomiAJO)N$_b&c)~dL2L{4Jc~QV4C=f*dU&b_Xk2&=s!ZdClkmagUug6 VnPdb=YYz~gka&kg`;LBSeF1l$g0TPq literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalTie.class b/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..60c94e8ba90309f4b233918c9280eed42edf7188 GIT binary patch literal 2197 zcmbVM+fvg|6kVqjDkUN+a;x`i3rL{i6+}zDp;c6>5BiXa>7m4FlbWQ=^q+jt865{7 z`~W}7aqrUh)ZuhQr!%WN+3T!*J^A_T`wswFyh>sMOM@84@(^xgh2ajvU4|UPDnp*( z9>aZx2MiAx9x<#jJZ5;pP+)k<@Qh)d;W@*L1YRbvAuwo_WJQ+kND3?#{Ge?5)v~!E zoqFI#je^{km8@B`gR+eBfhJ(Ys!42E1VTIYE;FXCZ@UOZTn7By(?~!_!N88u18zk*{EzoqKO@+h)b~Xp~VvT_H-!b{t8CQH$F3h4os^4c%~a?eI93 z_N+!{O&{#4EoI&a42KlQj;QK)^+<*SYw5SzlesoWBi!*7+%S6NS4uM273U(l#q&Dx z>fSGk*&&aKH_%ZM))9k58+96y2&^wL@vXikxCs5{W==1~S~DwO8c)`peavne!Ty zr-2kM7?{LV0!0I-aN58boHcNct@G@=h)V|2$QYQ$jDcD9&f>CxIkx85GTAcOnrCaC ztp#KaT*0D&tGH(1I&K)aiCY5m`~7kh=oVCpE=_*npN?=N1hV@*qdrhn`8a)90f88| zgsd^LQ#ej|qWKgf50ISx1~EPJ6|v9s#QaH|Y;g|Lzo2*h(_aw#)N)f_TW%I)caq&Z z=o4sjsO@@AT;O9%ho++E^eY`2nw~Qt&`y_Ts^=t>4vk#TIiNVS5qi#`;?TnAIZ0I) z?Nf_0P7UT34{?7|I~a;}lBRvr3mHm?*0G1sK_x`%suvnoLbT02gbpbo+IGFrh!Ud9 z&_n335~9n}B2A!=et^OC&&=-NNMC3Abenpyjw%*iH(kJ)9gN00%SP9+2kBU>6OXQI J57Jnhgx?;C>%ss4 literal 0 HcmV?d00001 diff --git a/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsOperations.class b/idl/Security/.class/org/omg/SecurityLevel2/TargetCredentialsOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..7fc412367c579a9cc033c1b802e2ec98889b8c8a GIT binary patch literal 269 zcmZ|Ky$ZrG5C`!8`Bgs_C-DiSf)MEH=vwHYdx`B4QfeYe6nr%YAHataql*qY9DnXO ze#hM(*BgKglLW&AqXc8ZOdB1v4BDu&a$K{CUF!*pbeUVHggq#+hA%N|)R(r9MKp_RIwt-eDMT@4Q1kj2aC&_6TNM_Q>Bn9vK z<`3|}|KNj{)yQ%!t-ko+FYwo>`^@A*Lb4WXCFkVqvoGJb_dYv+|NHCj0Os(uigUOg z#xqDNh^w^ED_Br*12^2ZNABPEZ);-v>@D!BOX*uN8~e(S=e?dz&Ej! z?GzGrsgPJ&UAwiISk3N;oI8IsY!6A(GA(jd$8`4-Yo6DXS#j^!#k_FlTh6;wmh4j2 zv<%mF8j6xfB<&ix-MdD4-N+V&myHi8GaMO?k2nmDEJu!#Qt8Dc7wduWNbPBo`X`YEaZw_2{b&5OBycVqK5k@P(|$Q4nfth4U_O{*ugHt3A-#D!!>OyV;Lo( zp@}liUvy>+ZxJvAQy*W#J|eqT8ZPRXmDlpDry`LHSA%Z;X<=0 zemOU+UCVxGZB&G_yq6PYiGks4r&4;q;)+u1Uc<-ugtD&TQ{?60Gs?d_e6HaOd?}Z& z7>2uZ%P_riJC&qXnvw3C6;FwpD9$C;8lC62NOE@O3d3X*Mwf1;Q#tKcvkd2(%098O z?YOc{8V$QrDi;|pHFdficKTx&Yw8{D`9mR^=0_TuVWMf;rPJNf4C75rKZwL2DlV0> zQ@&_X)kfRNY?XmQ@7t~Yv9@tgn|klv3p&-~b;Mh5p#vcem|-KI_j)p)F|CZ@P-9OV z!vRqt93yCa6X)sA`yA+z&{vhynf~B|^qYn?t2aT~{Es(os16F5lDvgP&8OaD9Lp`RR^b| zB9Dr$T&^QbM^zrfdU)DD4%MM0Rb4$mq>dAG|AZ6_=|cw?_5^i|=%G5Ib&Mu8UHc2C zbnQ=!eFs(7{=ir=BDe9!dO-Sk@)1tzL1}#I5p+q0VT#sS4E#saJHm09W13^e`y@E7 zaLjVdb$*`rQ*;$CG+2I5EH!dtPexBmmO(w}(;~XWGE7I07LoQ?2BSpFBRze9GjvO& zJkomL08i X509CertificateChain; + + // an X.501 type name or Distinguished Name encapsulated in a sequence of + // octets containing the ASN.1 encoding. + typedef sequence X501DistinguishedName; + + // UTF-8 Encoding of String + typedef sequence UTF8String; + + // ASN.1 Encoding of an OBJECT IDENTIFIER + typedef sequence OID; + typedef sequence OIDList; + + // A sequence of octets containing a GSStoken. Initial context tokens are + // ASN.1 encoded as defined in [IETF RFC 2743] 3.1, + // "Mechanism-Independent token Format", pp. 81-82. Initial context tokens + // contain an ASN.1 tag followed by a token length, a mechanism identifier, + // and a mechanism-specific token (i.e. a GSSUP::InitialContextToken). The + // encoding of all other GSS tokens (e.g. error tokens and final context + // tokens) is mechanism dependent. + typedef sequence GSSToken; + + // An encoding of a GSS Mechanism-Independent Exported Name Object as + // defined in [IETF RFC 2743] 3.2, "GSS Mechanism-Independent + // Exported Name Object Format," p. 84. + typedef sequence GSS_NT_ExportedName; + typedef sequence GSS_NT_ExportedNameList; + + // The MsgType enumeration defines the complete set of service context + // message types used by the CSI context management protocols, including + // those message types pertaining only to the stateful application of the + // protocols (to insure proper alignment of the identifiers between + // stateless and stateful implementations). Specifically, the + // MTMessageInContext is not sent by stateless clients (although it may + // be received by stateless targets). + typedef short MsgType; + const MsgType MTEstablishContext = 0; + const MsgType MTCompleteEstablishContext = 1; + const MsgType MTContextError = 4; + const MsgType MTMessageInContext = 5; + + // The ContextId type is used carry session identifiers. A stateless + // application of the service context protocol is indicated by a session + // identifier value of 0. + typedef unsigned long long ContextId; + + // The AuthorizationElementType defines the contents and encoding of + // the_element field of the AuthorizationElement. + // The high order 20-bits of each AuthorizationElementType constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the element type. The low order 12 bits + // shall contain the organization-scoped element type identifier. The + // high-order 20 bits of all element types defined by the OMG shall + // contain the VMCID allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long AuthorizationElementType; + + // An AuthorizationElementType of X509AttributeCertChain indicates that + // the_element field of the AuthorizationElement contains an ASN.1 BER + // SEQUENCE composed of an (X.509) AttributeCertificate followed by a + // SEQUENCE OF (X.509) Certificate. The two-part SEQUENCE is encapsulated + // in an octet stream. // The chain of identity certificates is provided + // shall directly certify the one preceding it. The first certificate + // in the chain shall certify the attribute certificate. The ASN.1 + // representation of (X.509) Certificate is as defined in [IETF RFC 2459]. + // The ASN.1 representation of (X.509) AtributeCertificate is as defined + // in [IETF ID PKIXAC]. + const AuthorizationElementType X509AttributeCertChain = OMGVMCID | 1; + typedef sequence AuthorizationElementContents; + + // The AuthorizationElement contains one element of an authorization token. + // Each element of an authorization token is logically a PAC. + struct AuthorizationElement { + AuthorizationElementType the_type; + AuthorizationElementContents the_element; + }; + + // The AuthorizationToken is made up of a sequence of + // AuthorizationElements + typedef sequence AuthorizationToken; + typedef unsigned long IdentityTokenType; + + // Additional standard identity token types shall only be defined by the + // OMG. All IdentityTokenType constants shall be a power of 2. + const IdentityTokenType ITTAbsent = 0; + const IdentityTokenType ITTAnonymous = 1; + const IdentityTokenType ITTPrincipalName = 2; + const IdentityTokenType ITTX509CertChain = 4; + const IdentityTokenType ITTDistinguishedName = 8; + + typedef sequence IdentityExtension; + + union IdentityToken switch ( IdentityTokenType ) { + case ITTAbsent: boolean absent; + case ITTAnonymous: boolean anonymous; + case ITTPrincipalName: GSS_NT_ExportedName principal_name; + case ITTX509CertChain: X509CertificateChain certificate_chain; + case ITTDistinguishedName: X501DistinguishedName dn; + default: IdentityExtension id; + }; + + struct EstablishContext { + ContextId client_context_id; + AuthorizationToken authorization_token; + IdentityToken identity_token; + GSSToken client_authentication_token; + }; + + struct CompleteEstablishContext { + ContextId client_context_id; + boolean context_stateful; + GSSToken final_context_token; + }; + + struct ContextError { + ContextId client_context_id; + long major_status; + long minor_status; + GSSToken error_token; + }; + + // Not sent by stateless clients. If received by a stateless server, a + // ContextError message should be returned, indicating the session does + // not exist. + struct MessageInContext { + ContextId client_context_id; + boolean discard_context; + }; + + union SASContextBody switch ( MsgType ) { + case MTEstablishContext: EstablishContext establish_msg; + case MTCompleteEstablishContext: CompleteEstablishContext complete_msg; + case MTContextError: ContextError error_msg; + case MTMessageInContext: MessageInContext in_context_msg; + }; + + // The following type represents the string representation of an ASN.1 + // OBJECT IDENTIFIER (OID). OIDs are represented by the string "oid:" + // followed by the integer base 10 representation of the OID separated + // by dots. For example, the OID corresponding to the OMG is represented + // as: "oid:2.23.130" + typedef string StringOID; + + // The GSS Object Identifier for the KRB5 mechanism is: + // { iso(1) member-body(2) United States(840) mit(113554) infosys(1) + // gssapi(2) krb5(2) } + const StringOID KRB5MechOID = "oid:1.2.840.113554.1.2.2"; + + // The GSS Object Identifier for name objects of the Mechanism-independent + // Exported Name Object type is: + // { iso(1) org(3) dod(6) internet(1) security(5) nametypes(6) + // gss-api-exported-name(4) } + const StringOID GSS_NT_Export_Name_OID = "oid:1.3.6.1.5.6.4"; + + // The GSS Object Identifier for the scoped-username name form is: + // { iso-itu-t (2) international-organization (23) omg (130) security (1) + // naming (2) scoped-username(1) } + const StringOID GSS_NT_Scoped_Username_OID = "oid:2.23.130.1.2.1"; + +}; // CSI + +#endif + + diff --git a/idl/Security/.svn/text-base/CSIIOP.idl.svn-base b/idl/Security/.svn/text-base/CSIIOP.idl.svn-base new file mode 100644 index 0000000..07128a5 --- /dev/null +++ b/idl/Security/.svn/text-base/CSIIOP.idl.svn-base @@ -0,0 +1,116 @@ +#ifndef _CSIIOP_IDL_ +#define _CSIIOP_IDL_ + +#include +#include "CSI.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module CSIIOP { + + //typeprefix CIIOP "omg.org"; + + // Association options + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + const AssociationOptions IdentityAssertion = 1024; + const AssociationOptions DelegationByClient = 2048; + + // The high order 20-bits of each ServiceConfigurationSyntax constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the syntax. The low order 12 bits shall + // contain the organization-scoped syntax identifier. The high-order 20 + // bits of all syntaxes defined by the OMG shall contain the VMCID + // allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long ServiceConfigurationSyntax; + const ServiceConfigurationSyntax SCS_GeneralNames = CSI::OMGVMCID | 0; + const ServiceConfigurationSyntax SCS_GSSExportedName = CSI::OMGVMCID | 1; + typedef sequence ServiceSpecificName; + + // The name field of the ServiceConfiguration structure identifies a + // privilege authority in the format identified in the syntax field. If the + // syntax is SCS_GeneralNames, the name field contains an ASN.1 (BER) + // SEQUENCE [1..MAX] OF GeneralName, as defined by the type GeneralNames in + // [IETF RFC 2459]. If the syntax is SCS_GSSExportedName, the name field + // contains a GSS exported name encoded according to the rules in + // [IETF RFC 2743] 3.2, "Mechanism-Independent Exported Name + // Object Format," p. 84. + struct ServiceConfiguration { + ServiceConfigurationSyntax syntax; + ServiceSpecificName name; + }; + typedef sequence ServiceConfigurationList; + + // The body of the TAG_NULL_TAG component is a sequence of octets of + // length 0. + // type used to define AS layer functionality within a compound mechanism + // definition + struct AS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID client_authentication_mech; + CSI::GSS_NT_ExportedName target_name; + }; + + // type used to define SAS layer functionality within a compound mechanism + // definition + struct SAS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + ServiceConfigurationList privilege_authorities; + CSI::OIDList supported_naming_mechanisms; + CSI::IdentityTokenType supported_identity_types; + }; + + // type used in the body of a TAG_CSI_SEC_MECH_LIST component to + // describe a compound mechanism + struct CompoundSecMech { + AssociationOptions target_requires; + IOP::TaggedComponent transport_mech; + AS_ContextSec as_context_mech; + SAS_ContextSec sas_context_mech; + }; + typedef sequence CompoundSecMechanisms; + + // type corresponding to the body of a TAG_CSI_SEC_MECH_LIST + // component + struct CompoundSecMechList { + boolean stateful; + CompoundSecMechanisms mechanism_list; + }; + struct TransportAddress { + string host_name; + unsigned short port; + }; + typedef sequence TransportAddressList; + + // Tagged component for configuring SECIOP as a CSIv2 transport mechanism + const IOP::ComponentId TAG_SECIOP_SEC_TRANS = 35; + + struct SECIOP_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID mech_oid; + CSI::GSS_NT_ExportedName target_name; + TransportAddressList addresses; + }; + // tagged component for configuring TLS/SSL as a CSIv2 transport mechanism + const IOP::ComponentId TAG_TLS_SEC_TRANS = 36; + struct TLS_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + TransportAddressList addresses; + }; + +}; //CSIIOP +#endif diff --git a/idl/Security/.svn/text-base/SSLIOP.idl.svn-base b/idl/Security/.svn/text-base/SSLIOP.idl.svn-base new file mode 100644 index 0000000..d985dd0 --- /dev/null +++ b/idl/Security/.svn/text-base/SSLIOP.idl.svn-base @@ -0,0 +1,20 @@ +#if !defined(_SSLIOP_IDL) +#define _SSLIOP_IDL + +#pragma prefix "omg.org" + +#include +#include + +module SSLIOP { + // Security mechanism SSL + const IOP::ComponentId TAG_SSL_SEC_TRANS = 20; + + struct SSL { + Security::AssociationOptions target_supports; + Security::AssociationOptions target_requires; + unsigned short port; + }; + +}; +#endif /* _SSLIOP_IDL */ diff --git a/idl/Security/.svn/text-base/Security.idl.svn-base b/idl/Security/.svn/text-base/Security.idl.svn-base new file mode 100644 index 0000000..b78dabd --- /dev/null +++ b/idl/Security/.svn/text-base/Security.idl.svn-base @@ -0,0 +1,329 @@ +//Security Service, v1.8 - OMG IDL Summary File +//Object Management Group, Inc. +// +//Copyright 1995, AT&T Global Information Solutions Company +//Copyright 1995, Digital Equipment Corporation +//Copyright 1995, Expersoft Corporation +//Copyright 1995, Groupe Bull +//Copyright 1995, Hewlett-Packard Company +//Copyright 1995, IBM (in collaboration with Taligent, Inc.) +//Copyright 1995, International Computers Limited +//Copyright 2000, Object Management Group, Inc. +//Copyright 1995, Netscape Communications Corporation +//Copyright 1997, Northern Telecom Limited +//Copyright 1995, Novell, Inc. +//Copyright 1995, Siemens Nixdorf Informationssysteme AG +//Copyright 1995, 1997, SunSoft, Inc. +//Copyright 1995, Tandem Computer, Inc. (in collaboration with Odyssey Research Assoc, Inc.) +//Copyright 1995, Tivoli Systems, Inc. +//Copyright 1997, Visigenic Software, Inc. +// +//The companies listed above have granted to the Object Management Group, Inc. +//(OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and +//distribute this document and to modify this document and distribute copies of +//the modified version. Each of the copyright holders listed above has agreed +//that no person shall be deemed to have infringed the copyright in the included +//material of any such copyright holder by reason of having used the +//specification set forth herein or having conformed any computer software to +//the specification. +// +//This file contains OMG IDL from the Security Service, v1.8 specification. +//OMG regularly publishes a summary file that contains all the "code" parts of +//an OMG formal document. Every formal document line that is IDL, PIDL, or +//language code is included in the summary file. The reason for such a listing +//is to give readers an electronic version of the "code" so that they can +//extract pieces of it. Readers might want to test an example, include it in +//their own code, or use it for documentation purposes. Having the code lines +//available electronically means there is less likelihood of a transcription +//error. +// +//This subsection defines the OMG IDL for security data types common to the //other security modules, which is the module Security. The Security module //depends on the TimeBase module and the CORBA module. + + +#if !defined(_SECURITY_IDL_) +#define _SECURITY_IDL_ + +#include +#include + +#pragma prefix "omg.org" + +module Security { + //# pragma version Security 1.8 + typedef string SecurityName; + typedef sequence Opaque; + // Constant declarations for Security Service Options + const CORBA::ServiceOption SecurityLevel1 = 1; + const CORBA::ServiceOption SecurityLevel2 = 2; + const CORBA::ServiceOption NonRepudiation = 3; + const CORBA::ServiceOption SecurityORBServiceReady = 4; + const CORBA::ServiceOption SecurityServiceReady = 5; + const CORBA::ServiceOption ReplaceORBServices = 6; + const CORBA::ServiceOption ReplaceSecurityServices = 7; + const CORBA::ServiceOption StandardSecureInteroperability = 8; + const CORBA::ServiceOption DCESecureInteroperability = 9; + // Service options for Common Secure Interoperability + const CORBA::ServiceOption CommonInteroperabilityLevel0 = 10; + const CORBA::ServiceOption CommonInteroperabilityLevel1 = 11; + const CORBA::ServiceOption CommonInteroperabilityLevel2 = 12; + // Security mech types supported for secure association + const CORBA::ServiceDetailType SecurityMechanismType = 1; + // privilege types supported in standard access policy + const CORBA::ServiceDetailType SecurityAttribute = 2; + // extensible families for standard data types + struct ExtensibleFamily { + unsigned short family_definer; + unsigned short family; + }; + typedef sequence OID; + typedef sequence OIDList; + // security attributes + typedef unsigned long SecurityAttributeType; + // other attributes; family = 0 + const SecurityAttributeType AuditId = 1; + const SecurityAttributeType AccountingId = 2; + const SecurityAttributeType NonRepudiationId = 3; + // privilege attributes; family = 1 + const SecurityAttributeType _Public = 1; + const SecurityAttributeType AccessId = 2; + const SecurityAttributeType PrimaryGroupId = 3; + const SecurityAttributeType GroupId = 4; + const SecurityAttributeType Role = 5; + const SecurityAttributeType AttributeSet = 6; + const SecurityAttributeType Clearance = 7; + const SecurityAttributeType Capability = 8; + struct AttributeType { + ExtensibleFamily attribute_family; + SecurityAttributeType attribute_type; + }; + typedef sequence AttributeTypeList; + struct SecAttribute { + AttributeType attribute_type; + OID defining_authority; + Opaque value; + // the value of this attribute can be + // decoded only with knowledge of defining_authority + }; + typedef sequence AttributeList; + // Authentication return status + enum AuthenticationStatus { + SecAuthSuccess, + SecAuthFailure, + SecAuthContinue, + SecAuthExpired + }; + // Association return status + enum AssociationStatus { + SecAssocSuccess, + SecAssocFailure, + SecAssocContinue + }; + // Authentication method + typedef unsigned long AuthenticationMethod; + typedef sequence AuthenticationMethodList; + // Credential types + enum InvocationCredentialsType { + SecOwnCredentials, + SecReceivedCredentials, + SecTargetCredentials + }; + // Declarations related to Rights + struct Right { + ExtensibleFamily rights_family; + string the_right; + }; + typedef sequence RightsList; + enum RightsCombinator { + SecAllRights , + SecAnyRight + }; + // Delegation related + enum DelegationState { + SecInitiator, + SecDelegate + }; + enum DelegationDirective { + Delegate, + NoDelegate + }; + // pick up from TimeBase + typedef TimeBase::UtcT UtcT; + typedef TimeBase::IntervalT IntervalT; + typedef TimeBase::TimeT TimeT; + // Security features available on credentials. + enum SecurityFeature { + SecNoDelegation, + SecSimpleDelegation, + SecCompositeDelegation, + SecNoProtection, + SecIntegrity, + SecConfidentiality, + SecIntegrityAndConfidentiality, + SecDetectReplay, + SecDetectMisordering, + SecEstablishTrustInTarget, + SecEstablishTrustInClient + }; + // Quality of protection which can be specified + // for an object reference and used to protect messages + enum QOP { + SecQOPNoProtection, + SecQOPIntegrity, + SecQOPConfidentiality, + SecQOPIntegrityAndConfidentiality + }; + // Type of SecurityContext + enum SecurityContextType { + SecClientSecurityContext, + SecServerSecurityContext + }; + // Operational State of a Security Context + enum SecurityContextState { + SecContextInitialized, + SecContextContinued, + SecContextClientEstablished, + SecContextEstablished, + SecContextEstablishExpired, + SecContextExpired, + SecContextInvalid + }; + struct ChannelBindings { + unsigned long initiator_addrtype; + sequence initiator_address; + unsigned long acceptor_addrtype; + sequence acceptor_address; + sequence application_data; + }; + // For use with SecurityReplaceable + struct OpaqueBuffer { + Opaque buffer; + unsigned long startpos; + unsigned long endpos; + // startpos <= endpos + // OpaqueBuffer is said to be empty if startpos == endpos + }; + + // Association options which can be administered + // on secure invocation policy and used to + // initialize security context + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + + // Flag to indicate whether association options being + // administered are the "required" or "supported" set + enum RequiresSupports { + SecRequires, + SecSupports + }; + // Direction of communication for which + // secure invocation policy applies + enum CommunicationDirection { + SecDirectionBoth, + SecDirectionRequest, + SecDirectionReply + }; + // security association mechanism type + typedef string MechanismType; + typedef sequence MechanismTypeList; + // AssociationOptions-Direction pair + struct OptionsDirectionPair { + AssociationOptions options; + CommunicationDirection direction; + }; + typedef sequence OptionsDirectionPairList; + // Delegation mode which can be administered + enum DelegationMode { + SecDelModeNoDelegation, // i.e. use own credentials + SecDelModeSimpleDelegation, // delegate received credentials + SecDelModeCompositeDelegation // delegate both; + }; + // Association options supported by a given mech type + struct MechandOptions { + MechanismType mechanism_type; + AssociationOptions options_supported; + }; + typedef sequence MechandOptionsList; + // Attribute of the SecurityLevel2::EstablishTrustPolicy + struct EstablishTrust { + boolean trust_in_client; + boolean trust_in_target; + }; + // Audit + typedef unsigned long AuditChannelId; + typedef unsigned short EventType; + const EventType AuditAll = 0; + const EventType AuditPrincipalAuth = 1; + const EventType AuditSessionAuth = 2; + const EventType AuditAuthorization = 3; + const EventType AuditInvocation = 4; + const EventType AuditSecEnvChange = 5; + const EventType AuditPolicyChange = 6; + const EventType AuditObjectCreation = 7; + const EventType AuditObjectDestruction =8; + const EventType AuditNonRepudiation = 9; + enum DayOfTheWeek { + Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; + enum AuditCombinator { + SecAllSelectors, + SecAnySelector + }; + struct AuditEventType { + ExtensibleFamily event_family; + EventType event_type; + }; + typedef sequence AuditEventTypeList; + typedef unsigned long SelectorType; + const SelectorType InterfaceName = 1; + const SelectorType ObjectRef = 2; + const SelectorType Operation = 3; + const SelectorType Initiator = 4; + const SelectorType SuccessFailure = 5; + const SelectorType Time = 6; + const SelectorType DayOfWeek = 7; + + // values defined for audit_needed and audit_write are: + // InterfaceName: CORBA::RepositoryId + // ObjectRef: object reference + // Operation: op_name + // Initiator: Credentials + // SuccessFailure: boolean + // Time: utc time on audit_write; time picked up from + // environment in audit_needed if required + // DayOfWeek: DayOfTheWeek + struct SelectorValue { + SelectorType selector; + any value; + }; + typedef sequence SelectorValueList; + + // Constant declaration for valid Security Policy Types + // General administrative policies + const CORBA::PolicyType SecClientInvocationAccess = 1; + const CORBA::PolicyType SecTargetInvocationAccess = 2; + const CORBA::PolicyType SecApplicationAccess = 3; + const CORBA::PolicyType SecClientInvocationAudit = 4; + const CORBA::PolicyType SecTargetInvocationAudit = 5; + const CORBA::PolicyType SecApplicationAudit = 6; + const CORBA::PolicyType SecDelegation = 7; + const CORBA::PolicyType SecClientSecureInvocation = 8; + const CORBA::PolicyType SecTargetSecureInvocation = 9; + const CORBA::PolicyType SecNonRepudiation = 10; + // Policies used to control attributes of a binding to a target + const CORBA::PolicyType SecMechanismsPolicy = 12; + const CORBA::PolicyType SecInvocationCredentialsPolicy = 13; + const CORBA::PolicyType SecFeaturePolicy = 14; // obsolete + const CORBA::PolicyType SecQOPPolicy = 15; + const CORBA::PolicyType SecDelegationDirectivePolicy = 38; + const CORBA::PolicyType SecEstablishTrustPolicy = 39; +}; +#endif /* _SECURITY_IDL_ */ + diff --git a/idl/Security/.svn/text-base/SecurityLevel1.idl.svn-base b/idl/Security/.svn/text-base/SecurityLevel1.idl.svn-base new file mode 100644 index 0000000..ee46e4b --- /dev/null +++ b/idl/Security/.svn/text-base/SecurityLevel1.idl.svn-base @@ -0,0 +1,18 @@ +#if !defined(_SECURITY_LEVEL_1_IDL_) +#define _SECURITY_LEVEL_1_IDL_ + +#include +#pragma prefix "omg.org" + +module SecurityLevel1 { + //# pragma version SecurityLevel1 1.8 + local interface Current : CORBA::Current { + //# pragma version Current 1.8 + // thread specific operations + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + }; +}; +#endif /* _SECURITY_LEVEL_1_IDL_ */ + diff --git a/idl/Security/.svn/text-base/SecurityLevel2.idl.svn-base b/idl/Security/.svn/text-base/SecurityLevel2.idl.svn-base new file mode 100644 index 0000000..dd3e11a --- /dev/null +++ b/idl/Security/.svn/text-base/SecurityLevel2.idl.svn-base @@ -0,0 +1,196 @@ +#if !defined(_SECURITY_LEVEL_2_IDL_) +#define _SECURITY_LEVEL_2_IDL_ + +#include + +#pragma prefix "omg.org" + +module SecurityLevel2 { + //# pragma version SecurityLevel2 1.8 + // Forward declaration of interfaces + local interface PrincipalAuthenticator; + local interface Credentials; + local interface Current; + +// Interface PrincipalAuthenticator + local interface PrincipalAuthenticator { + //# pragma version PrincipalAuthenticator 1.8 + Security::AuthenticationMethodList + get_supported_authen_methods( + in Security::MechanismType mechanism + ); + Security::AuthenticationStatus authenticate ( + in Security::AuthenticationMethod method, + in Security::MechanismType mechanism, + in Security::SecurityName security_name, + in any auth_data, + in Security::AttributeList privileges, + out Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + Security::AuthenticationStatus continue_authentication ( + in any response_data, + in Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + }; + + // Interface Credentials + local interface Credentials { + //# pragma version Credentials 1.8 + Credentials copy (); + void destroy(); + readonly attribute Security::InvocationCredentialsType credentials_type; + readonly attribute Security::AuthenticationStatus authentication_state; + readonly attribute Security::MechanismType mechanism; + attribute Security::AssociationOptions accepting_options_supported; + attribute Security::AssociationOptions accepting_options_required; + attribute Security::AssociationOptions invocation_options_supported; + attribute Security::AssociationOptions invocation_options_required; + boolean get_security_feature( + in Security::CommunicationDirection direction, + in Security::SecurityFeature feature + ); + boolean set_attributes ( + in Security::AttributeList requested_attributes, + out Security::AttributeList actual_attributes + ); + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + boolean is_valid ( + out Security::UtcT expiry_time + ); + boolean refresh( + in any refresh_data + ); + }; + + typedef sequence CredentialsList; + + local interface ReceivedCredentials : Credentials { + //# pragma version ReceivedCredentials 1.8 + readonly attribute Credentials accepting_credentials; + readonly attribute Security::AssociationOptions association_options_used; + readonly attribute Security::DelegationState delegation_state; + readonly attribute Security::DelegationMode delegation_mode; + }; + + local interface TargetCredentials : Credentials { + //# pragma version TargetCredentials 1.8 + readonly attribute Credentials initiating_credentials; + readonly attribute Security::AssociationOptions association_options_used; + }; + + // RequiredRights Interface + interface RequiredRights{ + void get_required_rights( + in Object obj, + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + out Security::RightsList rights, + out Security::RightsCombinator rights_combinator + ); + void set_required_rights( + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + in Security::RightsList rights, + in Security::RightsCombinator rights_combinator + ); + }; + + // interface audit channel + local interface AuditChannel { + //# pragma version AuditChannel 1.8 + void audit_write ( + in Security::AuditEventType event_type, + in CredentialsList creds, + in Security::UtcT time, + in Security::SelectorValueList descriptors, + in any event_specific_data + ); + readonly attribute Security::AuditChannelId audit_channel_id; + }; + + // interface for Audit Decision + local interface AuditDecision { + // #pragma version AuditDecision 1.8 + boolean audit_needed ( + in Security::AuditEventType event_type, + in Security::SelectorValueList value_list + ); + readonly attribute AuditChannel audit_channel; + }; + + local interface AccessDecision { + // #pragma version AccessDecision 1.8 + boolean access_allowed ( + in SecurityLevel2::CredentialsList cred_list, + in Object target, + in CORBA::Identifier operation_name, + in CORBA::Identifier target_interface_name + ); + }; + + // Policy interfaces to control bindings + local interface QOPPolicy : CORBA::Policy { + // #pragma version QOPPolicy 1.8 + readonly attribute Security::QOP qop; + }; + + local interface MechanismPolicy : CORBA::Policy { + // #pragma version MechanismPolicy 1.8 + readonly attribute Security::MechanismTypeList mechanisms; + }; + + local interface InvocationCredentialsPolicy : CORBA::Policy { + // #pragma version InvocationCredentialsPolicy 1.8 + readonly attribute CredentialsList creds; + }; + + local interface EstablishTrustPolicy : CORBA::Policy { + // #pragma version EstablishTrustPolicy 1.8 + readonly attribute Security::EstablishTrust trust; + }; + + local interface DelegationDirectivePolicy : CORBA::Policy { + // #pragma version DelegationDirectivePolicy 1.8 + readonly attribute Security::DelegationDirective delegation_directive; + }; + + local interface SecurityManager { + // #pragma version SecurityManager 1.8 + // Process/Capsule/ORB Instance specific operations + readonly attribute Security::MechandOptionsList supported_mechanisms; + readonly attribute CredentialsList own_credentials; + readonly attribute RequiredRights required_rights_object; + readonly attribute PrincipalAuthenticator principal_authenticator; + readonly attribute AccessDecision access_decision; + readonly attribute AuditDecision audit_decision; + TargetCredentials get_target_credentials ( + in Object obj_ref + ); + void remove_own_credentials( + in Credentials creds + ); + CORBA::Policy get_security_policy ( + in CORBA::PolicyType policy_type + ); + }; + + // Interface Current derived from SecurityLevel1::Current providing + // additional operations on Current at this security level. + // This is implemented by the ORB + local interface Current : SecurityLevel1::Current { + //# pragma version Current 1.8 + // Thread specific + readonly attribute ReceivedCredentials received_credentials; + }; +}; + +#endif /* _SECURITY_LEVEL_2_IDL_ */ + + + diff --git a/idl/Security/.svn/text-base/SecurityLevel3.idl.svn-base b/idl/Security/.svn/text-base/SecurityLevel3.idl.svn-base new file mode 100644 index 0000000..e3251eb --- /dev/null +++ b/idl/Security/.svn/text-base/SecurityLevel3.idl.svn-base @@ -0,0 +1,2041 @@ +//*********************************************************************** +// ORBAsec SL3 +// ---------------------------------------------------------------------- +// Copyright (C) 2001 Adiron, LLC. +// All rights reserved. +// ---------------------------------------------------------------------- +//*********************************************************************** + +//*********************************************************************** +/** + * @note Some interfaces in this IDL module have been altered from the + * original Adiron sources. + */ +//*********************************************************************** + + +#ifndef _SecurityLevel3_ +#define _SecurityLevel3_ + +#include +#include "TimeBase.idl" + +#pragma prefix "adiron.com" + +/** + * The Security Level 3 module contains the data definitions and + * the Application Programmers Interface for dealing with the + * ORBAsec SL3 Security, and the new CSIv2 Security Protocol, which has + * been adopted by the OMG. + *

+ * The SecurityLevel3 interfaces and its security data structures + * are based on the Principal Calculus. This is a mathematical + * model of representing principals for the use of access control + * and auditing. + *

+ * The SecurityLevel3 Security Service is represented by two objects + * that are returned by the ORB's resolve_initial_reference call. + * Those two objects are the SecurityManager and the SecurityCurrent. + * Other objects associated with the security service emanate from + * these two objects. + *

+ * The SecurityLevel3 Security Service has a Credentials model. This + * model, which is heavily based on the Principal Calculus, yields + * an API for accessing principal information. The credentials + * represent a principal's credentials, as well as the establishment + * of security contexts between client and servers. + *

+ * The SecurityLevel3 Security Service is currently CSIv2 Level 2 + * compliant: + *

+ *

+ * The Security Level 3 ORB Security Service does supports retention + * of CSI state. Client Authentication information and Identity + * assertion information is transmitted on each request. + *

+ * The Security Level 3 ORB Security Service does not automatically + * support endorsement at this time (CSIv2 Level 2 compliance), but + * does give you facility to do so. + */ +module SecurityLevel3 { + + /** + * The Adiron VMCID, which is used in Minor Error Codes, + * Policy Tags, etc. + */ + const unsigned long ADIRON_VMCID = 0xA11C000; + + //------------------------------------------------------------- + // Security Level 3 Data Representations + // + //------------------------------------------------------------- + + // + // A Principal Name + // A principal name always has a type, and a path of + // name components. They are ordered from least significant + // to most significant. For example, if a principal is represented + // by a single X.509 certificate, the first element in the path + // is the SubjectDN, and the second is the IssuerDN. + // + /** + * A NameType is used for typing a PrincipalName data structure. + * A NameType is a string that represents an ASN.1 + * OBJECT IDENTIFIER. Its representation usually of the form + * "oid:1.2.3.4". Other forms may be possible. It is used + * for encoding name type identifiers, which are ASN.1 DER encoded + * OBJECT IDENTIFIERs, in the CSI protocol. + * @see NameComponent + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef string NameType; + + /** + * A NameComponent is an ordered component of a NamePath. The + * least significant component is always the first component. + * It is the type of a wstring to handle international character + * values. + * @see NameType + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef wstring NameComponent; + + /** + * A NamePath is an ordered collection of NameComponents, ordered + * from the least significant to most significant. For example, + * an identity that is defined by a certificate that has a + * SubjectDN of "C=US,CN=Joe,O=Adiron" and an IssuerDN of + * "C=US,CN=AdironCA,O=Adiron" will have the following + * name components: + *

+     *  NameComponent[0] = "C=US,CN=Joe,O=Adiron"
+     *  NameComponent[1] = "C=US,CN=AdironCA,O=Adiron"
+     * 
+ * @see NameType + * @see NameComponent + * @see NameValue + * @see PrincipalName + */ + typedef sequence NamePath; + + /** + * A NameValue is the value component of a PrincipalName, + * which is a "type-value" pair. It is defined as a NamePath. + * @see NameType + * @see NameComponent + * @see NamePath + * @see PrincipalName + */ + typedef NamePath NameValue; + + /** + * A PrincipalName is a "type-value" structure. The type directs + * what the encoding and format of the components in the the + * value component are. For example, a type of "X509DirectoryPath" + * means that the value contains the DNs of the subject and + * subsequent issuers. + * @see NameType + * @see NameComponent + * @see NamePath + * @see NameValue + */ + struct PrincipalName { + NameType the_type; + NameValue the_name; + }; + + /** + * A list of PrincipalNames. + * @see PrincipalName + */ + typedef sequence PrincipalNameList; + + + // + // Attributes for privileges and other things. They are type value pairs. + // + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + *

+ * The type of a PrinAttribute is represented by a string. + *

+ * Privilege Attribute Types, that might come from X.509 certificates + * might be represented by OIDs. OIDs are represented as: + *

+     *   oid:n1.n2.n3.n4.n5.n6....
+     *             for an OID where ni are non-negative integers.
+     * 
+ * These OIDs are meant to be used to direct the "type-value" encoding + * of a GSS-API ExportName, which uses an OID as a type that directs + * the encoding of the value. + *

+ * Example Environmental Attribute Types + *

+     *   SL3:ChannelIdentifier
+     *   SL3:LocalAddress
+     *   SL3:LocalPort
+     *   SL3:TransportMechanism
+     *   SL3:TLSCipherSuite
+     * 
+ * @see PrinAttribute + */ + typedef string PrinAttributeType; + + /** + * A PrinAttributeValue is a wide character string that encodes + * or decodes the value of an attribute. An attempt is always + * meant to represent an attribute's value in a human readable + * string form. If the value cannot be decoded this way, and its + * native form is binary, then it is represented in a Hex encoding + * of the binary form. + * @see PrinAttribute + */ + typedef wstring PrinAttributeValue; + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + * @see PrinAttribute + */ + struct PrinAttribute { + PrinAttributeType the_type; + PrinAttributeValue the_value; + }; + + /** + * A list of PrinAttributes. + * @see PrinAttribute + */ + typedef sequence PrinAttributeList; + + + /** + * This is just a sequence of strings that make + * up the components of a ResourceName. + * @see ResourceName + */ + typedef sequence ResourceNameComponents; + + /** + * A ResourceName is the constructed name of a "resource". A + * ResourceName is closely modeled after CORBAmed's Resource + * Access Decision (RAD) facility's "Resource". It contains + * a sequence of strings. + */ + struct ResourceName { + ResourceNameComponents components; + }; + + /** + * A List of Resource Names. + * @See ResourceName + */ + typedef sequence ResourceNameList; + + + // + // NameTypes used in SL3 + // + + /** + * An NT_KerberosName is a NameType that signifies that the + * value of a PrincipalName is a Kerberos formated name. + * A KerberosName is a single string encoded in the + * familiar "name@REALM" format. + *

+ * From GSS-Kerboeros RFC 1964: + *

+ * 2.1.1. Kerberos Principal Name Form + *

+ * This name form shall be represented by the Object Identifier {iso(1) + * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + * krb5(2) krb5_name(1)}. + */ + const NameType NT_KerberosName = "oid:1.2.840.113554.1.2.2.1"; + + /** + * An NT_X509DirectoryNamePath is a NameType that signifies that + * the value of a PrincipalName is constructed from a chain + * of certificates, such that the end entity is the least + * significant position, with the subsequent issuers following + * in order of signature. + *

+ * The coding of the names is the string encoding of + * complete X.500 DN's, such as "C=US, CN=Joe, O=Adiron". + * There is no indication whether the last DN in the path is a + * "root", i.e. it's issuer is the same. + */ + const NameType NT_X509DirectoryNamePath = "SL3:X509DirectoryPathName"; + + /** + * The NT_Anonymous is a name type that specifies that the + * PrincipalName is representing the "anonymous" principal. + * Its value always as a single name component of "anonymous" + */ + const NameType NT_Anonymous = "SL3:anonymous"; + + /** + * The NT_StringName is a NameType that specifies that the + * PrincipalName is represented by a single NameComponent + * of name in a "scoped" name space. The name and scope + * are separated by a single "@" character. The escape character + * is "\". This string name as we call it is the same form + * used for the GSSUP (GSS-UserPassword NameType). This + * oid is the OID defined by the OMG CSIv2 specification. It + * is the value defined by the CSI::GSS_NT_Scoped_Username_OID + * constant. + */ + const NameType NT_StringName = "oid:2.23.130.1.2.1"; + + // + // Privileges + // + + /** + * A ScopedPrivileges structure represents privileges that + * belong to a scope defined by a principal. This structure + * is used to represent a principal that is a privilege authority + * that issues privileges. Privileges are represented as + * PrinAttributes. + */ + struct ScopedPrivileges { + PrincipalName privilege_authority; + PrinAttributeList privileges; + }; + + /** + * A list of ScopedPrivileges + * @see ScopedPrivileges + */ + typedef sequence ScopedPrivilegesList; + + // + // Principals + // + + /** + * A Principal comes in three forms, which correspond to the + * Principal Calculus. The forms are "Simple", "Quoting", and + * "Proxy". Simple is a principal that represents a single + * entity, usually "speaking for" itself. A "Quoting" principal + * is a "compound" principal that says that one principal is + * speaking on behalf of another, usually denoted by "(A|B)", i.e. + * "A is quoting B", which means that "A is speaking on behalf of B". + * A "Proxy" principal is almost the same as a "Quoting" principal. + * However, the security service has determined that enough evidence + * exists that proves that Principal A is authorized to speak in + * B's behalf. This principal is denoted in the calculus as "(A for B)" + * in contrast to the quoting principal "(A|B)". + */ + typedef unsigned long PrincipalType; + + /** + * The Simple Principal Type (A) + * @see PrincipalType + */ + const PrincipalType PT_Simple = 0; // A, valuetype SimplePrincipal + /** + * The Quoting Principal Type (A|B) + * @see PrincipalType + */ + const PrincipalType PT_Quoting = 1; // B | A, valuetype QuotingPrincipal + /** + * The Proxy Principal Type (A for B) + * @see PrincipalType + */ + const PrincipalType PT_Proxy = 2; // B for A, valuetype ProxyPrincipal + + /** + * A Principal is represented by a base value type, which is extended + * for the various principals, Simple, Quoting, and Proxy. This base + * type of a Principal may be sufficient for access control in + * most systems. + * @param the_type contains the corresponding identifier + * @param the_name contains the logical name of the most derived + * Principal. Such as if the Principal is a nested + * ProxyPrincipal (i.e. C for B for A) the name here + * is A. + * @param environmental_attributes + * The attributes name certain things that do are + * environmental, such as IP addresses. + * @param with_privileges + * These are the privileges associated with Principal A + * restricted_resources. + * This attribute contains a collection of resources on which + * the principal is authorized to perform actions. + */ + valuetype Principal { + /** This field contains the type of the Principal. */ + public PrincipalType the_type; + /** This field contains the name of the Principal */ + public PrincipalName the_name; + /** + * This field contains the attributes of the principal + * that are considered environmental, such as authentication + * mechanism, authentication channel identifier, etc. + */ + public PrinAttributeList environmental_attributes; + /** + * This field contains the list of scoped privileges the + * security service has determined belong to the particular + * principal. + */ + public ScopedPrivilegesList with_privileges; + }; + + /** + * A list of Principals. + * @see Principal + */ + typedef sequence PrincipalList; + + /** + * A Simple Principal represents a single entity. It is usually + * derived by credentials acquisition, authentication, trust rules concerning quoting, + * or trust rules and certificates concerning Proxying. + * It has one extra field over the base Principal, which is + * "alternate_names". + */ + valuetype SimplePrincipal : /* truncatable */ Principal { + /** + * This field indicates whether the principal was derived or is + * going to be derived from an authentication mechanism. + *

+ * If the SimplePrincipal is directly or indirectly + * (as part of a composite Principal) in the + * ClientCredentials.client_principal or + * TargetCredentials.target_principal field, + * the authenticated field indicates the authentication + * status of the SimplePrincipal in the client or target + * principal, respectively. + *

+ * If the SimplePricipal is directly or indirectly in + * the ClientCredentials.target_principal + * (or TargetCredentials.client_principal) field, + * the authenticated field indicates the target's + * (or client's belief) about its authentication status to the other + * party. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of the initiator or acceptor + * of OwnCredentials, the authenticated + * field indicates the expectation of being authenticated to the other + * side of the communication when the initiator or acceptor is used. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of a + * PrincipalIdentityStatement, + * the authenticated field indicates only the + * "best effort" of knowing whether the principal has been possibly + * authenticated or not. In other word, if this field is + * TRUE, it is for sure that the principal has been + * authenticated (or is expecting to be authenticated). + * If this field is FALSE, the principal may or may not + * have been authenticated. The reason for this ambiguity is that + * a PrincipalIdentityStatement may be created before + * the authentication of the principal being performed. In general, + * the authenticated field of a + * SimplePrincipal inside the the_principal + * field of a PrincipalIdentityStatement should not be + * taken as a definite answer for the authentication status of the + * SimplePrincipal. + * + * @see ClientCredentials.client_authentication + * @see ClientCredentials.target_authentication + * @see TargetCredentials.client_authentication + * @see TargetCredentials.target_authentication + */ + // For example, if a client uses the User/Password mechanism to + // communicate with a target, the client's OwnCredentials, created + // using a PasswordGenerator, will have the authenticated + // field in the principal in the initiator being true, + // although the client may not have been authenticated to the target. + // + public boolean authenticated; + /** + * This field contains the other name types, such as + * that appear in the X.509 alternate name fields. + */ + public PrincipalNameList alternate_names; + + }; + + /** + * A ProxyPrincipal represents a principal that speaks for another. + * The principal is proved that it is authorized to speak for another. + * The system believes this, either by trust rules of its own, + * or by delivered endorsement from the principal such as + * Principal (B for A) where the endorsement takes the form + * in the Principal Calculus as (T says B serves A) + * where T is some entity trusted by the security service + * to make those statements. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * speaks_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype ProxyPrincipal : /* truncatable */ Principal { + + /** + * In a Proxy Principal of (A for B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Proxy Principal of (A for B) the speaks_for field + * represents the principal B. + */ + public Principal speaks_for; + + }; + + /** + * A QuotingPrincipal represents a principal that speaks for another. + * The principal is not proved that it is authorized to speak for another. + * The system derives principals like this based on statements in the + * Pricipal Calculus, such as "A says B says r", which results in the + * quoting principal (A|B) says r, where "r" is a statement, such as + * a CORBA request. The security service derives principals like + * this from the CSI Identity Assertion mechanism. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * quotes_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype QuotingPrincipal : /* truncatable */ Principal { + + /** + * In a Quoting Principal of (A|B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Quoting Principal of (A|B) the quotes_for field + * represents the principal B. + */ + public Principal quotes_for; + + }; + + // + // Statements + // + + /** + * A Statement is a value type that has extensions which + * represent the different relevant data directed by its StatementType. + * There are two basic Statement Types, an IdentityStatement and + * an EndorsementStatement. An identity statement is a statement that + * asserts an identity. It may represent a the components of + * an X.509 certificate during an authentication. An EndorsementStatement + * may represent the contents of an X.509 AttributeCertificate or + * some other notion of an endorsement, such as a certificate in + * BizTalk XML. + *

+ * Statements are contained in the Credentials Objects. They + * represent pieces of evidence collected from which the security + * service deduces the Principal of the Credentials Objects. + */ + typedef unsigned long StatementType; + + /** + * The Identity Statement Type. + *

+ * A statement of this type at least extends to the + * IdentityStatement valuetype, if not truncated + * @see IdentityStatement + */ + const StatementType ST_IdentityStatement = 1; //valuetype IdentityStatement + + /** + * The Endorsement Statement Type. + *

+ * A statement of this type at least extends to the + * EndorsementStatement valuetype, if not truncated + * @see EndorsementStatement + */ + const StatementType ST_EndorsementStatement = 2; //valuetype EndorsementStatement + + /** + * An encoding is a sequence of bytes. + */ + typedef sequence Encoding; + + /** + * Statement encoding type. + *

+ * Statements carry their original encoding information, if + * they came from an encoding, such as list of X.509 identity + * certificates (i.e. a chain). The encoding type may be derivable + * from the encoding itself. For example, it's easy to tell the + * difference between a PEM encoded certificate, and a DER encoded + * certificate. Therefore, the encoding type may default to "Unknown". + * Other types may exist than the ones provided as constants in + * this module. + */ + typedef string EncodingType; + + /** + * The ET_NoEncoding type signifies that the statement + * has been generated solely by the security service + * and has no encoding. + */ + const EncodingType ET_NoEncoding = "NoEncoding"; + + /** + * The ET_Unknown encoding type may always be used if the encoding + * type can only be figured out from encoding itself. + */ + const EncodingType ET_Unknown = "Unknown"; + + /** + * User Exception for a bad encoding. + */ + exception BadEncoding {}; + + /** + * User Exception for a bad or unsupported encoding type. + */ + exception BadEncodingType {}; + + /** + * The Statement Layer is the layer of the protocol or security + * service from which the statement emanated, derived, or was collected. + */ + typedef unsigned long StatementLayer; + + /** + * Default type for a Statement Layer + */ + const StatementLayer SL_Unknown = 0; + /** + * The SL_Transport statement type signifies that the associated + * statement is derived from the transport layer, such as + * an X.509 Certificate from a TLS handshake. + */ + const StatementLayer SL_Transport = 1; + /** + * The SL_CSIAuthorization statement type signifies that the associated + * statement is derived from the CSI Authorization Layer in the CSIv2 + * protocol. + */ + const StatementLayer SL_CSIAuthorization = 2; + /** + * The SL_CSIClientAuth statement type signifies that the associated + * statement is derived from the CSI Client Authentication Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIClientAuth = 3; + /** + * The SL_CSIIdentity statement type signifies that the associated + * statement is derived from the CSI Identity Assertion Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIIdentity = 4; + + /** + * The SL_UserDefined statement layer signifies that the associate + * statement is derived or created by a user or some other + * entity than the security service. + */ + const StatementLayer SL_UserDefined = 5; + + /** + * The Statement base type contains the information common + * to all statements. A statement has an "external" encoding, such + * as an X509 Certificate. Some statements may not have an encoding, + * but its extension may carry the pertinent marshable information, + * such as a PrincipalIdentityStatement for anonymous, which is + * generated by the security service. + */ + valuetype Statement { + /** + * This field contains an identifier of the + * service layer that generated the statement. + * The layer that generated or delivered + * the statement, i.e. Transport, CSIv2 Authentication, + * CSIv2 Authorization, or CSIv2 Identity Assertion. + */ + public StatementLayer the_layer; + /** + * The type of statement, which indicates its extension + * such as an Identity Statement or an Endorsement + * Statement. + */ + public StatementType the_type; + /** + * This field indicates the type of encoding. + * The encoding may be contrived, at the encoding + * may not exist, however, the extension of the + * statement type may contain data that can + * be marshaled across the wire. See the Principal + * Identity Statement. + */ + private EncodingType encoding_type; + /** + * The bytes of the encoding, if it exists. + */ + private Encoding the_encoding; + + /** + * Returns the encoding type + */ + EncodingType get_encoding_type(); + + /** + * Returns an encoding of this statement. Some implementations + * may be able to convert. Using and encoding_type of + * ET_Unknown, will always yield the default encoding, + * if it exists. If the encoding does not exist, + * a successful return containing an empty + * sequence will result. + */ + Encoding get_encoding( + in EncodingType encoding_type + ) raises ( + BadEncodingType + ); + + /** + * This factory method allows users to create their + * own Statements from an encoding. The statements created + * by this factory method may have a type which is a further + * extension of the valuetype Statement. + */ + factory create( + in EncodingType encoding_type, + in Encoding the_encoding + ); + }; + typedef sequence StatementList; + + /** + * The Identity Statement further classifies the encoding + * as a statement that if verified asserts an identity. + */ + valuetype IdentityStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + /** + * The Principal Identity Statement is the minimal version of an + * Identity statement that asserts a single identity that the + * security service can translate into a principal. + *

+ * An example of an identity statement is an X.509 certificate in + * which its attributes are exposed into the principal, such as + * privileges. This valuetype may also be further extended by the + * security service depending on its encoding and the capabilities + * of the security service. + */ + valuetype PrincipalIdentityStatement : IdentityStatement { + public Principal the_principal; + }; + + /** + * The Endorsement Statement is a statement that is used for + * authorization. An Endorsement statement endorses a + * principal with certain characteristics, such as privileges + * or the authority to act on behalf of another principal, sometimes + * called "delegation". + *

+ * According to our research, an endorsement statement may be a + * complex entity containing matching rules for the endorsement. + * An endorsement may have the following general form: + *

+     *     I says Principal A matching [(P1 with [p1,...,pn]) or ....]
+     *        speaks_for
+     *          Principal B matching [(T1 with [t1,...,tn]) or ... ]
+     *        has [s1,...,sm]
+     *        on Resources matching [R1, .... Rn]
+     * 
+ * Actual semantic reduction of principals is directed by the + * the matching rules, and may depend on other statements as well, + * such as local trust rules in the security service configuration. + * Also, much of the capability of an endorsement statement is + * dependent on its encoding. + *

+ * This approach to authorization is a largely unexplored research + * topic. There are not many or well known encodings of endorsement + * statements. Therefore, we are reluctant to produce interfaces + * just yet, that go beyond the encoding. However, we do expose the + * Endorsement statement type, which may further direct the interpretation + * of it's encoding. + */ + valuetype EndorsementStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + + + // + // TODO: The following contruction is not supported by TIDIdlc + // + /** + * An X509IdentityStatement is one that extends the Principal Identity + * Statement. If one does get an X509 IdentityStatement, it is + * currently supported with IAIK in both DER and PEM formats. + */ + valuetype X509IdentityStatement : PrincipalIdentityStatement { +// Already defined in Statement +// /** +// * This factory method allows users to create their +// * own X509Identity statements from an encoding. +// */ +// factory create( +// in EncodingType encoding_type, +// in Encoding the_encoding +// ); + }; + typedef sequence X509IdentityStatementList; + + //------------------------------------------------------------- + // Security Level 3 Application Users Interface + // + //------------------------------------------------------------- + + // + // The Security Level 3 Credentials Model + // + + /** + * Credentials come in three types. OwnCredentials, ClientCredentials, + * and TargetCredentials. OwnCredentials represent the ORB instance's + * credentials. Each Credentials has initiating and accepting capability. + * ClientCredentials represent an established security context with + * a client. TargetCredentials represent an established security context + * with a Target's Server. + */ + typedef unsigned long CredentialsType; + + /** + * The CT_OwnCredentials CredentialsType signifies that the + * Credentials can be extended to the OwnCredentials Type. + */ + const CredentialsType CT_OwnCredentials = 0; + /** + * The CT_ClientCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_ClientCredentials = 1; + /** + * The CT_TargetCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_TargetCredentials = 2; + + /** + * A Credentials object has a validity state. Some credentials + * may be time or use dependent. + */ + typedef long CredentialsState; + + /** + * The Credentials with a CredentialsState of CS_Invalid cannot be + * used in any the initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Invalid = -3; + + /** + * Credentials with a CredentialsState of CS_Expired can no longer + * be used for initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Expired = -2; + /** + * Credentials with a CredentialsState of CS_PendingRelease can no longer + * be used for initiating or accepting establishment of any + * security contexts. It means that "release_credentials" has been + * called on the credentials. + */ + const CredentialsState CS_PendingRelease = -1; + /** + * Credentials with a CredentialsState of CS_Initialized cannot + * be used for initiating or accepting establishment of any + * security contexts. It means that credentials are in an initial + * state. This value is for internal use, and there is no + * reason a SecurityLevel3 user should see credentials in this state. + */ + const CredentialsState CS_Initialized = 0; + /** + * Credentials with a CredentialsState of CS_Valid can + * be used for initiating or accepting establishment of + * security contexts. + */ + const CredentialsState CS_Valid = 1; + + /** + * Credentials have system generated identifiers + * to which they can be referred and retrieved. + */ + typedef string CredentialsId; + typedef sequence CredentialsIdList; + + /** + * A Context Id is a system generated unique identifier for identifying + * a security context to the application. + * Security Contexts may be long lived and not established on + * every request. Therefore, an identifier is assigned. + *

+ * Note that this Context Id is not directly related to the context + * defined in the CSIv2 specification. + */ + typedef string ContextId; + + /** + * Credentials Usage + *

+ * Credentials Usage refers to the concept that Credentials may + * be used to initiate security context, accept security contexts, + * or do both. its values are used in the acquisition + * of credentials for the purpose of designating the abilities + * of the credentials acquired. + */ + typedef unsigned long CredentialsUsage; + /** + * The CU_Indefinite CredentialsUsage type is a value that + * signifies the default. Depending on some other acquisition + * arguments, the credentials usage may be able to be implicitly + * determined. + */ + const CredentialsUsage CU_Indefinite = 1; + /** + * The CU_None CredentialsUsage type is a value that states the + * credentials cannot be used to make or accept security + * contexts. ClientCredentials and TargetCredentials have + * this credentials usage. + */ + const CredentialsUsage CU_None = 2; + /** + * The CU_AcceptOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to accept the establishment + * of security contexts. + */ + const CredentialsUsage CU_AcceptOnly = 3; + /** + * The CU_InitiateOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to initiate the establishment + * of security contexts. + */ + const CredentialsUsage CU_InitiateOnly = 4; + /** + * The CU_InitiateAndAccept CredentialsUsage type is a value that + * signifies that the credentials can be used to both initiate + * and accept the establishment of security contexts. + */ + const CredentialsUsage CU_InitiateAndAccept = 5; + + /** + * A CredsDirective is a directive on a invocation as to the + * effects of the initiated security context will have on the + * the accepting side. Please see ContextEstablishmentPolicy + * for is use in context with establishing security contexts. + * @see ContextEstablishmentPolicy + */ + typedef unsigned long CredsDirective; + /** + * The CD_Default CredsDirective is a value that signifies to + * use the capabilities of the selected credentials. + */ + const CredsDirective CD_Default = 0; + /** + * The CD_InvokeTarget CredsDirective is a value that signifies that + * the selected credentials should only be used in a simple + * invocation fashion. They shall not attempt to endorse or embody + * the target to act on its behalf. + */ + const CredsDirective CD_InvokeTarget = 1; + /** + * The CD_EndorseTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to endorse + * the target. In other words, it gives the accepting side the ability + * to act on behalf of the initiating side. + */ + const CredsDirective CD_EndorseTarget = 2; + /** + * The CD_EmbodyTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to embody + * the target. In other words, it gives the accepting side the ability + * to impersonate the initiating side. + */ + const CredsDirective CD_EmbodyTarget = 3; + + /** + * A Feature Directive is a general directive used in policy that + * stipulates the of a particular feature. Such examples include, + * confidentiality, integrity, client authentication, etc. + */ + typedef long FeatureDirective; + + /** + * The FD_DoNotUse FeatureDirective means definitely not to use + * the feature. + */ + const FeatureDirective FD_DoNotUse = -2; + /** + * The FD_DoNotUseIfPossible FeatureDirective means not to use + * the feature if it is possible. Note, some mechanisms may always + * use confidentiality. + */ + const FeatureDirective FD_DoNotUseIfPossible = -1; + /** + * The FD_UseDefault FeatureDirective means to use or not to use + * the feature depending on defaults. + */ + const FeatureDirective FD_UseDefault = 0; + /** + * The FD_UseIfPossible FeatureDirective means to use the feature + * if it is possible. + */ + const FeatureDirective FD_UseIfPossible = 1; + /** + * The FD_Use FeatureDirective means definitely to use the feature. + */ + const FeatureDirective FD_Use = 2; + + + /** + * The Initiator Type of the Initiator Side of the Credentials states + * the kind of Initiator it is. There are three types that mirror + * the type of Principal, Simple, Quoting, and Proxy, that the + * initiator intends to represent to a server while trying to + * establish a security context with the server. + */ + typedef unsigned long InitiatorType; + /** + * The IT_None InitiatorType is a value that is defined for + * completeness, and has no real use. + */ + const InitiatorType IT_None = 0; + /** + * The IT_Simple InitiatorType is a value that states that the + * initiator is a "Simple" Principal. + */ + const InitiatorType IT_Simple = 1; + /** + * The IT_Quoting InitiatorType is a value that states that the + * initiator will quote another principal to the server. This + * principal is denoted in the Principal Calculus as (A|B), i.e. + * A quoting B. + */ + const InitiatorType IT_Quoting = 2; + /** + * The IT_Proxy InitiatorType is a value that states that the + * initiator will quote another principal to the server along with + * getting or providing proof to the server that it can act on + * behalf of the quoted principals. This + * principal is denoted in the Principal Calculus as (A for B). + */ + const InitiatorType IT_Proxy = 3; + + /** + * The CredsInitiator object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "initiator" side of the credentials. + */ + local interface CredsInitiator { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * client principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute Principal the_principal; + /** + * The supporting statements attribute contains a list of statements + * supporting the principal associated with this initiator. + */ + readonly attribute StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The initiator_type attribute signifies the intent of the + * initiator as to the principal it presents for the + * security context establishment. It should correspond + * to the type of the Principal. However, it might be slightly + * different, because using CSIv2 Client Authentication + * technically creates a "QuotingPrincipal" however, the + * initiator type will still be simple as no CSIv2 Identity + * Assertion will be used in establishing the security + * context. + */ + readonly attribute InitiatorType initiator_type; + /** + * The supports_embodiment attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to give the + * the accepting end of a context establishment the ability + * to impersonate this initiator principal. + */ + readonly attribute boolean supports_embodiment; + /** + * The supports_endorsement attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to endorse + * the accepting end of a context establishment to act + * on behalf of this initiator principal. + */ + readonly attribute boolean supports_endorsement; + /** + * The supports_quoting attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to simply + * quote another principal on top of these credentials. + */ + readonly attribute boolean supports_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + }; + + /** + * The CredsAcceptor object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "acceptor" side of the credentials. + */ + local interface CredsAcceptor { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * target principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute SecurityLevel3::Principal the_principal; + /** + * The supporting_statements attribute contains a list of statements + * supporting the principal associated with this acceptor. + */ + readonly attribute SecurityLevel3::StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The accepts_endorsement attribute is TRUE if these credentials + * supports and accepts CSIv2 endorsement information. + */ + readonly attribute boolean accepts_endorsement; + /** + * The accepts_quoting attribute is TRUE if these credentials + * supports and accepts CSIv2 Identity Assertion information. + */ + readonly attribute boolean accepts_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + }; + + /** + * This type is used to identify listeners for removal. + * A Listener identity will be assigned to a listener when + * it is assigned to a particular object. + */ + typedef string ListenerId; + + /** + * This local interface is used to notify the user when the credentials + * have been relinquished. When credentials are "released" they may + * stay around until their work is finished. At that point they + * will be relinquished. Also, if the underlying transport credentials + * are released, then the SecurityLevel3 Credentials get released + * as well. This listener will get informed of this event. + */ + local interface RelinquishedCredentialsListener { + void relinquished_notify( + in CredentialsId creds_id + ); + }; + + /** + * The Credentials base interface contains the common items for + * the different types of credentials. + * @see OwnCredentials + * @see ClientCredentials + * @see TargetCredentials + */ + local interface Credentials { + + /** + * The creds_id attribute contains a system generated + * identifier with which can uniquely reference the credentials + * object. + */ + readonly attribute CredentialsId creds_id; + + /** + * The creds_type stipulates the type of credentials, i.e. + * to which type of credentials it may be narrowed, e.g., + * Own, Client, or Target. + */ + readonly attribute CredentialsType creds_type; + + /** + * The creds_usage attribute stipulates the intended usage of the + * credentials. For OwnCredentials, it will be one of + * CU_AcceptOnly, CU_Initiate, CU_InitiateAndAccept. + * For ClientCredentials and TargetCredentials it will be + * CU_None. + */ + readonly attribute CredentialsUsage creds_usage; + + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + /** + * The creds_state attribute contains the + * validity state of the credentials. + */ + readonly attribute CredentialsState creds_state; + + /** + * Add a listener that will get notified when the + * OwnCredentials are finally done with any pending + * work and are relinquished by the security service. + */ + ListenerId add_relinquished_listener( + in RelinquishedCredentialsListener listener + ); + + /** + * Removes a listener. This function raises a BAD_PARAM + * exception if the listener is not registered. + */ + void remove_relinquished_listener( + in ListenerId id + ); + }; + /** + * A list of credentials. + */ + typedef sequence CredentialsList; + + /** + * OwnCredentials are created as a result of Credentials acquisition + * from the CredentialsCurator's CredentialsAcquirers. + * The Credentials have an initiator and an acceptor based + * upon its intended usage and capability. Some OwnCredentials + * that were acquired solely for initiating contexts (i.e. client side) + * will not have an acceptor, and visa versa. + */ + local interface OwnCredentials : Credentials { + + /** + * The creds_initiator attribute contains a reference to the + * local credentials initiator associated with these credentials. + * It is null if the creds_usage is AcceptOnly. + */ + readonly attribute CredsInitiator creds_initiator; + + /** + * The creds_acceptor attribute contains a reference to the + * local credentials acceptor associated with these credentials. + * It is null if the creds_usage is InitiateOnly. + */ + readonly attribute CredsAcceptor creds_acceptor; + + /** + * The release_credentials operation disables the credentials + * from further initiating and/or accepting contexts. + * Formal destruction of the Credentials object is delayed until + * its pending work is done, at which time it becomes Invalid. + */ + void release_credentials (); + }; + + /** + * A list of OwnCredentials + */ + typedef sequence OwnCredentialsList; + + /** + * An object of this interface represents the security context for + * a CSIv2 based remote client. It is created as the result of accepting + * a security context for the remote client. + * This object is only available during the servicing of a CORBA request. + * It can be retrieved from the + * SecurityLevel3::SecurityCurrent object, + * as it is thread based. + *

+ * This object contains only the information used from the + * OwnCredentials that was pertinent in establishing the + * context. There is a pointer back to that OwnCredentials + * object. Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface ClientCredentials : Credentials { + + /** + * The context_id attribute contains a system generated unique identifier + * for the context, + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service can deduce is the client from the + * information and mechanisms used. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the statements that + * delivered from CSIv2 protocol along with any from the associated + * OwnCredentials that are used to deduce the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains the names of the + * resources that the security service deduces from the CSIv2 + * information and information from the associated OwnCredentials. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service believes is representative of the + * clients version of the target's principal. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements that + * support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of resources + * on which the target is restricted. This information may come + * from the OwnCredentials. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * This attribute refers to the OwnCredentials that were used in + * establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * This attribute is TRUE if the target has + * authenticated the client, either over the transport, or at + * the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * This attribute is TRUE if the target believes that + * the client has authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * This attribute is TRUE if the context is providing + * confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * This attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + }; + + /** + * The TargetCredentials object is created as the result of accepting a + * security context for a target. It represents that context. + * It contains only the information used from the OwnCredentials + * that was pertinent in establishing the context. + * There is a pointer back to that OwnCredentials object. + * Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface TargetCredentials : Credentials { + + /** + * The context_id attribute contains a system generated + * unique identifier for the context. + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service believe is the target's + * ClientCredentials client_principal attribute. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the + * statements that support the deduction of the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains names of + * resources on which the client believes the client is restricted. + * This information may be derived from newly acquired endorsement + * information. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service deduces to be the target. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements + * that support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of + * resources on which the target is restricted. This information + * may not be available. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * The parent_credentials attribute refers to the OwnCredentials + * that were used in establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * The client_authentication attribute is TRUE if the client + * believes that the target has authenticated the client, either + * over the transport, or at the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * The target_authentication attribute is TRUE if the client has + * authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * The confidentiality attribute is TRUE if the context is + * providing confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * The integrity attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + + /** + * The target_embodied attribute is TRUE if the security service + * believes that the target is embodied to impersonate the client + * side principal. + */ + readonly attribute boolean target_embodied; + + /** + * The target_endorsed attribute is TRUE if the security service + * believes that the target is endorsed to act on behalf of the + * client side principal. + */ + readonly attribute boolean target_endorsed; + + /** + * The release operation indicates to the CSIv2 protocol, that if + * state is being retained for these credentials, they + * will be discarded with the pending next request that + * may have not yet gone out. + *

+ * Any objects references that are binded to these + * credentials after you release them will become unusable. + * + * This operation is experimental. + */ + void release(); + }; + + + //-------------------------------------------------------------------- + // Security Invocation Policy + // + //-------------------------------------------------------------------- + + /** + * The ContextEstablishmentPolicy policy object directs the + * establishment of security contexts with a target. + *

+ * The CredsDirective usage is the following: + *

+ *
+ * CD_Default + *
+ * This directive means to use the default set + * up by the thread, the ORB, the ORB configuration, + * available credentials, or other policies. + *
+ * CD_InvokeTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. Do not endorse or embody the target. + * Credentials may be IT_Simple, IT_Quoting, or IT_Proxy. + *
+ * CD_EndorseTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. + * The credentials must be + * IT_Simple, IT_Quoting, or IT_Proxy own credentials + * that supports endorsement. + * Note, a Initiator Credentials that is a IT_Proxy + * may have an endorsement statement that not only + * endorses this immediate client, but may very well + * apply to the next target. + *
+ * CD_EmbodyTarget + *
+ * If possible give the target the ability to + * impersonate the client, is performed using + * transports that can forward their credentials + * in the transport that give the ability to the + * target to work in their own behalf. Alternatively, + * the authenticator may be able to be passed on. + * IT_Simple credentials must have or have the + * ability to forward credentials. This is analogous + * to flipping the DELEGATE bit on GSS-Kerberos Forwardable + * credentials. IT_Quoting principals means + * that you can forward the transport credentials, + * authenticator plus the Quoting statement. + * IT_Proxy principals means that you can forward + * the transport credentials, authenticator, + * and associated proxy statements. + *
+ *

+ * On using Own Credentials. The creds_ids name Own Credentials. + * Also, they restrict the invocation to use only certain credentials. + * If the cred_ids list is empty, then the own credentials for the + * invocation are selected from a default, which may be + * set on the thread or the ORB instance. + */ + local interface ContextEstablishmentPolicy : CORBA::Policy { + + readonly attribute CredsDirective creds_directive; + readonly attribute OwnCredentialsList creds_list; + readonly attribute FeatureDirective use_client_auth; + readonly attribute FeatureDirective use_target_auth; + readonly attribute FeatureDirective use_confidentiality; + readonly attribute FeatureDirective use_integrity; + }; + + /** + * Type to be passed to ContextEstablishmentPolicy PolicyFactory + * through an Any. + */ + struct ContextEstablishmentPolicyArgument + { + CredsDirective creds_directive; + OwnCredentialsList creds_list; + FeatureDirective use_client_auth; + FeatureDirective use_target_auth; + FeatureDirective use_confidentiality; + FeatureDirective use_integrity; + }; + + /** + * The ContextEstablishmentPolicyType constant is + * holds value used to denote the ContextEstablishmentPolicy. + */ + const CORBA::PolicyType ContextEstablishmentPolicyType = ADIRON_VMCID | 1001; + + + /** + * The ObjectCredentialsPolicy object is placed on the policy list + * of a POA to indicate the own credentials + * that govern the accepting contexts for objects underneath + * that POA. The credentials listed here, only if they have Accepting + * capability, are used to created security components in the + * IOR of the object's reference when created. + */ + local interface ObjectCredentialsPolicy : CORBA::Policy { + readonly attribute OwnCredentialsList creds_list; + }; + + /** + * Type to be passed to ObjectCredentialsPolicy PolicyFactory + * through an Any. + */ + typedef OwnCredentialsList ObjectCredentialsPolicyArgument; + + /** + * The ObjectCredentialsPolicyType constant is + * holds value used to denote the ObjectCredentialsPolicy. + */ + const CORBA::PolicyType ObjectCredentialsPolicyType = ADIRON_VMCID | 1002; + + + //-------------------------------------------------------------------- + // Security Level 3 Credentials Acquisition Mechanism + // + //-------------------------------------------------------------------- + + /** + * Credentials are acquired by a Credentials Acquirer by some + * acquisition mechanism specified in the Credentials Curator. + * Acquisition methods are available on the curator. The + * specifics of arguments needed and the acquisition process + * are defined by the method itself. + */ + typedef string AcquisitionMethod; + typedef sequence AcquisitionMethodList; + + /** + * An acquisition of credentials may quite possibly fail as well + * as be a multistep process. A status defines the current + * state of an acquisition. + */ + typedef long AcquisitionStatus; + /** Acquisition has failed. */ + const AcquisitionStatus AQST_Failed = -2; + /** Acquisition has expired. */ + const AcquisitionStatus AQST_Expired = -1; + /** Acquisition is initialized. */ + const AcquisitionStatus AQST_Initialized = 0; + /** Acquisition needs more processing. */ + const AcquisitionStatus AQST_Continued = 1; + /** Acquisition has succeeded. */ + const AcquisitionStatus AQST_Succeeded = 2; + + /** + * The CredentialsAcquirer object is created by the Credentials + * Curator based on the selected method and initial acquisition + * arguments. When this acquisition is complete and successful, + * the created credentials can be retrieved using the get_credentials + * operation. Once get_credentials is called, this object is destroyed. + */ + local interface CredentialsAcquirer { + + /** + * This attribute contains the acquisition method + * identifier naming the method by which these credentials + * are being acquired. + */ + readonly attribute AcquisitionMethod acquisition_method; + + /** + * This attribute contains the current acquisition + * status of the acquisition process. + */ + readonly attribute AcquisitionStatus current_status; + + /** + * If the acquisition process is a multistep process through calls + * to this acquirer, then this attribute contains the current + * iteration. + */ + readonly attribute unsigned long nth_iteration; + + /** + * If the current_status attribute contains + * the AQST_Continued value, + * this operation returns, if necessary and supported + * by the acquisition method, any data that may direct the + * acquisition. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Continued value, + * a BAD_INV_ORDER exception will be raised. + */ + any get_continuation_data(); + + /** + * This operation continues the acquisition. The argument + * data is dependent on the acquisition method. + */ + AcquisitionStatus continue_acquisition( + in any acquisition_arguments + ); + + /** + * Once the current_status attribute has the + * AQST_Succeeded value, a call to this operation + * is used to retrieve the acquired OwnCredentials + * and, optionally, place the credentials on the curator's default own + * credentials list (for use with default ContextEstablishmentPolicy + * and ObjectCredentialsPolicy). + *

+ * The CredentialsAcquirer object is destroyed after + * this call. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Succeeded value, + * a BAD_INV_ORDER exception will be raised. + * + * @param on_list TRUE if these credentials go on the + * default own credentials list of the + * CredentialsCurator. + */ + OwnCredentials get_credentials( + in boolean on_list + ); + + /** + * This operation is used to destroy the + * CredentialsAcquirer object before + * get_credentials is called. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + */ + void destroy(); + }; + + /** + * The CredentialsCurator object is a single object per an ORB + * instance's Security Service. It has the ability to create + * CredentialsAcquirers and keeps a list of active default + * credentials. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     * 
+ * Or it may be retrieved from the SecurityManager's + * credentials_curator attribute. + *

+ * The following pseudo code describes the process of credentials + * acquisition using CredentialsCurator. + *

+     * // Resolve the Credentials Curator
+     * CredentialsCurator curator = ....
+     *     resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     *
+     * // Build up an acquisition argument (e.g., using SL3CSI::CSIArgBuilder)
+     * Any arg = ...
+     *
+     * // Acquire credentials and get a Credentials Acquirer
+     * CredentialsAcquirer acquirer =
+     *     curator.acquire_credentials("SL3CSIAQArgs",arg);
+     *
+     * // Get credentials and destroy the Credentials Acquirer
+     * OwnCredentials own = acquirer.get_credentials(false);
+     * 
+ */ + local interface CredentialsCurator { + + /** + * This attribute contains a list of + * acquisition methods that are supported. Method identifiers + * are defined in modules that signify their support. + * + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + readonly attribute SecurityLevel3::AcquisitionMethodList + supported_methods; + + /** + * This operation starts the process of credentials acquisition and + * create a CredentialsAcquirer for a particular + * acquisition method. It takes an initial set of arguments for + * the acquisition. The content of the arguments are based on the + * acquisiton method. Depending on the method, it is possible that + * the credentials may be immediately available from a call to + * get_credentials on the returned + * CredentialsAcquirer. + *

+ * If the process of credentials acquisition is not completed upon + * the return of the acquire_credentials operation, + * the returned CredentialsAcquirer object shall have + * its current_status at AQST_Continued. + * In this case, the get_continuation_data and + * continue_acquisition operations shall be used to + * complete the credentials acquisition process. + *

+ * If the process of credentials acquisition fails, it is up to the + * implementation to either throw a system exception or return a + * CredentialsAcquirer with the AQST_Failed + * status. + *

+ * The acquisition_arguments parameter is a CORBA + * any that is constructed according to the acquisition + * method used. The ArgumentFactory from the + * SL3AQArgs module is a local object that helps + * immensely with the construction of this complex argument. + * Extensions of that object are defined in their own separate + * modules that pertain to the particular acquisition mechanism, + * such as the SL3CSI, SL3TLS, SL3TCPIP, SL3KRB5 modules. + * + * @param acquisition_method + * The identifier of the desired acquisition method. + * A CORBA BAD_PARAM exception will be raised + * if the named method is not supported. + * @param acquisition_arguments + * The argument of the desired acquisition method. + * This CORBA any type is constructed according + * to the particular acquisition method. + * + * @see "SL3AQArgs" + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + CredentialsAcquirer acquire_credentials( + in SecurityLevel3::AcquisitionMethod acquisition_method, + in any acquisition_arguments + ); + + /** + * The Curator's Default Own Credentials list. + */ + readonly attribute OwnCredentialsList default_creds_list; + + /** + * The Curator's ids of the credentials on the default list. + */ + readonly attribute CredentialsIdList default_creds_ids; + + /** + * This operation retrieves Own Credentials by identifier. + * It is not required that the identifier name a credentials + * on the default_credentials_list. The Curator keeps track + * of all OwnCredentials it creates, until they are explicitly + * released. + */ + OwnCredentials get_own_credentials( + in CredentialsId credentials_id + ); + + /** + * This operation releases credentials from the default_creds_list, + * if there, and also disables the credentials from further use, + * provided that all their pending work is done. + */ + void release_own_credentials ( + in CredentialsId credentials_id + ); + + }; + + //-------------------------------------------------------------------- + // Security Service ORB Objects + // Retrieved from the ORB by "resolve_initial_references". + // + //-------------------------------------------------------------------- + + /** + * The SecurityManager object represents the Security Level 3 + * Security Service. There is one object of this type per ORB + * instance. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityManager");
+     * 
+ */ + local interface SecurityManager { + + /** + * The credentials_curator attribute contains the reference + * to the SecurityLevel3 Credentials Curator. There is only + * one instance per ORB. + */ + readonly attribute CredentialsCurator credentials_curator; + + /** + * The get_target_credentials operation retrieves the + * TargetCredentials that represents a CSIv2 security association + * with a Target. This operation causes communication with + * the target in order to establish a security context. + */ + TargetCredentials get_target_credentials( + in Object the_object + ); + + /** + * The create_context_estab_policy operation is a policy factory + * operation that creates the Security Level 3 + * ContextEstablishmentPolicy object. This policy is placed on + * the policy override lists of object references to direct + * the security characteristics when communicating through + * that object reference. + *

+ * If this policy is not put on an object reference, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the object references policy list, + * then the default credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ContextEstablishmentPolicy create_context_estab_policy( + in CredsDirective creds_directive, + in OwnCredentialsList creds_list, + in FeatureDirective use_client_auth, + in FeatureDirective use_target_auth, + in FeatureDirective use_confidentiality, + in FeatureDirective use_integrity + ); + + /** + * The create_object_creds_policy is a policy factory operation + * that creates the ObjectCredentialsPolicy object. This policy + * is solely for use with policies place on POAs with "POA.create_POA". + * It restricts the POAs use of credentials. If this policy is + * not put on a POA, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the POA policy list, then the default + * credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ObjectCredentialsPolicy create_object_creds_policy( + in OwnCredentialsList creds_list + ); + }; + + /** + * The SecurityCurrent object references thread specific + * data pertaining to the security service. It is used to retrieve + * the client's credentials during an invocation on the server side. + *

+ * There is only one instance of this object per ORB instance. + * It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityCurrent");
+     * 
+ */ + local interface SecurityCurrent { + + /** + * From inside the execution of a target object implementation, + * this attribute contains the representation of the remote client's + * credentials. This attribute is null if the client is not CSIv2 + * based, or the client is from a collocated call. + *

+ * The value of this attribute, if not null, represents the + * security context with a remote CSIv2 client. + * If the request_is_local attribute is FALSE, + * the current thread of execution is directly servicing a remote + * request for the target object within the target's implemenation. + * If the request_is_local attribute is TRUE, + * the current thread of execution is servicing an ORB mediated call + * on a collocated object. + *

+ * If the client is not CSIv2 based, there are no CSIv2 Client + * Credentials, and this attribute is null. In this case, + * the user should try the + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/Security/CSI.idl b/idl/Security/CSI.idl new file mode 100644 index 0000000..dd035e1 --- /dev/null +++ b/idl/Security/CSI.idl @@ -0,0 +1,180 @@ +#ifndef _CSI_IDL_ +#define _CSI_IDL_ + +#pragma prefix "omg.org" + +module CSI { + + //typeprefix CSI "omg.org"; + + // The OMG VMCID; same value as CORBA::OMGVMCID. Do not change ever. + const unsigned long OMGVMCID = 0x4F4D0; + + // An X509CertificateChain contains an ASN.1 BER encoded SEQUENCE + // [1..MAX] OF X.509 certificates encapsulated in a sequence of octets. The + // subject's certificate shall come first in the list. Each following + // certificate shall directly certify the one preceding it. The ASN.1 + // representation of Certificate is as defined in [IETF RFC 2459]. + typedef sequence X509CertificateChain; + + // an X.501 type name or Distinguished Name encapsulated in a sequence of + // octets containing the ASN.1 encoding. + typedef sequence X501DistinguishedName; + + // UTF-8 Encoding of String + typedef sequence UTF8String; + + // ASN.1 Encoding of an OBJECT IDENTIFIER + typedef sequence OID; + typedef sequence OIDList; + + // A sequence of octets containing a GSStoken. Initial context tokens are + // ASN.1 encoded as defined in [IETF RFC 2743] 3.1, + // "Mechanism-Independent token Format", pp. 81-82. Initial context tokens + // contain an ASN.1 tag followed by a token length, a mechanism identifier, + // and a mechanism-specific token (i.e. a GSSUP::InitialContextToken). The + // encoding of all other GSS tokens (e.g. error tokens and final context + // tokens) is mechanism dependent. + typedef sequence GSSToken; + + // An encoding of a GSS Mechanism-Independent Exported Name Object as + // defined in [IETF RFC 2743] 3.2, "GSS Mechanism-Independent + // Exported Name Object Format," p. 84. + typedef sequence GSS_NT_ExportedName; + typedef sequence GSS_NT_ExportedNameList; + + // The MsgType enumeration defines the complete set of service context + // message types used by the CSI context management protocols, including + // those message types pertaining only to the stateful application of the + // protocols (to insure proper alignment of the identifiers between + // stateless and stateful implementations). Specifically, the + // MTMessageInContext is not sent by stateless clients (although it may + // be received by stateless targets). + typedef short MsgType; + const MsgType MTEstablishContext = 0; + const MsgType MTCompleteEstablishContext = 1; + const MsgType MTContextError = 4; + const MsgType MTMessageInContext = 5; + + // The ContextId type is used carry session identifiers. A stateless + // application of the service context protocol is indicated by a session + // identifier value of 0. + typedef unsigned long long ContextId; + + // The AuthorizationElementType defines the contents and encoding of + // the_element field of the AuthorizationElement. + // The high order 20-bits of each AuthorizationElementType constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the element type. The low order 12 bits + // shall contain the organization-scoped element type identifier. The + // high-order 20 bits of all element types defined by the OMG shall + // contain the VMCID allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long AuthorizationElementType; + + // An AuthorizationElementType of X509AttributeCertChain indicates that + // the_element field of the AuthorizationElement contains an ASN.1 BER + // SEQUENCE composed of an (X.509) AttributeCertificate followed by a + // SEQUENCE OF (X.509) Certificate. The two-part SEQUENCE is encapsulated + // in an octet stream. // The chain of identity certificates is provided + // shall directly certify the one preceding it. The first certificate + // in the chain shall certify the attribute certificate. The ASN.1 + // representation of (X.509) Certificate is as defined in [IETF RFC 2459]. + // The ASN.1 representation of (X.509) AtributeCertificate is as defined + // in [IETF ID PKIXAC]. + const AuthorizationElementType X509AttributeCertChain = OMGVMCID | 1; + typedef sequence AuthorizationElementContents; + + // The AuthorizationElement contains one element of an authorization token. + // Each element of an authorization token is logically a PAC. + struct AuthorizationElement { + AuthorizationElementType the_type; + AuthorizationElementContents the_element; + }; + + // The AuthorizationToken is made up of a sequence of + // AuthorizationElements + typedef sequence AuthorizationToken; + typedef unsigned long IdentityTokenType; + + // Additional standard identity token types shall only be defined by the + // OMG. All IdentityTokenType constants shall be a power of 2. + const IdentityTokenType ITTAbsent = 0; + const IdentityTokenType ITTAnonymous = 1; + const IdentityTokenType ITTPrincipalName = 2; + const IdentityTokenType ITTX509CertChain = 4; + const IdentityTokenType ITTDistinguishedName = 8; + + typedef sequence IdentityExtension; + + union IdentityToken switch ( IdentityTokenType ) { + case ITTAbsent: boolean absent; + case ITTAnonymous: boolean anonymous; + case ITTPrincipalName: GSS_NT_ExportedName principal_name; + case ITTX509CertChain: X509CertificateChain certificate_chain; + case ITTDistinguishedName: X501DistinguishedName dn; + default: IdentityExtension id; + }; + + struct EstablishContext { + ContextId client_context_id; + AuthorizationToken authorization_token; + IdentityToken identity_token; + GSSToken client_authentication_token; + }; + + struct CompleteEstablishContext { + ContextId client_context_id; + boolean context_stateful; + GSSToken final_context_token; + }; + + struct ContextError { + ContextId client_context_id; + long major_status; + long minor_status; + GSSToken error_token; + }; + + // Not sent by stateless clients. If received by a stateless server, a + // ContextError message should be returned, indicating the session does + // not exist. + struct MessageInContext { + ContextId client_context_id; + boolean discard_context; + }; + + union SASContextBody switch ( MsgType ) { + case MTEstablishContext: EstablishContext establish_msg; + case MTCompleteEstablishContext: CompleteEstablishContext complete_msg; + case MTContextError: ContextError error_msg; + case MTMessageInContext: MessageInContext in_context_msg; + }; + + // The following type represents the string representation of an ASN.1 + // OBJECT IDENTIFIER (OID). OIDs are represented by the string "oid:" + // followed by the integer base 10 representation of the OID separated + // by dots. For example, the OID corresponding to the OMG is represented + // as: "oid:2.23.130" + typedef string StringOID; + + // The GSS Object Identifier for the KRB5 mechanism is: + // { iso(1) member-body(2) United States(840) mit(113554) infosys(1) + // gssapi(2) krb5(2) } + const StringOID KRB5MechOID = "oid:1.2.840.113554.1.2.2"; + + // The GSS Object Identifier for name objects of the Mechanism-independent + // Exported Name Object type is: + // { iso(1) org(3) dod(6) internet(1) security(5) nametypes(6) + // gss-api-exported-name(4) } + const StringOID GSS_NT_Export_Name_OID = "oid:1.3.6.1.5.6.4"; + + // The GSS Object Identifier for the scoped-username name form is: + // { iso-itu-t (2) international-organization (23) omg (130) security (1) + // naming (2) scoped-username(1) } + const StringOID GSS_NT_Scoped_Username_OID = "oid:2.23.130.1.2.1"; + +}; // CSI + +#endif + + diff --git a/idl/Security/CSIIOP.idl b/idl/Security/CSIIOP.idl new file mode 100644 index 0000000..07128a5 --- /dev/null +++ b/idl/Security/CSIIOP.idl @@ -0,0 +1,116 @@ +#ifndef _CSIIOP_IDL_ +#define _CSIIOP_IDL_ + +#include +#include "CSI.idl" +#include "IOP.idl" + +#pragma prefix "omg.org" + +module CSIIOP { + + //typeprefix CIIOP "omg.org"; + + // Association options + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + const AssociationOptions IdentityAssertion = 1024; + const AssociationOptions DelegationByClient = 2048; + + // The high order 20-bits of each ServiceConfigurationSyntax constant + // shall contain the Vendor Minor Codeset ID (VMCID) of the + // organization that defined the syntax. The low order 12 bits shall + // contain the organization-scoped syntax identifier. The high-order 20 + // bits of all syntaxes defined by the OMG shall contain the VMCID + // allocated to the OMG (that is, 0x4F4D0). + typedef unsigned long ServiceConfigurationSyntax; + const ServiceConfigurationSyntax SCS_GeneralNames = CSI::OMGVMCID | 0; + const ServiceConfigurationSyntax SCS_GSSExportedName = CSI::OMGVMCID | 1; + typedef sequence ServiceSpecificName; + + // The name field of the ServiceConfiguration structure identifies a + // privilege authority in the format identified in the syntax field. If the + // syntax is SCS_GeneralNames, the name field contains an ASN.1 (BER) + // SEQUENCE [1..MAX] OF GeneralName, as defined by the type GeneralNames in + // [IETF RFC 2459]. If the syntax is SCS_GSSExportedName, the name field + // contains a GSS exported name encoded according to the rules in + // [IETF RFC 2743] 3.2, "Mechanism-Independent Exported Name + // Object Format," p. 84. + struct ServiceConfiguration { + ServiceConfigurationSyntax syntax; + ServiceSpecificName name; + }; + typedef sequence ServiceConfigurationList; + + // The body of the TAG_NULL_TAG component is a sequence of octets of + // length 0. + // type used to define AS layer functionality within a compound mechanism + // definition + struct AS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID client_authentication_mech; + CSI::GSS_NT_ExportedName target_name; + }; + + // type used to define SAS layer functionality within a compound mechanism + // definition + struct SAS_ContextSec { + AssociationOptions target_supports; + AssociationOptions target_requires; + ServiceConfigurationList privilege_authorities; + CSI::OIDList supported_naming_mechanisms; + CSI::IdentityTokenType supported_identity_types; + }; + + // type used in the body of a TAG_CSI_SEC_MECH_LIST component to + // describe a compound mechanism + struct CompoundSecMech { + AssociationOptions target_requires; + IOP::TaggedComponent transport_mech; + AS_ContextSec as_context_mech; + SAS_ContextSec sas_context_mech; + }; + typedef sequence CompoundSecMechanisms; + + // type corresponding to the body of a TAG_CSI_SEC_MECH_LIST + // component + struct CompoundSecMechList { + boolean stateful; + CompoundSecMechanisms mechanism_list; + }; + struct TransportAddress { + string host_name; + unsigned short port; + }; + typedef sequence TransportAddressList; + + // Tagged component for configuring SECIOP as a CSIv2 transport mechanism + const IOP::ComponentId TAG_SECIOP_SEC_TRANS = 35; + + struct SECIOP_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + CSI::OID mech_oid; + CSI::GSS_NT_ExportedName target_name; + TransportAddressList addresses; + }; + // tagged component for configuring TLS/SSL as a CSIv2 transport mechanism + const IOP::ComponentId TAG_TLS_SEC_TRANS = 36; + struct TLS_SEC_TRANS { + AssociationOptions target_supports; + AssociationOptions target_requires; + TransportAddressList addresses; + }; + +}; //CSIIOP +#endif diff --git a/idl/Security/SSLIOP.idl b/idl/Security/SSLIOP.idl new file mode 100644 index 0000000..d985dd0 --- /dev/null +++ b/idl/Security/SSLIOP.idl @@ -0,0 +1,20 @@ +#if !defined(_SSLIOP_IDL) +#define _SSLIOP_IDL + +#pragma prefix "omg.org" + +#include +#include + +module SSLIOP { + // Security mechanism SSL + const IOP::ComponentId TAG_SSL_SEC_TRANS = 20; + + struct SSL { + Security::AssociationOptions target_supports; + Security::AssociationOptions target_requires; + unsigned short port; + }; + +}; +#endif /* _SSLIOP_IDL */ diff --git a/idl/Security/Security.idl b/idl/Security/Security.idl new file mode 100644 index 0000000..b78dabd --- /dev/null +++ b/idl/Security/Security.idl @@ -0,0 +1,329 @@ +//Security Service, v1.8 - OMG IDL Summary File +//Object Management Group, Inc. +// +//Copyright 1995, AT&T Global Information Solutions Company +//Copyright 1995, Digital Equipment Corporation +//Copyright 1995, Expersoft Corporation +//Copyright 1995, Groupe Bull +//Copyright 1995, Hewlett-Packard Company +//Copyright 1995, IBM (in collaboration with Taligent, Inc.) +//Copyright 1995, International Computers Limited +//Copyright 2000, Object Management Group, Inc. +//Copyright 1995, Netscape Communications Corporation +//Copyright 1997, Northern Telecom Limited +//Copyright 1995, Novell, Inc. +//Copyright 1995, Siemens Nixdorf Informationssysteme AG +//Copyright 1995, 1997, SunSoft, Inc. +//Copyright 1995, Tandem Computer, Inc. (in collaboration with Odyssey Research Assoc, Inc.) +//Copyright 1995, Tivoli Systems, Inc. +//Copyright 1997, Visigenic Software, Inc. +// +//The companies listed above have granted to the Object Management Group, Inc. +//(OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and +//distribute this document and to modify this document and distribute copies of +//the modified version. Each of the copyright holders listed above has agreed +//that no person shall be deemed to have infringed the copyright in the included +//material of any such copyright holder by reason of having used the +//specification set forth herein or having conformed any computer software to +//the specification. +// +//This file contains OMG IDL from the Security Service, v1.8 specification. +//OMG regularly publishes a summary file that contains all the "code" parts of +//an OMG formal document. Every formal document line that is IDL, PIDL, or +//language code is included in the summary file. The reason for such a listing +//is to give readers an electronic version of the "code" so that they can +//extract pieces of it. Readers might want to test an example, include it in +//their own code, or use it for documentation purposes. Having the code lines +//available electronically means there is less likelihood of a transcription +//error. +// +//This subsection defines the OMG IDL for security data types common to the //other security modules, which is the module Security. The Security module //depends on the TimeBase module and the CORBA module. + + +#if !defined(_SECURITY_IDL_) +#define _SECURITY_IDL_ + +#include +#include + +#pragma prefix "omg.org" + +module Security { + //# pragma version Security 1.8 + typedef string SecurityName; + typedef sequence Opaque; + // Constant declarations for Security Service Options + const CORBA::ServiceOption SecurityLevel1 = 1; + const CORBA::ServiceOption SecurityLevel2 = 2; + const CORBA::ServiceOption NonRepudiation = 3; + const CORBA::ServiceOption SecurityORBServiceReady = 4; + const CORBA::ServiceOption SecurityServiceReady = 5; + const CORBA::ServiceOption ReplaceORBServices = 6; + const CORBA::ServiceOption ReplaceSecurityServices = 7; + const CORBA::ServiceOption StandardSecureInteroperability = 8; + const CORBA::ServiceOption DCESecureInteroperability = 9; + // Service options for Common Secure Interoperability + const CORBA::ServiceOption CommonInteroperabilityLevel0 = 10; + const CORBA::ServiceOption CommonInteroperabilityLevel1 = 11; + const CORBA::ServiceOption CommonInteroperabilityLevel2 = 12; + // Security mech types supported for secure association + const CORBA::ServiceDetailType SecurityMechanismType = 1; + // privilege types supported in standard access policy + const CORBA::ServiceDetailType SecurityAttribute = 2; + // extensible families for standard data types + struct ExtensibleFamily { + unsigned short family_definer; + unsigned short family; + }; + typedef sequence OID; + typedef sequence OIDList; + // security attributes + typedef unsigned long SecurityAttributeType; + // other attributes; family = 0 + const SecurityAttributeType AuditId = 1; + const SecurityAttributeType AccountingId = 2; + const SecurityAttributeType NonRepudiationId = 3; + // privilege attributes; family = 1 + const SecurityAttributeType _Public = 1; + const SecurityAttributeType AccessId = 2; + const SecurityAttributeType PrimaryGroupId = 3; + const SecurityAttributeType GroupId = 4; + const SecurityAttributeType Role = 5; + const SecurityAttributeType AttributeSet = 6; + const SecurityAttributeType Clearance = 7; + const SecurityAttributeType Capability = 8; + struct AttributeType { + ExtensibleFamily attribute_family; + SecurityAttributeType attribute_type; + }; + typedef sequence AttributeTypeList; + struct SecAttribute { + AttributeType attribute_type; + OID defining_authority; + Opaque value; + // the value of this attribute can be + // decoded only with knowledge of defining_authority + }; + typedef sequence AttributeList; + // Authentication return status + enum AuthenticationStatus { + SecAuthSuccess, + SecAuthFailure, + SecAuthContinue, + SecAuthExpired + }; + // Association return status + enum AssociationStatus { + SecAssocSuccess, + SecAssocFailure, + SecAssocContinue + }; + // Authentication method + typedef unsigned long AuthenticationMethod; + typedef sequence AuthenticationMethodList; + // Credential types + enum InvocationCredentialsType { + SecOwnCredentials, + SecReceivedCredentials, + SecTargetCredentials + }; + // Declarations related to Rights + struct Right { + ExtensibleFamily rights_family; + string the_right; + }; + typedef sequence RightsList; + enum RightsCombinator { + SecAllRights , + SecAnyRight + }; + // Delegation related + enum DelegationState { + SecInitiator, + SecDelegate + }; + enum DelegationDirective { + Delegate, + NoDelegate + }; + // pick up from TimeBase + typedef TimeBase::UtcT UtcT; + typedef TimeBase::IntervalT IntervalT; + typedef TimeBase::TimeT TimeT; + // Security features available on credentials. + enum SecurityFeature { + SecNoDelegation, + SecSimpleDelegation, + SecCompositeDelegation, + SecNoProtection, + SecIntegrity, + SecConfidentiality, + SecIntegrityAndConfidentiality, + SecDetectReplay, + SecDetectMisordering, + SecEstablishTrustInTarget, + SecEstablishTrustInClient + }; + // Quality of protection which can be specified + // for an object reference and used to protect messages + enum QOP { + SecQOPNoProtection, + SecQOPIntegrity, + SecQOPConfidentiality, + SecQOPIntegrityAndConfidentiality + }; + // Type of SecurityContext + enum SecurityContextType { + SecClientSecurityContext, + SecServerSecurityContext + }; + // Operational State of a Security Context + enum SecurityContextState { + SecContextInitialized, + SecContextContinued, + SecContextClientEstablished, + SecContextEstablished, + SecContextEstablishExpired, + SecContextExpired, + SecContextInvalid + }; + struct ChannelBindings { + unsigned long initiator_addrtype; + sequence initiator_address; + unsigned long acceptor_addrtype; + sequence acceptor_address; + sequence application_data; + }; + // For use with SecurityReplaceable + struct OpaqueBuffer { + Opaque buffer; + unsigned long startpos; + unsigned long endpos; + // startpos <= endpos + // OpaqueBuffer is said to be empty if startpos == endpos + }; + + // Association options which can be administered + // on secure invocation policy and used to + // initialize security context + typedef unsigned short AssociationOptions; + const AssociationOptions NoProtection = 1; + const AssociationOptions Integrity = 2; + const AssociationOptions Confidentiality = 4; + const AssociationOptions DetectReplay = 8; + const AssociationOptions DetectMisordering = 16; + const AssociationOptions EstablishTrustInTarget = 32; + const AssociationOptions EstablishTrustInClient = 64; + const AssociationOptions NoDelegation = 128; + const AssociationOptions SimpleDelegation = 256; + const AssociationOptions CompositeDelegation = 512; + + // Flag to indicate whether association options being + // administered are the "required" or "supported" set + enum RequiresSupports { + SecRequires, + SecSupports + }; + // Direction of communication for which + // secure invocation policy applies + enum CommunicationDirection { + SecDirectionBoth, + SecDirectionRequest, + SecDirectionReply + }; + // security association mechanism type + typedef string MechanismType; + typedef sequence MechanismTypeList; + // AssociationOptions-Direction pair + struct OptionsDirectionPair { + AssociationOptions options; + CommunicationDirection direction; + }; + typedef sequence OptionsDirectionPairList; + // Delegation mode which can be administered + enum DelegationMode { + SecDelModeNoDelegation, // i.e. use own credentials + SecDelModeSimpleDelegation, // delegate received credentials + SecDelModeCompositeDelegation // delegate both; + }; + // Association options supported by a given mech type + struct MechandOptions { + MechanismType mechanism_type; + AssociationOptions options_supported; + }; + typedef sequence MechandOptionsList; + // Attribute of the SecurityLevel2::EstablishTrustPolicy + struct EstablishTrust { + boolean trust_in_client; + boolean trust_in_target; + }; + // Audit + typedef unsigned long AuditChannelId; + typedef unsigned short EventType; + const EventType AuditAll = 0; + const EventType AuditPrincipalAuth = 1; + const EventType AuditSessionAuth = 2; + const EventType AuditAuthorization = 3; + const EventType AuditInvocation = 4; + const EventType AuditSecEnvChange = 5; + const EventType AuditPolicyChange = 6; + const EventType AuditObjectCreation = 7; + const EventType AuditObjectDestruction =8; + const EventType AuditNonRepudiation = 9; + enum DayOfTheWeek { + Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; + enum AuditCombinator { + SecAllSelectors, + SecAnySelector + }; + struct AuditEventType { + ExtensibleFamily event_family; + EventType event_type; + }; + typedef sequence AuditEventTypeList; + typedef unsigned long SelectorType; + const SelectorType InterfaceName = 1; + const SelectorType ObjectRef = 2; + const SelectorType Operation = 3; + const SelectorType Initiator = 4; + const SelectorType SuccessFailure = 5; + const SelectorType Time = 6; + const SelectorType DayOfWeek = 7; + + // values defined for audit_needed and audit_write are: + // InterfaceName: CORBA::RepositoryId + // ObjectRef: object reference + // Operation: op_name + // Initiator: Credentials + // SuccessFailure: boolean + // Time: utc time on audit_write; time picked up from + // environment in audit_needed if required + // DayOfWeek: DayOfTheWeek + struct SelectorValue { + SelectorType selector; + any value; + }; + typedef sequence SelectorValueList; + + // Constant declaration for valid Security Policy Types + // General administrative policies + const CORBA::PolicyType SecClientInvocationAccess = 1; + const CORBA::PolicyType SecTargetInvocationAccess = 2; + const CORBA::PolicyType SecApplicationAccess = 3; + const CORBA::PolicyType SecClientInvocationAudit = 4; + const CORBA::PolicyType SecTargetInvocationAudit = 5; + const CORBA::PolicyType SecApplicationAudit = 6; + const CORBA::PolicyType SecDelegation = 7; + const CORBA::PolicyType SecClientSecureInvocation = 8; + const CORBA::PolicyType SecTargetSecureInvocation = 9; + const CORBA::PolicyType SecNonRepudiation = 10; + // Policies used to control attributes of a binding to a target + const CORBA::PolicyType SecMechanismsPolicy = 12; + const CORBA::PolicyType SecInvocationCredentialsPolicy = 13; + const CORBA::PolicyType SecFeaturePolicy = 14; // obsolete + const CORBA::PolicyType SecQOPPolicy = 15; + const CORBA::PolicyType SecDelegationDirectivePolicy = 38; + const CORBA::PolicyType SecEstablishTrustPolicy = 39; +}; +#endif /* _SECURITY_IDL_ */ + diff --git a/idl/Security/SecurityLevel1.idl b/idl/Security/SecurityLevel1.idl new file mode 100644 index 0000000..ee46e4b --- /dev/null +++ b/idl/Security/SecurityLevel1.idl @@ -0,0 +1,18 @@ +#if !defined(_SECURITY_LEVEL_1_IDL_) +#define _SECURITY_LEVEL_1_IDL_ + +#include +#pragma prefix "omg.org" + +module SecurityLevel1 { + //# pragma version SecurityLevel1 1.8 + local interface Current : CORBA::Current { + //# pragma version Current 1.8 + // thread specific operations + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + }; +}; +#endif /* _SECURITY_LEVEL_1_IDL_ */ + diff --git a/idl/Security/SecurityLevel2.idl b/idl/Security/SecurityLevel2.idl new file mode 100644 index 0000000..dd3e11a --- /dev/null +++ b/idl/Security/SecurityLevel2.idl @@ -0,0 +1,196 @@ +#if !defined(_SECURITY_LEVEL_2_IDL_) +#define _SECURITY_LEVEL_2_IDL_ + +#include + +#pragma prefix "omg.org" + +module SecurityLevel2 { + //# pragma version SecurityLevel2 1.8 + // Forward declaration of interfaces + local interface PrincipalAuthenticator; + local interface Credentials; + local interface Current; + +// Interface PrincipalAuthenticator + local interface PrincipalAuthenticator { + //# pragma version PrincipalAuthenticator 1.8 + Security::AuthenticationMethodList + get_supported_authen_methods( + in Security::MechanismType mechanism + ); + Security::AuthenticationStatus authenticate ( + in Security::AuthenticationMethod method, + in Security::MechanismType mechanism, + in Security::SecurityName security_name, + in any auth_data, + in Security::AttributeList privileges, + out Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + Security::AuthenticationStatus continue_authentication ( + in any response_data, + in Credentials creds, + out any continuation_data, + out any auth_specific_data + ); + }; + + // Interface Credentials + local interface Credentials { + //# pragma version Credentials 1.8 + Credentials copy (); + void destroy(); + readonly attribute Security::InvocationCredentialsType credentials_type; + readonly attribute Security::AuthenticationStatus authentication_state; + readonly attribute Security::MechanismType mechanism; + attribute Security::AssociationOptions accepting_options_supported; + attribute Security::AssociationOptions accepting_options_required; + attribute Security::AssociationOptions invocation_options_supported; + attribute Security::AssociationOptions invocation_options_required; + boolean get_security_feature( + in Security::CommunicationDirection direction, + in Security::SecurityFeature feature + ); + boolean set_attributes ( + in Security::AttributeList requested_attributes, + out Security::AttributeList actual_attributes + ); + Security::AttributeList get_attributes ( + in Security::AttributeTypeList attributes + ); + boolean is_valid ( + out Security::UtcT expiry_time + ); + boolean refresh( + in any refresh_data + ); + }; + + typedef sequence CredentialsList; + + local interface ReceivedCredentials : Credentials { + //# pragma version ReceivedCredentials 1.8 + readonly attribute Credentials accepting_credentials; + readonly attribute Security::AssociationOptions association_options_used; + readonly attribute Security::DelegationState delegation_state; + readonly attribute Security::DelegationMode delegation_mode; + }; + + local interface TargetCredentials : Credentials { + //# pragma version TargetCredentials 1.8 + readonly attribute Credentials initiating_credentials; + readonly attribute Security::AssociationOptions association_options_used; + }; + + // RequiredRights Interface + interface RequiredRights{ + void get_required_rights( + in Object obj, + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + out Security::RightsList rights, + out Security::RightsCombinator rights_combinator + ); + void set_required_rights( + in CORBA::Identifier operation_name, + in CORBA::RepositoryId interface_name, + in Security::RightsList rights, + in Security::RightsCombinator rights_combinator + ); + }; + + // interface audit channel + local interface AuditChannel { + //# pragma version AuditChannel 1.8 + void audit_write ( + in Security::AuditEventType event_type, + in CredentialsList creds, + in Security::UtcT time, + in Security::SelectorValueList descriptors, + in any event_specific_data + ); + readonly attribute Security::AuditChannelId audit_channel_id; + }; + + // interface for Audit Decision + local interface AuditDecision { + // #pragma version AuditDecision 1.8 + boolean audit_needed ( + in Security::AuditEventType event_type, + in Security::SelectorValueList value_list + ); + readonly attribute AuditChannel audit_channel; + }; + + local interface AccessDecision { + // #pragma version AccessDecision 1.8 + boolean access_allowed ( + in SecurityLevel2::CredentialsList cred_list, + in Object target, + in CORBA::Identifier operation_name, + in CORBA::Identifier target_interface_name + ); + }; + + // Policy interfaces to control bindings + local interface QOPPolicy : CORBA::Policy { + // #pragma version QOPPolicy 1.8 + readonly attribute Security::QOP qop; + }; + + local interface MechanismPolicy : CORBA::Policy { + // #pragma version MechanismPolicy 1.8 + readonly attribute Security::MechanismTypeList mechanisms; + }; + + local interface InvocationCredentialsPolicy : CORBA::Policy { + // #pragma version InvocationCredentialsPolicy 1.8 + readonly attribute CredentialsList creds; + }; + + local interface EstablishTrustPolicy : CORBA::Policy { + // #pragma version EstablishTrustPolicy 1.8 + readonly attribute Security::EstablishTrust trust; + }; + + local interface DelegationDirectivePolicy : CORBA::Policy { + // #pragma version DelegationDirectivePolicy 1.8 + readonly attribute Security::DelegationDirective delegation_directive; + }; + + local interface SecurityManager { + // #pragma version SecurityManager 1.8 + // Process/Capsule/ORB Instance specific operations + readonly attribute Security::MechandOptionsList supported_mechanisms; + readonly attribute CredentialsList own_credentials; + readonly attribute RequiredRights required_rights_object; + readonly attribute PrincipalAuthenticator principal_authenticator; + readonly attribute AccessDecision access_decision; + readonly attribute AuditDecision audit_decision; + TargetCredentials get_target_credentials ( + in Object obj_ref + ); + void remove_own_credentials( + in Credentials creds + ); + CORBA::Policy get_security_policy ( + in CORBA::PolicyType policy_type + ); + }; + + // Interface Current derived from SecurityLevel1::Current providing + // additional operations on Current at this security level. + // This is implemented by the ORB + local interface Current : SecurityLevel1::Current { + //# pragma version Current 1.8 + // Thread specific + readonly attribute ReceivedCredentials received_credentials; + }; +}; + +#endif /* _SECURITY_LEVEL_2_IDL_ */ + + + diff --git a/idl/Security/SecurityLevel3.idl b/idl/Security/SecurityLevel3.idl new file mode 100644 index 0000000..e3251eb --- /dev/null +++ b/idl/Security/SecurityLevel3.idl @@ -0,0 +1,2041 @@ +//*********************************************************************** +// ORBAsec SL3 +// ---------------------------------------------------------------------- +// Copyright (C) 2001 Adiron, LLC. +// All rights reserved. +// ---------------------------------------------------------------------- +//*********************************************************************** + +//*********************************************************************** +/** + * @note Some interfaces in this IDL module have been altered from the + * original Adiron sources. + */ +//*********************************************************************** + + +#ifndef _SecurityLevel3_ +#define _SecurityLevel3_ + +#include +#include "TimeBase.idl" + +#pragma prefix "adiron.com" + +/** + * The Security Level 3 module contains the data definitions and + * the Application Programmers Interface for dealing with the + * ORBAsec SL3 Security, and the new CSIv2 Security Protocol, which has + * been adopted by the OMG. + *

+ * The SecurityLevel3 interfaces and its security data structures + * are based on the Principal Calculus. This is a mathematical + * model of representing principals for the use of access control + * and auditing. + *

+ * The SecurityLevel3 Security Service is represented by two objects + * that are returned by the ORB's resolve_initial_reference call. + * Those two objects are the SecurityManager and the SecurityCurrent. + * Other objects associated with the security service emanate from + * these two objects. + *

+ * The SecurityLevel3 Security Service has a Credentials model. This + * model, which is heavily based on the Principal Calculus, yields + * an API for accessing principal information. The credentials + * represent a principal's credentials, as well as the establishment + * of security contexts between client and servers. + *

+ * The SecurityLevel3 Security Service is currently CSIv2 Level 2 + * compliant: + *

+ *

+ * The Security Level 3 ORB Security Service does supports retention + * of CSI state. Client Authentication information and Identity + * assertion information is transmitted on each request. + *

+ * The Security Level 3 ORB Security Service does not automatically + * support endorsement at this time (CSIv2 Level 2 compliance), but + * does give you facility to do so. + */ +module SecurityLevel3 { + + /** + * The Adiron VMCID, which is used in Minor Error Codes, + * Policy Tags, etc. + */ + const unsigned long ADIRON_VMCID = 0xA11C000; + + //------------------------------------------------------------- + // Security Level 3 Data Representations + // + //------------------------------------------------------------- + + // + // A Principal Name + // A principal name always has a type, and a path of + // name components. They are ordered from least significant + // to most significant. For example, if a principal is represented + // by a single X.509 certificate, the first element in the path + // is the SubjectDN, and the second is the IssuerDN. + // + /** + * A NameType is used for typing a PrincipalName data structure. + * A NameType is a string that represents an ASN.1 + * OBJECT IDENTIFIER. Its representation usually of the form + * "oid:1.2.3.4". Other forms may be possible. It is used + * for encoding name type identifiers, which are ASN.1 DER encoded + * OBJECT IDENTIFIERs, in the CSI protocol. + * @see NameComponent + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef string NameType; + + /** + * A NameComponent is an ordered component of a NamePath. The + * least significant component is always the first component. + * It is the type of a wstring to handle international character + * values. + * @see NameType + * @see NamePath + * @see NameValue + * @see PrincipalName + */ + typedef wstring NameComponent; + + /** + * A NamePath is an ordered collection of NameComponents, ordered + * from the least significant to most significant. For example, + * an identity that is defined by a certificate that has a + * SubjectDN of "C=US,CN=Joe,O=Adiron" and an IssuerDN of + * "C=US,CN=AdironCA,O=Adiron" will have the following + * name components: + *

+     *  NameComponent[0] = "C=US,CN=Joe,O=Adiron"
+     *  NameComponent[1] = "C=US,CN=AdironCA,O=Adiron"
+     * 
+ * @see NameType + * @see NameComponent + * @see NameValue + * @see PrincipalName + */ + typedef sequence NamePath; + + /** + * A NameValue is the value component of a PrincipalName, + * which is a "type-value" pair. It is defined as a NamePath. + * @see NameType + * @see NameComponent + * @see NamePath + * @see PrincipalName + */ + typedef NamePath NameValue; + + /** + * A PrincipalName is a "type-value" structure. The type directs + * what the encoding and format of the components in the the + * value component are. For example, a type of "X509DirectoryPath" + * means that the value contains the DNs of the subject and + * subsequent issuers. + * @see NameType + * @see NameComponent + * @see NamePath + * @see NameValue + */ + struct PrincipalName { + NameType the_type; + NameValue the_name; + }; + + /** + * A list of PrincipalNames. + * @see PrincipalName + */ + typedef sequence PrincipalNameList; + + + // + // Attributes for privileges and other things. They are type value pairs. + // + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + *

+ * The type of a PrinAttribute is represented by a string. + *

+ * Privilege Attribute Types, that might come from X.509 certificates + * might be represented by OIDs. OIDs are represented as: + *

+     *   oid:n1.n2.n3.n4.n5.n6....
+     *             for an OID where ni are non-negative integers.
+     * 
+ * These OIDs are meant to be used to direct the "type-value" encoding + * of a GSS-API ExportName, which uses an OID as a type that directs + * the encoding of the value. + *

+ * Example Environmental Attribute Types + *

+     *   SL3:ChannelIdentifier
+     *   SL3:LocalAddress
+     *   SL3:LocalPort
+     *   SL3:TransportMechanism
+     *   SL3:TLSCipherSuite
+     * 
+ * @see PrinAttribute + */ + typedef string PrinAttributeType; + + /** + * A PrinAttributeValue is a wide character string that encodes + * or decodes the value of an attribute. An attempt is always + * meant to represent an attribute's value in a human readable + * string form. If the value cannot be decoded this way, and its + * native form is binary, then it is represented in a Hex encoding + * of the binary form. + * @see PrinAttribute + */ + typedef wstring PrinAttributeValue; + + /** + * A PrinAttribute is a "type-value" pair, usually attributed to + * a Principal by some means, such as values stored in its certificate + * or environmental concerns, such as the channel the principal was + * authenticated over. + * @see PrinAttribute + */ + struct PrinAttribute { + PrinAttributeType the_type; + PrinAttributeValue the_value; + }; + + /** + * A list of PrinAttributes. + * @see PrinAttribute + */ + typedef sequence PrinAttributeList; + + + /** + * This is just a sequence of strings that make + * up the components of a ResourceName. + * @see ResourceName + */ + typedef sequence ResourceNameComponents; + + /** + * A ResourceName is the constructed name of a "resource". A + * ResourceName is closely modeled after CORBAmed's Resource + * Access Decision (RAD) facility's "Resource". It contains + * a sequence of strings. + */ + struct ResourceName { + ResourceNameComponents components; + }; + + /** + * A List of Resource Names. + * @See ResourceName + */ + typedef sequence ResourceNameList; + + + // + // NameTypes used in SL3 + // + + /** + * An NT_KerberosName is a NameType that signifies that the + * value of a PrincipalName is a Kerberos formated name. + * A KerberosName is a single string encoded in the + * familiar "name@REALM" format. + *

+ * From GSS-Kerboeros RFC 1964: + *

+ * 2.1.1. Kerberos Principal Name Form + *

+ * This name form shall be represented by the Object Identifier {iso(1) + * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + * krb5(2) krb5_name(1)}. + */ + const NameType NT_KerberosName = "oid:1.2.840.113554.1.2.2.1"; + + /** + * An NT_X509DirectoryNamePath is a NameType that signifies that + * the value of a PrincipalName is constructed from a chain + * of certificates, such that the end entity is the least + * significant position, with the subsequent issuers following + * in order of signature. + *

+ * The coding of the names is the string encoding of + * complete X.500 DN's, such as "C=US, CN=Joe, O=Adiron". + * There is no indication whether the last DN in the path is a + * "root", i.e. it's issuer is the same. + */ + const NameType NT_X509DirectoryNamePath = "SL3:X509DirectoryPathName"; + + /** + * The NT_Anonymous is a name type that specifies that the + * PrincipalName is representing the "anonymous" principal. + * Its value always as a single name component of "anonymous" + */ + const NameType NT_Anonymous = "SL3:anonymous"; + + /** + * The NT_StringName is a NameType that specifies that the + * PrincipalName is represented by a single NameComponent + * of name in a "scoped" name space. The name and scope + * are separated by a single "@" character. The escape character + * is "\". This string name as we call it is the same form + * used for the GSSUP (GSS-UserPassword NameType). This + * oid is the OID defined by the OMG CSIv2 specification. It + * is the value defined by the CSI::GSS_NT_Scoped_Username_OID + * constant. + */ + const NameType NT_StringName = "oid:2.23.130.1.2.1"; + + // + // Privileges + // + + /** + * A ScopedPrivileges structure represents privileges that + * belong to a scope defined by a principal. This structure + * is used to represent a principal that is a privilege authority + * that issues privileges. Privileges are represented as + * PrinAttributes. + */ + struct ScopedPrivileges { + PrincipalName privilege_authority; + PrinAttributeList privileges; + }; + + /** + * A list of ScopedPrivileges + * @see ScopedPrivileges + */ + typedef sequence ScopedPrivilegesList; + + // + // Principals + // + + /** + * A Principal comes in three forms, which correspond to the + * Principal Calculus. The forms are "Simple", "Quoting", and + * "Proxy". Simple is a principal that represents a single + * entity, usually "speaking for" itself. A "Quoting" principal + * is a "compound" principal that says that one principal is + * speaking on behalf of another, usually denoted by "(A|B)", i.e. + * "A is quoting B", which means that "A is speaking on behalf of B". + * A "Proxy" principal is almost the same as a "Quoting" principal. + * However, the security service has determined that enough evidence + * exists that proves that Principal A is authorized to speak in + * B's behalf. This principal is denoted in the calculus as "(A for B)" + * in contrast to the quoting principal "(A|B)". + */ + typedef unsigned long PrincipalType; + + /** + * The Simple Principal Type (A) + * @see PrincipalType + */ + const PrincipalType PT_Simple = 0; // A, valuetype SimplePrincipal + /** + * The Quoting Principal Type (A|B) + * @see PrincipalType + */ + const PrincipalType PT_Quoting = 1; // B | A, valuetype QuotingPrincipal + /** + * The Proxy Principal Type (A for B) + * @see PrincipalType + */ + const PrincipalType PT_Proxy = 2; // B for A, valuetype ProxyPrincipal + + /** + * A Principal is represented by a base value type, which is extended + * for the various principals, Simple, Quoting, and Proxy. This base + * type of a Principal may be sufficient for access control in + * most systems. + * @param the_type contains the corresponding identifier + * @param the_name contains the logical name of the most derived + * Principal. Such as if the Principal is a nested + * ProxyPrincipal (i.e. C for B for A) the name here + * is A. + * @param environmental_attributes + * The attributes name certain things that do are + * environmental, such as IP addresses. + * @param with_privileges + * These are the privileges associated with Principal A + * restricted_resources. + * This attribute contains a collection of resources on which + * the principal is authorized to perform actions. + */ + valuetype Principal { + /** This field contains the type of the Principal. */ + public PrincipalType the_type; + /** This field contains the name of the Principal */ + public PrincipalName the_name; + /** + * This field contains the attributes of the principal + * that are considered environmental, such as authentication + * mechanism, authentication channel identifier, etc. + */ + public PrinAttributeList environmental_attributes; + /** + * This field contains the list of scoped privileges the + * security service has determined belong to the particular + * principal. + */ + public ScopedPrivilegesList with_privileges; + }; + + /** + * A list of Principals. + * @see Principal + */ + typedef sequence PrincipalList; + + /** + * A Simple Principal represents a single entity. It is usually + * derived by credentials acquisition, authentication, trust rules concerning quoting, + * or trust rules and certificates concerning Proxying. + * It has one extra field over the base Principal, which is + * "alternate_names". + */ + valuetype SimplePrincipal : /* truncatable */ Principal { + /** + * This field indicates whether the principal was derived or is + * going to be derived from an authentication mechanism. + *

+ * If the SimplePrincipal is directly or indirectly + * (as part of a composite Principal) in the + * ClientCredentials.client_principal or + * TargetCredentials.target_principal field, + * the authenticated field indicates the authentication + * status of the SimplePrincipal in the client or target + * principal, respectively. + *

+ * If the SimplePricipal is directly or indirectly in + * the ClientCredentials.target_principal + * (or TargetCredentials.client_principal) field, + * the authenticated field indicates the target's + * (or client's belief) about its authentication status to the other + * party. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of the initiator or acceptor + * of OwnCredentials, the authenticated + * field indicates the expectation of being authenticated to the other + * side of the communication when the initiator or acceptor is used. + *

+ * If the SimplePrincipal is directly or indirectly in + * the the_principal field of a + * PrincipalIdentityStatement, + * the authenticated field indicates only the + * "best effort" of knowing whether the principal has been possibly + * authenticated or not. In other word, if this field is + * TRUE, it is for sure that the principal has been + * authenticated (or is expecting to be authenticated). + * If this field is FALSE, the principal may or may not + * have been authenticated. The reason for this ambiguity is that + * a PrincipalIdentityStatement may be created before + * the authentication of the principal being performed. In general, + * the authenticated field of a + * SimplePrincipal inside the the_principal + * field of a PrincipalIdentityStatement should not be + * taken as a definite answer for the authentication status of the + * SimplePrincipal. + * + * @see ClientCredentials.client_authentication + * @see ClientCredentials.target_authentication + * @see TargetCredentials.client_authentication + * @see TargetCredentials.target_authentication + */ + // For example, if a client uses the User/Password mechanism to + // communicate with a target, the client's OwnCredentials, created + // using a PasswordGenerator, will have the authenticated + // field in the principal in the initiator being true, + // although the client may not have been authenticated to the target. + // + public boolean authenticated; + /** + * This field contains the other name types, such as + * that appear in the X.509 alternate name fields. + */ + public PrincipalNameList alternate_names; + + }; + + /** + * A ProxyPrincipal represents a principal that speaks for another. + * The principal is proved that it is authorized to speak for another. + * The system believes this, either by trust rules of its own, + * or by delivered endorsement from the principal such as + * Principal (B for A) where the endorsement takes the form + * in the Principal Calculus as (T says B serves A) + * where T is some entity trusted by the security service + * to make those statements. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * speaks_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype ProxyPrincipal : /* truncatable */ Principal { + + /** + * In a Proxy Principal of (A for B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Proxy Principal of (A for B) the speaks_for field + * represents the principal B. + */ + public Principal speaks_for; + + }; + + /** + * A QuotingPrincipal represents a principal that speaks for another. + * The principal is not proved that it is authorized to speak for another. + * The system derives principals like this based on statements in the + * Pricipal Calculus, such as "A says B says r", which results in the + * quoting principal (A|B) says r, where "r" is a statement, such as + * a CORBA request. The security service derives principals like + * this from the CSI Identity Assertion mechanism. + *

+ * Important: This valuetype extends the Principal value type. The + * the_name filed of this object will contain the name of the + * quotes_for principal, as that is the name most access control + * systems would care about. Therefore, this value type can be + * truncated by access control systems that do not want to + * examine the principal in detail. + */ + valuetype QuotingPrincipal : /* truncatable */ Principal { + + /** + * In a Quoting Principal of (A|B) the speaking field + * represents the principal A. + */ + public Principal speaking; + + /** + * In a Quoting Principal of (A|B) the quotes_for field + * represents the principal B. + */ + public Principal quotes_for; + + }; + + // + // Statements + // + + /** + * A Statement is a value type that has extensions which + * represent the different relevant data directed by its StatementType. + * There are two basic Statement Types, an IdentityStatement and + * an EndorsementStatement. An identity statement is a statement that + * asserts an identity. It may represent a the components of + * an X.509 certificate during an authentication. An EndorsementStatement + * may represent the contents of an X.509 AttributeCertificate or + * some other notion of an endorsement, such as a certificate in + * BizTalk XML. + *

+ * Statements are contained in the Credentials Objects. They + * represent pieces of evidence collected from which the security + * service deduces the Principal of the Credentials Objects. + */ + typedef unsigned long StatementType; + + /** + * The Identity Statement Type. + *

+ * A statement of this type at least extends to the + * IdentityStatement valuetype, if not truncated + * @see IdentityStatement + */ + const StatementType ST_IdentityStatement = 1; //valuetype IdentityStatement + + /** + * The Endorsement Statement Type. + *

+ * A statement of this type at least extends to the + * EndorsementStatement valuetype, if not truncated + * @see EndorsementStatement + */ + const StatementType ST_EndorsementStatement = 2; //valuetype EndorsementStatement + + /** + * An encoding is a sequence of bytes. + */ + typedef sequence Encoding; + + /** + * Statement encoding type. + *

+ * Statements carry their original encoding information, if + * they came from an encoding, such as list of X.509 identity + * certificates (i.e. a chain). The encoding type may be derivable + * from the encoding itself. For example, it's easy to tell the + * difference between a PEM encoded certificate, and a DER encoded + * certificate. Therefore, the encoding type may default to "Unknown". + * Other types may exist than the ones provided as constants in + * this module. + */ + typedef string EncodingType; + + /** + * The ET_NoEncoding type signifies that the statement + * has been generated solely by the security service + * and has no encoding. + */ + const EncodingType ET_NoEncoding = "NoEncoding"; + + /** + * The ET_Unknown encoding type may always be used if the encoding + * type can only be figured out from encoding itself. + */ + const EncodingType ET_Unknown = "Unknown"; + + /** + * User Exception for a bad encoding. + */ + exception BadEncoding {}; + + /** + * User Exception for a bad or unsupported encoding type. + */ + exception BadEncodingType {}; + + /** + * The Statement Layer is the layer of the protocol or security + * service from which the statement emanated, derived, or was collected. + */ + typedef unsigned long StatementLayer; + + /** + * Default type for a Statement Layer + */ + const StatementLayer SL_Unknown = 0; + /** + * The SL_Transport statement type signifies that the associated + * statement is derived from the transport layer, such as + * an X.509 Certificate from a TLS handshake. + */ + const StatementLayer SL_Transport = 1; + /** + * The SL_CSIAuthorization statement type signifies that the associated + * statement is derived from the CSI Authorization Layer in the CSIv2 + * protocol. + */ + const StatementLayer SL_CSIAuthorization = 2; + /** + * The SL_CSIClientAuth statement type signifies that the associated + * statement is derived from the CSI Client Authentication Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIClientAuth = 3; + /** + * The SL_CSIIdentity statement type signifies that the associated + * statement is derived from the CSI Identity Assertion Layer + * in the CSIv2 protocol. + */ + const StatementLayer SL_CSIIdentity = 4; + + /** + * The SL_UserDefined statement layer signifies that the associate + * statement is derived or created by a user or some other + * entity than the security service. + */ + const StatementLayer SL_UserDefined = 5; + + /** + * The Statement base type contains the information common + * to all statements. A statement has an "external" encoding, such + * as an X509 Certificate. Some statements may not have an encoding, + * but its extension may carry the pertinent marshable information, + * such as a PrincipalIdentityStatement for anonymous, which is + * generated by the security service. + */ + valuetype Statement { + /** + * This field contains an identifier of the + * service layer that generated the statement. + * The layer that generated or delivered + * the statement, i.e. Transport, CSIv2 Authentication, + * CSIv2 Authorization, or CSIv2 Identity Assertion. + */ + public StatementLayer the_layer; + /** + * The type of statement, which indicates its extension + * such as an Identity Statement or an Endorsement + * Statement. + */ + public StatementType the_type; + /** + * This field indicates the type of encoding. + * The encoding may be contrived, at the encoding + * may not exist, however, the extension of the + * statement type may contain data that can + * be marshaled across the wire. See the Principal + * Identity Statement. + */ + private EncodingType encoding_type; + /** + * The bytes of the encoding, if it exists. + */ + private Encoding the_encoding; + + /** + * Returns the encoding type + */ + EncodingType get_encoding_type(); + + /** + * Returns an encoding of this statement. Some implementations + * may be able to convert. Using and encoding_type of + * ET_Unknown, will always yield the default encoding, + * if it exists. If the encoding does not exist, + * a successful return containing an empty + * sequence will result. + */ + Encoding get_encoding( + in EncodingType encoding_type + ) raises ( + BadEncodingType + ); + + /** + * This factory method allows users to create their + * own Statements from an encoding. The statements created + * by this factory method may have a type which is a further + * extension of the valuetype Statement. + */ + factory create( + in EncodingType encoding_type, + in Encoding the_encoding + ); + }; + typedef sequence StatementList; + + /** + * The Identity Statement further classifies the encoding + * as a statement that if verified asserts an identity. + */ + valuetype IdentityStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + /** + * The Principal Identity Statement is the minimal version of an + * Identity statement that asserts a single identity that the + * security service can translate into a principal. + *

+ * An example of an identity statement is an X.509 certificate in + * which its attributes are exposed into the principal, such as + * privileges. This valuetype may also be further extended by the + * security service depending on its encoding and the capabilities + * of the security service. + */ + valuetype PrincipalIdentityStatement : IdentityStatement { + public Principal the_principal; + }; + + /** + * The Endorsement Statement is a statement that is used for + * authorization. An Endorsement statement endorses a + * principal with certain characteristics, such as privileges + * or the authority to act on behalf of another principal, sometimes + * called "delegation". + *

+ * According to our research, an endorsement statement may be a + * complex entity containing matching rules for the endorsement. + * An endorsement may have the following general form: + *

+     *     I says Principal A matching [(P1 with [p1,...,pn]) or ....]
+     *        speaks_for
+     *          Principal B matching [(T1 with [t1,...,tn]) or ... ]
+     *        has [s1,...,sm]
+     *        on Resources matching [R1, .... Rn]
+     * 
+ * Actual semantic reduction of principals is directed by the + * the matching rules, and may depend on other statements as well, + * such as local trust rules in the security service configuration. + * Also, much of the capability of an endorsement statement is + * dependent on its encoding. + *

+ * This approach to authorization is a largely unexplored research + * topic. There are not many or well known encodings of endorsement + * statements. Therefore, we are reluctant to produce interfaces + * just yet, that go beyond the encoding. However, we do expose the + * Endorsement statement type, which may further direct the interpretation + * of it's encoding. + */ + valuetype EndorsementStatement : Statement { + /** + * This field contains a possibly well known identifier that + * may aid in the interpretation of the identity statement's + * encoding. It may be an empty string, which signifies that + * there is no known interpretation aid for the encoding, or + * that there is no encoding. + */ + public string interpretation_aid; + }; + + + + // + // TODO: The following contruction is not supported by TIDIdlc + // + /** + * An X509IdentityStatement is one that extends the Principal Identity + * Statement. If one does get an X509 IdentityStatement, it is + * currently supported with IAIK in both DER and PEM formats. + */ + valuetype X509IdentityStatement : PrincipalIdentityStatement { +// Already defined in Statement +// /** +// * This factory method allows users to create their +// * own X509Identity statements from an encoding. +// */ +// factory create( +// in EncodingType encoding_type, +// in Encoding the_encoding +// ); + }; + typedef sequence X509IdentityStatementList; + + //------------------------------------------------------------- + // Security Level 3 Application Users Interface + // + //------------------------------------------------------------- + + // + // The Security Level 3 Credentials Model + // + + /** + * Credentials come in three types. OwnCredentials, ClientCredentials, + * and TargetCredentials. OwnCredentials represent the ORB instance's + * credentials. Each Credentials has initiating and accepting capability. + * ClientCredentials represent an established security context with + * a client. TargetCredentials represent an established security context + * with a Target's Server. + */ + typedef unsigned long CredentialsType; + + /** + * The CT_OwnCredentials CredentialsType signifies that the + * Credentials can be extended to the OwnCredentials Type. + */ + const CredentialsType CT_OwnCredentials = 0; + /** + * The CT_ClientCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_ClientCredentials = 1; + /** + * The CT_TargetCredentials CredentialsType signifies that the + * Credentials can be extended to the ClientCredentials Type. + */ + const CredentialsType CT_TargetCredentials = 2; + + /** + * A Credentials object has a validity state. Some credentials + * may be time or use dependent. + */ + typedef long CredentialsState; + + /** + * The Credentials with a CredentialsState of CS_Invalid cannot be + * used in any the initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Invalid = -3; + + /** + * Credentials with a CredentialsState of CS_Expired can no longer + * be used for initiating or accepting establishment of any + * security contexts. + */ + const CredentialsState CS_Expired = -2; + /** + * Credentials with a CredentialsState of CS_PendingRelease can no longer + * be used for initiating or accepting establishment of any + * security contexts. It means that "release_credentials" has been + * called on the credentials. + */ + const CredentialsState CS_PendingRelease = -1; + /** + * Credentials with a CredentialsState of CS_Initialized cannot + * be used for initiating or accepting establishment of any + * security contexts. It means that credentials are in an initial + * state. This value is for internal use, and there is no + * reason a SecurityLevel3 user should see credentials in this state. + */ + const CredentialsState CS_Initialized = 0; + /** + * Credentials with a CredentialsState of CS_Valid can + * be used for initiating or accepting establishment of + * security contexts. + */ + const CredentialsState CS_Valid = 1; + + /** + * Credentials have system generated identifiers + * to which they can be referred and retrieved. + */ + typedef string CredentialsId; + typedef sequence CredentialsIdList; + + /** + * A Context Id is a system generated unique identifier for identifying + * a security context to the application. + * Security Contexts may be long lived and not established on + * every request. Therefore, an identifier is assigned. + *

+ * Note that this Context Id is not directly related to the context + * defined in the CSIv2 specification. + */ + typedef string ContextId; + + /** + * Credentials Usage + *

+ * Credentials Usage refers to the concept that Credentials may + * be used to initiate security context, accept security contexts, + * or do both. its values are used in the acquisition + * of credentials for the purpose of designating the abilities + * of the credentials acquired. + */ + typedef unsigned long CredentialsUsage; + /** + * The CU_Indefinite CredentialsUsage type is a value that + * signifies the default. Depending on some other acquisition + * arguments, the credentials usage may be able to be implicitly + * determined. + */ + const CredentialsUsage CU_Indefinite = 1; + /** + * The CU_None CredentialsUsage type is a value that states the + * credentials cannot be used to make or accept security + * contexts. ClientCredentials and TargetCredentials have + * this credentials usage. + */ + const CredentialsUsage CU_None = 2; + /** + * The CU_AcceptOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to accept the establishment + * of security contexts. + */ + const CredentialsUsage CU_AcceptOnly = 3; + /** + * The CU_InitiateOnly CredentialsUsage type is a value that signifies + * that the credentials can only be used to initiate the establishment + * of security contexts. + */ + const CredentialsUsage CU_InitiateOnly = 4; + /** + * The CU_InitiateAndAccept CredentialsUsage type is a value that + * signifies that the credentials can be used to both initiate + * and accept the establishment of security contexts. + */ + const CredentialsUsage CU_InitiateAndAccept = 5; + + /** + * A CredsDirective is a directive on a invocation as to the + * effects of the initiated security context will have on the + * the accepting side. Please see ContextEstablishmentPolicy + * for is use in context with establishing security contexts. + * @see ContextEstablishmentPolicy + */ + typedef unsigned long CredsDirective; + /** + * The CD_Default CredsDirective is a value that signifies to + * use the capabilities of the selected credentials. + */ + const CredsDirective CD_Default = 0; + /** + * The CD_InvokeTarget CredsDirective is a value that signifies that + * the selected credentials should only be used in a simple + * invocation fashion. They shall not attempt to endorse or embody + * the target to act on its behalf. + */ + const CredsDirective CD_InvokeTarget = 1; + /** + * The CD_EndorseTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to endorse + * the target. In other words, it gives the accepting side the ability + * to act on behalf of the initiating side. + */ + const CredsDirective CD_EndorseTarget = 2; + /** + * The CD_EmbodyTarget CredsDirective is a value that signifies that + * the selected credentials, if capable, should attempt to embody + * the target. In other words, it gives the accepting side the ability + * to impersonate the initiating side. + */ + const CredsDirective CD_EmbodyTarget = 3; + + /** + * A Feature Directive is a general directive used in policy that + * stipulates the of a particular feature. Such examples include, + * confidentiality, integrity, client authentication, etc. + */ + typedef long FeatureDirective; + + /** + * The FD_DoNotUse FeatureDirective means definitely not to use + * the feature. + */ + const FeatureDirective FD_DoNotUse = -2; + /** + * The FD_DoNotUseIfPossible FeatureDirective means not to use + * the feature if it is possible. Note, some mechanisms may always + * use confidentiality. + */ + const FeatureDirective FD_DoNotUseIfPossible = -1; + /** + * The FD_UseDefault FeatureDirective means to use or not to use + * the feature depending on defaults. + */ + const FeatureDirective FD_UseDefault = 0; + /** + * The FD_UseIfPossible FeatureDirective means to use the feature + * if it is possible. + */ + const FeatureDirective FD_UseIfPossible = 1; + /** + * The FD_Use FeatureDirective means definitely to use the feature. + */ + const FeatureDirective FD_Use = 2; + + + /** + * The Initiator Type of the Initiator Side of the Credentials states + * the kind of Initiator it is. There are three types that mirror + * the type of Principal, Simple, Quoting, and Proxy, that the + * initiator intends to represent to a server while trying to + * establish a security context with the server. + */ + typedef unsigned long InitiatorType; + /** + * The IT_None InitiatorType is a value that is defined for + * completeness, and has no real use. + */ + const InitiatorType IT_None = 0; + /** + * The IT_Simple InitiatorType is a value that states that the + * initiator is a "Simple" Principal. + */ + const InitiatorType IT_Simple = 1; + /** + * The IT_Quoting InitiatorType is a value that states that the + * initiator will quote another principal to the server. This + * principal is denoted in the Principal Calculus as (A|B), i.e. + * A quoting B. + */ + const InitiatorType IT_Quoting = 2; + /** + * The IT_Proxy InitiatorType is a value that states that the + * initiator will quote another principal to the server along with + * getting or providing proof to the server that it can act on + * behalf of the quoted principals. This + * principal is denoted in the Principal Calculus as (A for B). + */ + const InitiatorType IT_Proxy = 3; + + /** + * The CredsInitiator object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "initiator" side of the credentials. + */ + local interface CredsInitiator { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * client principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute Principal the_principal; + /** + * The supporting statements attribute contains a list of statements + * supporting the principal associated with this initiator. + */ + readonly attribute StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The initiator_type attribute signifies the intent of the + * initiator as to the principal it presents for the + * security context establishment. It should correspond + * to the type of the Principal. However, it might be slightly + * different, because using CSIv2 Client Authentication + * technically creates a "QuotingPrincipal" however, the + * initiator type will still be simple as no CSIv2 Identity + * Assertion will be used in establishing the security + * context. + */ + readonly attribute InitiatorType initiator_type; + /** + * The supports_embodiment attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to give the + * the accepting end of a context establishment the ability + * to impersonate this initiator principal. + */ + readonly attribute boolean supports_embodiment; + /** + * The supports_endorsement attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to endorse + * the accepting end of a context establishment to act + * on behalf of this initiator principal. + */ + readonly attribute boolean supports_endorsement; + /** + * The supports_quoting attribute is TRUE if these credentials + * can be directed by use of the CredsDirective, to simply + * quote another principal on top of these credentials. + */ + readonly attribute boolean supports_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + }; + + /** + * The CredsAcceptor object is an object that is directly a + * member of a particular OwnCredentials object. It represents + * the "acceptor" side of the credentials. + */ + local interface CredsAcceptor { + + /** + * The principal attribute contains a local view of the + * Principal that the Credentials intend to represent. + * Note that during context establishment, the actual establish + * target principal may be represented differently, especially + * with respect to environmental attributes. Some environmental + * attributes are a direct result of context establishment. + */ + readonly attribute SecurityLevel3::Principal the_principal; + /** + * The supporting_statements attribute contains a list of statements + * supporting the principal associated with this acceptor. + */ + readonly attribute SecurityLevel3::StatementList supporting_statements; + /** + * The restricted_resources attribute contains a list of + * resource names, by which the credentials initiator + * believes his authorizations apply. + */ + readonly attribute ResourceNameList restricted_resources; + /** + * The accepts_endorsement attribute is TRUE if these credentials + * supports and accepts CSIv2 endorsement information. + */ + readonly attribute boolean accepts_endorsement; + /** + * The accepts_quoting attribute is TRUE if these credentials + * supports and accepts CSIv2 Identity Assertion information. + */ + readonly attribute boolean accepts_quoting; + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + }; + + /** + * This type is used to identify listeners for removal. + * A Listener identity will be assigned to a listener when + * it is assigned to a particular object. + */ + typedef string ListenerId; + + /** + * This local interface is used to notify the user when the credentials + * have been relinquished. When credentials are "released" they may + * stay around until their work is finished. At that point they + * will be relinquished. Also, if the underlying transport credentials + * are released, then the SecurityLevel3 Credentials get released + * as well. This listener will get informed of this event. + */ + local interface RelinquishedCredentialsListener { + void relinquished_notify( + in CredentialsId creds_id + ); + }; + + /** + * The Credentials base interface contains the common items for + * the different types of credentials. + * @see OwnCredentials + * @see ClientCredentials + * @see TargetCredentials + */ + local interface Credentials { + + /** + * The creds_id attribute contains a system generated + * identifier with which can uniquely reference the credentials + * object. + */ + readonly attribute CredentialsId creds_id; + + /** + * The creds_type stipulates the type of credentials, i.e. + * to which type of credentials it may be narrowed, e.g., + * Own, Client, or Target. + */ + readonly attribute CredentialsType creds_type; + + /** + * The creds_usage attribute stipulates the intended usage of the + * credentials. For OwnCredentials, it will be one of + * CU_AcceptOnly, CU_Initiate, CU_InitiateAndAccept. + * For ClientCredentials and TargetCredentials it will be + * CU_None. + */ + readonly attribute CredentialsUsage creds_usage; + + /** + * The expiry_time attribute denotes the time that these + * credentials expire. + */ + readonly attribute TimeBase::UtcT expiry_time; + + /** + * The creds_state attribute contains the + * validity state of the credentials. + */ + readonly attribute CredentialsState creds_state; + + /** + * Add a listener that will get notified when the + * OwnCredentials are finally done with any pending + * work and are relinquished by the security service. + */ + ListenerId add_relinquished_listener( + in RelinquishedCredentialsListener listener + ); + + /** + * Removes a listener. This function raises a BAD_PARAM + * exception if the listener is not registered. + */ + void remove_relinquished_listener( + in ListenerId id + ); + }; + /** + * A list of credentials. + */ + typedef sequence CredentialsList; + + /** + * OwnCredentials are created as a result of Credentials acquisition + * from the CredentialsCurator's CredentialsAcquirers. + * The Credentials have an initiator and an acceptor based + * upon its intended usage and capability. Some OwnCredentials + * that were acquired solely for initiating contexts (i.e. client side) + * will not have an acceptor, and visa versa. + */ + local interface OwnCredentials : Credentials { + + /** + * The creds_initiator attribute contains a reference to the + * local credentials initiator associated with these credentials. + * It is null if the creds_usage is AcceptOnly. + */ + readonly attribute CredsInitiator creds_initiator; + + /** + * The creds_acceptor attribute contains a reference to the + * local credentials acceptor associated with these credentials. + * It is null if the creds_usage is InitiateOnly. + */ + readonly attribute CredsAcceptor creds_acceptor; + + /** + * The release_credentials operation disables the credentials + * from further initiating and/or accepting contexts. + * Formal destruction of the Credentials object is delayed until + * its pending work is done, at which time it becomes Invalid. + */ + void release_credentials (); + }; + + /** + * A list of OwnCredentials + */ + typedef sequence OwnCredentialsList; + + /** + * An object of this interface represents the security context for + * a CSIv2 based remote client. It is created as the result of accepting + * a security context for the remote client. + * This object is only available during the servicing of a CORBA request. + * It can be retrieved from the + * SecurityLevel3::SecurityCurrent object, + * as it is thread based. + *

+ * This object contains only the information used from the + * OwnCredentials that was pertinent in establishing the + * context. There is a pointer back to that OwnCredentials + * object. Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface ClientCredentials : Credentials { + + /** + * The context_id attribute contains a system generated unique identifier + * for the context, + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service can deduce is the client from the + * information and mechanisms used. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the statements that + * delivered from CSIv2 protocol along with any from the associated + * OwnCredentials that are used to deduce the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains the names of the + * resources that the security service deduces from the CSIv2 + * information and information from the associated OwnCredentials. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service believes is representative of the + * clients version of the target's principal. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements that + * support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of resources + * on which the target is restricted. This information may come + * from the OwnCredentials. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * This attribute refers to the OwnCredentials that were used in + * establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * This attribute is TRUE if the target has + * authenticated the client, either over the transport, or at + * the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * This attribute is TRUE if the target believes that + * the client has authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * This attribute is TRUE if the context is providing + * confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * This attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + }; + + /** + * The TargetCredentials object is created as the result of accepting a + * security context for a target. It represents that context. + * It contains only the information used from the OwnCredentials + * that was pertinent in establishing the context. + * There is a pointer back to that OwnCredentials object. + * Once this context is created, its attributes are guaranteed + * not to change. + */ + local interface TargetCredentials : Credentials { + + /** + * The context_id attribute contains a system generated + * unique identifier for the context. + */ + readonly attribute ContextId context_id; + + /** + * The client_principal attribute contains the principal that + * the security service believe is the target's + * ClientCredentials client_principal attribute. + */ + readonly attribute Principal client_principal; + + /** + * The client_supporting_statements attribute contains the + * statements that support the deduction of the client principal. + */ + readonly attribute StatementList client_supporting_statements; + + /** + * The client_restricted_resources attribute contains names of + * resources on which the client believes the client is restricted. + * This information may be derived from newly acquired endorsement + * information. + */ + readonly attribute ResourceNameList client_restricted_resources; + + /** + * The target_principal attribute contains the exact principal that + * the security service deduces to be the target. + */ + readonly attribute Principal target_principal; + + /** + * The target_supporting_statements attribute contains the statements + * that support the deduction of the target principal. + */ + readonly attribute StatementList target_supporting_statements; + + /** + * The target_restricted_resources attribute contains names of + * resources on which the target is restricted. This information + * may not be available. + */ + readonly attribute ResourceNameList target_restricted_resources; + + /** + * The parent_credentials attribute refers to the OwnCredentials + * that were used in establishing the security context. + */ + readonly attribute OwnCredentials parent_credentials; + + /** + * The client_authentication attribute is TRUE if the client + * believes that the target has authenticated the client, either + * over the transport, or at the CSIv2 Client Authentication layer. + */ + readonly attribute boolean client_authentication; + + /** + * The target_authentication attribute is TRUE if the client has + * authenticated the target over the transport. + */ + readonly attribute boolean target_authentication; + + /** + * The confidentiality attribute is TRUE if the context is + * providing confidentiality protection. + */ + readonly attribute boolean confidentiality; + + /** + * The integrity attribute is TRUE if the context is providing + * integrity protection. + */ + readonly attribute boolean integrity; + + /** + * The target_embodied attribute is TRUE if the security service + * believes that the target is embodied to impersonate the client + * side principal. + */ + readonly attribute boolean target_embodied; + + /** + * The target_endorsed attribute is TRUE if the security service + * believes that the target is endorsed to act on behalf of the + * client side principal. + */ + readonly attribute boolean target_endorsed; + + /** + * The release operation indicates to the CSIv2 protocol, that if + * state is being retained for these credentials, they + * will be discarded with the pending next request that + * may have not yet gone out. + *

+ * Any objects references that are binded to these + * credentials after you release them will become unusable. + * + * This operation is experimental. + */ + void release(); + }; + + + //-------------------------------------------------------------------- + // Security Invocation Policy + // + //-------------------------------------------------------------------- + + /** + * The ContextEstablishmentPolicy policy object directs the + * establishment of security contexts with a target. + *

+ * The CredsDirective usage is the following: + *

+ *
+ * CD_Default + *
+ * This directive means to use the default set + * up by the thread, the ORB, the ORB configuration, + * available credentials, or other policies. + *
+ * CD_InvokeTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. Do not endorse or embody the target. + * Credentials may be IT_Simple, IT_Quoting, or IT_Proxy. + *
+ * CD_EndorseTarget + *
+ * This directive means to use the + * the specified OwnCredentials to create a + * secure association with the target + * before invocation. + * The credentials must be + * IT_Simple, IT_Quoting, or IT_Proxy own credentials + * that supports endorsement. + * Note, a Initiator Credentials that is a IT_Proxy + * may have an endorsement statement that not only + * endorses this immediate client, but may very well + * apply to the next target. + *
+ * CD_EmbodyTarget + *
+ * If possible give the target the ability to + * impersonate the client, is performed using + * transports that can forward their credentials + * in the transport that give the ability to the + * target to work in their own behalf. Alternatively, + * the authenticator may be able to be passed on. + * IT_Simple credentials must have or have the + * ability to forward credentials. This is analogous + * to flipping the DELEGATE bit on GSS-Kerberos Forwardable + * credentials. IT_Quoting principals means + * that you can forward the transport credentials, + * authenticator plus the Quoting statement. + * IT_Proxy principals means that you can forward + * the transport credentials, authenticator, + * and associated proxy statements. + *
+ *

+ * On using Own Credentials. The creds_ids name Own Credentials. + * Also, they restrict the invocation to use only certain credentials. + * If the cred_ids list is empty, then the own credentials for the + * invocation are selected from a default, which may be + * set on the thread or the ORB instance. + */ + local interface ContextEstablishmentPolicy : CORBA::Policy { + + readonly attribute CredsDirective creds_directive; + readonly attribute OwnCredentialsList creds_list; + readonly attribute FeatureDirective use_client_auth; + readonly attribute FeatureDirective use_target_auth; + readonly attribute FeatureDirective use_confidentiality; + readonly attribute FeatureDirective use_integrity; + }; + + /** + * Type to be passed to ContextEstablishmentPolicy PolicyFactory + * through an Any. + */ + struct ContextEstablishmentPolicyArgument + { + CredsDirective creds_directive; + OwnCredentialsList creds_list; + FeatureDirective use_client_auth; + FeatureDirective use_target_auth; + FeatureDirective use_confidentiality; + FeatureDirective use_integrity; + }; + + /** + * The ContextEstablishmentPolicyType constant is + * holds value used to denote the ContextEstablishmentPolicy. + */ + const CORBA::PolicyType ContextEstablishmentPolicyType = ADIRON_VMCID | 1001; + + + /** + * The ObjectCredentialsPolicy object is placed on the policy list + * of a POA to indicate the own credentials + * that govern the accepting contexts for objects underneath + * that POA. The credentials listed here, only if they have Accepting + * capability, are used to created security components in the + * IOR of the object's reference when created. + */ + local interface ObjectCredentialsPolicy : CORBA::Policy { + readonly attribute OwnCredentialsList creds_list; + }; + + /** + * Type to be passed to ObjectCredentialsPolicy PolicyFactory + * through an Any. + */ + typedef OwnCredentialsList ObjectCredentialsPolicyArgument; + + /** + * The ObjectCredentialsPolicyType constant is + * holds value used to denote the ObjectCredentialsPolicy. + */ + const CORBA::PolicyType ObjectCredentialsPolicyType = ADIRON_VMCID | 1002; + + + //-------------------------------------------------------------------- + // Security Level 3 Credentials Acquisition Mechanism + // + //-------------------------------------------------------------------- + + /** + * Credentials are acquired by a Credentials Acquirer by some + * acquisition mechanism specified in the Credentials Curator. + * Acquisition methods are available on the curator. The + * specifics of arguments needed and the acquisition process + * are defined by the method itself. + */ + typedef string AcquisitionMethod; + typedef sequence AcquisitionMethodList; + + /** + * An acquisition of credentials may quite possibly fail as well + * as be a multistep process. A status defines the current + * state of an acquisition. + */ + typedef long AcquisitionStatus; + /** Acquisition has failed. */ + const AcquisitionStatus AQST_Failed = -2; + /** Acquisition has expired. */ + const AcquisitionStatus AQST_Expired = -1; + /** Acquisition is initialized. */ + const AcquisitionStatus AQST_Initialized = 0; + /** Acquisition needs more processing. */ + const AcquisitionStatus AQST_Continued = 1; + /** Acquisition has succeeded. */ + const AcquisitionStatus AQST_Succeeded = 2; + + /** + * The CredentialsAcquirer object is created by the Credentials + * Curator based on the selected method and initial acquisition + * arguments. When this acquisition is complete and successful, + * the created credentials can be retrieved using the get_credentials + * operation. Once get_credentials is called, this object is destroyed. + */ + local interface CredentialsAcquirer { + + /** + * This attribute contains the acquisition method + * identifier naming the method by which these credentials + * are being acquired. + */ + readonly attribute AcquisitionMethod acquisition_method; + + /** + * This attribute contains the current acquisition + * status of the acquisition process. + */ + readonly attribute AcquisitionStatus current_status; + + /** + * If the acquisition process is a multistep process through calls + * to this acquirer, then this attribute contains the current + * iteration. + */ + readonly attribute unsigned long nth_iteration; + + /** + * If the current_status attribute contains + * the AQST_Continued value, + * this operation returns, if necessary and supported + * by the acquisition method, any data that may direct the + * acquisition. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Continued value, + * a BAD_INV_ORDER exception will be raised. + */ + any get_continuation_data(); + + /** + * This operation continues the acquisition. The argument + * data is dependent on the acquisition method. + */ + AcquisitionStatus continue_acquisition( + in any acquisition_arguments + ); + + /** + * Once the current_status attribute has the + * AQST_Succeeded value, a call to this operation + * is used to retrieve the acquired OwnCredentials + * and, optionally, place the credentials on the curator's default own + * credentials list (for use with default ContextEstablishmentPolicy + * and ObjectCredentialsPolicy). + *

+ * The CredentialsAcquirer object is destroyed after + * this call. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + *

+ * If this operation in invoked when the current_status + * attribute does not have the AQST_Succeeded value, + * a BAD_INV_ORDER exception will be raised. + * + * @param on_list TRUE if these credentials go on the + * default own credentials list of the + * CredentialsCurator. + */ + OwnCredentials get_credentials( + in boolean on_list + ); + + /** + * This operation is used to destroy the + * CredentialsAcquirer object before + * get_credentials is called. + * Any operation called on a destroyed CredentialsAcquirer + * raises a BAD_INV_ORDER exception. + */ + void destroy(); + }; + + /** + * The CredentialsCurator object is a single object per an ORB + * instance's Security Service. It has the ability to create + * CredentialsAcquirers and keeps a list of active default + * credentials. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     * 
+ * Or it may be retrieved from the SecurityManager's + * credentials_curator attribute. + *

+ * The following pseudo code describes the process of credentials + * acquisition using CredentialsCurator. + *

+     * // Resolve the Credentials Curator
+     * CredentialsCurator curator = ....
+     *     resolve_initial_references("SecurityLevel3:CredentialsCurator");
+     *
+     * // Build up an acquisition argument (e.g., using SL3CSI::CSIArgBuilder)
+     * Any arg = ...
+     *
+     * // Acquire credentials and get a Credentials Acquirer
+     * CredentialsAcquirer acquirer =
+     *     curator.acquire_credentials("SL3CSIAQArgs",arg);
+     *
+     * // Get credentials and destroy the Credentials Acquirer
+     * OwnCredentials own = acquirer.get_credentials(false);
+     * 
+ */ + local interface CredentialsCurator { + + /** + * This attribute contains a list of + * acquisition methods that are supported. Method identifiers + * are defined in modules that signify their support. + * + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + readonly attribute SecurityLevel3::AcquisitionMethodList + supported_methods; + + /** + * This operation starts the process of credentials acquisition and + * create a CredentialsAcquirer for a particular + * acquisition method. It takes an initial set of arguments for + * the acquisition. The content of the arguments are based on the + * acquisiton method. Depending on the method, it is possible that + * the credentials may be immediately available from a call to + * get_credentials on the returned + * CredentialsAcquirer. + *

+ * If the process of credentials acquisition is not completed upon + * the return of the acquire_credentials operation, + * the returned CredentialsAcquirer object shall have + * its current_status at AQST_Continued. + * In this case, the get_continuation_data and + * continue_acquisition operations shall be used to + * complete the credentials acquisition process. + *

+ * If the process of credentials acquisition fails, it is up to the + * implementation to either throw a system exception or return a + * CredentialsAcquirer with the AQST_Failed + * status. + *

+ * The acquisition_arguments parameter is a CORBA + * any that is constructed according to the acquisition + * method used. The ArgumentFactory from the + * SL3AQArgs module is a local object that helps + * immensely with the construction of this complex argument. + * Extensions of that object are defined in their own separate + * modules that pertain to the particular acquisition mechanism, + * such as the SL3CSI, SL3TLS, SL3TCPIP, SL3KRB5 modules. + * + * @param acquisition_method + * The identifier of the desired acquisition method. + * A CORBA BAD_PARAM exception will be raised + * if the named method is not supported. + * @param acquisition_arguments + * The argument of the desired acquisition method. + * This CORBA any type is constructed according + * to the particular acquisition method. + * + * @see "SL3AQArgs" + * @see "SL3CSI" + * @see "SL3TLS" + * @see "SL3TCPIP" + * @see "SL3KRB5" + */ + CredentialsAcquirer acquire_credentials( + in SecurityLevel3::AcquisitionMethod acquisition_method, + in any acquisition_arguments + ); + + /** + * The Curator's Default Own Credentials list. + */ + readonly attribute OwnCredentialsList default_creds_list; + + /** + * The Curator's ids of the credentials on the default list. + */ + readonly attribute CredentialsIdList default_creds_ids; + + /** + * This operation retrieves Own Credentials by identifier. + * It is not required that the identifier name a credentials + * on the default_credentials_list. The Curator keeps track + * of all OwnCredentials it creates, until they are explicitly + * released. + */ + OwnCredentials get_own_credentials( + in CredentialsId credentials_id + ); + + /** + * This operation releases credentials from the default_creds_list, + * if there, and also disables the credentials from further use, + * provided that all their pending work is done. + */ + void release_own_credentials ( + in CredentialsId credentials_id + ); + + }; + + //-------------------------------------------------------------------- + // Security Service ORB Objects + // Retrieved from the ORB by "resolve_initial_references". + // + //-------------------------------------------------------------------- + + /** + * The SecurityManager object represents the Security Level 3 + * Security Service. There is one object of this type per ORB + * instance. It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityManager");
+     * 
+ */ + local interface SecurityManager { + + /** + * The credentials_curator attribute contains the reference + * to the SecurityLevel3 Credentials Curator. There is only + * one instance per ORB. + */ + readonly attribute CredentialsCurator credentials_curator; + + /** + * The get_target_credentials operation retrieves the + * TargetCredentials that represents a CSIv2 security association + * with a Target. This operation causes communication with + * the target in order to establish a security context. + */ + TargetCredentials get_target_credentials( + in Object the_object + ); + + /** + * The create_context_estab_policy operation is a policy factory + * operation that creates the Security Level 3 + * ContextEstablishmentPolicy object. This policy is placed on + * the policy override lists of object references to direct + * the security characteristics when communicating through + * that object reference. + *

+ * If this policy is not put on an object reference, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the object references policy list, + * then the default credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ContextEstablishmentPolicy create_context_estab_policy( + in CredsDirective creds_directive, + in OwnCredentialsList creds_list, + in FeatureDirective use_client_auth, + in FeatureDirective use_target_auth, + in FeatureDirective use_confidentiality, + in FeatureDirective use_integrity + ); + + /** + * The create_object_creds_policy is a policy factory operation + * that creates the ObjectCredentialsPolicy object. This policy + * is solely for use with policies place on POAs with "POA.create_POA". + * It restricts the POAs use of credentials. If this policy is + * not put on a POA, and the + * + * TransportSecurity::ObjectCredentialsPolicy + * is also not on the POA policy list, then the default + * credentials lists from the + * + * SecurityLevel3::CredentialsCurator + * and + * + * TransportSecurity::CredentialsCurator + * are used. + */ + ObjectCredentialsPolicy create_object_creds_policy( + in OwnCredentialsList creds_list + ); + }; + + /** + * The SecurityCurrent object references thread specific + * data pertaining to the security service. It is used to retrieve + * the client's credentials during an invocation on the server side. + *

+ * There is only one instance of this object per ORB instance. + * It is resolved by a call to + *

+     *   ORB.resolve_initial_references("SecurityLevel3:SecurityCurrent");
+     * 
+ */ + local interface SecurityCurrent { + + /** + * From inside the execution of a target object implementation, + * this attribute contains the representation of the remote client's + * credentials. This attribute is null if the client is not CSIv2 + * based, or the client is from a collocated call. + *

+ * The value of this attribute, if not null, represents the + * security context with a remote CSIv2 client. + * If the request_is_local attribute is FALSE, + * the current thread of execution is directly servicing a remote + * request for the target object within the target's implemenation. + * If the request_is_local attribute is TRUE, + * the current thread of execution is servicing an ORB mediated call + * on a collocated object. + *

+ * If the client is not CSIv2 based, there are no CSIv2 Client + * Credentials, and this attribute is null. In this case, + * the user should try the + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/SendingContext/.class/org/omg/SendingContext/CodeBase.class b/idl/SendingContext/.class/org/omg/SendingContext/CodeBase.class new file mode 100644 index 0000000000000000000000000000000000000000..8f0dde55f20436b3937e4c7547b9399a5a5beb45 GIT binary patch literal 238 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2KoG=bp8C?bp7Deyp+tmbm#oM zlGKV4edqj?RHww^R7M7Yti-ZJ{hY+SbbbG%tkmQZMg~m+n*0k=ixNvR^Ye-s8RT%N z4JyqG$;<_sF9K8G>>uRh2)9E4Rk$F(s3b8dCsp6m#m6$jTp}3 z6Oo3Sd{~Ym&&?}Qe9G6WB5vU`J{0(JO~g7j`0R55UkJD@B8h7P?uaPjO95ZSv5As^ zuSJ~U{3⪙jVyh1Z*>eRr^`XV90DXt(wx@t10VS+iL}7hpg+(s*z`itkliAy~+^G z&fa4PaWj3?rd45>$j%NS2~MC;m-hU~b|3Lr+1B(YC9SoiRT@MYs8<=%gm|p|qA3l{ ztSM#Ns+%<~qHgXRmd$V@J9J*be3ti2Wy7ozV7+PD#;>-*rLJlFMxF~7$YN$)M=tW<~tpmG9d7?NYre;~q zrwliTNw+GG4c$JGu;hWMKQiHkYX?=XrJdXPDRuK%7H&JK7gYlRKESzfTik0k1pFjH#m@{ETwfpM z0yGH~=nOMHo~nBvW&5Bap$bF7L(~{P^Z~g3cZ^2Muo#lPUg~C_VcdmwJDvKK3Y+JK z;j~VbYa42v+Q)jR>4s{PxYg`vM~+&0RWR~`44p_F%P`h$Xw_A<;8R^*$q%vejy~md zv`3N|d2XDNXSg&NwU@WPj%A4R{`T0WeISFSB6V8W1D*4UgX>KX61t&>)%w1w@wfDt zTivCrQfr2-R*i;HqvSA5k3{K3v*9?=i#ew551?j-g^hw{?}eu5Pclh=BnFZ9Ce0+8 zQ_IqLkyhjMW%LcpFTsAJ3CNN9*V#^XHi6I)0*9U581GDH_X>g?TjqBJ-(mcSyMzaIhSY-S3IHs%{WmTVoO0;aapC4_*q%`EfOyfe~sjWml*#$_YYFJ zw@CGw^p1mnEjp>k?>0n{yyP(P`BiF2(v>{ zlzxt={08a6$rnh-bi1!G5x{d~UgHeOJX@Nh-BcTyHqOl*y4pR75riV~L>f_iJdkm6 LpaUpL-HXNlNO>xJ literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/CodeBaseHolder.class b/idl/SendingContext/.class/org/omg/SendingContext/CodeBaseHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d04dacf91af16c5bc8fb99e94c3650075b84499c GIT binary patch literal 814 zcma)4+fKqj5IqZ&O05bCsCY#&a(QU<6=NbiD2WM)8ed7Vo2I0+q%Np`rHMx3gCF2W z8F!(ekTjU4o9)awXJ$_4>-*yqz%g3XK-woUDtI)>$#Ro7wkk!e-epcVa|mIs>otb#Xgb*2QzHAaBYKn1o4*M(=}UnOs(E*(L2U198ss{ z8jd7J{D(ZXJ3>A(H0wNY@(HuXqXz#w$@j7rs5s%}OvS+h2(NL(7fc4h9Dj+hl`o&f zZ`@^mF7U6!Aj6}@caRqzz#zTor_%`W2T(-1Sb9Tfgjqt|$E18rtXS$J{0EZ2@-(DW Zd_|~_$Vg=cNgpEA2(J|BLwXi%06()5#|Hoa literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/CodeBaseOperations.class b/idl/SendingContext/.class/org/omg/SendingContext/CodeBaseOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..8b7d4fe392632fd4d7255c6803d07d66995a9f93 GIT binary patch literal 565 zcmbVJO-sW-6r9yI@w2UZ^{mNh!D~-8A|i!IDqcLuHhnHzliiSPME{xxe}F$q+y+HU z(~E~?V0bfc-t5Qc+dF_W9QhddIPh`E;7PI%s$@70!m%kOH@W0doQ%$SLWQZ6HRbD& zp{Md9qnxxARvFE35{&2KS@29~$tSi{S`NciilM)(tQdmeeswTx;TSqOS;27Cx@6z;; zGTPFM<&l}u$eG0jl}*#mb?{qsJe^Z&U4?7pNv&^H{zvUGFl@ND>Av3UxJJyYHQMj*FbzH0Un@WgL^N}Ej1^{Q=98u#_BZN5Q;$VeV~}(_8}z7dZWK`LtLPHo zYKVn2_G|9e$!v+Qq9tbZ`(qJut3^ZPw;>iawF9P~73uP)JD;xv$=+S}LUc$XFZ=OMt zF>crPCAEZE%MniPFxBARZEC!eor`#m^0XlsPG>Lb# z)}uzmD+*r42@$U;cpYyDn3qjYX1)5l#z1S^ruMqd=GN`(?xcX}`O-8~sQsFu;7z=x z;BCAk;#~#r;e7=k;6num@sWa$@rj5}6?}%z6?}m&6@0~tUn@9;(+a-9w<69c_zvF- z5DthqtKb}l6r9Hi1&8p1f*)~GM2c006^!5~1&47##6|Y`vw|bIB;qm;t|&N)t0I2k z!LJIA;Wq(gdAu1a30U6T*iu6zSi#YbLxh@DD^?0vHi2e)GTNy}w2b16^eSmWHmQl- z=~5FN`!zG5Q-W&oyMjOPr+{gCBp%ixTGUjTwgO5=3y3u?;<-w!28#Ei|N9{2IC9!M@1k9xP z>};agX69?3Z${LDsQAPnUx7(3hP)R`Bw$vdqSf?xhfCB@y3}xz`T;eyW}-(RX7sUs zz9(4`QIxblvzg8b1xyJVnrdo+u$~}DUSG4_bbD6|O_6npYV;?Wom6nIJ&l$YqnbZv z^>!^DOXy}S-G^msK{Yz)gtRWo&HC2SNb?SIWYD7t%^<`p?MT>xtxM<4(~VJ1(AG1w zL^4eFvz_eI2Lv}ts^DlOoef*{Xo!+w?hPc;#}6MlPC67t8SnA9p+|I6AJ773&;f47 zVF7nDwdov;YkcsGts2Egg*IuPda@mS&Wt0lLC=(k>lg|J1~Rm%cVLz+8qVifQm7Fv zl%^g5oJOalp$5%dLPilg%hv*~TOvB5GF8kOE*YK3eBGKu9ooKZ?dOgmST1YBP#Q9kD`5aDLXVo=Xh~u=yHac_Fe$BtLy`=zhg%cL1HK}Y(4mGiF%5>@*wO!fO zHYdYjOO^;4dYsP>s?549*bJ#AW0g(v7AM3uYD~soddF=UC%^w49tE{NYju+ff~gvzSy|LvUvuG@vmvThs{`{qaE2vLSe?QV>&+wpCw4=|z*&6Y9l1Ls+@It4@ib3>BkoIB-cwxe>*#Tn zS9F|*`ywiPhEa7M9wJ|P^+inSDIUfhDXi#bfu9Ag0>MfaxC;cUSl}rTtY!gmHs@mv L3nWXB*y_w# zM~ z3exD(tVFOH#aa~W5j>3GQ3Q_}V)dplMT@(FA-`)oE!}Rn^s2C$hSe(BmMh-4ddY5z zBJYa5j&QhZ*j9IwAzZH;%`U_A;qEJb!gZ5d6zDn>N8X7o!!q2b3PsrY73V$JRf`5 zuzdr$HE#CAjyNv!#%taZ`m>&CdVAf5V{~LAWglfm67kYU#Q!BdqH&?5*>O6@T$Ula z)iAx0394F6!Bu1xq%fr*jcElpaZAB0ZY!9>9R+tWuV4Z96x_!mL+alVq@!Q#>~7F7 z7vu$e26|()utJ?XhphCheWNV~;Nq|rKIv$#_6?fdg^M``?E+}@*f39TI|-T`1n8rh z(BqHGvh-I*rMgDm4E<&L1bK5`z;gM|2)w6VkT-=HkC~#C(Ox+B34wQ>`#NrT?i8&- z+6{d`aOkDtd)^GKGB_@SPZ44mGSnN7nejvy-uXZiBZzwI14Tv<_1*`H ojv$&1A1F42qF6%KgXR$Gmm?kihWJ4+ov0p!(n|Fsf`cmJ7s6&xp8x;= literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/URLHelper.class b/idl/SendingContext/.class/org/omg/SendingContext/CodeBasePackage/URLHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6ec82e9a2279d039567f1b0404bae262102cc0ed GIT binary patch literal 1852 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 PPsPcA0#K1!7mNP^=_e>l literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/RunTimeHolder.class b/idl/SendingContext/.class/org/omg/SendingContext/RunTimeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..da426ee60696d5f72a342b55b73413095b76c0f8 GIT binary patch literal 808 zcmah{?@Pi^6g^L!%e6{Nt?ZYkkj@XIz8XOZVGsx^eU;fBGMSr~xPCE>;SQbSTWU-}{vWOx@qzg(7Ske*<;X^Z&XBn8z;4nq`R|*Lj ziOV+=f0HrZnNAlfF?@O3J@?#q?>+DR`t#)*fGNBZ(TNdj7!~mV0c#cXp#x*q5E2o_ zLlNVM2$&Gz!=!*I5iOV&@W_i90gpwrVMM?a0kZ<0GPrX&W#^FL=GMxdd?ZIySt~@c zrlDwsD1$dw?ukU6YMt!g%HtO)(c3nghWN23JDg;TEsCtB~9M zKyXDj3K6|Xv|QUE-h{51{DT?El(coF$cbVmP{kzDnRqNhL-ZPcZ8=$0a|+QJZ{<9v zaMLxWHQg}fZIx%aam0$wON$lN0)?d^azMah$A5&DPajO82T#3 zDaVV)lDYKSQYN;ZO24+~UNUsl8k3?_3*3;fj1)tA%~0+b!)PkGGDo!@w`i}f_uS<8 z1ohkYwY#}2AMVI4=4w}}Aw#%=X(({=Sd)uNK2gP6Zkb)VWkssIfRl3|;j==Yd;# z_R{m&kkt~YpB`|^HAo*xCrBV@f@lesJ|5B1F3lb~Cxz2^n|2*EGn(CF=U|^`0owNA zj$`&aW-pnWKBM_#718e?x+p{wo%+T?=Wx|Q?&6*UX{WiFAg&X*D+B`=bgYYHbCGrQ z1fI|tgfn0pF&zKZp1|`~xj#kQVyiSXZPEiAFEjZ}bTmqSbIUpCOwI=y82T X>t=K3jqEAh7iil&NBb!}eaMjN)^D_trkI*V zajrvQgf3JK%W#hw_VV*TTIeu{HCrbsyZOTWaSSn4GfmYXwa&HH<0R{7lDBC)u6AYe z7I#M6QJRgDO82xdRd%S_GkxJgzR-yvigW}r!VxSY!Vv#kD#P~qS-ng>D|x+}-na5W zX`f+hc5_Kq+n~yG|I!%pvpJJFAxA@(zz{-!HWfm@BJ9;dRwREEOLWHQmic86T6_a5 z?z|%KNL~;sBkpq&WEuH_#TNt~d^mxm4|_C$yy6ptF&aV&X&=o}LT^RI4~UmSGT3^C HFwTJ=1AVK? literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/_CodeBaseStub.class b/idl/SendingContext/.class/org/omg/SendingContext/_CodeBaseStub.class new file mode 100644 index 0000000000000000000000000000000000000000..8a5b185205d6e0687ac423a737a097947f5f88a0 GIT binary patch literal 3179 zcmbVOSy$Ue6#fQmBowhZkc2FxBxx|hO{q@V*MwK$Ja z8NCX%V+zJGq2LN$7OzS1no=;0s}g1;%!>Y;z|70Itl%16sl@_9;%iaHl9*mra2>CT z*NTij1+NKvt9V^}-HjNi!BqCSt*{`GwJu-~vx2)4G*3x5;>2$kHMkvs!9VTZ@yRHzeo`^?D)|=Lv3D znx!WVhV%YPWu28n64n_SN*9w~e!q)Gcio-@w={-HSH4m|mbG|>kMrBt$N??JgI6-~ zxILDRn0iVmCl9^CB8ixOh=?aMx~8Q$8SQY>>EbMdJQRuN_fbVR0xCMurD6kd2?-Sj zk`#IsDQv1R#dI2$gp7(T?l7Dw)wpDA7|A=vQkt6+TM?djl;KniVyJ-1KU#ZF+QOkRPiZ3Q}H>zknp91uT*@EZ^Y7XC448^ z?o+8-Gj%kz~&GBrLkK-tzK^n|z(r7Rvx8W!KOf+BTCDRKiBdwMCU9)VoQ7>jzs z2A*?VD>D~%?1ik%8biAS+s*S-(zHZU2j|z;dBmEclx8^XV9HE6mKa(bgi|e>8J@PN zIQLvFM3teb6g^^W(^iK~ZZGO~%a4kB%!4Ua+e(e?73w69r#Ka}$J$O&?H{kG=|vhB zE|8IiG*!OIt&C}eci|`eWsC*1I8SPHBb(eHtJU1dQW{m*o-neynKZ;{K;~OZH5N@W z)bhP_JW6(4B1RTeTU=JuFU7lpkb+1si4w-tA{6;xxqbn7_qjs(a|i? zHJAFeICfPxqU4gb5l-h%VumB-Va#J_ZKF7BQ>LEKEj`P_R)nFqT=TBM3fYCNAS+rl z8aA{9kA`(4teJE%xE?QMDt4n)ryFz}SOu*uZiz>`U2jLV0BkPVr^2Ok$qC0p>cly8 zmlkG1eACI#v(74~cAT4LDq4i1j1yWJI?ID3d~rEFMVk8EuXQgTJN^80fFekbBJLgfL8_&1x`ya|fqG5UGHShD zzk~fsAE0gzg7$QyJ?*)Rs$cBcUR<E3}ihnnsjBzoi=YG(uY z(H!^(%FmDke?yt0*P(kfsqUa|?t(DM=$8#pQS~3XBwUj4tcS)f<2jqeLN#g#5$f{Q z6Ul5~2Mu@8m_rj$1$@374$oa6i_HO|rAN>Xcv?O8ajeyoXI5H0L_OdY&7pe)QFCaa zu6K{V0aXt$lBa*36nKfd5B;_RgWMDfX1jbxYz0S)xp#2v0Nguhb>SW?;U2(XCHHZg z`$RGK!TjFA$$hzp@Ioc`DVw{knERl9pWc^y7%x_GKV@^b7jqxf?=$;w%Xq0!6K(mV a27KN>adxHJcP_Nz@jV^-4OP1Zg8u;sUq5C5 literal 0 HcmV?d00001 diff --git a/idl/SendingContext/.class/org/omg/SendingContext/_RunTimeStub.class b/idl/SendingContext/.class/org/omg/SendingContext/_RunTimeStub.class new file mode 100644 index 0000000000000000000000000000000000000000..76caf3283106426a70a9e17acfcc628f58f375cc GIT binary patch literal 430 zcmZutO-lk%6g}7ZRLAloi#CA-p)H(hX%f`55d=Xah!!$B!!R=QM(i2=tUeY&P(Pp_ z6Q2mz3-fJ&*T37efy51@vptSdn}r + +#pragma prefix "omg.org" + +module SendingContext { + + interface RunTime {}; + + interface CodeBase: RunTime { + + typedef string URL; // blank-separated list of one or more URLs + typedef sequence URLSeq; + typedef sequence < CORBA::ValueDef::FullValueDescription > ValueDescSeq; + + // Operation to obtain the IR from the sending context + CORBA::Repository get_ir(); + + // Operations to obtain a location of the implementation code + URL implementation(in CORBA::RepositoryId x); + + URLSeq implementations(in CORBA::RepositoryIdSeq x); + + // Operations to obtain complete meta information about a Value + // This is just a performance optimization the IR can provide + // the same information + CORBA::ValueDef::FullValueDescription meta(in CORBA::RepositoryId x); + + ValueDescSeq metas(in CORBA::RepositoryIdSeq x); + + // To obtain a type graph for a value type + // same comment as before the IR can provide similar + // information + CORBA::RepositoryIdSeq bases(in CORBA::RepositoryId x); + }; +}; \ No newline at end of file diff --git a/idl/SendingContext/.svn/text-base/build.xml.svn-base b/idl/SendingContext/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..1230a4c --- /dev/null +++ b/idl/SendingContext/.svn/text-base/build.xml.svn-base @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/SendingContext/SendingContext.idl b/idl/SendingContext/SendingContext.idl new file mode 100644 index 0000000..a3d9170 --- /dev/null +++ b/idl/SendingContext/SendingContext.idl @@ -0,0 +1,35 @@ +#include + +#pragma prefix "omg.org" + +module SendingContext { + + interface RunTime {}; + + interface CodeBase: RunTime { + + typedef string URL; // blank-separated list of one or more URLs + typedef sequence URLSeq; + typedef sequence < CORBA::ValueDef::FullValueDescription > ValueDescSeq; + + // Operation to obtain the IR from the sending context + CORBA::Repository get_ir(); + + // Operations to obtain a location of the implementation code + URL implementation(in CORBA::RepositoryId x); + + URLSeq implementations(in CORBA::RepositoryIdSeq x); + + // Operations to obtain complete meta information about a Value + // This is just a performance optimization the IR can provide + // the same information + CORBA::ValueDef::FullValueDescription meta(in CORBA::RepositoryId x); + + ValueDescSeq metas(in CORBA::RepositoryIdSeq x); + + // To obtain a type graph for a value type + // same comment as before the IR can provide similar + // information + CORBA::RepositoryIdSeq bases(in CORBA::RepositoryId x); + }; +}; \ No newline at end of file diff --git a/idl/SendingContext/build.xml b/idl/SendingContext/build.xml new file mode 100644 index 0000000..5d8ee69 --- /dev/null +++ b/idl/SendingContext/build.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/TimeBase/.class/org/omg/TimeBase/InaccuracyTHelper.class b/idl/TimeBase/.class/org/omg/TimeBase/InaccuracyTHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c6887bc4a48b0b534f600e20c54e0c531b557384 GIT binary patch literal 1750 zcmaJ>Yfl?T6g`6$gIcLdK2_?Es(NO3@nazs^3E{#o;&B>d+z-6?;n2wxQT5YlbF*{#B~if zbi{B|$Gdn>!}~gt_#n-b4>jCUhac%Ui}^G^r8E}su|nNeXLr=+ZVHR)WGRJZ9rtiw z$0zty!-|GgfrR1hH!Xp4<%U};Hg;>p<&B3+i^U30mm51)Ng%mkJGOUQAePH-3B=Vg z7o*{B3!KU2BS^v($aY$m>j_NeBKAdRzqFrdS$cWdg_wms?%(H zbhpgilH!o~$+bNuoPRB1qwVz|erl^k}k;@IIw$iBYSg!Ib zYj_~>88!sQtX9#pcfww1 zTH+DDk$4kR64#Iu7+!VEYPHR>?^h(g#diXiSMQbQ+4wodtzz$5OJ++|q3bt)V~!g9 zUg8HB8h(^8Q5Lv#l*&nv6|3H~T;|cEy0QJ(QoSBO!UZ~`TG$g+D=s;|co7d~PgEc$ zBj}6jlfc#2Hl*iOQbNmwLK{F|IVPa40{Y-=|DIWI^EN>#OjM}~&oXQ!5u@d6MDd7@ zKsQpqmZ-?V)GN#DwnHgO?}^c_Qwr+GVTjC2;6~++)hy3wy7sQ^*?X4ZRRyj`OAtCo z3H8m!Xqbapx6PIxWGi=kPEI(9kUx4K{^zQ$M1oeIR26|!Y99OZ=PScf&kSDI#rDsd zz^Ff)J#>7U58fmnPyt=d0e5NcIfMLODa59hG+b8vui$DJ`4-~b0W;4b|Hegc^lVGjWt7-;K~XLFy_;jiFB8%^q;8 gILzYh&>=&!a!3}k9h?cWPvM<`3M))PkVs(0f82ebB>(^b literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/IntervalT.class b/idl/TimeBase/.class/org/omg/TimeBase/IntervalT.class new file mode 100644 index 0000000000000000000000000000000000000000..8097fe17affaba1a34468ee6e307d37c92a2b120 GIT binary patch literal 298 zcmYLEO;5r=5Pd@_g;E97lOB{C^sg3YrP;)!pgcV4@%=E z*SWnVc!S}bP#>FxBKU(O8O|ewXh#UpjL<@paBiwhm{lfb`AUuCs}hges%j&P8KJwB z8z~B@Gciq<>ctYS{{7?W)96l=rm`|Exa)rMplxoq=<~Tg2o2O2c@zIbZW*&v_yER; kvmP@s`|&$y$AL43IQlDJz~ezc$CcyDJ!)}(5AWBAA5Wn*IRF3v literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/IntervalTHelper.class b/idl/TimeBase/.class/org/omg/TimeBase/IntervalTHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..aa5650ec7711147cc49160da466c9c4587227216 GIT binary patch literal 2206 zcmai0Yf~Fl7=8{(*ksw1kY1#eOG_<=jgo?Qf>jdG5`t)nD5Azqa*PYfZd^9B{VDwg ze#N#1MnPA$ykh`kd#zEHD52>mL9Muw_i)0~sIUBMBeN@L^F# z5=#<3kuiunA(DJ5;WHszmNAJ`h#qMPD?zM=@HxH^zISDWu@*!|SgeajHi!+O`7(%2 z317(=6kt1o^Eb%16 z;F50W_8kUaY<8Q$FT`}@O{>6gIX2tlN$$c)Hx9UEGc3e<^vlM>WJ{FOt30J0@Wh&7 zbL&v6~YbfBi;9=0icEvC1IFq*SH^v z)9O9W#5)CahbQm$ljtvonRX}WfIBhQ=wmZKEW9N9#kaZK5ORwt&O_yTt=j#>ID2pG%l@b8E!^LCNpb}u__%#Km?Vzk#9jbFQz#Gx4U-i%G_9yxWO*c%Sr5swNYfx6uR zvwK$LzFfOKK?y=@T+YKi-A!JrjvW*;ToC)JlT6y(83snbo3HTiTsjQH&XVek;E!cy zxBWNh8#6^;Fa}u+J-vnKofZ#0-=x1r=wx&T)MKze=mlg*)9k4ujuP;nVBpBnhVT|* zp7tvI7$9j_J%w*4ehhyD0XIkpvrs*=ES;cbEc9n5)=HL?=uGmoLXKsxX@!t1K<6ycrd z1w#B7!wp2(F-Epjzax!yOHXj|1ec4u$TfG_$+ zlMLFXo^po%0}!_yJH_bEF|KCg6m{%RT=UNHc+=-yyyy8$cs?U){3)(AFd@!yI$aWj Qc)zPq6deIZKwUNd2lAXThyVZp literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/IntervalTHolder.class b/idl/TimeBase/.class/org/omg/TimeBase/IntervalTHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b929e16c5d1867914a54902bb7ef749a830d91b8 GIT binary patch literal 784 zcmaJy+)Beq+t zY&l(_ER8HG&E0p(qRE2)o|EjGcQIFN%DhEl!*dqC;+U?G0){1enXr(qmrP&eD8&`} ziw-N4&A)@aPy)m9s$WhZKo6jba=!3}z!wZ;m~g%@K=2PFiuGAYA^(cN0Mb}x S12G>W)EIS=29Te{7{CwVw7Tg4 literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/TdfTHelper.class b/idl/TimeBase/.class/org/omg/TimeBase/TdfTHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7a99e7efd3df51b7e0b51a5534071e83cf43c85b GIT binary patch literal 1718 zcmaJ>T~`xV6y2A6Ofn1wf{GYLk*Y~(8MR-QP+LG-D6zCArL|wvA-PRQLy|QasQwgx zL0@=iwJWmPwYv1lwfdvFy6?yoI+lyrUzDchj`Ir{RV&zOUmH7SddbX)NLc6?IeDK2*y`DJ&_=atbRtZsE3$ zkMW6yRSjzb3CnxbmI9|sEw^sAw(I7~#@*#5vqI}it0s#A$wjB>csB)Nx%{R;T$#C9 zEq6=cWG)|xWVi})njPtS0+YFjf2sMXSXPNN`OtIiDlw;y!sN>WBW2I7KDcAIEB01H zvRs}U@I7@#Ir&%YlxGQaXuSAb*w_HyhVy-pYJ09WE z-YzN*iC(x}Q-e(||I9;ITaB7@6|kh? zj)BjxAuuL8rsvec%V5h4e2y;++yxm;9F%qYVO6$0r`0r2!IuW|C>S`6DGi$jzQWfA z?%^8)=P+&H3UVyJQv0c5;9GnraBl5ZX@OThuUJ)_ZMkfBq^ST4*XAj^?+yF_OT&)_ zY?K7DJ@y0GRoQ4umy{1!ZEW3_>R!it0fDBd3=&X%;g<6o6+y62Mg`Kbf;&)mB5?WG z<{zMnN>rIpR0GkM4vFQ}ZTE%qs(0~L{zsl6F8>(-x z^vcS*)1>TD-UF+nZk?i!%tZj9LdWXTv)Zn+?Rd_vw7jao)oA%4I7+5(21Y~vcEhnd zev-}H;dwa15+UAu2ma@%i-RFYbwof{bJwe#F9};bdrVyaJP8c@^A|+MXZWB^@_}SN zC3AkI`OO*QdX|6V+y(bU;Tgp5`~ZPef9M|boj`maL%;dnG|uBf=$%3wL$r<*{zB|t z_8H<`B!VPq%-~`OD{)t_Lg59Hk1<_%j${{FY3>DLk1;&=9I-!;+WQspQlSfdAH#c$ z&`4v(XFJQ-6k^lM8eUiYFX3{S`34Cn_Onl5yu?|Oe1efKUR&SC=sw0WGgE-GDobE8osGoz5%tWt7J`169g1aKGG1ZC1>>fWAhdI0v0y1L Q3U3Z{Sj8j+i3D!^2S;d=4*&oF literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/TimeTHelper.class b/idl/TimeBase/.class/org/omg/TimeBase/TimeTHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9d279e7cf81d3498c571b1bf56e4a72d27374e6c GIT binary patch literal 1732 zcmaJ>ZBrXn6n-vw*<^bu5ZcmKOr+R02};`fRteSut@4tJmWbB3bqRMe+lEbMvtavE z`V0KTj8-RQbjE2vIpdFVeC}pxk_8+ldoTB#=iKL<^PKz7zkmD%;0Cr#OkmbT3D*o< zHxa`P6Yt<%1Mitg;{7yFJ}_`oAAV@!9Olyel+&2UM;diYpM9)9w^LZqCyOa8nYe?y zCO*NZ29^!12qY~3NlOWwuQa`Ssku`xEv?^QTqsp}y42iOWr5_p<2wE=fmptU+?l_;qs=)AuZ`U5(vs+br ztD%@K@9pxvc;wzb#zW4wz!`cxwD;^%!*=VX4c~LzI*G+SWz%{!dS$EW`TCO5ird=t z>8|XZvgVNZ$#Z-rTsRT2zU%iOL29Y_S|cc$#6`SjU{zubSyp+l$d#sBUv4(Gm8bnG z2JT6GhIN5a)h_wYcGwG6OyYBVA#ooY0^_}`?mn)mmhUuOi7LL7D4-~D9v2L3N_>T{ zB_7}#iPw>pxQaZJsX9BVD)BA86UeUIsm!tEvznDQEZS`qY^rnDXQ{jIC4PWq;717? z6@ke^`h(8Ps?ky&S@(#oZ#`7Hvtx&duBxaFc0gB#OFk%7#DlpK)fJD`?Sk%#z?Bor z-}5SKS!F_54WKU{k;|)o_rY18J-e~X+XNdwUZVzlWjR_9Ry$CH<`EVAt4RIIq5cL_ zuP&`QE`=xkN7inGjn_X)KQbL%H|lh>u6(QIIXjN;>?zBy30#YoAasrr>YId-FbBKg z*zF+5X8!0@9CH#OfA|{w&sCQOA;(ok;Iy8;{`~o-u+-BhVEZRaU?iBt9y&h7=WT+| zrGTkb&s~~(P8`3J{BMk_;F>5thxnBn(2>Isnnwd85I?}sFM&0U9Nq}67m(l^3k(G06k^#$18-{nmvJSGd=qi*fazzDe`As)pJBLz(`yG9IlyRUjPWwR zLDH<*vx@x2AaabtVGpB>1TkpHj34I6S0Xfyle*5)V5l>Zje}F&A z_!i|d^Ct6VXW#eF=NEtr9M>VRTSFDTfjtBJ1`Y%c1&#!o1Y4)`gg||QNOKj(S-~n? zsi%}xM6mSakx;!%^Hg84YERo^O-EFQ@{f09> zL4dFZo004IS~87G=F%l|FLQ+*{uSdkE5pR>1RtPx9!$`~&cA&Qi=PIX#tu$PRDzQd QR^Zzu?7(+QIDaAh0s;v)9{>OV literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.class/org/omg/TimeBase/UtcTHelper.class b/idl/TimeBase/.class/org/omg/TimeBase/UtcTHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9f8cf00f2eda02f9def8997562c49a0e1d1cc6b5 GIT binary patch literal 2499 zcmaJ@=~o+76#qSvFiCinr8|{cXp12MLR+m0w3Ve=Ac#WRil}i&rePo?F&QYh*L|y7 z-LU%EuUJdq$kEe&@*Mvq&+&Ng%wz@pFmrEy?{4pIlfVD{{Z9a=@v|2l81!NY7Zp6| zg#%A{aS6i;M!cxTsE3e{f-wf4_9B3B551mI@T?mX9!w(4x|hAE#T7TMGV+`oQ%s+C zW18s;to9tqB|or84ngY9SsR9G@8I4~7XHOvSWbf$BazsT=179KQA|0#1gBL{ga< zf&ISr3QbaHB|VwdGKN5>uj0HvxzbyJ!uo5Vzlnov@OPx+g0f?fqf(~r!J|%gqn;8Cyk7rjMF8Y8BL|r zbCrRlQyGJu1c#I9MT5jOb)k3n$XwSmxm$&@3Q~*sIGcajYbnG ziT80M|8rKC_<(;pjMz1a4_W0j&Pep(9NFTgkoX863p5W8g?gwxyV!ZzEqhLNbyFYa zgDN{y@QK8y_)KB~HzhvD7ZO+TrNmeGT4D;fB)(y88n+aDEAbt^m-qpz5}Rv7o~H2NsGg)@lg4~xF_B8f`4Ko!aBms2#Ar6_W#(3iA`5f$jJOpGmD z8Bode5BavweWl0zCal1zA=!|bX?H$o0S~j;S=tZ+4BKqIoh(WdO^X@s^iIBu?L@`o zEi_%>mf*s;mFyflJNZ}zTFcX0C~`>=1orTPD@`}8_z?j?kGFVaZvJ6{>8Y_``&J}A zNjN>0xD6lQ#dqnN6R0!SVySnhZ-hSqH6;f$I=*2Br48CHoW98tQ4@5w(08(fKFt&j zZz|$E#M7dr_bK|-KvWQQ`8ObbB?cr&>&8B=HxB{lCaTuVQx6`-BlhWGI8jAtt$z!S zslW!DIk+q%9-PIawpfTLi~0TcQN4-c8i3 zk%mH_=@v8E$4J)=$I$@=k8}Jz=(R21Bq@%5=?>&yNGX4ycGU0KLhV%J9*X!5>T;+T z8)%sHJ599FME4d@mx=B((ftLq+C&eS=)pX?i9?$>+}K1R9{CNDJaR$=I64=^KgdvM zw4?3N>de3ZN8P5#E7RlaIKlMfI@$tx w8&9C$w$W+ZXz>T`;#dw3F>TGk$Mi%F?M&Np@LL6OW1y_)6g6CeE@Bkim0A^)hk`HEL>`MqxA=&#(ZqyA(Jd)3Ati-2b-?&nnrI|0`~W}7 zI8zD=v6;+Gd+)ht?m07G-yfdUXSFFB3#g%)ZIa2*UZoJ%LoU+Z>_{a>kgctob{UeYeg7d1l-S;PI|gc!(qZNE8q(@J)nW`~k`Qi@V3;690>P z6`n1=gS_wryz;VNP9ek>po(&_^oGy`vx1n9N&1**u{1*X4%veimZ@Ka`2CH2?qr literal 0 HcmV?d00001 diff --git a/idl/TimeBase/.cvsignore b/idl/TimeBase/.cvsignore new file mode 100644 index 0000000..9890ac7 --- /dev/null +++ b/idl/TimeBase/.cvsignore @@ -0,0 +1,2 @@ +.class +.java diff --git a/idl/TimeBase/.java/org/omg/TimeBase/InaccuracyTHelper.java b/idl/TimeBase/.java/org/omg/TimeBase/InaccuracyTHelper.java new file mode 100644 index 0000000..2fe8582 --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/InaccuracyTHelper.java @@ -0,0 +1,57 @@ +// +// InaccuracyTHelper.java (helper) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +abstract public class InaccuracyTHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, long value) { + any.insert_Streamable(new org.omg.CORBA.LongHolder(value)); + }; + + public static long extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.LongHolder){ + return ((org.omg.CORBA.LongHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulonglong); + _type = _orb().create_alias_tc(id(), "InaccuracyT", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/TimeBase/InaccuracyT:1.0"; + }; + + public static long read(org.omg.CORBA.portable.InputStream is) { + long result; + result = is.read_ulonglong(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, long val) { + os.write_ulonglong(val); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/IntervalT.java b/idl/TimeBase/.java/org/omg/TimeBase/IntervalT.java new file mode 100644 index 0000000..e3ab174 --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/IntervalT.java @@ -0,0 +1,24 @@ +// +// IntervalT.java (struct) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +public class IntervalT + implements org.omg.CORBA.portable.IDLEntity { + + public long lower_bound; + public long upper_bound; + + public IntervalT() { + } + + public IntervalT(long lower_bound, long upper_bound) { + this.lower_bound = lower_bound; + this.upper_bound = upper_bound; + } + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHelper.java b/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHelper.java new file mode 100644 index 0000000..d53061b --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHelper.java @@ -0,0 +1,61 @@ +// +// IntervalTHelper.java (helper) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +abstract public class IntervalTHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, IntervalT value) { + any.insert_Streamable(new IntervalTHolder(value)); + }; + + public static IntervalT extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof IntervalTHolder){ + return ((IntervalTHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[2]; + members[0] = new org.omg.CORBA.StructMember("lower_bound", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulonglong), null); + members[1] = new org.omg.CORBA.StructMember("upper_bound", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulonglong), null); + _type = _orb().create_struct_tc(id(), "IntervalT", members); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/TimeBase/IntervalT:1.0"; + }; + + public static IntervalT read(org.omg.CORBA.portable.InputStream is) { + IntervalT result = new IntervalT(); + result.lower_bound = is.read_ulonglong(); + result.upper_bound = is.read_ulonglong(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, IntervalT val) { + os.write_ulonglong(val.lower_bound); + os.write_ulonglong(val.upper_bound); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHolder.java b/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHolder.java new file mode 100644 index 0000000..3c95aec --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/IntervalTHolder.java @@ -0,0 +1,33 @@ +// +// IntervalTHolder.java (holder) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +final public class IntervalTHolder + implements org.omg.CORBA.portable.Streamable { + + public IntervalT value; + public IntervalTHolder() { + } + + public IntervalTHolder(IntervalT initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.TimeBase.IntervalTHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.TimeBase.IntervalTHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.TimeBase.IntervalTHelper.type(); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/TdfTHelper.java b/idl/TimeBase/.java/org/omg/TimeBase/TdfTHelper.java new file mode 100644 index 0000000..3ac3ce0 --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/TdfTHelper.java @@ -0,0 +1,57 @@ +// +// TdfTHelper.java (helper) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +abstract public class TdfTHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, short value) { + any.insert_Streamable(new org.omg.CORBA.ShortHolder(value)); + }; + + public static short extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.ShortHolder){ + return ((org.omg.CORBA.ShortHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_short); + _type = _orb().create_alias_tc(id(), "TdfT", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/TimeBase/TdfT:1.0"; + }; + + public static short read(org.omg.CORBA.portable.InputStream is) { + short result; + result = is.read_short(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, short val) { + os.write_short(val); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/TimeTHelper.java b/idl/TimeBase/.java/org/omg/TimeBase/TimeTHelper.java new file mode 100644 index 0000000..062129d --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/TimeTHelper.java @@ -0,0 +1,57 @@ +// +// TimeTHelper.java (helper) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +abstract public class TimeTHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, long value) { + any.insert_Streamable(new org.omg.CORBA.LongHolder(value)); + }; + + public static long extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof org.omg.CORBA.LongHolder){ + return ((org.omg.CORBA.LongHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulonglong); + _type = _orb().create_alias_tc(id(), "TimeT", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/TimeBase/TimeT:1.0"; + }; + + public static long read(org.omg.CORBA.portable.InputStream is) { + long result; + result = is.read_ulonglong(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, long val) { + os.write_ulonglong(val); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/UtcT.java b/idl/TimeBase/.java/org/omg/TimeBase/UtcT.java new file mode 100644 index 0000000..680f26e --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/UtcT.java @@ -0,0 +1,28 @@ +// +// UtcT.java (struct) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +public class UtcT + implements org.omg.CORBA.portable.IDLEntity { + + public long time; + public int inacclo; + public short inacchi; + public short tdf; + + public UtcT() { + } + + public UtcT(long time, int inacclo, short inacchi, short tdf) { + this.time = time; + this.inacclo = inacclo; + this.inacchi = inacchi; + this.tdf = tdf; + } + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/UtcTHelper.java b/idl/TimeBase/.java/org/omg/TimeBase/UtcTHelper.java new file mode 100644 index 0000000..a272d63 --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/UtcTHelper.java @@ -0,0 +1,67 @@ +// +// UtcTHelper.java (helper) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +abstract public class UtcTHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, UtcT value) { + any.insert_Streamable(new UtcTHolder(value)); + }; + + public static UtcT extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof UtcTHolder){ + return ((UtcTHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[4]; + members[0] = new org.omg.CORBA.StructMember("time", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulonglong), null); + members[1] = new org.omg.CORBA.StructMember("inacclo", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ulong), null); + members[2] = new org.omg.CORBA.StructMember("inacchi", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_ushort), null); + members[3] = new org.omg.CORBA.StructMember("tdf", org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_short), null); + _type = _orb().create_struct_tc(id(), "UtcT", members); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/TimeBase/UtcT:1.0"; + }; + + public static UtcT read(org.omg.CORBA.portable.InputStream is) { + UtcT result = new UtcT(); + result.time = is.read_ulonglong(); + result.inacclo = is.read_ulong(); + result.inacchi = is.read_ushort(); + result.tdf = is.read_short(); + return result; + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, UtcT val) { + os.write_ulonglong(val.time); + os.write_ulong(val.inacclo); + os.write_ushort(val.inacchi); + os.write_short(val.tdf); + }; + +} diff --git a/idl/TimeBase/.java/org/omg/TimeBase/UtcTHolder.java b/idl/TimeBase/.java/org/omg/TimeBase/UtcTHolder.java new file mode 100644 index 0000000..49779bb --- /dev/null +++ b/idl/TimeBase/.java/org/omg/TimeBase/UtcTHolder.java @@ -0,0 +1,33 @@ +// +// UtcTHolder.java (holder) +// +// File generated: Thu May 19 07:31:42 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.TimeBase; + +final public class UtcTHolder + implements org.omg.CORBA.portable.Streamable { + + public UtcT value; + public UtcTHolder() { + } + + public UtcTHolder(UtcT initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.TimeBase.UtcTHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.TimeBase.UtcTHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.TimeBase.UtcTHelper.type(); + }; + +} diff --git a/idl/TimeBase/.svn/all-wcprops b/idl/TimeBase/.svn/all-wcprops new file mode 100644 index 0000000..0a71dfc --- /dev/null +++ b/idl/TimeBase/.svn/all-wcprops @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/TimeBase +END +TimeBase.idl +K 25 +svn:wc:ra_dav:version-url +V 73 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/TimeBase/TimeBase.idl +END +.cvsignore +K 25 +svn:wc:ra_dav:version-url +V 71 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/TimeBase/.cvsignore +END +build.xml +K 25 +svn:wc:ra_dav:version-url +V 70 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/TimeBase/build.xml +END diff --git a/idl/TimeBase/.svn/dir-prop-base b/idl/TimeBase/.svn/dir-prop-base new file mode 100644 index 0000000..7208e29 --- /dev/null +++ b/idl/TimeBase/.svn/dir-prop-base @@ -0,0 +1,6 @@ +K 10 +svn:ignore +V 12 +.class +.java +END diff --git a/idl/TimeBase/.svn/entries b/idl/TimeBase/.svn/entries new file mode 100644 index 0000000..037e2a7 --- /dev/null +++ b/idl/TimeBase/.svn/entries @@ -0,0 +1,130 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/TimeBase +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2008-02-25T10:57:48.454081Z +212 +caceres +has-props + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TimeBase.idl +file + + + + +2009-02-16T09:48:55.000000Z +c48e1b4849544d429fac34629def8cf7 +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +911 + +.cvsignore +file + + + + +2009-02-16T09:48:55.000000Z +a81562d70b7d74bef8f9f4c7fce04811 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +13 + +build.xml +file + + + + +2009-02-16T09:48:55.000000Z +193aae71fcf06c5fbdd5d05748040472 +2008-02-25T10:57:48.454081Z +212 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2639 + diff --git a/idl/TimeBase/.svn/prop-base/.cvsignore.svn-base b/idl/TimeBase/.svn/prop-base/.cvsignore.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/TimeBase/.svn/prop-base/.cvsignore.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/TimeBase/.svn/prop-base/TimeBase.idl.svn-base b/idl/TimeBase/.svn/prop-base/TimeBase.idl.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/TimeBase/.svn/prop-base/TimeBase.idl.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/TimeBase/.svn/prop-base/build.xml.svn-base b/idl/TimeBase/.svn/prop-base/build.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/TimeBase/.svn/prop-base/build.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/TimeBase/.svn/text-base/.cvsignore.svn-base b/idl/TimeBase/.svn/text-base/.cvsignore.svn-base new file mode 100644 index 0000000..9890ac7 --- /dev/null +++ b/idl/TimeBase/.svn/text-base/.cvsignore.svn-base @@ -0,0 +1,2 @@ +.class +.java diff --git a/idl/TimeBase/.svn/text-base/TimeBase.idl.svn-base b/idl/TimeBase/.svn/text-base/TimeBase.idl.svn-base new file mode 100644 index 0000000..3574c0a --- /dev/null +++ b/idl/TimeBase/.svn/text-base/TimeBase.idl.svn-base @@ -0,0 +1,42 @@ +//File: TimeBase.idl +//Part of the Time Service +// Note: if your IDL compiler does not yet support the +// "long long" data type, compile this module with the +// preprocessor definition "NOLONGLONG". With many +// compilers this would be done with a qualifier on +// the command line, something like -DNOLONGLONG + +#ifndef _TIME_BASE_IDL_ +#define _TIME_BASE_IDL_ + +#pragma prefix "omg.org" + +module TimeBase { + +#ifdef NOLONGLONG + struct ulonglong{ + unsigned long low; + unsigned long high; + }; + typedef ulonglong TimeT; +#else + typedef unsigned long long TimeT; +#endif + + typedef TimeT InaccuracyT; + typedef short TdfT; + struct UtcT { + TimeT time; // 8 octets + unsigned long inacclo; // 4 octets + unsigned short inacchi; // 2 octets + TdfT tdf; // 2 octets + // total 16 octets. + }; + + struct IntervalT { + TimeT lower_bound; + TimeT upper_bound; + }; +}; +#endif /* ifndef _TIME_BASE_IDL_ */ + diff --git a/idl/TimeBase/.svn/text-base/build.xml.svn-base b/idl/TimeBase/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..abb6b26 --- /dev/null +++ b/idl/TimeBase/.svn/text-base/build.xml.svn-base @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/TimeBase/TimeBase.idl b/idl/TimeBase/TimeBase.idl new file mode 100644 index 0000000..3574c0a --- /dev/null +++ b/idl/TimeBase/TimeBase.idl @@ -0,0 +1,42 @@ +//File: TimeBase.idl +//Part of the Time Service +// Note: if your IDL compiler does not yet support the +// "long long" data type, compile this module with the +// preprocessor definition "NOLONGLONG". With many +// compilers this would be done with a qualifier on +// the command line, something like -DNOLONGLONG + +#ifndef _TIME_BASE_IDL_ +#define _TIME_BASE_IDL_ + +#pragma prefix "omg.org" + +module TimeBase { + +#ifdef NOLONGLONG + struct ulonglong{ + unsigned long low; + unsigned long high; + }; + typedef ulonglong TimeT; +#else + typedef unsigned long long TimeT; +#endif + + typedef TimeT InaccuracyT; + typedef short TdfT; + struct UtcT { + TimeT time; // 8 octets + unsigned long inacclo; // 4 octets + unsigned short inacchi; // 2 octets + TdfT tdf; // 2 octets + // total 16 octets. + }; + + struct IntervalT { + TimeT lower_bound; + TimeT upper_bound; + }; +}; +#endif /* ifndef _TIME_BASE_IDL_ */ + diff --git a/idl/TimeBase/build.xml b/idl/TimeBase/build.xml new file mode 100644 index 0000000..4b1e810 --- /dev/null +++ b/idl/TimeBase/build.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/build.xml b/idl/build.xml new file mode 100644 index 0000000..2eafdb3 --- /dev/null +++ b/idl/build.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContext.class b/idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContext.class new file mode 100644 index 0000000000000000000000000000000000000000..57b9374868949fbb63fdc3e3e338ef60e24c318e GIT binary patch literal 324 zcmaKn&q~8U5XQer)2@xFZ7*H~QSi{#!-7|(U{eo)K#D>y9weLx@=J>8Bdcdu4dqa>cZNY{7wp4~n7?8^WC_vhaLK0-sr1$->y7Cw>i zsf-9dlkqvekT54>6!`@0%uD!EY~Ge}9$zKs@wJ47I0`a~Sd@{(9bx%KJid)%NuZVD z_)fxI8D|7~5qg4F%VKp;LRrEJL#)c5wM~X|ddu0+TALeMv3$R=p-E%hb+5eI-FrX6S6PZ&+`4PQmMS66|6dhEgYjxK>5Rfg5X1u7?Krk)SoOH?Ny`JG>J>9z^i=nKm`M}k5~_lU~ITj~=?;QzS z-r@o7@tKUz*PHG|DtI3sNcdjCeOzWxdlx^9!KGHSVLIYuMZ&6rA3%4LGCLZ#8opxa zUKKpVBL!>tk>OOp*qx_!v(2rRtzaELDVTw#;3B3NCVR0x(Ggc$b-rwF)=Y=4tZ8+) zX;<4V%jO*kKPym?6FK~%;1Vt?xPcED&K@Bj1y%gYaHF)S&ylWYM5tjU&fT1uWw_GI zXqc-g!B9{@O~EYc$K}v$wnbg3fSGdbu_?4Y){E-#KrKY_5|_o04RkOpCAV2ZFmxjX z?KNW6)1lBM!?gg@3)q)z;N=3Q{qB3`^wk3mbJ%ejE!#$OOGG=KMoBVtY87r)EzvjC zj@vjQ*`Rkq*$y@s!=)aHE>F5Eo)w`Tv0U=WU(6hA<$iu1e82re`y?b`a*0X#sZx@p z*eWLttRIFPTs1K(#>RRGl(zel9~cs$Oc)l9ys|+OvH^UU1R7Z9hgyqAMtEo748h1g zh)&bj=K_7x7-Z4mv`WyL<_$fk>DL&&8NFlb9@tA-fE=lpeRIk+0?{r;c3f)$S8&z0 zP9TaA+D)qah^*!I5Zy)014-Z-uKR8}y@i{qzQyQsOsQ`$x(i9qy+!0XPUPMo@*44- z7l`WWF61sw?9d5`@|||G&CuC6B2xtkS&=^t9Ur+!ULyOMS5W@J_2^$n-c=*}NUo*d z>*6HaL#oonSQqK^DS|%zI~4L1g)j)z2$)KMG`4)elP(+?(&N2yX*l}EDXK!$k>1Cd vwLP5Gb7~jo{=h`8=R1p=zVEp2n^1GFG10}OM@yXkTntiAXoxXN%QNGD6aO`8 literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContextHolder.class b/idl/comm/.class/org/omg/IIOP/BiDirIIOPServiceContextHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3a32a9117394ca52d39b0ec38ce595a90f6bbc19 GIT binary patch literal 844 zcma)4T}uK%6g{J^o7+}eYGt2R)Ve+_^=brZ4+)Y{(W|UF$ja)ZVjTW3XqmL{{5I(iq7CR#dYMFb2P{FBldPeid7Zj=D zQnOBQ^vfxfZ}R6x$8niiwW(2Tce?DBaab!S7~#r;YcXC%n@K5m*(67*u%`~Eq_oVq zwPBe%?iXF>RLnzF5rHCOTg47`Riv?}Vjpn=-H#xbj$NlNL9}W1Ov5(Y4WnFb(i$U3 zkN8u=4d)Vb`mI6jj;IkD%2t}G!Gvt%q5pYL$&>bKX4(m9{iPjjhR`3!eEnn)%<+#1 zsrhP3{Kl2%c7gxJ1`+Pn-$7ou1B39Q7fvF;51@#!o_#}Lgjqt=!z4URM9=mS`~!($ dc^Z<{UlHgdG|IAqxCas02(J|CLwXi%06!q!&Yu7P literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ListenPoint.class b/idl/comm/.class/org/omg/IIOP/ListenPoint.class new file mode 100644 index 0000000000000000000000000000000000000000..bb39e3cf97ae3cc07602b1ad3287fde9eaea4d87 GIT binary patch literal 332 zcmZXP%}T>S6ot=iYSN!*Yt&ZIh3?w87;viyT3rMJDF(VvHN+`(rlf=5W4S0o7e0Uw zReGmdT(~*IJ?ESI^SxSr0k}lB0T=BW_UqU|VCBHWp@$<69YXa*&kZ4nC)ryjrkN^4 zYD%e!E6!%R literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ListenPointHelper.class b/idl/comm/.class/org/omg/IIOP/ListenPointHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..5ab47aa9970b49253480947b20b19477603488a6 GIT binary patch literal 2281 zcmaJ?TUQ%Z6#foLm}EHEkd|7oU`s8AL8(6a1)jqkFf6296?lYGpOn?XG9QN(od!KLb{PW*m&jGxHhbo5fk&1ClD40|c zz{e_X;S&Y7Rdix1LXv3(Gg3IK;wtV$=yO-Wr(w)Rkj6dfJFlV}nJ^ZlIbRq!1{C@1zRI>V(**(#*Ur9x_E z@&5EwYMG=nxtO4RMPh5Fc4#2ud*>xw5s+&>J7|d6K(yGR&%O35Kz_Pd{bu zO*BO5^x{$~V^oE1E|m>aOh^Pp-xZdYC+E~j&P~8JZ-(xy(DK_0T4h;VFY44!%G9Z_ zzb(_28as>)h6`k|rR`{`qGlFSSz#Gwfl3Klx<=aD{#+_$OGuDZ+N{(Bnd@3<;>_ei z4=h7a@1{=;wOA9)SZ8-BJee=r55sXC!wPa7-(!Sf(0fRKcjn5)4c(H~nu2wXJgBOu zUQG#O!+mvn8x9>ma1^k~aK71%JG*(kB8;-hVPK2nUA)I}4R0{?dw33Us1LQgSkO!B zx<$R)ELVksZH^*J945*Vzd{PxJ&qrxG>#EY6LOQGtAz?27OD(a(zBUy;^nA>@s~7y zV|0wT>t*0qDBWjHBHC=j;`){@iP_^p zIzO5=xUh^lWmWtoZ;)+!&aa_2Krx%Zg#>co!Sb+0ttoAi1j=U5&L@ z?U{IG&`!@XF#5Z8O8nN9#K7$p)2Ui`nl|b+i9s9O6f&`MTwhuvckhD8-gurU@0Kqy! zPLK%R!rQJ{hE8dgNW4VnBMc^9ptBAolYEK5BXlKSAn*j?{ofJHB|fj^INFjf+&LQz2*fUV&7hs^Du<~?S!Mqb z`c@BUxRVt1wWqi&&w-~HOnN@=;{(@c!1d`#B%k1N9k0uCu#PKE6T|rM*h5itgcv32 GsPRAi@b30o4jCFBUifnoPef^6OO zJDS_;XtkQ&(CXGbHJyfQIkZd=JGC5(o)JXV!YzSNb=!=RQ^PqNCN_Q3XcHX$;Hvsn zaW#W#>=*1%}I9E>xFum_O&xLA5cWP({iBEX~rOuSecBKixG#OgexRD3~X2w|eK ShExFIYJ{yM3?V-8Z2;d;6SW5b literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ListenPointListHelper.class b/idl/comm/.class/org/omg/IIOP/ListenPointListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..02ff56c27cff10947cb7472cf1ca03b4560ff8ca GIT binary patch literal 2165 zcma)7-%}e^6#i~Du*q@}2(3~Y5L((M8)bp2wFGE^R!N&SSP-pM;}X`mm~P@`Q``6c z6MgliuT-5hqf@4R>WqJlzB*3rxtq-o77~5gy?f6+-}%mW&pG?YtKaqk%wbo-DCQKL z$9po~S0Ld71sCw4jEf3-F(0O#q>Kfzxv1a-mcsP7BvzLdEMrBuu8PkqAzT$7ABFI- zf;FUMToWg*D@fypSlyJ7k+IIulXV`H42F?((avkdyLoLjb8BT;+oavq;*ODI=v^=^ z(^+DWV(~48pxCBYwrFoN9FN6)p5!i^Osj0z4#RBBXJ57+B=0o$QmM?kmNv_dVXYTU z%Snn5vT@(B^&EN69OWJF;?B^&;pn;VZ|J2>eY;?gUc|MY72Nyb7{j=XTO1phWH{BhPrt%K?6qQH$FPORri@QHw(uFlpi$NwbH^(H zx+ad#ahu}{L3+3)%hmfiqvV)Hi{lQy&ha&}94ZnF18w&! zmK@(eXP8P|NzYToO$(++v7Dcso{_Q5kprne(kUUqfbRKQjy%5O&|v;o_C}#(*pzT9 zr_A=QA?od97quCN8Wie1LX}RnA;f1Gk9F}B_vG^>d1(rBJl;?r2OgT<&;x?XtCU^s7dr=JY|f&Cu;5fuYYGA&ua{SV~mbO2_E!&dH|q zhoZ-~f|K<37^S}vr6*dNR$*GxV4>&R^fg3pM(-Z=DcBQQfDTgId*(sc2n1^g?77x3 zPT{m?J%JzswA-)#4(WE{DS}n>)Iq|S!Wr*an%?4=s=h$)BaExh(OZR_PP~Bh2z`m? zkbXsI?=gaDwF;$%zCH4giRGlr_AL2^AdRocI4AhiH1d!y5&^+}>Syqm7^|UQs^N_) z2CmbxhQY`X0Y-iSC%d3eoj^|sY=U5DlzA`%E(jSS!;K_q271OzbUsL469jc^G5QS0 z)6&vd^d}4^#?%_#+;}Ll$N&D7XyNxG@CsbUG-H30z+swTGalFl0+R?VswVcUcuQK0 rCiV$QO+@Ev7)q7efTgGFGCHk%}RWj0jl~R%NWoSeLQEAoX>t zXE0>1tB%{&oK9P-RBCmtYTj|ft~;j9OAO&7(>D1rLr~3MF@(xai!|%%6p`ShhHL08 zhJE#~c)50ddZKk5m+MW-&?vTYd`R&zWPj43{BstM_%y((SfZYu*|+ zoFVtCo0#`!R5AL0wGFE)YKMLtJn^+-%)u%5LAT*qTlTFrX6=+(!#5yI#{s>r2pFRD zF<~M-K8aRjH^o`nr4gVN5HGxf6@u>wydd~Q2@J704_hWIK)KiuD~>P;%zI4IW1@xP j0HG0N0gIDJvG9!G0MhSCOGtW1g8rhR&;a2_(FX7h=(@zI literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ProfileBody_1_0.class b/idl/comm/.class/org/omg/IIOP/ProfileBody_1_0.class new file mode 100644 index 0000000000000000000000000000000000000000..d76d0aa6f9733f0df7cba196a5aa7f676260f29c GIT binary patch literal 465 zcmZut-%G+^6g^j`^T#Y(rD@uam(UfhdM$!xJqUu5;ENAKbFG=}lQ{(ctR6=A&uKjQH_xo<&sP`18SSLW?ms5~IR>2BZ738r- zsQk*@@x;9|u?#U2P?Ktd}?0g_7%J^{>tTfYDR literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ProfileBody_1_0Helper.class b/idl/comm/.class/org/omg/IIOP/ProfileBody_1_0Helper.class new file mode 100644 index 0000000000000000000000000000000000000000..09d88f6b84fc3bb153fbaa565e7b96b757d6a830 GIT binary patch literal 2994 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 IgRq*!7r&l&{{R30 literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/ProfileBody_1_1Helper.class b/idl/comm/.class/org/omg/IIOP/ProfileBody_1_1Helper.class new file mode 100644 index 0000000000000000000000000000000000000000..37d0156208af1a565b550fc13a6cdf3af55aeb27 GIT binary patch literal 3405 zcmb7G`F9gl6#iZ_?IhEwl+q$gTPbBpliE-UsI*jR0Vx!Vv{q}ukS0TzHqC@&QovoQ zqNuo_BJQGyyJcw_sc_&Y&+$+3c>Dtt(fej53)29HoRfKP?)JX--Fx4g->+S`1Yjkm zC9K9a2@j!1#C8b|JS<@cdPVd}D8VBxlJtvslnWn|unGe%dOR*-(21QAcHs#LW$-(( z+l2szc%YyYA^xH`v4?wv`O99eQJol;Fv5LSA>za+7e<}XM8qU4;y89;pNnR32?^+Y zmgKWBKHJY{2l(tDpFJt!DgN>_kN6Dtd{)A9c%DCA;Exyi;}F-5i+D-I%M8VS{a{RC znAfev!#-^^?Cb2=(XrmwN77C$q_i@Ww5d^5Z)b408~PapE~de+#fKQG+zmEQa_3HJ zG@-e@ji~r_y8wJ#yOVpA&xUh+R(5P)cqq0foesYjE}h8$M}SFL2WdqMU|+Y z5b>#ujo8F6%T`}9KEvk>OS(36ucd--;y?=#v$nZu1w(aaAB9Z#hQE-p6DLJ{DdQ__ zlCc}7WPFX&GD7%9#<%!R#vXhx;|Ki6urM2r3coK94lAL~3}zX__=$)7S;iJjh&UtT zEY8U|k4YIROvy;&7p}W-tDGv480Wb>m#H3uHHO(40A^mOTZvv?Gz@jQIxMtVqc3gl zR2dY~>~+6c`n(kwmgQoZ3uU_`XJrJeup0e3@1-+(w2(V>&{!anq}6I~-Wyc1LF!6f z@vFQ={RyK-Imld_+EC{Aa$YeTy!4xOyV)X{4ul-dv^#!UWbv3`vnPyAP9?}y1`(Cl zC#J7+s~V-_#-)#NycCpSuFc)Fp`)ohtmyt&Tpd+)bxiT=L53Cf1X#xQ9cQ7LOC=L~ zsnr;qw5%4?6`EF9+$EHKNhKOI!?(D*>|ioC#!XhJ%j}UK`?l)O&{>{Y&NwlQy$lv& zcn0T#Hb9h$?2(gq9@{d)&}L^UTWk46klR&$4G{Oaq}UYMQ}@QD#ZbyGm2845W>!+h zB$F7rgnJnn{UyUS8PRxYkhqJXXpp+ulv~LoIf-g>+!SD*Hqm*z9L&rgMQOibl$%^+ zRyP?vP@ky}8)f0W|p+70@cAkAuO{Dae}*-OG`~>i#EaCl_#_~6WkqKxbb#( zQ-G6(exZ)O>{ip4B_)R6j5Kr6obG3OuBErxG%^~CJyT$3XaX{%d(Bdp8%jV(qiDj= zy08xImUcb_6p^&dGY!XpcM3uZ#byu}?#Ba`SvQT`%;UL&k`t))Tt-O>Vz>7S94Aof zy$r{BI44d+==P)_rBOOT9wKT`XP{kAzD_u5J4AGF{B&Dekxv8y zfvH@W5z}iL)fF`az4jbrLc)n+;HZni{=pFfNuL51qW+M07FsH!A-n{%D*_ z=(k|21@I67bP&LRhXU27(Zt84DfsxfJcSi}Y`By{vtwPgF(qV%thyzImE%RUFvfoh@qy80zk6f@%9EIs@WAq9iCy9`CZD1WJq1x zPF=NIb+ufsRMo0uKQ=70Xd8VkujLC2!P7>&;hr)0EHdEAwhYr@h&1({u3CD#u2yPI^T8zx#=M!K zM)UCb{?j(C4%ZHhY`T~`^OQ}KA?Mte;8}P%S8mF}#d54qH6r5*_(KPj|-t=H^n#)4ZrC@9i0U^ah?rR&u2Hlmo6#BC~h|oiSK!23< zEw-1Ld2a@0elB0%03I+3;iKC@6Fmq00D}O-0Cxm`Co5AEC~;b8r(2IoEBi$7X7ilT zT$=ZS-C2^%^9UhsA_Qnh=%7s)nYt8aSBf;vUPWHi2W2#&U&#+Cwo;cO+f>DyB~1U5 z%WR!2#NO0aZnlL;pI0y1D*K6h9_NDxpuxx;yq;VQv-@y0W5m~hnV9|f3_7xK!4S89 V_L$=y|9Z}j$0s!6$qC*yh+p9xEph+= literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IIOP/VersionHelper.class b/idl/comm/.class/org/omg/IIOP/VersionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..71958cfbc729bbebe51ee3befa274929ff91c630 GIT binary patch literal 2120 zcmaJ?ZCBf57``6bk~XBSbZi0x<~D~VophV;6j3NBg<|JG6j5tvA8VjZY8r6+Dfr2+(k3m%56zR_FW3EcJ$L^8_xC>m+=ngWI^LD>9^RMmfs7F5 zWMnZf;X@gNScsA2BMBc1;i8NwEXC-Nldv4cN(`UiQ{lTRBaVC&Yr6F)E^bj)yUN+Z2y28DC&q!j}@hVu+ON#|_RfS}?6@#;jK}x#Gj6#mp8-b7qBS z83yNdL$?vEF7ZdUrIpDs-Otev*5%0%-?X*z!G_k@()Mbc8b=wrm5ravFi_ioUSSv^i+$}# z%hWWZn%T51-KbItVT)^|o$t+~VOq8blF1v5Lz~RGR?l9TSmb9*x2azX7s3<|Z6D|2 z&P3xL`+C&02+9!g5!_HwwPRcMJ*M%-DLxn=s8mK?&b0 z&_IK{>~~=0QJFVvnuvljDhlr5zJk|qBM{3a3DtgBwl{cvk6T2gy0&jx61ajNP*w0F zbdkWm(CCIq+1$pof(-7`n7x@RI6#eIBEMXiBl69PT7q@V-J2!rk$xpgs4FmFDp)~7 z!5SJ8eo|ne8OSq;waRM^k!QlMw79p=1=oh#0o=NX!Zd!-Y=$v^Zb2}ItUYejQG#-b zUvhaNc)~F4W4Hl26!NVcz@*3iF7Mmt2;9$|x_qS74k_Bz{v4tamx-!2FX@7}rKUq% zk(|%np6r4I4@|+e+RCl#2HlUSeNZyXHm6?sk%K05l@e8Mml~E{*KPfXm+Ugb-QJ$K zc!7)LVfc$^Id%S;c53ah?vWF}#I1LlobcK}4IuV9$?Wz+_Gv;>5-VZ12b9De`u|_v zH@n%@nO>m146@iZ?MBk3B?dD3-MYXxxHK4soF&ut4yTr8w!=5*YjB;uH3Tg#FTKU+ zomK}uU#EY=bTT?4>IvAd^a3)Z8|tYOjuHr;V&K@(#_$GGo^}jj43IRgo*}f8K0&yJ zhzk6ZvS!BF}ILeCLB{srNJ+JbzFp=0upFiH7} zY}4c$MQCbC!X1(So0#>GHL?=fuRVqG7jlt55MNhAXNd14U!jbj;!+C zV62cP)bZbN%{wR3ZJ)RBw&yeH`3$S+=eX9wq&O$&bekB(J6(e!bVL{>>ZH2Ast5y85x_{;vvgJPQtc?9SOS(;=r)`CPU`R z@!FcxZEN+qeyuf3@6mF4WrkSA>REo3A*vP{3_{Im5uQ~S^BfVIo@ulgPX3shesgiI zxsK->_qM6kdv4#q^$F{ic}J}IEA*Ef zRVZ8h0DGkbM&;F@oI!*hK<4FQ=^c>?vxY>#qyr{iEDaI;ha|B+kCcjUhzuc2R5p+b Q5U$2(C1D8hg>M7+1?+RHeE0RTCH85jTn literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ChainBypassCheck.class b/idl/comm/.class/org/omg/IOP/ChainBypassCheck.class new file mode 100644 index 0000000000000000000000000000000000000000..1629170d8295a2c2ce9f96700ae718f91c0b262f GIT binary patch literal 129 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gOH(VsWu^Mrv|4BZELzVp*boPGVlVzJF3yYH|r1&@2Wf Xpk77>Nd{&H79hOH(VsWu&URpjQgFsedS)zVUVqUtwe^ORzatRyIC)1_e~Kq4RnMgn7j31RMomHujFrj9c8XQL0SqYo`%R`H!>&CW_yR7OX_>R+uI z6F8RM-3W_sl&aHqBXh60&RjI%!rBm)zq;`ua#0(Z?ee{gWo#1yp@)9Q0K@Kgw-3|# BHBJBk literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecFactoryHelper.class b/idl/comm/.class/org/omg/IOP/CodecFactoryHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..632c3cbe13a4954ee08b1602ff00e82bb0bba502 GIT binary patch literal 1889 zcmaJ>Yg5xu5IwiAv>`|-uZmB6mJ~=SJ}Dvvd{n_AAdY^?gb-`Bq@5U4ev1AI)S1fY zjLH|8@kcrCZIeDNUvBQ*-E;Qry}SAI_uCHuNjw!Xh=hnqBtsa$lt{}JzFZCB8aH1L z;s!t86funyUuO96mWWy0=DRroX#w*h!bk{M5V43m0`3a9C*VGVU$u8j219hIXyugR zc1~HyuFj{Gb+RrLw~Q1+U?y+o?O6tIY;=Rc$IbLni`FK?Ky0)HNpJ%Bsg>p8OU=KOtUeZ#AW$nK@<6w(@3cI2-$eMyP zdZE%B5{_e7Kt{p?oRTnvsDzVzH-d8vQsa|Ic!(v2vzf)EY3jEL-gm7RKRr2-kZ>Aj z1T0HzJQhS=l`(zkuid5#)i|R^xHNDI*((I|@ zD_5D>E)@i4} z6LjjOFQczt{tEVqHlRT2XvZC{I04^2JbM*yh_|cb9f!AKi++ap5WV|6%pVDqA$)F(*sd2)s;?QGrB{1ypWaah>y~&&r1t2wDWg^cTZ}%P?-6Ts=yCySVK&a>n0uDzla>@L zLs1ZgEFr5Phdl*(>?=4xf*>0t{K~PLmPZilm;+O{&0b44>K&^=3G&mP1wj)nT-$%V zmhEz0VPemDpw>BiX5#+1AJMn197r{1TQJr5cDbK8X3s_f!4lhqTgRT1$iA49EUvJ> z__)Hd+8f9-OJH1H^~))Q*aBo;){3tPO)+bT`Iw}SiE70W!oMJKtS>@}+6zJ>2ve2~ SBzy>GBkUw$1o4TF0el0}3belf literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecFactoryLocalBase.class b/idl/comm/.class/org/omg/IOP/CodecFactoryLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..b790653512065e3696b46e7e9f844520264310ce GIT binary patch literal 432 zcmZutO-sW-5Ph4ErcGn5X{&7&v9~0LMm@G7*osgHL@Ws6p~N(Vl$b~wg#If9KR{4C z`=i8(wIJ1HcV~9qd$Tk1@%i!wU>{pD@>r9g=20m?LRCf$>k^6*HYC&~G#Cn_bavy7 zg7K80a%oMRTgMEY$Tx>+5=4HNA$Jf&L3+r*Yx+5Z(2vI+nYpB<>HmlnC|F@AFK1)e z85~=k_}XvBiEj?^V~^rLo}j z?X%vI`Hk3D6VFW<>I-c7F9y*KmU+6<#EdT%j literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecFactoryLocalTie.class b/idl/comm/.class/org/omg/IOP/CodecFactoryLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..95201fff5bb9b6e851bf429b8221146d6ffb9b69 GIT binary patch literal 576 zcma)3$w~u36s$K{CYg*&ToSz*5wpx;z-z>V5^wlt8| z10nc*QAcw>)=~QpHTLIqZls!gx^+?UQ9#v49*A4rp%GJmuo%1xtoo70ZgGdL*@0oRUFK@i%-Sz-*KttO=gKVHqj2k@c9v>@oq7|L1+r?%4Wl_bn2Yg=n>kD9O2j3>tDxzX|TCtfsgOo)=JRF%uE zIWY_f+-+O?FwN4E9@U7UpeG|pF$w~uQ0Q^l9hOa-S+?!#XZ4~{&=2TG zMYEteVIrXWqb?fdV0Y7>FP~ zBIuQBkC19gj}!8h^K0kcVFO3_>@to5;n%A@1M4<6P_$toLn!>FH12|d$D;&Zuu;M$ zfwpaIp-5md@|nEx*;%{8k|FMiNsxS@j2^?zK{>1C0yyLafH%T(QIEdj#>AX zN3BPfhjAbU;b4mX^Sx6(2zf-%0*{cZRA>FEESxapLgBlA*`HBN?A8fpEWbm-9!wQ^ zvNTYVgQ~Xba^oH_YcHS?wC6D=VPqzZn)($@-Ii-_(62^FDdG@w*|aJ%}LeexXtD3A9|Qqrd59JVic(|h0h+~>XTb8q_Ze}BCI@G*1|=W#{ERa_Hr zT|@|RkHVi;=zz7{dcvlOr{;2QxO43Uz(Th|yy^QKjm&7G>eRM=R|%3EYzGAmk!A-bR& zx_yHol$^fH5awoDN~Tq27*0+HA}O2)=|)4dY=&FOfIn;OW{yp{!n(}y)D=awO>1{u zQ6DN*O}=A1G|b1wvZ0z4-Kb`GVnKUiTeOW~<#m`okJExO^ljRda80RiDdn0*^`&#U z^%(0qS6fAT^a{fe?RcO(QskOqROL}b9a~Uq&ZSFu9}@yLC2V1e;aW>1r!4WRS*vIk2e~8Qu7rE| zmSI3^$hKbbghq0ZP{e%++xU**j9=2_C#qJrb<>dWJ${fd16jg*7-tx3(Qvg&#cZnf znzmEsxh`Nz!biBw&>v8dgc5#an9beH&y&(;I7;v!LFLWQ&CCi=B$RPkfGVK^s{L>$ zfwk<$=4v+2a5iT=Qfhi-!qVzyL+6T~&?_^%06#Ivt*Btq6I3stD&c1y`NnnEYIV(` zQv1~`lpkokcLrM|+}csMl4ki`GhFo*bxMX#Uj`8ALMe;e{v}uET=xu@e0VqaaZC8S z9KeLv=pE4)yBhL!;WW_b0-BUP*t?9Ng;X2z!(S^?IJg!L_GlpJ1llXaPM0JRQ3h$Vr+AmF|*5Kp3 zjhZW&%=G<$-HmdtYU+ga?IVamaz>U%AUsJQtMl~LV-R^e(_5V0Y0l7dl70=+%4m(G z4#0k=7tluPYR^63IDzmXdiES|93SAK=RJooddS+BIzp(JK0tUM5f>zmOZd>+mZz0( zOQl{R`V`}-mx%5|$fsW+^c216mk9ld*xqjl=TrL-57E0v5d!g@bl4^-HippnqJU}6 zKZUf1e1!;b_T$eW{ezLvbM)Ol#5;%RPYe*$;2)64!-+F+ln~e$0notm0Q#M9awHP1 zY#M*l+EZ-6!+!icTw#{bXRNqztT literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.class b/idl/comm/.class/org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..23bc086dba1ed8c5b8e1f6ec3e85dc5aa4036349 GIT binary patch literal 910 zcmbVK+e*Vg5ItL)#>S|vckBHErtL#e^r<4KC<;QwD?XJq4Ivt{A#5xDm4agN!4L4G z#N9SkTPRowS(2G^=IorAkI%Pv0Bcy*pkg$M1jaOsV?rL2^2n%|QZcP!hCr!OuVNFd z9F-I<|T4-}>y{-}5b2c73Nnkl1v6mv0gD7}*Pg zxMUHm8(o)@Y^4<1v`nz_L*Ff)>};C>3pu^^Z1d0$D*TiS*j+&~5~cgls8sg0=!x)JmvKkRe@fwszc@5wT9Z~A_ literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecHelper.class b/idl/comm/.class/org/omg/IOP/CodecHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..cc25114377b471c61cee833f52aa1f9a982180ad GIT binary patch literal 1819 zcmZ`(+fvg|6kVscv>`|-parjhN}D19yh0Hzpi%{kfH?Y+2_a&&q@5VNe2RVr>P%sD zM&(6j{3yqLnl!!9my?sd_gZIVpSAP%-}j#YCh<(fNsNn_z+?n{xGK_ejW5^3xWU6W z!??xYr$kI6&6gSedRxRS?(p4R0T}^vBBB@O_XOM*@Ib&KLr}FpmJEjYQqkI0 ziaXoNd~S6vqpVYOzPM$i8A3C8GjGo__!G$uh5!%KLoHgH41I}Y6O!Nr3OKX_E$KSq z&NW-p-z;mTb#1dil)n5HLoXp-Ywt9rpqbmsnr-FHZ7w2jzBMeHA(?18FJpd8d!cM@ zMdAANG?ywEA8bq036(ewRa0Jrk#ft>NXJw&qExhOu2adHrCpnZ8QMW zrQ34kcI_HT8}%Vmv#jEKhEy|6Zu7OF+ieby?wa~5Lw{pzsa1l}HUuw@mmi+d3zaLE z(2oHDSqTquR>CR7C7j{AK@5>~Dvg%#2ulq8*@dNPvd%S)O16& zb%xnQtFK!lwHs-fLr=1kA>T7}I%A<$RZX<_*dGg5d53Y)P4-c}k5Cagb%012q9ZJVOStTo#OcWom*g@!mZ(fx9<36M zAmI`DXvc}l=p=C`swGLtZpkd2#Lr5|hv@o@jvt6V-$(ba)E~rBhltgMkim0A_#rT9cmEM?K?&eWJF8%a!R)VL*uHUv^=(+n8@N)wI5g&*KY z8E2p%AY?K(?Y-xox#!G$|9pM{IK`0+37I%z$jZoJgNIEX@)EWrY)jZ75PO!}bqG>7 zUeM6Jc0;e2w|d#Low`8~J8yQH^nxI&79R-&o+rqvbHKbVRs+Yf36B2&W%KUpQun=p zS~b_vD;>W}?@i3nSYn%Sd)Pw}*%xz*#TE9K98_3V z`v7@m2@J}sVL6KkTY${VTIn5;5oQgE5R(Zpajn!xbOMsZ`YfcRy&=+vFk(p|9YQ!8 NVJ8WFh%bB$;1}ZOqlEwf literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecLocalBase.class b/idl/comm/.class/org/omg/IOP/CodecLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..753b0b57007750c48a35d90ca74bc6a57eff1dcb GIT binary patch literal 411 zcmZutO-sW-5Ph4ECQV~)(^gFs!CR6;qaIrkY`qi$5etHNC@~EoB_`4a!GERT2MCI1 zf0Q_}Rz+NPcV_3kH#;+L?@uoPcCn#AMqPp?qfv&0rh*n$Bvd4RGVBWK_pIYqXhv(w&Ip%jHxR2W!iFbV<@e@Jc?_({*7(dYUC?0d((1LqU* z&L?4zGt?K@cXkFbNV1f4P1E|-;at%bwrDgmXcTm~q6!)wM?UpHca>h75Xl2H`w`3* lp23~+8b7>;a7$4Twv5^r*C1PPtM(m)2Z*mI(Y~Pwtq;zQRgeGx literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecLocalTie.class b/idl/comm/.class/org/omg/IOP/CodecLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..94e677a5d0e1fb7d3ea844c0189105cb31a5d851 GIT binary patch literal 885 zcmaKqT}uK%6o%hf%}t%YOS3Pv&sBqkZjGRof}k)Wy75Amb=a14SJWc^RY4JT(GTcH zMQ3ztLo;O0&g^;Km)A4%@%i=+U=Lah<5-G9#c~`gSe0c>mb5Gx6^rX0Ibg_W|B|^YhOm?~q_y0?D47b^ z>Y>TNv{b$@4)sH~Tg+7qhS<@)C7QhyDmF+$!F)-@2>b(;icJRIH?H29^;=59`=aly zu2qbmWPRmjw<%=m;@_5A9C2)OL=jW5!!diwC>&CQ&e&W&}aB4E#vDZ41!*X1kVP~X*u!h+=bJ|p`Ylf|nq%;kEnwC(GTFg RFuSjagnp%o5Ve35@C7^(yqN$1 literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecOperations.class b/idl/comm/.class/org/omg/IOP/CodecOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..abf932c2a6c563c701ea5b85cc9582b8c5036f4c GIT binary patch literal 457 zcmZ{gK~KU!5QX1p?Fv>!J$UeJgwrNoIZ=WMiKfJO>%pwsO)bK1Q!0_a=D{Dpk0MUR zCPv`0n|XQPo0nOxKED9m;zHm=;FRDSt6gFUm+gC3q|!}O*^eH>p6uC0w-bki=HNq{ zyv&@P3A7kVOpU~0XA328MhMoy&vP|-=lEa^)uU|3;Xm?ek()kO>28laCtTG9htWt@ zRvqQ0P(RHGt+ARbIZ-y1(aYHAk{~yLkvpqlviSrIt=qcm7)Zg`Fm{Ca%OYTy|71{iB| AcK`qY literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatch.class b/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatch.class new file mode 100644 index 0000000000000000000000000000000000000000..071a249288155ad28ed5f744edff1819bcc26e5a GIT binary patch literal 471 zcmaix-%0{O6vn@^n!9ale@wHqq`TCRp>B;Jr6?$rBB9G+9kwamUDhpnt!^|5dVn4( znlbGng9he1oH@TU!*}N6^YtCTK1wzgv1DT&%O+NAB#_avY9Xs*&cvFDJRx-;eHkAT z66H#VkZcBBLCBTQ@AxBUJ??w#DvqS@)hitn>kc+ha9|@%$p1zf53<)4kuEPdC}NX9 z+YYu+AnXK@$AZ4c&RT7zA935B5$k1uv~Q)3 u%Ch4eu&OVh5sc?Cqlxr{sH$Hu)M=^uhQ!SXNd*oumq{tvReK2Yrw?Cpb8O52 literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHelper.class b/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..76ac34b471006c5c60d577df9c0d130a93e0121a GIT binary patch literal 2138 zcmb7GZC4Xl5PmLs*<@K10tiy2AXP&mtk%}Hgkl3~Nlh9AYKyc@H=EnIHe}PyM&+m2 zKhUq#_5eqYZ=XEJALViG?&cj2<;&g8%$;YRJNKE{ynXlV1%OXs$T)+mGCsrS60XVc z;R_jG;wuSrGJ;5i$uckDYhhfF@e!_vY57J%Qv6sH%Tfq81i;M@Zpru-%Q8~lnr}< z!55vr%itGgdgM$i&oCUF?uevt5oDCB+_D+2M?3t<@^+$ON@Z76fv2x%`X5@6tG7&R zOS3aZl~(>ajGYs!#)34*Ew1$&|?%B zhG@qF?V+ZYv~p2hvn``sq=Wh`u8}v}Nv&d9wn(C;%9WZ;+qt%tI1bmqBg?R<(04wF zoUPeS=wp>MG_RMOOI7eOCM2vWSjQB@OkD&=lyccD6}TmWe~@rj!H@Wfp`TY(+bDPf zqH9*LfqM!z@iW6%3wcW?8{6_*KCyR0U@-&M;O_?`n{WR@3ba-^zAJ?%x?M)}tE94i~Y6qJsM(;(wQymnz(%iZ+Xu%|GCx z1qSL#-4ao=kp#t6GF)m3ui}M=i0BYQHvI4483Bci1W~dX%hhz+%X0DpEa#i71Otcnk$jS^t}$d z8|7Tl)CbbHP7(&inLHi=|0I1|&d^7SK^9#~Z((|;u|ex3{TiSrqh}zt2lfxWfHqRI zdhUM53HbNXv*UQf_yp%Y?`inaL)O070elb)N?feaYI<^aWAH6#iAraq6hi#N%L-36+N|+Y>V~BgmSBZdN zKmHWT8;tm#qwn@UPVD1kq@SP${)IvwL7XNGtv;|Z0-!nM0i1Ng$q|Xvk4FQ|b6%tU zg7+jr4HD)qhW%1ebBe!x$n2ff0&10Ap@-LiDGh O^#*7I0*u(YZoCK16DO4b literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHolder.class b/idl/comm/.class/org/omg/IOP/CodecPackage/FormatMismatchHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f0650cfa6e6adad7fa0a679921539de240931626 GIT binary patch literal 862 zcmb7CYfA!A5It92H*G7ew6doa(^gluYtg?dD3U((1Nu?X zTwO5*!B}?Ky>rf)J7?zm=kp7|0k(rs5edMLXb=lnlwnDRn2Kc;D=JnQlt*s0OorsS z?NoHTUeR+#UeDTPvy|thdtNd1Q`@O?aZ!DsSh~wF_z$a%syJfsCX%-dK8a@7O^hue zSxUh%d6{9SPs)6l`$EJoY%roqbY0H^yl}(2sRO63aw|JwX8^xMg z5)AR4#87|T)?};yC}UbpS;p5j&lu^%fO%sNhQ{K0d^u8iz~ix%JBuP`fqhy?6$}&f zGHE+4t3qEi1&UMj7w%-}H1z@YN(bnqr`>cE9(sVFOsCTC@boY<2)USuiwUICZFv7c f!k8U~q*HJ3wBhTi%wgVzNHs>4d~GN%@*2P|APv^# literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.class b/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncoding.class new file mode 100644 index 0000000000000000000000000000000000000000..5d1ba5ba10cc1267217cae98bafceb0d5c3e9e4a GIT binary patch literal 487 zcma)3T}uK%6g_t}ciYxJOtZA4M>S$7=*b9DjD$exL+EkY9hR+acG)(mpVf;-K|i1$ z70sCTkUcaocer!Tnaerz@%j1=U>_9|i&!!-k7XSzCQ`_$vT7i&&Vr6L9YsRs&=-Dk zL`YR@eL}hwx|~p`p5533n+3M;*hLci!fVv}I@T?0pk%>BmQegnX+HRY%VPyESSVwY zK-(6!P$IA}_E>o5u}-(g)DWje^0rccL+W~jv?LBOm&?eqBli&cj}Bkw Cv~vsq literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.class b/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2bc9fad1666aefca7f1993457b908f9660a1da7e GIT binary patch literal 2226 zcmbVOZC4vr5PmLs*<@KPq);eUgksx}SQhMyO0YIiDA>>-U~7sRH=AqR8nSV-spY5C zKj2raJ;0Hpwx2x5ALViG?k1ZT@X&tQyP3K3%yZ{HGn;?@{ryh>AHa}t0oP<)#|;TL zWd!h{jF0fKggF^uq@rY*m+*-&-jeY)K8@1jwuH3!u^=9c5!?{~OA#!~xQi7TtN2X9 zy$CWghOj2#zKju(C5v?lpG(+a2<7eFDrXqUm{v(OcS`DFc4Hx}Zjp7-EbMsMNS+Gu(}L_|ui$RMWJYT~`I3zOLy%XeF+$ zR-R~OqbSlZo7PfAH;YE4loE+0{?xWKoiLY=!}NKa7L=iH)26&@T6Ie+lsVOx&gIr) zwCh|g73ndG41=`evGzn$%UY$RZrYaMN%0of$osI9V%4;4k%UfIt=qJnYdfho;T-zO zGHkkl+=&^ob=yzzMx~C->t*NC6}*da37ZPGFv)PEA(B&;c*QIixg|ipknljkLww25 z&ugk}6g{Dl92Dg6NWnI~VmRxUbm^(itF~cQ6nu?u6ih=^@D9cpMjJF-tx_@Ty1mAC z3L@7W2TGZh?2DK5@O#1)gmrzphy@-76^7C?)TU2qssM*3} zE?Q`yLBcH|H7!Y3TsgyaUs$JP=(J}CBHb%xai>7umAjBX!(|`d&E4z_f0qLo^ZLCl z`chY49v4n?jmAiwvdzA>{z-#6HK)zEzB5t#b^@ep-I&y3M#x~3iBW9TDc~sdJ8pIGO4LY z9dUg6JV@U*ZUXT=D?HeS}<)C@$lQw=F}f*p^7VLiicR z5-$(@*n)&9!9RhdhkT6) z2=-&oq5O^Ez#r(lcZjzRaVFMJPy@d~A&(%=AW#BeqXa;6%L6#$gp(r{YaEXTpy#|v z`vva_f;vl>`xyKgeMcC|#m*gI_^%_3cObKQ%>tPHMg20F*9Dq@`IuZIa P(s~250U<_gT{r#%S`kV0 literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.class b/idl/comm/.class/org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b35580eefac21ff5ade9a0c7b4964b0d8125e616 GIT binary patch literal 910 zcmbVK?@Pi^6g^L!%e6{Nt?Z{2r1Qft>XQ+a6bXS+QS?cs8)G)NF{aUfRZt{-=nv?R zir&*{DF_*3kL}%a?z#8e`}y_$0bmb10(c}M2qP(A5lie?W=D$03XfGDYXn?dF37`sa%nZwyM=DO8s8ZHMwL_jGrYDs}HW>QN_$yO1b3? zbGWKU+aO3~vV$snGORt;KtaSbL=h1PJk~{QU{gdITOzg*CpehUrgPg=HJ2dTP}+)Y zDwZynYYnaL5v2R6M*8fv$Xfn~oMt*qF4QygcC0f)W)7_Q`|LU2`@69UL*7rU&|N4t zE9B_{^B|a_FJWV$%gxa*Iwg9}(7#wWLT{xvkY{>$J+U%?Z+Rl=r2qf` literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatch.class b/idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatch.class new file mode 100644 index 0000000000000000000000000000000000000000..3b7552789d1fbc01ba5ef6a58982cbf7df966052 GIT binary patch literal 467 zcmaKpT}uK%6o%ikn!9alAEte1NjHHX#89_JkP;LWN*_X(!#ZqJy1T4f)X(Zhqo5zq zkBVkYyU1u@&f(1aoEhFTAD^%90QOL{F^>fsvsg5-WFvu$4$Bs@I_FHRm{=vG_N6c5 z145!yZWEG?pd$#m(&;UK;H=Aik6px(^u1cSZDP&AI`R%|qzS9Pk@~&tc0{D*IR^!7 z5NON6Ch~;sAo5ty^VmtV#q=X?i@SH+6YTOS6lb#E&qE!lcXzFnWq_|OJ>b< zZZU+C^Y<9SLQF@|vP%qO$@v~nau-f!t-)=F;byW&pQ-Jp+oEh?O%r&=nr{54SGXHD zZ#H&x$9Rwy;Uxapv2}xxmX1RTqMr=KFtp)NjJ#go)Js)PwWK?Ecc1LLL&xn0%re6$ zSv=Gq=~`8pSVwXBzq0HXSN);gz_B zrV{}Fk7CA_jH=sA1#efR31q;v=yn!i($yRWWc~q{Z;pF*FNyNH{Sp{$7 z3WFk=(xQffBEDz1l)ar>B+@Pjh<5H>BwD<-a8-h?poA+D3RXtC<|b zxoqu`UNy_pHm_R^)3NN`X|uc_?)(G8T+6E+>Nwg;s3>?K>`z%%UafPRDj5{3PPr99h7r65l2aAruu$}Cm>3+#} zJIQ`}cFeS=?ARL@yIa?;L`P-}gJOY*`_Mk=A^?@!6-D_^O}*L>d$uDrj~?my`#o~c z%Wcr?E5dhf4w@-<)A$L5XXq<(fj&nJvY1SIi_<$T3VP1auMs*Koe}i_>^FJ=8Pb6I z>S0$2gby*W=W6443v<5qJi-_t>5zJa&{paI;eA9rkT@>kvTv57Q<$mhOGKYwN_~Oo zKBQdgB|=Xyn0kTGABgS!if~TdhkS^^J@Sw!-x)XCB>Bb=np&1HFY;HB@{zAo0wVjV zr%?XJc<331?jGW`L!3zr6V%A>P)H*ZXAmeMut@@--QxqCaotIgNVKj;OUzf^AbXMb z3_+bG%zcdhf}tafZ6(efVEnHmOl%$Cd@j`$V4MP6#Wf#eln?|)OmzV!z3Rm1??Gn= M$N&*W*?MaH2Tt1_@&Et; literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatchHolder.class b/idl/comm/.class/org/omg/IOP/CodecPackage/TypeMismatchHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..5bda8fca881f0d0e5cb7b581a0cacba0f980191c GIT binary patch literal 850 zcma)4O;5r=5Pb`j3RVRLRQyCugmP%~iZM|xl1NI_cqI#L5G=H*3&ww?iALhVAK;HN z?m|H!A(Ez(cIVA|GjHeX`{NV9F%H5|5f34VL>Q}BlVM$kq>2p{n<};llrFV8jNtIn zcI$@Ssv8BfWaRA{tCnc>p4ORh^W?B%yuuepG=a=esmjL=%lBXm>oV|qm;SmoFJLb zjCvc$$cbdzISupBG=vaVv8`bTyBbp1)3A>iL3SofE^MpDT!KiGcBx^}cHJ;5O;+Uu zsUg9{bc4aqV literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ComponentIdHelper.class b/idl/comm/.class/org/omg/IOP/ComponentIdHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..61b859b7cd891496064d527f27ca7d62cdc139bc GIT binary patch literal 1727 zcmaJ>ZBrXn6n-vw*<@J+LR;F>f)v{(LD{yxRf1JWt3*;$3!?RHU6P&5wqZB3T(JEq z{RMvEgH|VHbjE2vIpdFVeC}pbk_G&7@9sU%Irll|Jm>!N?;n2wxPdJllUUGU;+lr* zIuf{{<88d7;aweRyqD$4`x>Lj@!7S z;}d+UVO2v#AZ5uXZAaj2)eoAczuh#;wfif}<_1s8e#0pVq?cUJmA3>E`NF0^QXO-% z{9sGqbiNStq`Pu*y&Wfz0+aceec5|bs;EGk^H>IUotQJnVG3k7vM%lVqq}x{!`^B+ zOqcg|`JO*=Zy)0!w;^zfh==x`ZMJN$X|Bt_^_nD>3>=%*tMMz_ejwE)X2omoO2Qp` zyQDazehOU4gbOEn)OO{eOPE?_son~UX5c)gG<;@Y4bv>fV38}HT=iQGCs44ehPwtn zM@?YN*)gTth+4sd8Mucp4BW@Mz{FuvcOKWBwsd{Zzy`iFP(abZS)9|bY2Yh-ZQudE zF>n#n2CgD6FkJSx+rH;`veGc{Exr?&sobtEvhNFuTBUZ+?1L;`U!eNFH}C^24L=&N zQ5Cq@OCp9|by{sFAp1jtwXKJaYVdf^r7JEz|rbJe9mm*XlTpsNAw<<2LCC7wIMuYa&8-f$4Rp2=ChY?FK` z8BZymUs-;0*tlNc-#B-{Jym=T@hd+-AO|5bkA+4cd4Qo`LTeT?cs;V7LlQ$g9Vz~a z#Dl5lNOq9w2FYR;mm*k|yMh&qFOhzV>Ea8dJJ720FOhhP;rSOx{Ep22&q!8_9q0!b z-lvB~8nYqWIr?Uhm|oHFhT?x2SE9%_NkFlmdj{igTp-D380p}(wF8VEU@SMzc)8zT z(5%?Af?N|2GmOGPkD`o*F=)t5^m6125g8}AEAkpcom!gO=cnQ@k2fPgj%Ec&7pFQn T-OWCOw+1S#d{Tl$x@PIG^yt7MCJdooU0MsUsl~|UjpOcuEuJ50em6}|_1~iU= W39MU^fti5?$YTZam>AeVMgjm#3maqr literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/Encoding.class b/idl/comm/.class/org/omg/IOP/Encoding.class new file mode 100644 index 0000000000000000000000000000000000000000..abc3c0b7859dc48638a3636e7d4dca13b5736a76 GIT binary patch literal 333 zcmYjMO-sW-6r9(jiER^YHGY5!_15OH;8_GydngDI3%$y=jbTH(D=`%OSssGm!5`p{ z65sj(US@XZ&D)v%_ON- F@dX$GIVk`D literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/EncodingFormatHelper.class b/idl/comm/.class/org/omg/IOP/EncodingFormatHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c03d5676e3eb89bde23290d117f4ba955ccbb520 GIT binary patch literal 1738 zcmaJ>TT>HB6#klACK(!mpdz9u;3WyWjQ0z{3m^&-H?Cn(SJ!b!rs8OrNlhBmpW-j@ zg$HjHDXp^f$tr)8<>{G;Bm?YA_sluxJN=#0-{~JeKYamk3d<_`F|IRIwKmNm_DAOyZJ6U6!^ha=Dtol(bAIFr(rcW>s9r4Fz)w z<{4tTcv&+U_T?S7qB$!SZKiN%dP-X)>x@%2a}4oG%eKU2hDbWI#1NHc+H}WVX4sR? zgpdT6Aj__su3+d-hx}9a%Un?=Qp^{^HA)n-ce|KOk)f+7jMB4PMs3kpu9{RXo$K@6 zzvbK(#vN9fVK+rQHP#HRYSc+qG3e;ij>YlN@5t zT}x2GnH>>@Rj~>2N=rRtX*=-)QanlyJ85A2YARZGJh>UL6<)+`OOz@Ywb}JC&x*J|8YEmuHZ3;fjqx>Uv{)57voQ{HuN6XolS)IxV6dqrE?YhEaViYJsWC*8jnc~1<-cD#_y zsGJm9DiB&5`sfw`{Z>E=oUVV(sIJm!Og6qmst~4bNr~unPa~2?cm#fDYSj`cvc2@h znFY%xDJH}-y)KnNgAke(KZI11*mQnYT zETy;3$TpS`@#fp`KSzzUL$>P(gDPjSSv$Qh)Z)<{aIG`O(CN*jkBkn}BiB!lCgqdT zr>`V^)7;T|fc|=EXSBz%AHm+z2PlvxB5?P3P9VC0jyIk+i9?RN1R_Jz3XVwrM{z93e1Ql^_M`8>zvBRre21sK0A5dU3y?6NKml1HPBCYqQcq+-&ySX*DMMl4CNw$!v_g$-E+mMn{pKGNqu zk-wl{ZJMB`p7tc4dQShPp3~F0y9+Fc{lLAKxifQrGxM9-zyJOHPXIUYvxF;1NSMNV z0;VN+@VTo@FlW*xhFsou)*NVntK(M;e1jz z3UR$uh|i_&%+ADDNjj(J)dYioN-JyTG=nEHw#MM)V%oC0LH1`OV;z=c&W*HkRW(e8 zYmtuonetwuDOyV1iZ7INdR{9R65P9>?wW>@Bg0rX!`5SMmJGqPspPg+l*+2IQB*0P zgwT#`;21(zY&}|@;S6bPD%(oDsFVxwv}tfKWN)Yn-A;AlsOW~tABiuOD>akURi%_T z5twhs&`iqL^oed#HM8aCczZja81g^eHjHj zUI;9Ot3B!<@W6K0)>CmH`2~GWPJ5jGOpc#y9v@MhcH)+{PmT-^utMKgjqI zKe?iEyIxd_6&_Wnm6z1UrplSw*Lcs)0ui3b!b`)@->S0PnMLgmGs-`?vfCtUvxu{b z;cCl={Xmm&EiKDo*y)uv>(OI$?`BSozpWH&^xC=Zj3Ywih}fo@)i}$uRg2~vT#M-) z=-ln#DvGVOI=8HqshdP|D_ea)9prx5twN0#DyU|*VrV7J)V9^EnPZsf%!%#K)pm}L z*4Ubl9B=AotR31Na-tib5mu5pU_EE51UTemgmOW&w{Wd@d!)q}Dj1(7>mB|{-0YkG z3t^<4Xw5>pGR+|IG1bT^jp#H3qn|Bykdv4=%IJ6b1efk1#L#OEt%g%?B+W;&BXnGP zBeP>`-eLLzU7_zBy~ig6odR^G`9$j&{p+Kh(e8^Lfc;7bkRmm@a~-lS0q-Gt_O06h zuHiN3wjW;fkTe)Qf+rI@fVU2x?IeJ4#2vLH?OZJyeF6Vt3`L*AUx$#4y@2O2dSlPw zc?xm=7kHD=I;2DN?vsUpK@3}HC&*TWXJ}Tyb&mfAUUxk2kQPUO?+N6;kn#V4;BwS+ zgkUE85+QzqQ+0&c0s7KWuO$sz($h_;&yt>LmmcEmA$4A{zi&uAUl`i6giK5mtqauckr%b mJL=f>M`KShSjRBmFV-=__e-?fsTMKWR!({iK1RUpYy1ZWZ#Xdk literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/EncodingHolder.class b/idl/comm/.class/org/omg/IOP/EncodingHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..07e498e9c0e84182b1b895635fb262d8a015294e GIT binary patch literal 748 zcmZ{iZ%e{Z6vm&co6EIIOD*lM6{PdUsJDtx5+nqRir&g}LzKD6m`2~Kph$Yr2k1jZ z=jyB!$Jk*z=Xaia&vWnB_s1uIGaSp1kd7mUjEqfe@sQ;qCt+K{j)YwXacI~Biy?FE zdTq_^wY9o_qg^^J*X%g$GDED=aXNmLAzCOtFbFl*Bs^PK%yUF+c$Q%@ocu90{r2Kq z>${$BG;K?(JN#?a7g!)a@Jvum|{hWwPD8)h;GpDRq$ zvin?9nAlPYopHvN-=XHtLkz5{hRV!XwOD3+lH5O>()EzQutYE8R?*cF>5H7BxI%x) zafPz#JJ<^)FfOkKh>RdiRW^_c Q5U$2(C1C{dnQsI50iAuTO#lD@ literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ExceptionDetailMessage.class b/idl/comm/.class/org/omg/IOP/ExceptionDetailMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..386f56d6afaa493bdac1ed92e31301e6de0cd629 GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty c8_+}sCZGw743Z4Y3@kvJ706>^U;~m207YFMng9R* literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/FORWARDED_IDENTITY.class b/idl/comm/.class/org/omg/IOP/FORWARDED_IDENTITY.class new file mode 100644 index 0000000000000000000000000000000000000000..672fc689e925e14ca85a1a05f41134ddcf4dcee4 GIT binary patch literal 131 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g2 zQM!J9Zo0mwe}KN5e^9t%kc+EJyr+w+Ux;T&BqM`BR$^JAeokUuy1su>R%&ty8_+Zc YCZKLc21y2H1{NUA3gj^{umMR104%2)FaQ7m literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/INVOCATION_POLICIES.class b/idl/comm/.class/org/omg/IOP/INVOCATION_POLICIES.class new file mode 100644 index 0000000000000000000000000000000000000000..fd6c1be59504856ebdf8188522b1b0f8a1affdbb GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gS6ot=iYLd3m)cDhdE_ByMVbHB2Xmt??q*Up~g`{Q-DQOboAoQ_Z6v2fL z;6sTwt)d{fIm12kan9U%|9E`^aEwk9I@%`I8(4u;$%cVV16u~R35J>#@-B%8jz0;X zLXn19EUs0VWbp~XEXw>LN#!G9_twwLSme`Kc)>v2gmEmR!Sb3({WQrEbw<#-y%C|_ z&m&1V>i$jrFQ+%MU}2TOYNBDGi59{BUF-!zLi^{f!FVF?6=Cli>IcJ%b5Z1_3dgAw z-lcz)sYK1N&%5j3ol#@uc>W)%8u+XnE@oZhsk4}Ymiq#7o!T7QGustz!Ty4F7}D6Y O7tjGS?%^EuC5TTrqECnb literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/IORHelper.class b/idl/comm/.class/org/omg/IOP/IORHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..25d6cfe2489c9c24eb1444269a9017dff651471b GIT binary patch literal 2608 zcmaJ@TUT2}6#j-2ILTp<5TFI*+FBYCA(U#d1gczWi3CBQRYZ*;IgJNGk|rmVdcWXZ ze?VV-=_}SYWXWn*`{Y{w6d(Kn>Zq7uz_))GUAEvL_D)gD>KucHImN8!>X5|VN#1}`XvU*IdqM|BE&QV;>k^hcIQxq zC7BB&EtXP~I>T9K#r|~cmbW1CEiHR|ODkUCSXTG+WH3ZFgSBjmaq>nCO{;n^w7nQi ztOYltD&a|a1wqibQamxMS+90`saNHVk*tG>J!QWLrsk8z}+bG(3y9B1KV z=*ox5(ShnshxA2tXHz8)vcNc?g=M5Uc5#zq4-{eu?=x5v$@q0Gs-`%e#juPIIG)4v z93SE%jtdwk8d1YJKE@{uCw+7N2_oHyh-MZvac*Rkp*bJll*;&&<1>tNEaG#HFR;(h zS*o)Zj6~G%axOT>3ceKOd?n*+j&JZS$9MRi!;2qkK&VC&qAYt6n5E4vRWPw7A0h_> zahn(-+9LQb;%+dSrf4ly zxe^aT#9^KKC%9Yua9OF4>^#QJon7_s<l!ig-ohfM79 zWiy=0S9g3f85+f}Q&Q6zO_2x9!FzV9BEHz}U561Ris@6Bg8ww8?b@Y2AGYO9u5h zCpL`YoT=ugQK-3GkI`@&y{<=S$UyeHA49s0M)xB~_h3D^1B>64fs#ez0a?iC!GMwN z7};7O_0GsRFY>2b+w{Cia*_SQUGU#9SN{M_3ohvhP3w-QDC4_m&cMzN(X#5Y7*aT4r&=agyS8`~psHM3s#GlL!*9zj1})(c56gYc`?*lA|+^20cvX=2iN0 zvXI?{BXq4F;%UE|ymsG54-LIj?(PTZyN`b9Qcw3!Xm#I1e~&ARfz^G9-TC)VcQI}g z>Ykua#sp)3p^f5uF=>XFrw|f_7!~x%S~do`jo{ literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/IORHolder.class b/idl/comm/.class/org/omg/IOP/IORHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..05b2f730e6a2ab2d4cb48100a374df2d4b0d1812 GIT binary patch literal 718 zcmZ`%-%G+!7(G`vmur=lTG>x4XzIhLmk1*$UlM|aMXxe*h%((6SEK)`ph$Y?59p7I zzN=Hyl5sz_@0{=4d(Q6H_s1uIV;rbZkc=XNl!{fXiLx$ATET{bO$A#Fa@TS?HbeZ{ z_3MV)sv9NqhE}=25IJkK8~mIhtY_~Tq@r6RWT%TK2 z$2LlBufuOS(OLyD5ve@-4Ni*s%n`H0CuigefAVM~t!GE47;JM#eR05ohIwcjqEHoV zYuLfAh79&J>?6UDoU(c4IyKv8h&8RQWjI#5ZkW}k{lFPAL+X@|fdygdA359cgq$=8 z<7B3@i7-Z1#@Wk3Hm5TcCbIdX(Eni~D;&`UP{1%pi-}n1a>(>XDN$XZuXrD!ZtflI zg&OF?ivgTMh#o){a4!Fb(2%o)SingJoMP|`1xO(iX@))JsXpb{Gl7DQ{+xFp-Sxa`KwrndL} z6TS7Ow^W@pQ%9z~a>ieyw~kXi?`HEsNMdhx-+j+H&w0-0{_*Ph0f1TTN|?Z`ge$lz z;#~;>-ji?*?~AxDVGwgcx=D(d=a&l-PGT`gj~o2-frKS2bJG<6TnS*6f7}e(&NIzN3ZA}eBpVIb!`ENKiUGL~ITSbN1pDtmi*DX~SjDXX9*83yNdQ+E~_ zglKG=!OyShm9y*}hU3v#hb5VFBi$@(w!?5W+96*uA13cM@6y?g#FkntYK4@wSF%ja zbdubQs6B9OHBSInx&g%cBQOkaI%@vAb+xpm?idojAg{EmogiU^qq^yXt*4 zVW?&?vFX^lS)`Eswx*JFrISy|vK{Uukv2;ehtxH7FZn+NMSMcJ|H0NBO6AR-h}nwM zg6tnMPg-C;Z@9IRF^MS=w`FW1!k{#2%d@>+F&w>QP<6e0Z`js7-O$!7qoCQ`a!bUg zGPdyCqHIC{Zr3M!q9&v8e_7o7iiD@m&l@>|N|wxdVq zyUR_3=IgsUbJ(O?{0tJ`Be{xUnMHS}rWsN_%h#T{R*YQ|M+@p~5AW?;gki|tIt~B+ zXqxxgYEJ^~#>r;(yAg zJn^V21pGDl_FZWZXK>b&o`fGhx*b-2g>WbS4E`zx>L5X!!+B3FLvOC8C@(Si7*om% z3|1j#;x8dQ#!&nPgkKQYe*%9-sY0q@XrC-ZVi|GSULe~5gsEi_Z*%^%xIEsbF4jRZXfuxWy!t>?jvxF945jW>d%b?FIj zkiMU+rU~lULijfv&j^c?;U6&?pHymibMukFp8We)yoEmu-z&%>W*GaM5*(z(cF6;~ zMqmPgg_Zb06>kX(;rIa|De>@Z4JRJ?2!F^{$CzFOy{!mZ5e229;*A$2+BHPdB!q3nw^C3nf&=pPBtaZC4XV6n=)hY_bdmf{Gf&B2|;nvc9&KP+LG-QeuOGwD!eyNyePjWjALTsQwgx zfnWGwttWEyoF4tubNZutdS`b7$pZZ{vpe^>cbXf@5 zjbTV^7}9P;t)PN&Ea48vT`V(<>?L*UX({|QE71ef?pX;k4QO_B0`<9Gm5!$S@WRfc>g zfgbFFa9YAA-h0$)YmbF$?Qq8-log4CTA)fpTOp`b3_;nFSEwE{Y=deG!}&w&zlSO- zUF9NO^?0A#rkvfS$3e#4KFgF58C?0Xe??&pD4hgU~^_BTW z+a={?j6w++@_PQ|5jak!YYYY>{+44~8$poO z!v2vs;3P)8^A!BgRcCu$4yp))u12quJ3S^;;)z52x<`tkKN!K#GdWIg+9F_6sDdr8e{(^ly`g zMl{9)wiD!=L1Ju9!zYUWIh>CoUnc^J{lqKqzj2C4zQRBoA1&@+a0f%VVTzag6P(P7 zJynp_1lSphLL(kU84O~OAve;=k=};LI6}K3uTiKYGx=@$R2(MpX#~iTSpm|ed>co@ R>@)bRr^3o7#fV5~#($W;lcoRw literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/RTCorbaPriority.class b/idl/comm/.class/org/omg/IOP/RTCorbaPriority.class new file mode 100644 index 0000000000000000000000000000000000000000..7753f83e00677da9677803ccccefd8192842d97a GIT binary patch literal 128 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g6GWQBq<+QD%NoW=SO@gFsedS)zVUVqUtwe^ORzatRyICG literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/RTCorbaPriorityRange.class b/idl/comm/.class/org/omg/IOP/RTCorbaPriorityRange.class new file mode 100644 index 0000000000000000000000000000000000000000..04c63bd15a4b1c2f508cef412fcde17ffbf9d607 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g6GWQBq<+QD%NoW=UmGVqQ8>uRvB}S)zUpkfZOPl$DxX!Ui;t ZfeEOekwKDynSljJvjTZc3~WG>0RZC?9jX8T literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/SecurityAttributeService.class b/idl/comm/.class/org/omg/IOP/SecurityAttributeService.class new file mode 100644 index 0000000000000000000000000000000000000000..62f01ede57509a895e1029198eeaccabb85b1c8d GIT binary patch literal 137 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRTMYH(^%S!Oa&zd%-ES)zVUVqUtwe^ORz eatRyIOa>;P8H@~)49pBHK$;cEV`5+fk_-T`5FfJu literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/SendingContextRunTime.class b/idl/comm/.class/org/omg/IOP/SendingContextRunTime.class new file mode 100644 index 0000000000000000000000000000000000000000..2e9b907c8395d6ecdb0f6d0bed6e896f0c1abbd4 GIT binary patch literal 134 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243geq8KDZ*343dKSS%4*?;f&`S@pO_s2wW+f~|f0ls)&$=Q|PKb9xC9NcQ z^OUf6r5kOp3I2F8BXlxTDOSh%Je|y9^bp4gu^*$0h;U}wT9}tw5*(q`k^L_Jf&$~~4fBN$y0GIH+7yTIXVjL49 zCcO~wh8J&QO2o7mEtv5TWmd!$PJGLYKD_Or$DD|m8}lA4AkK9cz3|~3HxgXpDkop# z!($&Dm`dDo3)5$}1?&GFvHiid6=@W(2D{m_e#@G*a+M0_GbW^kp9+Xa=OE1uUg z(fnp6I+M6QJrzw7bta!y#~511wVY;5G6mZ}>J zmqHEvsod?c3MrPj8eLNLZA~GxoT2U*V;n=Ii!LjqK75pV74isu2H%n)D;tY)At|qA zRZ1**Yem`J4Zwh(c;2_ahu23{c zT$MM+j&+a9Ls`G2YX&88_L=q)MWbr)|I+0iSF&b}BwWCYBGx1*2s4~3*R(lJbNOsq z)wz6Hgeu`vWEk4it*D`;?G~UyNw@(`!a6n>I;v^8vZJU4L(AtRWU(pXGG3AJ0?spZ zml3TlqJ$I`V^Q5)Q*{QfVwE_h5hm&8QIK#GrWacbQkk8W4Ozkf!V(NFQpC1|5xmTB zqP|xo+`zQMN= zzQgYE$yBoi9$;HFMTxa_mG^IZeL`qBsF`@J7|vFU-|Uk)1`Wzo5He^DR?6x%-g^ue zs+O$0SK6{FWg7I`b5*B(zG*0qQm3Zfma|1d3mn&u)F%oJfuW`}J`t%cb0oNn)v0Lk zv37K50P7Q$oLSIvGbDRZ#Q5Lb`#w<&_v1~3Y&GMUF^qp!XkmCmRs8Vxqzj^*;uS0cv1=-;tQ z&2I7ROc0Mq{m-yjyYm=Y%^g{`>I}vBhruS==A5DFfn{eeeE|FELrYkE3DM0%cUpw> z4AEOVos3RbcpvOXx_|^}yV&eDlLDr97Oen4D|`!K;SjzR{|WN=K2Da<#`e*^6n2_a{{cD# zlha9@5>A;+A|Bwh|2abM`Uw&lDfmSR@?Uu{P>SI{BaAKU2;LEqR-nq~9w} zVqQK(_sTw=k4MOA;30bWF%b#;;(myrFxeCM0UePC2y*(_68vj;-A0%r1c4APhDpDtgme51KB9{-5iqZ0+N1?WO6c8nkm)~oRjhzKaQuS~ Uvf4#S9j$8wl7Wj+2CN$5KOb~=ivR!s literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ServiceContextHolder.class b/idl/comm/.class/org/omg/IOP/ServiceContextHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f7b8f4485d1e5bd81e98cc7442d0c59d9c07bf9a GIT binary patch literal 784 zcmaJHf*X_dv2fA7>9LBf)T3Udluv3`MDIM&t^GtojtmolFApR8yYWj%ll%l zB^Aq1RfG{yu%{w}tco1=RU9BrkezS-(y?3ABZzj)fvMYOudN%64s9}m+=TVV(%6k~ zw^*6lu27c75tZlqor!2_@ZWQi{qQd4ip_+#NNjY@B3B&qE2My6iN8cd$gh{ozj&g& zuJFIuXu`YN8^|+nU^HI!$4LbE14P7FE50Hy!K@+bV-h|ltQCg{{({7?{uffzUJw{U Vny73b?n8tc;VVf)$WLM$z&Drgy2}6n literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ServiceContextListHelper.class b/idl/comm/.class/org/omg/IOP/ServiceContextListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..04a409efeede3b9c736f0e2496fc9ee707daa0b1 GIT binary patch literal 2194 zcma)7TXz#x6#h;o?IhDv+oqsUlhQ)LWTFie6=~XHZ`w#ONNN>P<8(U4sbLZ)lM3(r z30{5SwWup(;j#;!T+3ghuPzt5&t!6GZu&BF=Ip({{q5`g{^IEofCcO;n8JdB%Xm}9 zTM8t+t>6mYk#SYQFcyP!la#R}E|(RY#!8SL*Tm^v1*=#Srt9K!BY;iu@m>J$E7(Fx z#s@;#!tqVPslm!*&=hM?2)J*8Sw2=3OdtGm$my15+n=mSfy= zlER5h2V2w0exa9rY#;!`Xx7p6Z*OR&ZEd$;P|k>NJe`*@v{`nxiiJJH7B<^5KIYiLCk*38IpLUlUMo<+ zI6lQ~j?V<~$yRbU@99R#F^d+*9emF5I^N)T6=9AU%*yzJBZ?Tum&kFbh%@eM};=6|QbD3lDFB5wtk z+1)op14ag>o?)Uvq&_&*{?sg@5)3oZfwrP-9oCdN zW#hYwVd+NB(Z#MvH5Wt28tU}iHnn3OlvXgcvWv45?VjKsHw~8m-__aUCcVOEP{gLl zRSHEb@9xYL!&=|!wI{9>V|U(Y1D)&RynRnFjJSKH;ocuji7wmd>%ZMN*-U;9|FIqa zEd5%h=vPG{iYcd4kj}Ji=y`^|Cg{!RJ)}MXdrSwAB5eXsJnjkse+|AvR~p1wob#lo z;fIfIN7Y{--HtzjzlxzcNDy;4@2REfE!0%?Iffr%T78D$D&%zhIi!aei9dt%GXjT? z;7_YnC^d{6l7&nxXI-`z$Tk3JdQHY_fPKw^*n`7_?aABFD)xQuzm{-Oj2X`5a2z^)LOL||bxepJOP(sDR{L`Z5p myimib2R=gjLnN?HGzj0{2oOk!;=gpPW~755Mv>Lijeh~pRWwNe literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/ServiceContextListHolder.class b/idl/comm/.class/org/omg/IOP/ServiceContextListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..061a6888e02a3ed61a6bfd1b85c0a3bbfb99a71e GIT binary patch literal 836 zcmaiyTT22#7>3_*T{mqjJ6Ks+cHZ=2saqo`2?_!uqnj>d%|TXHSGLjWUlkNdP(Pp_ z6@6n{sIYdi-_8ur`yJky&#$)+0DIVqVFa@p=AzIrA43ugGAzolq#>nYS;Gp0+P0h) zXGmS2xn9+D>s9l#aBdd4*S2qX-fakeFLDf#eY;_c0|v#|xnc`X5Wev*Qs!iAzriEmg!iHs#z%4 z_>Ev#{Z$Uk{4=f`|NrdVY0B*3A0P99ru6wZ^j_#ze2b3*v-Md#G+XyQNc*u%Z*2q& zQTmuPlb)hVD>9zqIPH=M(Fz#Lyn45b70x6%v}J`$(DY$)78TT>HB6#klACK(!mprS@m#7h!(8SlCTbpbC#;zk8gSJ!b!x>BQIk{TM+pW-jr z7aqJ-q}(b?pRDpnS)QJmKr+C-bkFqp>)*^PT?j^Ya$~XRxSa5Mw$FoYHVwM+9ed zoW(f}=XJz!AxS3}HC$4Mf9TkY@gyzzBqnfKd0kOwSJm=o0+Z@wDuHPo*Kl3O4cyc) zqoKeMGv(`sVAxlzyH%sUR5hkc_ogO|c{-i0S45s6K4CkyyuuL4WEU8s>XK;x9!31@foD6Pm%7caHMM7ib_jpG2)8g6mSVu*^-S>%EvXX>?za22em;Wo!#C^7Vj zWkcGPpcPawjyt%^aSwA01Di=*e^nL@Y1bW&dEDp7BFC{0`!y_ZJitSaNBEoL5QaET zBEyiJ6Yi>A7KIAOV?1FvRJc|gr>>7FVujKjV*@aLdW@9!564rO8lG`jC^Dp533Om* zM6DrQ;=M_&wD?@8*7mm?d|8n=s0FGtv}L?ng%Ff2dHL!w{Whq!Fr3)2{+p=0(p4(Z zRfqTSEqd8#c$+(Qd)2C~&~1!5KTswSNMYJa5$3Wd3B@C<_>D;I(jftMranJCYdfU8 zgnVJH)ap)^bRQZGA3`GSs|sm0Tzkou_Np*tnc-A8{Qw*$(>4aZ0e`DzTgzUMh0NBG z*ybcey!90P&s9e|UAC(TgRVxel{-BqRN|2x{Mtu~q1zil-!nQ)Z`vTekrYp9oxYOv zO=CvuLHg^bozWi4eFA$&A0Qx&Kw$3kj6if9U2i>W5{Gdlup{n?Ph}O2aY5|2R$rkuMPe#eU>H_;(y6lJC*e#ID(O^sb{X)lczKAHd11*i!{* zjes4dC^X_hlwL0e8BznS9O-Qcj03bQ@*0KOJ&|6cPsL#rzXgC4nH3b=<4QMI@6VMb!21y2H1{NUA3gj^{umMR109K40oB#j- literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_ASSOCIATION_OPTIONS.class b/idl/comm/.class/org/omg/IOP/TAG_ASSOCIATION_OPTIONS.class new file mode 100644 index 0000000000000000000000000000000000000000..36febbd739f15ef327d978fd689cc5e887e22f92 GIT binary patch literal 136 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gTn*Y{7#N=+_d c0~*P|1T=z?L6U))fdxpj0(ndfY(SC$0PPJN)&Kwi literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_CODE_SETS.class b/idl/comm/.class/org/omg/IOP/TAG_CODE_SETS.class new file mode 100644 index 0000000000000000000000000000000000000000..693723fbed89128136653f62197c42cc0372cef8 GIT binary patch literal 126 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_*yICXhx3 TNd{&H79h*| zeo?x9er~$Hr+R%&ty c8_+-oCZGX~43Z4Y3@kvJ706>^U;~m20IB&LPyhe` literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_DCE_BINDING_NAME.class b/idl/comm/.class/org/omg/IOP/TAG_DCE_BINDING_NAME.class new file mode 100644 index 0000000000000000000000000000000000000000..e43d5b9e8781e1618c205a90ca50e75ed60f2417 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gAfABm)4A#vBO% literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_DCE_NO_PIPES.class b/idl/comm/.class/org/omg/IOP/TAG_DCE_NO_PIPES.class new file mode 100644 index 0000000000000000000000000000000000000000..561ddd7a5d0785a093ad7754901bac03adbb1550 GIT binary patch literal 129 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gD zeo?x9er~$Hr+Nd{&H79hNd{&H79hTn*Y{7#N=+_d c1DeRd1T=w>L6U))fdxpj0(ndfY(SC$0N*nlzyJUM literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_ENDPOINT_ID_POSITION.class b/idl/comm/.class/org/omg/IOP/TAG_ENDPOINT_ID_POSITION.class new file mode 100644 index 0000000000000000000000000000000000000000..27eecb11eaf518518c305de6c95dc5d213e6f71d GIT binary patch literal 137 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g zeo?x9er~$Hr+R%&ty8_+NY YCZJ|U21y2H1{NUA3gj^{umMR100way%K!iX literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_KerberosV5_SEC_MECH.class b/idl/comm/.class/org/omg/IOP/TAG_KerberosV5_SEC_MECH.class new file mode 100644 index 0000000000000000000000000000000000000000..9f3340302a130f6d8460d0a579c4c99f673b27b7 GIT binary patch literal 136 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gUd*XMm4uytBV=fWM!sUq~<`gFsedS)zVUVqUtwe^ORz datRyINCqa55e$+H%nU3*nia@nVqgQ33;^rx9Mb>* literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_NULL_TAG.class b/idl/comm/.class/org/omg/IOP/TAG_NULL_TAG.class new file mode 100644 index 0000000000000000000000000000000000000000..ea8872b78a5b9be79515f04bc0d570515262708d GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRLPur^5s RW(F1@j}^#cVqgQA1pr^C8F~N! literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_OTS_POLICY.class b/idl/comm/.class/org/omg/IOP/TAG_OTS_POLICY.class new file mode 100644 index 0000000000000000000000000000000000000000..232b3a6873ea5fbdcfb2ff9644639fc43d42f461 GIT binary patch literal 127 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRLPpgu+h TNd{&H79hR%&ty c8_+-oCZGX~43Z4Y3@kvJ706>^U;~m20HZ$~HUIzs literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_SEC_NAME.class b/idl/comm/.class/org/omg/IOP/TAG_SEC_NAME.class new file mode 100644 index 0000000000000000000000000000000000000000..08d83b9e5293f49bad734cc4c7b9c0de95a0d8a2 GIT binary patch literal 125 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gRLPpgu+h TNd{&H79ht8=`stFs3qgFsedS)zVUVqUtwe^ORzatRyI aI0h!5c18wC24)5pAk7NoF)^?KNd^E`g&U0k literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_SPKM_2_SEC_MECH.class b/idl/comm/.class/org/omg/IOP/TAG_SPKM_2_SEC_MECH.class new file mode 100644 index 0000000000000000000000000000000000000000..ca38dd362cc34fbb77156c3666482a7f6e1bd8c1 GIT binary patch literal 132 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_+NY YCZJ|U21y2H1{NUA3gj^{umMR102u!pA^-pY literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_TLS_SEC_TRANS.class b/idl/comm/.class/org/omg/IOP/TAG_TLS_SEC_TRANS.class new file mode 100644 index 0000000000000000000000000000000000000000..6e214de2acbed6ddf3d70deffee759bbd1dd8bc1 GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_+NY YCZJ|U21y2H1{NUA3gj^{umMR103KEwGXMYp literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TAG_TRANSACTION_POLICY.class b/idl/comm/.class/org/omg/IOP/TAG_TRANSACTION_POLICY.class new file mode 100644 index 0000000000000000000000000000000000000000..8621496a7fb2c3d16449bdadafb84a7fad750828 GIT binary patch literal 135 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gX= z1k;>wblaH5-LY{ro)B7vtre@Ia+;4P3A#uU#5hjSMu(8vjTUyLMOi(ISE;qCi^H#k z!9u=Ev6M!OYPL{wN4Pu;6xB<9FV=SBDw(LBFX)=08DktoRJM(xoF@It&Gc)S%?vR3mJB()u_zak z@>))z)RMneoZUzKt&7y5W*9n2VqM;nBRN^iMwX1Cs%0r4XHk)f8*Ox_pcf4e5{YSr zl0o8%oF6;hKdKNV{#H>nD37yGHJB(FHH**8n0q{(GwUSb0$vocCLxUwLw}{NO)@p7 z=Q2u>D`Z3{5Q=!_@aPg~M69gH20Aq(H)Q6TJFKS-g-RW;GqS1NEGb&r@@ym+YtXLx zaEx>QiYarl%n(I)q}SPAdJ zS%%9p;=x4>*C`oV_wO$N$VLYqkqRirvKzs cu>$hI@h>{aY8NGS^iU&^3|x#dVAT-+19AL#jQ{`u literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TaggedComponentHolder.class b/idl/comm/.class/org/omg/IOP/TaggedComponentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..409e6ff51969f747f2915600c78043f6fdba7d40 GIT binary patch literal 790 zcmaJS<D|hbYNxZoH%6GBxUp z%@!4`LQxPxSjK^ZL!=dCaHQZEF^0?%`(@i~>Mld1t@Sk3)GR}-Hro0VpPwAMVhwQro~2rK~k%T8mGxMPEBV*GC_Ff zPw?ssuk~YvELe8IlWX~F^ws4;&z(#@nkK=QnLGE~v+q9pe9Rv&pB?~Mz^;NREGW2$ zOETV7AmKd)m+`)gD+-3O=%<~yj3u$Ttl%V8{PeggRv#!>#hP$Uh|hH&HpIs@A3jvD ziKL8=#EI()Qn(>jAInI~xXCb-wI7r?!-ELCkf&h@?cD+tQ?gtY&mY}h2_wZ4ey zs@;Yh9I_D2x0EY7xl%EW85y@!WDsJQYv#6x+8KU#(<+p_*BIcEm8^23%b3jE?$^FFJnhV4wQ;h1L6`)DDU5@DBwF4F&MAbffq}> zOrf`A_h0=?LUU6`?!$$&l!qzE0)ZG4>FS2GN;5w|7nph7o7FH1GF@lcLTx`V#1LjPcI z^ecS(kKs*eH7IqA?30H~EJF_4bL8uTG_xk-Ey170l#6_Y2nhCbKSTW;({+qWb-Y%? z*mYXgF&>y8z`!q1$u8(qOVCpSn1StLshjK<|FvKXbhTQlMa#J>i literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TaggedComponentSeqHolder.class b/idl/comm/.class/org/omg/IOP/TaggedComponentSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bbfa989f6976272d8cbd95fe383b46d38c33e6d3 GIT binary patch literal 841 zcmaiy+e*Vg5QhJ4o2IQ%>!BW6&&Swa1ih^YS`h`IqT-DgCE6ua(jwD!N%_pUG%br)OK#nB9qx!CLwvX9)WjY`RNuN{h?U$b$(HqSokW$2 z&&?{srv6)^R6al0H$2xD=8esb6US?a3qe@DC>8O_gI^PrULPnaH$<;Ssfb69Bw2l{ zugoRIH3LK@YO!jOt34a->3u!=Pe>&P&yg@`Wr{jqCTxzCWkGn=Min~r6a zZ|?Z5Ad9-nzNS0<%Krb)&TUU-k9CYZ9Oz1qk>Qh}xdbL34NTW#a(KG-n~)R0Ha)lm z7?SicX(zo$g?8jUts``rMTB<1aQ+P}AN@e&713u3ppA_N*c4$Aily3E;SZC>Siocg nCYdj^5c`9SW1=4^S6ot=C8e`khw*D-n8{M@*7;r5@Q(Xjv6p?Pakf|Aml$a@DDEL?|ir~Tr z@S(&zR5$0$ocnRl%=gdd7l13Ab`YW0Mhkr}gBV9Kj$@nuoHWfe1P8h;K42q|HebcL(Y1BoD8=JlFKc^9f)76buxbd literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TaggedProfileHelper.class b/idl/comm/.class/org/omg/IOP/TaggedProfileHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..287c29f77fa6b14db5be0cb2536ee4d07b88994a GIT binary patch literal 2451 zcmai0+g2M@82)x9VUjS|5NHL2REn)3u>{0=;G`U?1cIR@qKF!YWH%iMNjgj@^;8e| z5WV%Lw^-Z2676cQT+2uC!Us@S_1`m-0|`aeV)mZ@^!?|_?@xYy2;gOW??oR*y%@u| zj0rC!yy?YTn3OT)MH8kyM46FsSrFg$;vC-b&|_9c)Qve0<`EOR3tqI~T{q%FVo{K< z2=Z0&y5vSeyu9bevW)k==n{AzV8uhX55;3uynf`x$M{4%k}^J(p)$CV#;pQp=!oU@ zOeDXViA=|@PEAGmsx!1K8ER@{K`kWI zwJfK!lCM^bT@Ak0MCs7d4DBSbu5PQ5teVS2mJD6XWhfY@&Q;=0);m+k>xKY{M016r zLE>E996iZ9stu+5rmh*3!Re=(ix-Wmz5mITdn}bT>!aWTUX-z>AcYXa*>XJ_ax|OI zrnxS}(=xb%YsfJ8_*TTw(suQ!MhdP&Q?QN=hPG->F7Kpx!O-$K1zBt=xP(^~ynyoz zU1dP4fhZfrl(E1!*SJotW2hM!q?AWN!3~)3TMSCUDtj`m8mfYRgcKM;q=;<=!+3@2 zd89uS+{6w;Z*(R$LftwbKpP?)85$U5=qx+bz?VVceTL5!%;5_KaeS%ZE8LdxwSsT( zt%C2cdtwH8wjiSNRr3;GTj!!-Tg#wU7HAl#eMEg20@Zpqcx1MHoh}uD>{)Y^w3UOBiiR1rrZ=U z6x6v`J1R7AN7I#Ma9SXz$8hdwIVz1&Q#1yz*oNiu&^IB`V}kNPSPSS-a#In$4wHw(1N<#dp9a+UA_Wss3eWFMaO%=(9>#V(-w+Lw8zz z^bFElE1ir^S7;yXN4kInX|LF9pUDKA2XO3}To1x{$>w?tSILWhu6!uxQR;IfQ( za1jHxSd2~~779H^(;WmtkI+}PRSf~W=0h;$nLq-pJO>ZNl z>xLAVk})X!AEF-#miO09K5*q8l;1Gt`V}qnA?Xk;EB8nV?@M zPGVj_`v?g7*~G5I?*98{xC+|>#}fo( zyvEpHXeapB@rI2sO9&DnTnv$ZPYKV9Gw_fu(s;LdCDSIYd$@$&T?d)|LsZ2I$OFee WXd|l~l+=+UjX*MRG0K2dL;MFa>(5V;|f1opbIz=iaaHk52$+I2Iuw9Y+iq5!={dWtWw#fSiCm0s92}P_qXHLGIe| zOvUM$N<(cbEzL9yz3Dj*mTgoCV&_)h@-GOYa_NqMt2;X7;|Kw6iRxZuXBZ URkn}{AWV(WmADc3XSNOC2P*NmF8}}l literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/TransactionService.class b/idl/comm/.class/org/omg/IOP/TransactionService.class new file mode 100644 index 0000000000000000000000000000000000000000..bd610e1b7215225d26a42969e7cdd68b1f91c912 GIT binary patch literal 131 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gLR$^JAeokUuy1su>R%&ty8_+Zc WCa`8n24)5pAdeNuV`5+fnFs)zs2vyp literal 0 HcmV?d00001 diff --git a/idl/comm/.class/org/omg/IOP/UnknownExceptionInfo.class b/idl/comm/.class/org/omg/IOP/UnknownExceptionInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..e40c1131b1bb9bf10a5e2d62b7d63fabc63dee76 GIT binary patch literal 133 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243g object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.1 + struct RequestHeader_1_1 { + IOP::ServiceContextList service_context; + unsigned long request_id; + boolean response_expected; + octet reserved[3]; // Added in GIOP 1.1 + sequence object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.2 + typedef short AddressingDisposition; + const short KeyAddr = 0; + const short ProfileAddr = 1; + const short ReferenceAddr = 2; + + struct IORAddressingInfo { + unsigned long selected_profile_index; + IOP::IOR ior; + }; + + union TargetAddress switch (AddressingDisposition) { + case KeyAddr: sequence object_key; + case ProfileAddr: IOP::TaggedProfile profile; + case ReferenceAddr: IORAddressingInfo ior; + }; + + struct RequestHeader_1_2 { + unsigned long request_id; + octet response_flags; + octet reserved[3]; + TargetAddress target; + string operation; + // requesting_principal not in GIOP 1.2 + IOP::ServiceContextList service_context; // 1.2 change + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum ReplyStatusType_1_0 {// Renamed from ReplyStatusType + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD + }; + + // GIOP 1.0 + struct ReplyHeader_1_0 {// Renamed from ReplyHeader + IOP::ServiceContextList service_context; + unsigned long request_id; + ReplyStatusType_1_0 reply_status; + }; + + // GIOP 1.1 + typedef ReplyHeader_1_0 ReplyHeader_1_1; + + // Same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum ReplyStatusType_1_2 { + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD, + LOCATION_FORWARD_PERM, // new value for 1.2 + NEEDS_ADDRESSING_MODE // new value for 1.2 + }; + struct ReplyHeader_1_2 { + unsigned long request_id; + ReplyStatusType_1_2 reply_status; + IOP:ServiceContextList service_context; // 1.2 change + }; + #endif // GIOP_1_2 + + struct SystemExceptionReplyBody { + string exception_id; + unsigned long minor_code_value; + unsigned long completion_status; + }; + + struct CancelRequestHeader { + unsigned long request_id; + }; + + // GIOP 1.0 + struct LocateRequestHeader_1_0 { + // Renamed LocationRequestHeader + unsigned long request_id; + sequence object_key; + }; + // GIOP 1.1 + typedef LocateRequestHeader_1_0 LocateRequestHeader_1_1; + // Same Header contents for 1.0 and 1.1 + + // GIOP 1.2 + struct LocateRequestHeader_1_2 { + unsigned long request_id; + TargetAddress target; + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum LocateStatusType_1_0 {// Renamed from LocateStatusType + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD + }; + + // GIOP 1.0 + struct LocateReplyHeader_1_0 { + // Renamed from LocateReplyHeader + unsigned long request_id; + LocateStatusType_1_0 locate_status; + }; + + // GIOP 1.1 + typedef LocateReplyHeader_1_0 LocateReplyHeader_1_1; + // same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum LocateStatusType_1_2 { + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD, + OBJECT_FORWARD_PERM, // new value for GIOP 1.2 + LOC_SYSTEM_EXCEPTION, // new value for GIOP 1.2 + LOC_NEEDS_ADDRESSING_MODE // new value for GIOP 1.2 + }; + struct LocateReplyHeader_1_2 { + unsigned long request_id; + LocateStatusType_1_2 locate_status; + }; + #endif // GIOP_1_2 + + // GIOP 1.2 + struct FragmentHeader_1_2 { + unsigned long request_id; + }; +}; \ No newline at end of file diff --git a/idl/comm/.svn/text-base/IIOP.idl.svn-base b/idl/comm/.svn/text-base/IIOP.idl.svn-base new file mode 100644 index 0000000..cefadf1 --- /dev/null +++ b/idl/comm/.svn/text-base/IIOP.idl.svn-base @@ -0,0 +1,37 @@ +#include "IOP.idl" + +#pragma prefix "omg.org" + +module IIOP { // IDL extended for version 1.1 and 1.2 + struct Version { + octet major; + octet minor; + }; + + struct ProfileBody_1_0 {// renamed from ProfileBody + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + }; + + struct ProfileBody_1_1 {// also used for 1.2 + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + // Added in 1.1 unchanged for 1.2 + sequence components; + }; + + struct ListenPoint { + string host; + unsigned short port; + }; + + typedef sequence ListenPointList; + + struct BiDirIIOPServiceContext {// BI_DIR_IIOP Service Context + ListenPointList listen_points; + }; +}; \ No newline at end of file diff --git a/idl/comm/.svn/text-base/IOP.idl.svn-base b/idl/comm/.svn/text-base/IOP.idl.svn-base new file mode 100644 index 0000000..e73d551 --- /dev/null +++ b/idl/comm/.svn/text-base/IOP.idl.svn-base @@ -0,0 +1,134 @@ + +#include + +#pragma prefix "omg.org" + +module IOP { + + // Standard Protocol Profile tag values + + typedef unsigned long ProfileId; + + const ProfileId TAG_INTERNET_IOP = 0; + + const ProfileId TAG_MULTIPLE_COMPONENTS = 1; + + struct TaggedProfile { + ProfileId tag; + sequence profile_data; + }; + + // an Interoperable Object Reference is a sequence of + // object-specific protocol profiles, plus a type ID. + struct IOR { + string type_id; + sequence profiles; + }; + + // Standard way of representing multicomponent profiles. + + // This would be encapsulated in a TaggedProfile. + + typedef unsigned long ComponentId; + + struct TaggedComponent { + ComponentId tag; + sequence component_data; + }; + + + typedef sequence MultipleComponentProfile; + + typedef sequence TaggedComponentSeq; + + // CORBA 2.4 + const ComponentId TAG_ORB_TYPE = 0; + const ComponentId TAG_CODE_SETS = 1; + const ComponentId TAG_POLICIES = 2; + const ComponentId TAG_ALTERNATE_IIOP_ADDRESS = 3; + const ComponentId TAG_ASSOCIATION_OPTIONS = 13; + const ComponentId TAG_SEC_NAME = 14; + const ComponentId TAG_SPKM_1_SEC_MECH = 15; + const ComponentId TAG_SPKM_2_SEC_MECH = 16; + const ComponentId TAG_KerberosV5_SEC_MECH = 17; + const ComponentId TAG_CSI_ECMA_Secret_SEC_MECH = 18; + const ComponentId TAG_CSI_ECMA_Hybrid_SEC_MECH = 19; + const ComponentId TAG_SSL_SEC_TRANS = 20; + const ComponentId TAG_CSI_ECMA_Public_SEC_MECH = 21; + const ComponentId TAG_GENERIC_SEC_MECH = 22; + const ComponentId TAG_FIREWALL_TRANS = 23; + const ComponentId TAG_SCCP_CONTACT_INFO = 24; + const ComponentId TAG_JAVA_CODEBASE = 25; + const ComponentId TAG_TRANSACTION_POLICY = 26; + const ComponentId TAG_MESSAGE_ROUTERS = 30; + const ComponentId TAG_OTS_POLICY = 31; + const ComponentId TAG_INV_POLICY = 32; + const ComponentId TAG_CSI_SEC_MECH_LIST = 33; + const ComponentId TAG_NULL_TAG = 34; + const ComponentId TAG_TLS_SEC_TRANS = 36; + const ComponentId TAG_INET_SEC_TRANS = 123; + const ComponentId TAG_COMPLETE_OBJECT_KEY = 5; + const ComponentId TAG_ENDPOINT_ID_POSITION = 6; + const ComponentId TAG_LOCATION_POLICY = 12; + const ComponentId TAG_DCE_STRING_BINDING = 100; + const ComponentId TAG_DCE_BINDING_NAME = 101; + const ComponentId TAG_DCE_NO_PIPES = 102; + const ComponentId TAG_DCE_SEC_MECH = 103; // Security Service + + typedef unsigned long ServiceId; + + struct ServiceContext { + ServiceId context_id; + sequence context_data; + }; + + typedef sequence ServiceContextList; + + const ServiceId TransactionService = 0; + const ServiceId CodeSets = 1; + const ServiceId ChainBypassCheck = 2; + const ServiceId ChainBypassInfo = 3; + const ServiceId LogicalThreadId = 4; + const ServiceId BI_DIR_IIOP = 5; + const ServiceId SendingContextRunTime = 6; + const ServiceId INVOCATION_POLICIES = 7; + const ServiceId FORWARDED_IDENTITY = 8; + const ServiceId UnknownExceptionInfo = 9; + const ServiceId RTCorbaPriority = 10; + const ServiceId RTCorbaPriorityRange = 11; + const ServiceId ExceptionDetailMessage = 14; + const ServiceId SecurityAttributeService = 15; + + local interface Codec { + + exception InvalidTypeForEncoding {}; + exception FormatMismatch {}; + exception TypeMismatch {}; + + CORBA::OctetSeq encode (in any data) raises (InvalidTypeForEncoding); + + any decode (in CORBA::OctetSeq data) raises (FormatMismatch); + + CORBA::OctetSeq encode_value (in any data) raises (InvalidTypeForEncoding); + + any decode_value (in CORBA::OctetSeq data, in CORBA::TypeCode tc) + raises (FormatMismatch, TypeMismatch); + }; + + + typedef short EncodingFormat; + + const EncodingFormat ENCODING_CDR_ENCAPS = 0; + + struct Encoding { + EncodingFormat format; + octet major_version; + octet minor_version; + }; + + local interface CodecFactory { + exception UnknownEncoding {}; + + Codec create_codec (in Encoding enc) raises (UnknownEncoding); + }; +}; diff --git a/idl/comm/.svn/text-base/build.xml.svn-base b/idl/comm/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..7a2bbae --- /dev/null +++ b/idl/comm/.svn/text-base/build.xml.svn-base @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/comm/GIOP.idl b/idl/comm/GIOP.idl new file mode 100644 index 0000000..263497f --- /dev/null +++ b/idl/comm/GIOP.idl @@ -0,0 +1,200 @@ + +#include "IOP.idl" + +#pragma prefix "omg.org" + +module GIOP { // IDL extended for version 1.1 and 1.2 + + struct Version { + octet major; + octet minor; + }; + + #ifndef GIOP_1_1 + // GIOP 1.0 + enum MsgType_1_0{ // rename from MsgType + Request, Reply, CancelRequest, + LocateRequest, LocateReply, + CloseConnection, MessageError + }; + #else + // GIOP 1.1 + enum MsgType_1_1{ + Request, Reply, CancelRequest, + LocateRequest, LocateReply, + CloseConnection, MessageError, + Fragment // GIOP 1.1 addition + }; + #endif + + // GIOP 1.0 + struct MessageHeader_1_0 {// Renamed from MessageHeader + char magic [4]; + Version GIOP_version; + boolean byte_order; + octet message_type; + unsigned long message_size; + }; + + // GIOP 1.1 + struct MessageHeader_1_1 { + char magic [4]; + Version GIOP_version; + octet flags; // GIOP 1.1 change + octet message_type; + unsigned long message_size; + }; + + // GIOP 1.2 + typedef MessageHeader_1_1 MessageHeader_1_2; + + // GIOP 1.0 + struct RequestHeader _1_0 { + IOP::ServiceContextList service_context; + unsigned long request_id; + boolean response_expected; + sequence object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.1 + struct RequestHeader_1_1 { + IOP::ServiceContextList service_context; + unsigned long request_id; + boolean response_expected; + octet reserved[3]; // Added in GIOP 1.1 + sequence object_key; + string operation; + CORBA::OctetSeq requesting_principal; + }; + + // GIOP 1.2 + typedef short AddressingDisposition; + const short KeyAddr = 0; + const short ProfileAddr = 1; + const short ReferenceAddr = 2; + + struct IORAddressingInfo { + unsigned long selected_profile_index; + IOP::IOR ior; + }; + + union TargetAddress switch (AddressingDisposition) { + case KeyAddr: sequence object_key; + case ProfileAddr: IOP::TaggedProfile profile; + case ReferenceAddr: IORAddressingInfo ior; + }; + + struct RequestHeader_1_2 { + unsigned long request_id; + octet response_flags; + octet reserved[3]; + TargetAddress target; + string operation; + // requesting_principal not in GIOP 1.2 + IOP::ServiceContextList service_context; // 1.2 change + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum ReplyStatusType_1_0 {// Renamed from ReplyStatusType + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD + }; + + // GIOP 1.0 + struct ReplyHeader_1_0 {// Renamed from ReplyHeader + IOP::ServiceContextList service_context; + unsigned long request_id; + ReplyStatusType_1_0 reply_status; + }; + + // GIOP 1.1 + typedef ReplyHeader_1_0 ReplyHeader_1_1; + + // Same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum ReplyStatusType_1_2 { + NO_EXCEPTION, + USER_EXCEPTION, + SYSTEM_EXCEPTION, + LOCATION_FORWARD, + LOCATION_FORWARD_PERM, // new value for 1.2 + NEEDS_ADDRESSING_MODE // new value for 1.2 + }; + struct ReplyHeader_1_2 { + unsigned long request_id; + ReplyStatusType_1_2 reply_status; + IOP:ServiceContextList service_context; // 1.2 change + }; + #endif // GIOP_1_2 + + struct SystemExceptionReplyBody { + string exception_id; + unsigned long minor_code_value; + unsigned long completion_status; + }; + + struct CancelRequestHeader { + unsigned long request_id; + }; + + // GIOP 1.0 + struct LocateRequestHeader_1_0 { + // Renamed LocationRequestHeader + unsigned long request_id; + sequence object_key; + }; + // GIOP 1.1 + typedef LocateRequestHeader_1_0 LocateRequestHeader_1_1; + // Same Header contents for 1.0 and 1.1 + + // GIOP 1.2 + struct LocateRequestHeader_1_2 { + unsigned long request_id; + TargetAddress target; + }; + + #ifndef GIOP_1_2 + // GIOP 1.0 and 1.1 + enum LocateStatusType_1_0 {// Renamed from LocateStatusType + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD + }; + + // GIOP 1.0 + struct LocateReplyHeader_1_0 { + // Renamed from LocateReplyHeader + unsigned long request_id; + LocateStatusType_1_0 locate_status; + }; + + // GIOP 1.1 + typedef LocateReplyHeader_1_0 LocateReplyHeader_1_1; + // same Header contents for 1.0 and 1.1 + #else + // GIOP 1.2 + enum LocateStatusType_1_2 { + UNKNOWN_OBJECT, + OBJECT_HERE, + OBJECT_FORWARD, + OBJECT_FORWARD_PERM, // new value for GIOP 1.2 + LOC_SYSTEM_EXCEPTION, // new value for GIOP 1.2 + LOC_NEEDS_ADDRESSING_MODE // new value for GIOP 1.2 + }; + struct LocateReplyHeader_1_2 { + unsigned long request_id; + LocateStatusType_1_2 locate_status; + }; + #endif // GIOP_1_2 + + // GIOP 1.2 + struct FragmentHeader_1_2 { + unsigned long request_id; + }; +}; \ No newline at end of file diff --git a/idl/comm/IIOP.idl b/idl/comm/IIOP.idl new file mode 100644 index 0000000..cefadf1 --- /dev/null +++ b/idl/comm/IIOP.idl @@ -0,0 +1,37 @@ +#include "IOP.idl" + +#pragma prefix "omg.org" + +module IIOP { // IDL extended for version 1.1 and 1.2 + struct Version { + octet major; + octet minor; + }; + + struct ProfileBody_1_0 {// renamed from ProfileBody + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + }; + + struct ProfileBody_1_1 {// also used for 1.2 + Version iiop_version; + string host; + unsigned short port; + sequence object_key; + // Added in 1.1 unchanged for 1.2 + sequence components; + }; + + struct ListenPoint { + string host; + unsigned short port; + }; + + typedef sequence ListenPointList; + + struct BiDirIIOPServiceContext {// BI_DIR_IIOP Service Context + ListenPointList listen_points; + }; +}; \ No newline at end of file diff --git a/idl/comm/IOP.idl b/idl/comm/IOP.idl new file mode 100644 index 0000000..e73d551 --- /dev/null +++ b/idl/comm/IOP.idl @@ -0,0 +1,134 @@ + +#include + +#pragma prefix "omg.org" + +module IOP { + + // Standard Protocol Profile tag values + + typedef unsigned long ProfileId; + + const ProfileId TAG_INTERNET_IOP = 0; + + const ProfileId TAG_MULTIPLE_COMPONENTS = 1; + + struct TaggedProfile { + ProfileId tag; + sequence profile_data; + }; + + // an Interoperable Object Reference is a sequence of + // object-specific protocol profiles, plus a type ID. + struct IOR { + string type_id; + sequence profiles; + }; + + // Standard way of representing multicomponent profiles. + + // This would be encapsulated in a TaggedProfile. + + typedef unsigned long ComponentId; + + struct TaggedComponent { + ComponentId tag; + sequence component_data; + }; + + + typedef sequence MultipleComponentProfile; + + typedef sequence TaggedComponentSeq; + + // CORBA 2.4 + const ComponentId TAG_ORB_TYPE = 0; + const ComponentId TAG_CODE_SETS = 1; + const ComponentId TAG_POLICIES = 2; + const ComponentId TAG_ALTERNATE_IIOP_ADDRESS = 3; + const ComponentId TAG_ASSOCIATION_OPTIONS = 13; + const ComponentId TAG_SEC_NAME = 14; + const ComponentId TAG_SPKM_1_SEC_MECH = 15; + const ComponentId TAG_SPKM_2_SEC_MECH = 16; + const ComponentId TAG_KerberosV5_SEC_MECH = 17; + const ComponentId TAG_CSI_ECMA_Secret_SEC_MECH = 18; + const ComponentId TAG_CSI_ECMA_Hybrid_SEC_MECH = 19; + const ComponentId TAG_SSL_SEC_TRANS = 20; + const ComponentId TAG_CSI_ECMA_Public_SEC_MECH = 21; + const ComponentId TAG_GENERIC_SEC_MECH = 22; + const ComponentId TAG_FIREWALL_TRANS = 23; + const ComponentId TAG_SCCP_CONTACT_INFO = 24; + const ComponentId TAG_JAVA_CODEBASE = 25; + const ComponentId TAG_TRANSACTION_POLICY = 26; + const ComponentId TAG_MESSAGE_ROUTERS = 30; + const ComponentId TAG_OTS_POLICY = 31; + const ComponentId TAG_INV_POLICY = 32; + const ComponentId TAG_CSI_SEC_MECH_LIST = 33; + const ComponentId TAG_NULL_TAG = 34; + const ComponentId TAG_TLS_SEC_TRANS = 36; + const ComponentId TAG_INET_SEC_TRANS = 123; + const ComponentId TAG_COMPLETE_OBJECT_KEY = 5; + const ComponentId TAG_ENDPOINT_ID_POSITION = 6; + const ComponentId TAG_LOCATION_POLICY = 12; + const ComponentId TAG_DCE_STRING_BINDING = 100; + const ComponentId TAG_DCE_BINDING_NAME = 101; + const ComponentId TAG_DCE_NO_PIPES = 102; + const ComponentId TAG_DCE_SEC_MECH = 103; // Security Service + + typedef unsigned long ServiceId; + + struct ServiceContext { + ServiceId context_id; + sequence context_data; + }; + + typedef sequence ServiceContextList; + + const ServiceId TransactionService = 0; + const ServiceId CodeSets = 1; + const ServiceId ChainBypassCheck = 2; + const ServiceId ChainBypassInfo = 3; + const ServiceId LogicalThreadId = 4; + const ServiceId BI_DIR_IIOP = 5; + const ServiceId SendingContextRunTime = 6; + const ServiceId INVOCATION_POLICIES = 7; + const ServiceId FORWARDED_IDENTITY = 8; + const ServiceId UnknownExceptionInfo = 9; + const ServiceId RTCorbaPriority = 10; + const ServiceId RTCorbaPriorityRange = 11; + const ServiceId ExceptionDetailMessage = 14; + const ServiceId SecurityAttributeService = 15; + + local interface Codec { + + exception InvalidTypeForEncoding {}; + exception FormatMismatch {}; + exception TypeMismatch {}; + + CORBA::OctetSeq encode (in any data) raises (InvalidTypeForEncoding); + + any decode (in CORBA::OctetSeq data) raises (FormatMismatch); + + CORBA::OctetSeq encode_value (in any data) raises (InvalidTypeForEncoding); + + any decode_value (in CORBA::OctetSeq data, in CORBA::TypeCode tc) + raises (FormatMismatch, TypeMismatch); + }; + + + typedef short EncodingFormat; + + const EncodingFormat ENCODING_CDR_ENCAPS = 0; + + struct Encoding { + EncodingFormat format; + octet major_version; + octet minor_version; + }; + + local interface CodecFactory { + exception UnknownEncoding {}; + + Codec create_codec (in Encoding enc) raises (UnknownEncoding); + }; +}; diff --git a/idl/comm/build.xml b/idl/comm/build.xml new file mode 100644 index 0000000..6f92f83 --- /dev/null +++ b/idl/comm/build.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/orb/.class/es/tid/CORBA/Any.class b/idl/orb/.class/es/tid/CORBA/Any.class new file mode 100644 index 0000000000000000000000000000000000000000..c657395ea995542d3be55c57e5dec8c0d58cef50 GIT binary patch literal 264 zcmY+8O$z~G6ot30SbLdHD^>8-wBTDub= v`_Hqd7NK(Ea1?M+=)7ZmWm$<;t6o6oFy}K4;~VEcI1sx*nOzWhd literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ARG_IN.class b/idl/orb/.class/org/omg/CORBA/ARG_IN.class new file mode 100644 index 0000000000000000000000000000000000000000..a9977337dd43d6b0fd079b7c8d0dd931255167ae GIT binary patch literal 121 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gR%&ty8_*C2CZHxp21y2H Q1{NUA3NnI$4M;Ko0P&v~Y5)KL literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AliasDef.class b/idl/orb/.class/org/omg/CORBA/AliasDef.class new file mode 100644 index 0000000000000000000000000000000000000000..273c560326be958ea9ded39c5337a34485c9a39d GIT binary patch literal 214 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2C@92bp8C?bbV+4ASXwC$DGW> zVwco3Mh1bb#Ii*FoW#6zegCAa)Z`LI1_kVD{R>iy5=%1k^NJZ6Bv6%vR2HPBq^5xl u6hW23VQ4{qQAuJ_PO84Ai;rtwNoGkU8zTcF0}}%a12Yh_GOz*t0t5gXvp6~c literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AliasDefHelper.class b/idl/orb/.class/org/omg/CORBA/AliasDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..890acddf319e605f405bb8e56251373c2cf8b451 GIT binary patch literal 2141 zcmaJ?ZC4sc6n=)cg=Gy$(2$s>F{TYJD!w#*5o?0dHnvhzwMk=NwhN4e1c9@zP4iQd zUt!yGh-uDglP}FV{ZT!=1G@{mh+k%B=HBPI&z-q<_TT^h{0qP$9?F=&O&K5JqX;hH zW0{6e#IPJjPHeA)@u^s^%D9EwV#tf-nv8W6#OyN(pG){cMjSUK+>xw^-`TEeYFZhk`RydU-WEU zZ&b58rcrBDg@{_?kQ*k$T-p;a-*}qyZq;l0VS(@GgkFjNY8rZ(ptGkzz4G%mmU1w- zPKs8&uvXJBh2rc+qjhAGM6Ms?&fp0?F={5|cY7$&){)s`IxCq_LpO}(6NY&&*H-Bf zFPmq{h#xh|4|(}9uV^;Q!Vs3dGqMS>P;dqBO4w1bi)#ul;~fQ)V)j06Fof-c zRPZh68m?>u-&gJxV8beg{rNcHg1mdm-rPG5B=;DyV7kZO!LOb=KRy)*m@#39ws(W-)T9unx zh1YqNE{9=iAWJ8kg5^Z-+K6`OLS6R?8w5??3rx~`KSBQu23hnS%@mqbJJNWSR-^P~ z^bM*nz<#3%$dP)}GRHecAaDZTamN}F?PpnM;qUCFeuw`pMo)xWFcE4)`U8I269|U) zX!L_65fS}vL1PxNKM}Th)0no5W9086R7B03Akv216&8VtjOCJ|uL!QFZA3T8O)1XU zL^GImhRSZaF)2zuLs)%{PBJePXULjpBh|*mnPXeKBQbl#5j1OElP7V}+E~$I4_#b8W B|9AiZ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AliasDefHolder.class b/idl/orb/.class/org/omg/CORBA/AliasDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..3a06f658e9de701a246e0b05895322e7f093d40e GIT binary patch literal 760 zcmZ`%UrWMJ96eVzmur=lnrZ*6pgA8#y&96)LqQ-^^eQu#Or{&_YV@rNilm1=Kp!f) zS7*4<82fSe`<-)k&$;*e=kp7|F%D!%$R?3MPR2U&yln7NkWiGcDPfC192xe|B*+cF-{&4(&M;=~$Qv_=qD%Xb7q!|5uMh$ zudIQ|c-bH45MvJ@^RZTWM{I^!LCVKueN0lTj1ixMq_G-?RJ1q5#t>#IYsmNzu146O LgfYYyz760P;rFdS literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AliasDefOperations.class b/idl/orb/.class/org/omg/CORBA/AliasDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..85e2b0390be2ef50a34d449e452e669e4b917cc9 GIT binary patch literal 219 zcmX^0Z`VEs1_mPrE_McXb_Nc122Mr>!Th4k^vt}(ocNN;g4Fnw)HFs0NexY({GxRI z{M>YXXa684M}1EhpAew5H6w$R1`a9BFh&LiR9%ianTf?NscHTNsYQt;nfZCej0^%< ziDilUIf;4c`u<5-smUdb3`(fFKo$X=fufI%k%5tc35c129$;c&WME-nWnci)Y(NnP E0ONo;i2wiq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AliasDefPOA.class b/idl/orb/.class/org/omg/CORBA/AliasDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..8b096faa33d27590349e8e9db3428b2eba0c698f GIT binary patch literal 5221 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AnySeqHelper.class b/idl/orb/.class/org/omg/CORBA/AnySeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f6d75810d694afa96f8b30689c7d5546b52f0740 GIT binary patch literal 2106 zcma)7T~ixX7=BJRWRv9}Ayr22~`On7y=1@~`5myzwfj4Em zr9i?p1!wWLjCT}-FdrdFM#h2=E-DzsQiP6W@%3&5D_9k-YvQ;rWH-WiPyBd4jGGFw z_&~qF%L3#d&mT~tlzgStw?UkUT(== zehdS7TPyC~(rTO9c15Q&5j!`k(JppvaRrPL!w6aIX!}~aqM7A%-nI<0O!R}6u90@$ z&!SefZ1G4sYt|Yznd{nKrY9{Kw<){dS%yu?S~wMFqhYszdW9#_5?&})oEmV9<7F9n zj!jH5jCR(HGMm@$-K;n>2b3{kzFwvCckS+e5z40kv_7ZitE(cidV)N8g; zH979$3y#+@!x6_A#{?#2e97?@3LIZUSE4eU`NI-M+JKvCaR~!r&nsaMNzegZ*1@AqG?8YC9vx;YEUY$ z$S1?OL@yVS^C7o^3vP`?%^9XoEn~|nBb;MiA9r|P?rO#t-PGnzO|!368uZ$5k-E#) z3x;U5Lfz>#!NEUpFHqWhl9JJx;?1>n!=#oD*}DbJJYYEMn?curdOup$?Ly5m_6*zD z*9&%$Vb&kGXY8laHeE4~eOUhs2kG z|MAphr%SKYGALp>6dIMPS$39UmL}8@IeG2gh%^9{)~QpV+cyA1zq2t;z=MgbXs3uP zbj#*1g+Nbk1t)0lU!*@1q9w?Zp^lON2Mt7h31ndX;02$I;d+Mm81cFBh z96H(vrtpfVy?`JBBppzHfpjPJ1i>cyT#yJZW7;#z(JjnW^%+7BF|IyEs0lfjdIsqs z`cqFK{eA5w;UB@tN(8|m5GAl_0;6T+fekuPq==22gi5QnQGw=An+VqMw+p|D9sVf;)(}$jld)Vi>s;Q vCeBNX@zgOPsj2u}6Bix?2~`|azcYXL`{&~ez$uP`@FOlE5rBmCAd*P&u))Koge?i%5_TBGo^Eyx zhUopZW!E*URo9B8n~Q>0X!mmrzI>zIaLyULO6HD1C|Wgw6UscA17gKC^cuslG9}ls zY)7w}hIZBNbe*z8SS!aXe3d7=;gG1Zu%y&=CTqls)9+A8O36%Jb4z*NV@`&Q5JO~U zC>cR4N!XQ<#-5CQ9LP9CjKpTpvhjFnnKi>^2sibfu9iy5=%1k^NJZ6L{XJ^y7+`t7NjyV th@gt&FtH%Ns3b8dCsiM)&o!?kv!s%Zk%5tciGhWI8HiaK*nl1Z0sv4EHv9kp literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ArrayDefHelper.class b/idl/orb/.class/org/omg/CORBA/ArrayDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e8959c86b6051c95d70debef9b5b3e01610ac4ce GIT binary patch literal 2141 zcmaJ?ZC4sc6n=)cg=Gy$(2$s>HKq+N>iW|3MXU)*+t^A?)h3O7*)A{=5(Lh=Hua|@ zzrwcX5YwE~HeZ@^`lEV!2X=v7#4ocmbMN!q=g!{(E+{G5ZO987MI zqE#=f*)T1kSlg&Kk1UeNjf3ntJi(`C)uR0F3?pU6pqk8EPFFoO9-CfSKf<1hvU>*w+zE|)=XR*X^(^aJU zqQ0bcFQfkq87{dzwY6Mczn9z26&NPnmL9%+fEx$RnuH$}==h0Y-0kZKmS89-qQo%a zcF-M<9qXv5pbV~H9~FkHZa>HEF0VDY$q?^VeCHk+M%@VNDk?~E?hF@8RB;y9t96T; z`$mcD7D=Hp?XlQ>Gq~fu*uHl3M5MlA80oZ~?x-48FrJ$2vWf=0U^ifwBsK6T*u~3m z-JNy!a{4-rAu9T^%QiIx;;sj!-Gg1wt`fm8TS+SZ6@KifJBe|sWgt=H%KGa?mU9^%A65vJi8r_gw;?=ec&x}#D+I=h>}x_fz8}gpYOA*U>S;nIAjUC z3ihzCpnwAfhe$DO|8M%rwpymkkmwpiL${26Tdy~}=A*|@SY-U!nL6Rl!c|Sn;i|$k zno6k8g=hlC=FUa*13M2DS_mvmXmX}JN1V`Ak-)G-FXNHXH42~u65ujFJxUF`$x zl^U3gSN(AY5qbcbkG0Y}A~Vby5mvK+1=3HAa6D K#t>ilHh^EaJFUF{ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ArrayDefOperations.class b/idl/orb/.class/org/omg/CORBA/ArrayDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..ead148459f498ba85a70d8055e13fe4bf7d316f0 GIT binary patch literal 305 zcmZXPy9&Zk5JYE02?PQnwsJLVRAM6WBKT_-et;h(UW4MRSPtyY z>@e5c`2wJahJ~tynuR*Sj5rR}nqb(DOUT=lS^ za3H37KS~1b6PlmedB7_|>rd~Fy@y51+xE|^*Xfbl{Z1LAsXUE&To literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ArrayDefPOA.class b/idl/orb/.class/org/omg/CORBA/ArrayDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..a0dea8dd0052065bb411ca47d38f8a24e984089a GIT binary patch literal 3564 zcma)8`Fj&(5Pp{?+3j|bQrb!=AfRH8(3C?cErLBzDurTO!HTdh$&xNjld|0w>V1pi zeP1YwCwS1JX{B;_Aj-euAK))MKF;hW>1LCM#~=3iX5N|ao%v>F_sYL#&jVP6zhpFG zE8jY0Y{Pbb>ng@N?BLtoGP=y6)_3@G7KEx#Q+<{`8Fscfh4~T$v6m;Z^L}EST@2pTCT&Wj6*og zZ(|}Jl<<&*hb25B;!zoO*ec;M=Jq%fenP^N5}uOqw1j6QJS*Wj2}eXcFX9CeM+Nv* z)rbxYn76z0fHtay<60sX?y*cG5o;D8se`)JpJYI#qaU%1c(~n&SVl6TnPY?rY%mgr zwNXG(b-))cMYTsqfaYu9 z=crmdt{MqTH}`81o!qaU@vtLlTH3z2-lLnNx*6Wl)zZAXwWeTL0V6S*93YlUX3QOO zj&Zksa6})rnmL}?J(d<3*rpBjvU3qHQdTxZ;&#jmHe!>4m+-QPR}{R8*Ld-|f+jR8 z*nrzayrJMtyd~mo1@GWp0adxlXl-d%yLN2uZt3ml+RpCY6EJt?AUY`2m~JX~A0H_A z5XVG(q~K#5SMUiwRd9mEpW$;6UnuwzUn%$+Cl#Dx;5Q1s#diw6$7u!Qn4mKm)#4)* z!WjiW;70{1wm!jDlb90mlY+CDR`4^RsXzy&I1Fz>;a}T{~WqpHyMfm`d^o|Ybj=q3{j_$5~2lR;L0Or}7+O@bv z8}7HyT|kK%(=9cwCt_AV=aK@uj6YdEoRw30ZIm9@2la%dTC}NviaePb)%UZUE!|j0 zUTotX+u8Oz!PNmH5fvatsdUWbn1EpJS!W8LDpNoxqw|z)`&dF7G$I{?Lk>ZW8;uGz z1J6xo*N|@72xK6Jx;xDCJzZ{@HR}^ z!!??=F3+SulV^!|`Xi?w1r#SU0ShRnXuP#Yk(AGr#>|+a;Y6h&V0pF6Bujn9OO{53 z8<-x4JPjloK0CRK>~YsY<4#SQ`>0UzQ%g}&vE}BK<{On`#MCuQSL4PoQ3_Ufc$2q% zXD6x1x>z$~BV49*yg_do(!ziS#FL2_ zMMb2@ugukN>cb;(B3kJsz}^_;<5@_F&keP=ZL8f5k~NU=TIreg4ulw$a^DV_#-L#t zqq=HE3KUuz?9CMq4gTVg7oXFQRbHN12$S`&bdt!Kjz(2`JPK$naP}VN9D4q-X@h#y zE)F6yTR&`>S|poM#XUp{eHODU^O`ZE$u^^NRs!n1kuoh0(~PlwQl)MZ&Lj)w6>fSG zQw*M7Oe-=p@;=@LcF*|Y%!}!a(CjP3+k3DXQ_htqri_ZcN;89ZNnR-Qm%+736O?O_ zB3hPPqq+J_U~9bl6$mWX(oSyC&whw5HYNX|+V^SyL!Fokg^z5f!w>ERq)2)=k3a zg0y3E8d6HnB7*oP;LkX?19v)F;cxgL(yo^#5U5K*OhMWfx{Nu~DDLC+B;*UBizrD! z*|_MWv;T4X0k%T}U3=&{M%NX({vls0>Do)z(b^Pd7o~7rldmr5OJNSJOV|2Yn!?IEx8H;0(YY^iQFD0u?D#rf_}GS2jQBCrEIY<1R?n3)Ti|E6Bde zw)bqdu*tm{dt2n%%mZGW2fo1tF2HO_VNO$6+7zhen3fgdbYtE&*Wh$h9{6S#Cr<#& z$GL(8Y@vHO(Qy@xLTFPcv_2FnhlIPbr8fyb;ebLX_WL8O`<-9@GcfKu)yaMtYm@TC0NCRfJ?BN1yoO2A8S}3 TxdgYepww-%)|O<9oCd*v7V4`$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ArrayDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ArrayDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..4e40efb7dde612c19bf841b17bdd4bf17cb6bca7 GIT binary patch literal 1288 zcmah|X>Sry6g`i1fYDM=5W3ifDvL5*TmenGd?Aw1l*WYg!(<8%oH`wvVbX;EPCla1YcqZX_5Tzi>K~xw*YMUFptJ$1kt=6-;O7Fa@?AMR>c9mVr(gp{- zQ@`MrX6rq(UuN*Ds^0E1#7}Bx+NGu#n%Pwvwxye0iUumWsoO6ZHnP_z%e`js?f2SL zI+M*^&u5rZHN#MK)8Zg%ZA4Bl+6 zN+PmVp+zPq&beu;_TYjvrDrr9)4tG47mZ%!l7}6J)C|9RP!mUpo}S7adpik@JQ&xL zD2w`5H`@#=GpVQz!dYsPxb(k#Kb**NZ!pn6n4 zJ>xBVOjvXuIcnaqPCZEdH%unE$EMSYReB)vU^M<7`p6M_L1AGEtupN=afdKPe~A%; zqWQ02`N9`?KF}^G8b{jUh)j(3{Q1xDym!J2SaiZsTD`RE`v~tOO4d8k1g+w5SR5Y0 z$MDX{K%H?oNk>FPa2AH}doWQ!opVnVV3-u6#=3KYS2-ECVuc~3X)&4$_e7y-A{rZa uPI$_psdDE;m~$}+`9GX>_(qN-1K%Mxy|EjOrZ0B0(e%gW8lT`DJAvO+XZ|z* literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttrDescriptionSeqHelper.class b/idl/orb/.class/org/omg/CORBA/AttrDescriptionSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..003c24c53d8bb53da5e6ff2314058d74ca542abb GIT binary patch literal 2280 zcma)7U2_vv7=BJR?Izn(+oqsU)7k>XWTOof6=~XHKhTDz6iKZjYTTs9xHTkUvq8A$ zPjKrEw?&5j(@o@m3XxKnf z#Z_sssUd|edAg=zTg7#TfsB2>EErCtN>)Bzx}A@&ZQod3iSLkft+Xc+41K68)Z7+LHaca3<# zDCXm7B3jH-fPPCDq}}w=DwixgI4A5RsZQbB&SOq=q%btLe1)ovm8 zl>nK^z+$f8)RAKnQz~w7q%p&AwzKXlREf4Cq{W?$QejV6(rZV>XB@luoMBW{;;2-b&Y%dpY4$lj9b?;&=z|a=eK!$24YCe9aL-l;ay@ICR7qLfr&7 zzJ;YO2o+b*1+JEtPckpmUyRCjFNE|Zj~A-?0t<9m)c%zjcL3T0tY z7FvOBXZM9{)7icX!Z6lJjfRF=O4f%0jr4^fi|Rq4I*_a}d6`D*$yTI@j%=oul{0T4 zciuX@XS-&k+2n2R)Vg<#LX~bC&r#FcB4f%4$W)vWkQ}_5qKVQzDinWbYGjeURoie2 z5OQy-h&xqL%!!PhW4I7Wde%#Gq`eH93WgCE$|#sd#lhK)bkBVcNhjMT;{RObY0F+| zV9?}#$y5uaV&2)jNrtOOR$NSd9*tx zJVofqBf9IKp&!-+{QxOsxf$pbq%-X(dcH+pWAtY99?+kFJ*ET5khX`b9(9y}zYgDl zqYdH|PP^KZ@WV&aVf}X~H)BuWuVJ7862uwIx@IYQOEX=6hQWuJ(w}0m1~nCX2IV1! zVo#y`ion4m_)~ffS{*|NOWzga3)iI);@x zUaMhbla6(ahQl!0#?NZ-1n`(L!+-46PE{#8WJ_W_&^FwNJ*i!4jBJR6OF_~KfsSN z-oa`BW9-A+nYlUVF6Z9&kC!(9TUbvZhO~-_I8;m~FokJpW~7-_F{ff)#R7xUGVLa3 zSi3rLysF{UtHyreY;V`t6~ePhO~DWNP1&pi&AKcUXD@}cP>$;^-Le< zg8Z`Ryao+}49owwts#K{6^j~{u&iMPs~XmjVp#vp?NaNUUmrSlg?kLin%Oc9+iX;g zLaD~ff?=tb`_uhb<5Gwq@wx5F_>nJ7kArC%XjU{SU-r{KqxQ%iC~9YC^m zoDP!$)7mQZqM?u-qTduk^a2L6&tTc`D?(2QKac|**su>v6D&l&L4J=6tRIrgJ|f(P@||fMDIb!gTNV^)BYH2(06qb*YukPR literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeDef.class b/idl/orb/.class/org/omg/CORBA/AttributeDef.class new file mode 100644 index 0000000000000000000000000000000000000000..8b271d4e433271fd3a27be3c9abe8e4fe9bbaedc GIT binary patch literal 221 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2C4j_bp8C?bbV+4ASXwC$C8qw z%%swiRF~8=Mh1bb#Ii*FoW#6zegCAa)Z`LI1{K`u{R>iy5=%1k^NJZ6#8H(w=jW9q zX6B`)Ffxds%D~K3Kou^?FDgk)%1PDtbn$V`E6FUWWMgDtWME=oVPFPgRt7epmw*5O Dc6U39 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeDefHelper.class b/idl/orb/.class/org/omg/CORBA/AttributeDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bef505c0f010d5f57ec1047c2dc41f71acbf16f2 GIT binary patch literal 2185 zcmah~ZC4vb6n-Xen{0+Aq@hhgZ7J1;4J8GNF9fN9s6~lXz}Di+x=DsKZAfyKjkQ0e z{S~O^q|~0H_KQ8oALa2*vI)BzIDDC%nR}mSo;&y6*?<50<4*wdc&K6miz?p72N8_p zLzRY)J`znWd!+*-|NcW8I5SrIvg&~mL&vsM`V z>FIk60l7^dy=j&h#?sRsB*6(3=+TZ3nH|I<+m=y&Tr^rcMyXDezFLJLNr*?r&qlUx zG^*Kc%d9o3QbetBAWVy4KJ7U#-*}qyZdn8?wJlK)dpW6D5x-cbQ6~7@NpNonc_*G? zF@-_OR=v|_pK0+Frrk3l3on=J-9q7b2bUFWbL`+M$6I)tV^YrE!*vGk zyj+fNK|2<_r4W{8qlmFzL1&n`$PYmO3U#DmV21f~H zhRbdz-RZS$wM!fo2#!5e8Lqf}ovwF8y(LVB_;Gjia?CL5Mo|Y+(aKyfoG(*VT0*Zi zEMe{$WuaRnX(c_}W5YY%ggaW-b0YO1!$_}1^}ed1RZe)nc-W{+_odR*!2JiOh0Cee;hLC!bZo+=(LA`dM8}fBL;Z}F)s`RR` z^opp9DkXVjX>ZCzQe9HB3se6-hjWmm--Frwn?_x)Q|eh=pPDW6u||+Mw?-DdAc(7#djg^9^cbnAE@N?^*zruGM{p8F zx{gPUu5Id9BiE<5l);8I&Pa5gJc}}Mbs?qg(=bQu&}WxX@@gfrp*z;+d#x#0g`yw{ zS;B#WB1#I%I8<X3MGQvHNesekEffodw@hq$&OBF~vMVHkV1>PeN64<1$W|;-R@c~9dOBfU z?E~bMH835o2jd)K>;Ysx)~fG_%`qED1(%1kOP zN%e(Trhsk=ssfN%DyS}nD{x6o^Djs(N-W9D&nsqR5Xed_OVrOv%uCnzPs&P7E@5O) zMAhk>pI4HYnU|V^(8k8dz{tP^#LU2;Vr2n3oPm{r0Z6kkutRAMFwM!p1*N%xDj5J9 Cgjr(% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeDefPOA.class b/idl/orb/.class/org/omg/CORBA/AttributeDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..c495b83b8339ee3c8314e4731bd2c4766d9954ab GIT binary patch literal 5585 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeDescription.class b/idl/orb/.class/org/omg/CORBA/AttributeDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..8387626af221a5504c7a01125078d2e25a84eb5d GIT binary patch literal 651 zcmbV}UrPc(6vfZzx~pdYEK4g(D?+zo!Pg=v?IAFP3SVQ@Nk(*6)+y+%uhhd5^w0bu zs*Q`2W9N#hRlmc@Z45{m^4~g+C2iljmHd3%W*!Pp$RmbmsoW%&ax*-Xeg^ty<(Ghe z#ws^c$Y6;9DH_u$%qYw%%qh$xox%bZ88#=k|GZs|kJ^D4O8r=KUys{p^>|w{6efK` zKag&#&z-Yc{nV2}-lIrAl?1~SOd_SAA7(0uR?4E4;%KErS}7E1ggPldahX}FYPNTIe^P%fn*u>@+plmIQa3MGgZ#3I$WNw#qzH#Zv!-s=5+ zsaD77FYud#wLnHjr~TxNf5{og_iUDsEUClv%Q0tE+rS^5JzpXdGghuU0rn zim%cVGRX3c9GATzKo^i_a7B&voXT)ClGT%;Y&sblo4qtT5}GIJST>=C8QgIOd~G?mE}3{qE>bohWYUDtHYpvXq<3p!gc_D~NR zLvb*kG7~7H5B&lR83mkS@K-0iR_rFTsf4O?yHx?#WUOJG!K>y&hL*7Egt95)O}r)J zZM?&9crR8HYjM@gq>OiQUB)?_m(hz5Lre9^6s1Dkm{HR)Rj0^ilr-h&JsI!g0~sIU zBYytJ3{pb9s%6wfRLf9dtg3pRszksiGQt=nyEK)hfKO#Sfip6OKn2@W%PAS3;d6$- z)Ocio>b;kfDb;)}?ScN@K8B8J#`LN0^rE;kb;QZLMmZ2v17%Lo$8lT~ajYvs{E(C8~Q-wUGXg$k+n` zR0Wahq16@!`+jG24$34euXqO8d=knIH`mAjePM5Ja_CJqylu z`c*kazejXk^Sho_9$M48L*r@sYNVOb>0`cH!JY%UvXy$5xz&*Hcp)GJ1?kxzB;5|5Qp+0yQjyn)H zeugs=*n(6<{RUYGXhplp_AJ?oaI}pI7~uTrd9jdxAuZ1Sr`wSK!VRzc4>U{%96M-O z^gTqBZ{yGwylfkda{;F*_1UB@Q+n7Yb(_*An^Z8R%|#q3A&Tbr!$ll5zl%6lM2qhc z^5OVzkckqH82u^H=mPr(H;FqvgBJHgCUd~yYu$}3y~x()1qv7s*}x9k7Ps+eBuJ=_ zZKBTTG^{5;ila!GK5aeuF20Bg4x_XgH*PgL_W&S!xjX& z<{EnQ4~ApAT(4V(cGYz}e#;5gDGElY_UM|NM6%N&V@lQIlN`CmpB$p3vbm|o?kFyL zE~;3Bsv?Ytf?XAR*jJIpfr>-KN$Yq`=KK?uO$|KbKgzzTm6=5+Or59bU>}6g z>0F|(*dRmE{5#kS1u#f2`{^VC^Z*f&&KKSg7-3cr^)U$_6V4a<2>yb^usRJX*#a2quTC@UQCh^s3f|Li6p(Im6(kC*|kxU(C2t6hGP5OZK zQlp6<;71wPnU2Q#pbxXpzMQ@GT6@m-A78!!c#KC`=%^@jN13}hWU-T@cTbtBj+#2_ zI_~RuAYcp{y`DYT@7kS)B_P@Y`DPfLNGFhe$3Jy7qC#Nl(zUV`&csT{z14V(-KbE2{ zZwjpZJ(c1vcTK~YR1(bgp4AGZCtnMcqb@IunI1@rnf&I8+x($f{-YdHC}If){XAEm zz%pafrC-GAANi|{sUW&TO*~WVp%U74Myou9%GN(XyrlyUpvJiTG%oLKyoqWR+C=1m zGSzbdZk-{qID@tjizu@}n}W8fX-KMF#87K&RIR!CIg<6#M~HWf6hs*}Sy5~X@wiO= r6H=d%R)8G9FUiUlGTgv+j8{SQV6pxc`k{7?%zGr1n~YrT0vta9lRlIc literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeModeHelper.class b/idl/orb/.class/org/omg/CORBA/AttributeModeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..90e7e5ef0e47e45921867bd54660c2af14d93753 GIT binary patch literal 1928 zcmah}+j7%Z6kR8_BUw=(F$tGYQcQq4a)}A_MiQXTrC@O4Vw=#Ef{^VKkEkPg6q(DX z@CAJhmoXj~I`Gt)epILX$Re@iw0Sv4+Sj%BUiEHTu^WVSL1YClW<+ek211Cv?z`x8OtKfij1EW+`vr*IouM* zZ3TI(N?4OnV2J7N^Co9Fp0}NP#@?!DmI}qiY^F@oCA-Gw83q?j%XF_XL{ii13{fGb zOShd0!+2^sb)PW0jJsdT`sF^rMLW8;aDX&6>LQzB$mUHCiPAnj5Z zPSbW=ktCC|nk|>ixv@2W5Wd(`$8@QQEB_g-&~o>}9oQ~;q1y06=d76#)S6s<17uNC{Do!J*LPJ_;ddH~ZH#}gN z$}Q*Th?g^>lrA>|W^=PM7bQGYq2rMRLq!EuftP-2DmXR|=mKvvxf6h0s66I^d85JR z5wD2_qRR}Y!*dHj@)#WQrdCqK?o#MomI&4`oDYZECDfjk7ck+kM8Nx8AD#Der!{|K zG+LDH)c;b6MqDNSx?DE}ne}at%>rYX(7RcBSdnF_;R*+J(@&wG4{4 zHL!ZM(JjB$F#R#FX;nhNE_m-M?57E?O5quKfxPnvqIsV*hOaq>@0<%XTT42*b798#MtLT>5cJ~V|0r= qGKCuN;OJ+I8DxBmajH<%7}wHm9Bbovw+%8b23k!Ph%o}wRpVb-4chqt literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/AttributeModeHolder.class b/idl/orb/.class/org/omg/CORBA/AttributeModeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..38230d2ba48c39aad2ab1e29e1022a51ea6b39e7 GIT binary patch literal 790 zcmaJ zI-^aLvCG}}opbh`bMN=h=NEue9K|6c9YYkEI5x2*mTj?QW$ehm=t9wt^Qj}ZO`Nn$++DVN?58X+=O*+9yJ P2sK83ii{w=h%ta)-JiPM literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BAD_CONTEXT.class b/idl/orb/.class/org/omg/CORBA/BAD_CONTEXT.class new file mode 100644 index 0000000000000000000000000000000000000000..9664700456bedebea7dfc09f9308640f17a096ae GIT binary patch literal 478 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuM0J6aqf5NAzh8)JL{^BEYpv>2H;F)(gtVA=>)1yaKSRU-ma!weMV&|;L?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuMs&BZDleY;a|9 zNouZZMRIBZ$dQZ;a;Wm??q_7+arXBO@No@sb&2=$XJk+y?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuMs?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDM|FXdqf2~%W00dSBZDleOmJm!NouZZ zMRIBZ$bpOua;Wm?Zf9iRarXBO@No@sb&2=$XJk+yRLPur^5s RW(F1@j}^#cVqgQA1prdZ89D#} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BAD_POLICY_TYPE.class b/idl/orb/.class/org/omg/CORBA/BAD_POLICY_TYPE.class new file mode 100644 index 0000000000000000000000000000000000000000..fe0d2fadb6e37c29bce34bdcdc3fea9013fe4b73 GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_+NY YCZJ|U21y2H1{NUA3Nng;4M;Ko00_t$;s5{u literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BAD_POLICY_VALUE.class b/idl/orb/.class/org/omg/CORBA/BAD_POLICY_VALUE.class new file mode 100644 index 0000000000000000000000000000000000000000..ade7ca4f4ab1d7db9a08ab798cbee36fb605b1e6 GIT binary patch literal 131 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuLUnn(1mP3 zk{!qs1M?XexU?9VH!(17XJFb0Rs~YS0aYUcRKpAu<Eb z@S(&B28FhGv9mL~-^}bk`}y_u0pJ+>3Ub&`pdgVo ze=r#Gh=Fw}IB`5DI%N>GW{)A&@hwi9){Ud0cJ*LBnTBh6ws9MUj%T;%Lc+F+9n@50 zv8!SkDnn@&Y>yn*;$h6JsHkI)`VrhfjiKU)w&6e8M(6sbeP*;x>%tjxt7p0+YCdy& zH{{{@xX**g@jZt6Ke?CO4S2{PI2J=*YtFx(p|C(xtTk;00rx2Ha1k(9DUsJ=kR$(R zG&rKsEA$_vG#(0hB6*~r>?%ch2;>2>{t7mQ@JxP8XR($LWg-MR%O-?gd4c$cttXg4 fg+;;|`a4qhQ!G)v3DP-<%mJ+lWGb&$f0OYIRc3Sr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BadFixedValueHelper.class b/idl/orb/.class/org/omg/CORBA/BadFixedValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b367506db9dada6cfd06b69e98d1184c3e00a5e9 GIT binary patch literal 2381 zcmai0TUQ%Z6#fngOfpPtNLyMcrBG~5CYI0^Zv?B{Dv=;c5T&SbNDgrzWYWomg7xmN zsDHp$tTnJ?sqK?%`J-I!Gc!PDpz@Hp?8~>mvu~4s{{8(=0Jrd?i~)?uNMlsOn=%5p zBjYW+En!SX8^*&VnUF9kgi|uE;%=BO??{*qArr>Cm=V5N84=71^?Twn7sC5O{6Prw zGICgu@gWu^d=$dRGPPgeIQ7&>*I20vt1*<4A zM0qV`=|#5*s8kBRfUaN->kMa)(lWJG;8jaEDhkTjQ1A*~Rq!INF?4%FQbOtlYnE@U zaFe>iSY54gO9J^Bs4BP*n?X%M0;+=B7^dQRXezK!XBfy#W=E(!2L-&-q8_u6n}b6V zHWfU;u!JoI+xU{Y(@SP{Y(6(VmSyP7R5rD;UhFe@)u`!~VQ%;7#X*sbhYXjzUYdPP>G1TBm52|F>VMj|wy-7SHQq zV)8Y6WCTb5)Eq`>9xWPBZ^{-XX7mb8X2@F4*ULtQy13Ivz%ijAj+VHUubTRXZt0sm zZxtAZ{Hbw`{bZWf#AN*Vg78N?Sf4&Qb+G`lbA6BoelSZmpXHOlkNSq{CHB#>50}J; zV|Hx&G*Q3m&D}{EW@s0yPSk}Wd79PV}+GAQ=aJml5xyt-h)cqXwJ?5EG-0DW;OlGsM{6sBidiFA$ATL;}4 z-CNaNuwUo_WJsIGRYz?l5Zpt{j;#$NiI-h%7lLRZX++&eU@5taU<0iVNEkOT=$d8e zF3eQ*8QLD9SAB}M2Bd8A83K>co_vbH6NGktMlh>3An&1lhdd-)M!(HAMZO^fddDRU z3H~?f|AWImLso+Q@M9={<3{igL}t{$J|au87l`p=oM|A+cF~dBLu?OcW9KNq`Cp-s zy*Lhozz%>75iG4*7xs(|N{U$L!J%oLyUIIcFHVyns0)PIz{Q^s*+ta}%i{@O>+ z(k@MWlJvd5;Y!jI=mG_L4X?XcJ%l8%qN)wlrzW4^N(22)4nuguQztS+D(A0-fuSSqk7z9FvuQJ;ZWx6q@)xRnzk{ zI-@Dd*vH-XopW~2x%d0$^9#T!j$}wkMiD_u#wNCS+2$oJVMoHQgbaf?(5=47kh!tl zmS%TbTBUYdzR=3Lan*h@jXEEf7$RrwUfVlo2&?%zgHW*zVrA8ZG>#M-uBjUg$J0>9 zc0Ijmnc8*F>3eq`!MY{Rh%_GEwnysfTuQC)1vz5Fdv=JDR`XLkx~D$hY)Qc~6a`Vp z6804ABdZ{X0|kdjFyt24uiBPjx(u<7KF~Ew@3pjAvtvGZGqgWXV>{g53?`6l)wCQg zEsR5|%yk?HY06?ikg5J-_|)rY=VPGdzbjvZN>ApQza zn<5_g06q$F)=6m`6j^KS?wL84nf?9e=Pv+9I5J`2p@Bs_GVvH|CaQR1;whdPSjUFi zZR*(4v904dK^uDEz$ef-q3|k*0{NP-VAakD`DWbVNZvYEC(TWKuS3|eKEz4aiF;kA z+4^|=#_7k2^xC2Cyo>q+c_JCsYbZv+{hS1nGgxyet%1yPG*^DOh`_jLVgv~7B-+<%U)U1T9IhZLC2trBbw#NliSy|=nIm~G-2urDUcid8z#mciY z$}U3rKdm_0AgpF7r_J|4#0Hx3(_PxitjZ~f$;GZO-F_1E0vQZ_S6&bfW^Ej2Y|M2E zhx`f+a7kXI9OD8_+ktKpHMi!WHEB156dRtJlcgVoF$MW#gUm-U_{x(Y)m8nXkD*b@=9fc9}uc{f~FH3L0>;M1& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BooleanSeqHelper.class b/idl/orb/.class/org/omg/CORBA/BooleanSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1ef046d99e83b3e1eb8e5be2ebd36f41bed39752 GIT binary patch literal 1989 zcma)6-%}e^6#i~@VUy)XLg-Hnv=obBql6Z7DeciSZ)a0%`iR?KOcs1 zOGOqRiDg+u4!6bfv4Rx^pD^?k+y^y-;atvkDrtMWl3rT5v$&AXlXb~18ySY)S<^Dz zc?KytvBn?^Gi?RiDKeZ+P6Q$;Tm+d`-Edq2P6o~wtOuEmb%CT9_gzOXk<;1ZoF+Eb z8KSGMUfQ~?*YbL?YEb@kv&VSo$ju#`LuQ%b6nSjwJ9@gRTb1;x>zG!BsL76@(`hnz zXU%q8aY;IB)fz6j8~S#JNGSM}>h!&1x|FtdV$@2*ZHIXYhG$FFR_!>3F{0oO$0|k{ zM!IXgXxmjow^ogNx9n=!aD;bW!Dk$6_?#hT)YGn6_8*4I$MFU3a;ytpgY5)w-Y*$7 z*R(B;4SdP*2Hxa&6$y@u7*+5U$JZ!ud;^`Mh!Tf}6ocBnoudp&@nZHyZibXFDOh@H zX#31unVeGaEk_04ahTXtu*FfuHirfKWvLm}n&D73ZNe+XO+&nXNIdjFcTGq|^iraD zRQse?&VUP5g2FtV6};yX&&M!+;v2QSGD3iHUw~cFmyhV`P#7KI#A-*cHt4p&5(&jM z3Z_s^q27{>;1KMKLzGT=kx0Aq&Mz&S7O7Kpw+cm17Yt_tE#x_olw%dcEz}%y+jPwx zqu`bprh>`)&OtgI%@X%Bs2lehhE?)#rjyy=tp_9FB~bl7lwLLUdW+9m@@NkpV+mB@ ze_VB`JLI_XQW-_B7aCRDsRd$gxuKhg)tk^0m>j|&@ZT}Ehp0qEpWu}y z`kRO?lVJ}7@i@T_{sc~5A_?jWS|zY?0;A#MgY~zd=pcUTAXOS&{^30N%M^8ipia*v zev@<3{BYt2#8Sg#Ig@`VvB&@Zm1@IB5qg0>1(S^ZO;wH{jVT}N8evI)AM`Lv%&R&612^s6*8l(j literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/BooleanSeqHolder.class b/idl/orb/.class/org/omg/CORBA/BooleanSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..e9183f6c9f305ba2932b253492104d1232c8d893 GIT binary patch literal 683 zcma)(QA@&56vzK}ZZ6jbvSte`m`M!gzA`ce=G89nHO%)E#)-5OV;Z&gqv5q*F@ zRCKSdaDmao4)@&s{^y?aKOdj3?*NXluR%pJhA2`R){quqU4)E^4HcUzwg{A=?F=Y^ zRId?4k30PiJ0XY|`D+5X?6&wX#i-Xrsx*9Rw+If53)gR3Zm(^XE0?8H%X58ZHyvu7 z_q_qDGLH3%LJ@7;`5nef7&9f60SjxC2D|sTBxB@%J#)qHMMp&)^U!s~psC2}*v5{I z9Cmf=AwiH0H&=39huZxry*+cC7WE0@U3+L-j@@rtm1dXTFoIlI^E1$77BSmjb*bZt zy7I)H*|Uc15q>LyJ?8)HnXEw;{@{?WRRzHu|A?@HuUz3L?hKC$JWE63CqOq}K+MRS z{0!-l=NMCq0hQvE#P75*RhVLy5D%DSz{JeL2$3md87se$g82k#1o``=RU`sLR1^Kk KBPb7|4d4q5jgwXY literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Bounds.class b/idl/orb/.class/org/omg/CORBA/Bounds.class new file mode 100644 index 0000000000000000000000000000000000000000..0d42d4fada6ed8873703ae461c5ffd5b35bb51ff GIT binary patch literal 441 zcmaJ-O-sW-5Pg%>CdSl{w6)bLc<3Q*X=6P$BADtyC+>Kal zAG~f9tKhsPy-%HPPkmDiYnL@6ki7`{f!7K;O|N!- zA?u2;nM6NL_c)jyl(01eGob*%)_VC-T}jT$in74lGkB9S5Eh2AjhVS5hb3oAv`>Wm ze^1E@^4prEfzN!-rr`>zZSDtAQj`;Ce zUjZX`D&2anSeP|8BEVg_;O0u}jPkzb&Aylxa zV+qSTW}p%FrW$x1=Ch#ZbZzhAvK2UOml3wAkpDR5QOX`}qG8dMuw8whUW1?)HkSpg z)9ZSKoxk?RE+p}R#gRdxXY2W|= literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/COMM_FAILURE.class b/idl/orb/.class/org/omg/CORBA/COMM_FAILURE.class new file mode 100644 index 0000000000000000000000000000000000000000..eb2dc3ef25ca729f58164c7509fe47a042e65992 GIT binary patch literal 479 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuLUVz?uW!7Yqo+@3kSimDEUIL1WpPPr zu4_edY5~ZNj0|$9^61WIWZ-f3_YLrI4RLje_w#3DP$1-A21N#DV8DR@3j-t2g=|2Q z9mo>{^BEYpv>2H;F)(gtVA=>)1yaKSRU-ma!weMV&|;L(&*c;C+rm$r-Gvl*T}2IhrTG^qI0`RVT_^@V#oNZekYC zOgx1tux(-oy8@PpDvAQOi5lJryfyI-j)^_&6Be`mx>tUD5_MWZOekLaL*ME6y|&Z1 zybhX@u%1Q#pYDDzH7H?Y3T8|Jg0A%Pnp`arl=a=5LK|0sU?i%g#8Q^Rg0msYB|`a; zL>#RX7P6EJ_e0oY--NtLb5SDD|uH~=MSC^}LZf0nb0bIV^J99qv-RInW?(Z*u-UDzEH5Eg+sNxbX zD|knRgm+b3!FvkcSJ8v%I9aj^W`uE8#c9mNX}K!CK8Rx;3nDcqmTSUxJ%$g(&qp!b zP?5*SVp&vCz)i7yqF_nErwmcUdr-3&P8F(dIaA##XL3uo7UnZ6WX)AeR+gb>#&&FP zjzQ8URvBbrrp>6j>kP-WiBKk`izM5rTdqgITF5`|Jjkx)1d?Li_gu3`K_?Fjnpn#* z^eua4ar35GTQS!w7S&HD`;3PUoZP`VVwV_>QN)J1ZDuN_Q_d`VuI-eGn(SI8dA0DF zwW{lhLo#`%*6=9YGPklsLcwR$r|(_cqq6lQvz8iOJIyaJHdCy$ddD%05e2t6mNCk3 zrn}d`Fq*`?rCsCOJ+;10)^g4AHUy6g9gR?V}k z4#yh4;&=;hbDTkn<8_QG_?qJz7#!cisS< z(-$VE6nw`~#$65@8wxf#D%j$1P(89Dt5UOEDx%GEX??>IHy#m}JJ8(+QV!jYXc+Zd z^II4Sp$1TzuPwvBB5`F5<44|0J1Q$gmkdPLm3{tzmR^aWBb``no0SHgHdrKac$Q%c zr5N>=R0N0cEWASLloScGyY7|TqV13(6>rlhk`@?Fgl5K%Anhi~mS@yld&~ChZOibA z3{&CCgWxcij_F7S^y}8WhUFA}oJ(3heCqxi@E=h90hC#>&3cQ^s&;Vb4zYw<@IQ_^ z*PU`$Zy8iE+(x5Pb;_*=E6)&bnf%7m6GpllI|8Y5gc*8UBfpO&Yk46b)i?TRvPSQi zJW9{)5WV5#6ca~Zar&l#r}ZrT4baYLkLu6Bp3nym z8Fn#{OcLzikKhy~ilAYjRRS9)FnVeNu>KYlIg-crOQnY@aL!S@Oj&0M>iBHx*JweS z8&3UzM0%JkCvHEK*yDfxOt<0t5P6AS1(S^ZMO}^~gQ)=P3SmivmD1CDO`McwQ|UcI o($lHSO`LidA*4S<7k!>_ME*vMK$6si3tbmSF^DoM%+E{{(P^eH9AQ3B-|6v4*S&>muY7+wD69 zQq3ZWAGdpLc0v%-i#G(aZWLR9cK&3F(o*vz7i>x-iD z*qGTf5wa#APZ-3$QP=BV2*!8n824!`H6eN;{wmJkoXDEj5iP?_Ca4E zJ@XtRYB8iToRavRI-*Jw%o36zlMb1LQ5qsPfh=QX8YvkskcNfL_{^wk30l@ H5^VrK1ul?r literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CompletionStatus.class b/idl/orb/.class/org/omg/CORBA/CompletionStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..686b5d86428988205e070806d915abdc353eadc3 GIT binary patch literal 841 zcma)4U2hUm5IvV&SXj58YHL4iYpE7cyT(@=6FxSP1iDSzknlvdh=dBe1h$R-CF4V_ z8WNl6yFbc!W+fJUGMk;5duHyrXXf6YzrKA3@Em(4OzfnP#6vNU#O#X67|5DPV8=kt z%r}ExzuO8sf#10By5}tgRaTg76y54!#W`_Gjk$pFz zS)fp6Y+#cch2j;xq@S&Rh;qA;6_JSYoAl``XqQ*e`NuD>k*JSg{21|05m00VrOYuK)l5 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstantDef.class b/idl/orb/.class/org/omg/CORBA/ConstantDef.class new file mode 100644 index 0000000000000000000000000000000000000000..b55b6653f367ead2669083fd826d425367e54caa GIT binary patch literal 219 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2Fd)Qbp8C?bbV+4ASXwC=ls0l zlEl0cm((;y27#=^vPAuy#JqHU|D>$c`OEQ7_85zVeRFx!V=B1`E yGKiqcz>HNu6)wmxDoISrN!9ms@o~*7$tEHkU_!Gba?#r0K4H@s_gBUL0 zLz#w;#IO`aUMw$1@v(Sck#Q5Bh@l`}S7j7Y60=Vwd?w*@8A;rba7)G-zL4-`9P21c z_)5k(!Jop07;a1WTEZqnShpXyIYVZ>W!1ITUR^70Y_1lxZCWk1YCO*nS#FpOdxasG zoxZ~m63g_^TULc(EIaK(5}ZJx9_@vpu#0$P%QmVH%SL)WqjKF<4=iY;^BHcY$3ck@EB#DB3Zqe|$xlhFPO+;FPI z;s)s|_>t|FWeeTfn%O?ENhmk=@~@`~Ke8G&67&0bR`GT4{ZWnr>D!U$608NlWvya|)(#MZ#SL-{PKv9ek%?4)YSeSMWpcWs%{k zr+M`SeNh`+kNZd&&U-So)j~I|2>sjkdhyxHa!L-N=Xy~|}7^@7ND)T`ne7|vFy8EvjN zOq*M~MwRO}30lbx8*6yQf7LF(`gSDaF^u$lsrOY4+0*GoUoQ_>g+0$W_8gF8hQ1mO z3&Uk^)q`7dnUFe7Sa!fRbqd7W7)sZh1JL*>RuFpAUc!FqVZE`h8{(6A!l~}iQR#JV z>owlwb-Emesi7(d)s&nh`tXhD`ySL4zp!D@^qtTo{SYST$HE{B8`4anIk}U@cj#@D zo{XMh^%>Z&Gyx@&Rh@9M8w5f}2po2!G2ufedJVzuTIM$dUt#n}q=i$F4y4}^q&0zH zc$dZ?SQ;^5e+Qayh=ZwUpErwXCpbp=0Yb&p+!10O$UR{(sK_}f8G4G%6}5x-I;AP) znLg1Bt__F+G!sM}jF7l9{ghc~PRa`HB=*XxFOhhP_zNWOJ;Ufin^)3LYN(rqVy9))xVKG zoOp_aN~ilAV*xxt<^|4?%=6_Lil#cqbTB@1*w;Rg7(pl!PoxpWbB0`2?B1IWl$Ibh>)8-M8*3K_yK3b2K%>&CM0IY>x{I z(|{VWZbJb@?1j%r43aZqwL;0w(V84F&lE@O@<xPSzE0GW@q+B*_6%nC9ACLdtZT5XKvKS&m2@bnaI{*Lx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstantDefPOA.class b/idl/orb/.class/org/omg/CORBA/ConstantDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..a6de8f4c09f1d9a9df144ec8af927c7a00c87d9d GIT binary patch literal 5405 zcmcIncYGUH9sfRC(w)wic*J(2II{)Uu~j>53bb}e<57r-6C2wkm_U`Yba5`0CHHi8 zY9MSHcG-KB4P`YB$flu#(XQL;WtCZG8w$VQ4e4}J%wPTZ^Pb-O{`T+v-tV37 zdgP{C09+zk6db@&o~9L~F~h4&6#J3oX;#72FcsurNtja*#k_=L3TkkTLgWPn&&G3@ z=efK+&fDiHcs^dh*b5nZk%AZFB|H)JrMOnc2?a01%NcnEGrW?gS269?EdH7(uET42 z^*Y90&(t^Y^hVykiK%bq)ms>QD^G9Z>FqqdgQs`$^ezSO#(Q{mJx}jd@IJhsS07OD zL41g*$7Ot2#z$m)ly^5U@nbxFT)`*sNnU+Q!i_Rc%24lJFIQa3W!( zasq1(4jt9zwXU?5nd%y|Od~VZBOoVcbn8f#8JZpXoMoiD28^U-WHXw%Ks=EhM#ivq z3RJgk-7gU8&!%+NYaKC2Y(v}Dp{zO8m7SUD>K`8M>+R~#W^$I6u?FubYeF zj*E`)sDAaFp0j#5s#Rl_mYm+J&5pBj316k$>`12V$W=TGSE;xgUz6~472m)&dGjq5 z6L^M-gLtNdZ>#tY?ve0a72m`61zJi|($_nX7#_KDw0C@Pcps~~SD?Ol9D@|!u=9{t>QQMt%~2__bML1A0+&dkv~cJGqe4L z&ShRp&rtw>Rq-JHrsD7T2Xp>Y#R=T6;$JNIZ?^D|iidGl#eeXKivKe01knU=k17Q2 zRYet1MKy21+YqlpybALw%&UlyBq5UrBB~07;ToYzVihB+RopIWB~izlddhG{KbA;l zGnQs#bd%D{`;0b2=TpN=I?Wu_9C<7nRGblORM9A!B+<C?aPEL7Q1$JNDxlLeGMIPIel*6&HoMUiwc=D*8v>b*twq^Tv?ACHe>>3n^CZ=>N zVJ*z+bgE*lDq>BotTv?ivF40}l&mYF5q^`#Z>YXWpd1>zn#aDN9DC>SF-I5V5pXLKqK z?mGe(c+mHr5gBI+Z$K!JR?RooERsZ-zn0ixK_0cRcX1qy%~Pv z0@dq@7b?NXSy8=jPHR-CRl9&MwE{^oCejEYz7;C3zXB z5traOc~K?p0pC1bY&3906bV@f>L>}OvGh=#gW%Ijr4nuf>#I;d0UtPJ7W#{>&2sV_4ULbkp)D_Gnr#_I5f{^nK6?j{kl8(9Hv$DR- zuhGJzLym1Mb*xD9JS+R8tl(Ku%66@@%%tafYJ|S~v?;x7z<%py`TZd$wv{@u61V3T zm42yE1-Dkx<2qVFNw9)EEhag-D`>Sy^tF7qlb0iQ_bI;To6GVvz+VtlQ>$m^=x$!-Zzb*n& z8cDOKEzG)_^EfXSYFHZ!6ESwcvC4#X-H~=S(^ARI`hb}{Hmq!B<03ZYvAMFbJhr&T z&aY(bf-+-|`M<^!@Tb9x%3yi+pJe6kTV4IS+r% z1I%3k=4EUm@n}$Q^5r*bh}eDm%0_|RWIFzWl&iaPx^7Oh+V@ThZK_n9FLDl zfhvDOx6DP}+8vG2g>UUv+GBDo8dLJPtWpjyFLS=z=X@Y7Jtw)32~5$v8I5PrBH_qc z91`*P{b;A?KCPEE6$0ouJSB#xP_%wD+ zETQ)lBGjrH`c9)}qIwDac?=w2;7SHUKHy0Vgnhu18Ho6R-3(BNE9e+xK=uJoVW7@0 zv&TmKLPIvIOAtN@T`jDsE$SNN)Y9p(C$e4}P`jBxOsq-OE Mvypliah@6c4=hQgi~s-t literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstantDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ConstantDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..d7578cbb5cc7a09f60d13fafe9fe2f2299177df2 GIT binary patch literal 2106 zcma)6iBi*06g{sCEhQ)-i!3gPOIf5Uu7Jwsf}%x=3!-*H8#>XFFlk_hzj7T1XY>R7 zD93ZtmN+DJoX(sk@1A?^eRs*P-`{@%xQw?c^kKFcy_gf2Z$Urq3fvR8FYrKMLExdl zBY{PM#{y3TvI0v2PX(3*asn#?&jg+)@FIzqNvtOEDuJ~GUMKKIp*deP%0@|d4TZCd zwo}U3o2ATLc6oLtGiO^BSGU}GVnBhxU)>}Z zjPK~>Z3gNL2+UZ!bnZInEXU#)F^dWv^a`nTXF7Q5RnyWp87sldSJ*Oz6q7eCqsW3O z^aWC2pIx1Hhl#Z6>lM4a?Hc*2NN1sHWN-71v1M0G*LHRl`U5J<`&Ox0(Wn$0bDe37 z1(@}C#U;J)UN0G$d5^p$^F`m-roBVI>4PPyyE&7=YX?uH5X@pD|K7A%!c&1PIMp(! zjQNNR#!WD1*RgrIXxj6hDwMrZ)-Zr+4aadp!%3Xda2{z5Ll_nq(J+b&0%IC7xF~Q* z<7)HivOJB;)3`ic!Bq{{83nf{(Qx;IFVbD7K4QhDgD;@CA1O8G(@%W$CNR%s!XA#s_FK!94VUWhrMS`IoK98K lNn&Q7Gw1~ax|@EWYc<;5om-8yAIq)A+k0}K5v|S?{s2pSpUD6K literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstantDescription.class b/idl/orb/.class/org/omg/CORBA/ConstantDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..af24ec18d335da18ceb7c0fffd2fe4ed8e1d635c GIT binary patch literal 631 zcmbV}T}uK%6o%i?byv;GG%G7hD?+zo!P_D*?II9_3U6c8O-6K9)=BVZb+H6p^aJ`) z(U~a-`?!gP=j@z4@9e|O>)Z1SfGQ4>NFpD{W&#OpDQqhg6m}GL6^a&07WORcGZ?}h zc?_B6z@56z&=q~>Mh0B;PZ=V-$B^uK_gr|rJ1!WksTWMRPj7~tjVZU$^nF<{1}Uo-;(tl{RgsLJZULPmh0g{_y%mrqWI! zhcyPI=vho*Nnu$bt+0Yj3R$c&l;$_B`(h$pAsgPL8}PBz2b2Cf$W~|IbtOY_J~s9P z>2`*mbJb{G3d!XRCAyU)7#3g>NrG;ZDGyyqMOU)Xm4tL9C#n&eBz@vKttxsA6znH3 zI}-^J)ig9?n&u-7svqRA@foX9%%a|*jvcAgaR|dc2@$jNMhMf+$3j?k-V71{$m1RJ CB!wUV literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstantDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/ConstantDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..22d8e33c5fde68194d0f8cd2b9b08b78de127146 GIT binary patch literal 2835 zcma)8SyLQU6#g!=bkES30RkqNpg=-k#xM}0CM-!<51mc}8jF{EZ=ZYC?<}|f{`dDk0i45~FwSBijH|dN z;i)iu7z|?wPfHjMBZx$ZC?gV{Vd7{QkK)-7Eze1~E@Lc&aXinm6Jb=~1sOduZpfIF z(G|vvn38dmSzcnfmw8Fbc!l{@8PgI{VbrtjG_(+%Zt*h1%d5QTtYVf=bIg+A(|i~P zvV4)_(`yn;33-7)(pt`G0>=_rb0(ghpNaR6UhnITj}x^&o7TDng5A2ITbBfUEv*v* zekRkF%$m~zH7%_!NfKuv-NC|&cezOYStD<$hBct&Q>LD?^sLdvrX+32 zGSw7mx!|S6ZP`nWK*gA)rshV}+_*ZO(I_G0dokv^eZKFBx=c?C93_rfby1CHRAVMS zW|_J%L&5n?O{Lo*w^O;SX|a*`kda%kh+R|XyAJ1N;I^q-1ncmDI!70*U8RQvQ0`7; z?BpqEM~4JU!2-?;oGDGV2XKSgOjr7qu^bVo&=h>kQjg)hf*w%0R(ph{;1hf*&^k1b z=%iwAV|R)L@4?*J(bg`|Q0lS=pM=j8e2z;B#_$Cjr{xAOle}EUm+WU;!B_a2vHC{B zw+g<)_X>LPgMuIN)1fk=Wpa#CWEbbr=~<1tqq5XR>OcaM^DfZrt|t%w?Ot=~pyZO? zViPBemCTjxp>U_@ce!kZRZjDkNT1%?m?!mVPdG#0g6VVNX3n*VD z2?;0BV0(L!WM%m3`y_O-|1{_w&1=NP-v4|T%3rt>3I2hK;izv56_ZsDkjr;*WCIbg ziOR94-=QNU}vZ*x%)D|_$_VULhih$lECxRok|A4RRmb=KM@6Id+HZHoq`BbDWbv@QG=g{FEV>%ilAEN=}2g2e}!@0xwlP zLvJt~P7++l<9f|9w6g7X`7I|{yC@jp>Vs!;s*#&YsdV``N2>Bimni96exk2C@{5*> z3g)3Gh#)FsTfq)?6=bldAd3XG_pcO}j@2+chFDAQ>6)e6O|4RE8FkK(87KctHXKR} zIa2|{az%mAP_XjU>Bj_{829ftlzc_6rsf<|bcURRRS=rvh?Y$T!yJ7~$V-bT(T&t5 zyFh>OL4>^O8`v{BFbFUD;S>UNfT#$og;xYdm?gw~Owz|h)IuM@UywMKCm{v(1%W<7 Vqbw^(_z;neQKe8H(vxTd_y%li%6|X= literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstructionPolicy.class b/idl/orb/.class/org/omg/CORBA/ConstructionPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..370177a0717d32dcc9fe8fd3109b6688d1bda238 GIT binary patch literal 230 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s28H~hbp8C?bbV+4ASXwC=ls0l zlA_Y&lFacfvm)`ME#t^ymWp4q^#8B5=I6sLc075Qi~Enh7>b0h@dKl x8H*+iGaAi71^GoKiAg!B`kpR6u6ZSyC6#Q942%p+3@i-HK+MX(2J{;c006S&Ki&WU literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstructionPolicyHelper.class b/idl/orb/.class/org/omg/CORBA/ConstructionPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1ac4b1226df8acc0fa9a041634bdf8f112ad806b GIT binary patch literal 2251 zcma)7ZBr9h7(F*{n`{;nV$djk5wRLJNCaxNgkl4{)|s|`(HVbKr_W6`A-hXv_;UBYJm=i=-20rnAO8F6ZvZoRB4QNRMSOu9F`UOu zk(w`gGZ#gHPtQm36(28%xP`BIQ{=-%5ldL+y>A43E8w<>B(4is5wVIp0`A7KhLV8q zM4aLLDXjBmL%=-&n+##a-f!p(nYFrA&DVFU`K9&E#bSP&W|!&}y}%HeH%!A`U z9x#OXG<}r1Rc08;PI!<6Cs3$Ed)~L)M?AD;tJ<@Y+SpdhHKGg{6^1k+o~pm9`I>50 z^INuMm{l&qF!yxJX1JO4>{m4R3!bT^y18dtP0cpy=0?3{X!`}OT+n~BEmb3u8^@7& z6FG*3^0IW5RIYdl8g#vEM$;zQy1H995o7qdW!RMcoq?3=P5X%RWT{3>)w1f( z8RopK>*c4qW}i%2vT15hbnTg5QM!DE0em|r$~8K#)!M}*;S+o+U`xU_E=u?aA4?eH zz00`5kn$hBg!`Z?%&so4%~6$3@oMcVz7 ze(3^K31w&upSeR7f9#gsEK8_Bm+%->hRbe*AF!g=8oI@hJn~nk8W@J%Sn@EHI=?A~ z(;C&Xtt*CU>(*mc(-oWKEoA*J_0M>VqR;%E9m&NELmiVVT~*Tqip}GJ9xFHbDaYhJ zl8o;OaxB1b(Vcbg>iRs)5a*8Xv5gOaxT{5Kd%6cYHy{tLH|-|urXE&|Jw@g3>oKRg zLr0}lbz7Cx%BsV+D$@U@;Iz-^0y&B`@bXKn-*q+P$f#7=#AM&tpD$;`R zCxSG`5#$DHgJ5aI_zU4c6Ap1O747n7G2twZP<((;F*$dLSPNoDSPU|9PDqBnd~-=| zA-+aoQfabFG>NM{q5$Bq3VA1Ffp+41W#zX>yhQvBl8;_t_@CT6q;hYO z>YI{tEu7|3Iyr?9NTet!dYT-r6fyDbB66^AubE@kkFiq@=V>T`>HWCK`zket;ik z+=XgvBf&JCY-i3nJ99c8pKtE~j<733LOPBZGBTF2!ow;LSqWK9QN3Xq+PUra=nZACZkaP;^#{+S?25ufO07qO9I;LZE~8`%#ZX(fEYCYG zE0~3%AP!l=rh+YOE65?QUyGt;0uG@$cF#` literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstructionPolicyOperations.class b/idl/orb/.class/org/omg/CORBA/ConstructionPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..7e4efb73157daa5a6c028f5836b64ad65bedd449 GIT binary patch literal 197 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B;oQXR)cBPA+{Dbh_}s+2#Prl6Mg|29pZub9 z{ruc?eP{n5Cr5qHypq(Sw8Z38m((=tD9tcN1}#(t&iQ%8B}JvlC7Jno0r@$Z$(8;E zsYQt(ZZRW+KvrT|qJBW(y3`{`G40JLh3nK#y11pfl F000FqH`4$B literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOA.class b/idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..499516ddc9afb497d1af279944b8d4c74f56c181 GIT binary patch literal 3033 zcma)8XLr+97=A=-OHo7!G$1b1^@xnyG0LAY8RNJ^#sm&axKqX? zjxhOXJ?_HYyt_w&%EFE@P-EZ}OGxl1$w!@UkMl7lV;TnUPKcP1U`j}fuw-mPp9Gt= zXV|2Z5*!Ix39g8oh*=T$3J9vIk<1EMd35-MHmgNV%}PbbT*t6dy#gdPt-I4U1KRxi zoNJiTK_lTBwxv09gbD32EW_O^pf1ueAs{edCv}$VP8-CwG14(?JE^FhPDKaeqy2r+ z0o%&DPR^4sVw*;Sh3tw{p$OW0S)7fkW}2#Dxw>;)OX#F>TS?Z4?YP>MsgLQ-tnNfd z;(fhG`#Y9&HDp+`_6%9xUSjtR_L)cZlQ})>_Og%5$6PHjb5P5Svv3ioC{lY8rWXeV z+p$Bz9PSfwzk&zwARiu5umxKcDxhs59#-%O9u@JJg2(ZMfHjo?>hBv=<0Jb<`^Jaj zhgjTc0V_($86sCxx})GpJf+}iJR{;+1<&Dm1ux)55icot8LxzWO$Bc;-`fh_!Mh6H!~5h^!b^;r@p7Wz1AM69BYdpj6MU+`#%BsXXO&;z zO9fxyYXw<+BjSvLZ}FW17dr$rmF)D3NI+z0a5zTk?_n=5RRXcCJzE5Zeb@s+vynfz&;l|4-9?-6UPqtJJfOO>G~mF7kq`%WAo<8s;UMwP;*bbyswg zfO>l|2m)Hj!|M7W?^;S}FAW|VHMAEs_3(L z7`9ic;D+~R+n|1YF_8i8W&x{fj2tIAPvBZhNj8m|>eLnS9E+Ap#lF>)BQ2R!XZ;xU zFA>J7(alcOMnFsJNiWW1S%4>Hjk@uH1BR8P7`Zd*lx>^3MorXKCEN#*j3%$E9V2bH z#;mTo2?1Mbobx2sydy=Q*)=DX8_ z+$FcD)Q&9i)Ku^tVZ{ypI4%q>#jvuvnBkQE`x0K|n^b|z0RdtyhG3_p|mqIgMR>ua`(;u212#8`CWPUyA z|Ch`UD6Ju)(=$uoopf43t3Ye8a{GQn;4rdf9o@{ZvHUP(ZYjie*Ht z@9bJYpbQd2ZvoOoYaKxX^9U{q*n=DWTj53o=)WF>@H|3Yd5C#P2fP13;|0`D@_7OB zZ{5G6ArEEmx-*`B{OvEE)OOmRrr$jM{_4zQc`%PFVgcUe(HIMcgXhtd$BJ;Exj7sR zteR6mI7ZLD+jZZ_Dh4;pXICw*h}ALgf3!@h?_1VBK(77cXtaU++0ki zi6EhXW5Hi=&17BkhOx;&^Tx4r2wuRZ$pvgahY&@%`PvI;n5Px# literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOATie.class b/idl/orb/.class/org/omg/CORBA/ConstructionPolicyPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..302f8bead54bdd0ed3554c7a9438684cbca45716 GIT binary patch literal 1048 zcmb7CU2hUm5IvWL?gDE|K@k=EVYR|iSwG%NW75(W5)z0QliG*Pb-CTFF1ut|oA94} z@H3_+`UCt?#<{RaVllP3$xQB?b7$tBnV-MD{Q&S7^$c`urjf-RX|}Ssg1ge(lV)3* z`zk6Lsu~OxH5EH59x$Y>zVL*@Bf+rK4noHa29DY6JUiGon}I)y!nbzh27Wj2TzlLZ zijd3esKJo3EVn;mC>*z6^HXkm+;_}g6uQ1c=+d6+yU|kyvvQfV)fWuOX3(d0>Xqtc zUNWp$-198gk3@LFZ9%O)nb+i~q9?*r5t`l3e&hI{y0G=afWHw|KNxV=w+7tj zjtChx=DDWwv}T14#Yy9(Y&<)hsANUsA@#3RsxA7A9Sp||rE{N|DoRSJeL*q@M4}gz zMccEziFP{jSl6+P6&*RO>L}rcj+?lpqm0`+*09cy`&)a4O6#z_OJl6dasF$RyN~J* z8OrCW)4rzg_C*UpGCp_duUr2?WH2sb&G!qNw8c6Y?QMb%X+Ue9kus3iD4s`w>{YrI zCk#T3uV6;)3lbkF3PP80E#|C}XB0~rpOJVU!$n+=;T(B|qREd?W+;grqb0&5s>{c< z@)?o}W+iAEF{?;kmdHrf8Bz@I;yN^}#hfLESv8vFVvfqE2N?pXq&qGVKe$0a7yS_5c6? literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Contained.class b/idl/orb/.class/org/omg/CORBA/Contained.class new file mode 100644 index 0000000000000000000000000000000000000000..1fcb3e76d23de84c7d4d2c823c25045ff49d0c78 GIT binary patch literal 214 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2J!r&bp8C?bbV+4ASXwC=lr~q z#LT?Z6h;Ptti-ZJ{hY+SbbbG%tkmQZMg~P3iv0^xixNvR^Ye-s8N^W4cm}~Vi=axt tgcVSQ3-XIf5|eUL^*vpDT=PmYODfqI85kLu7+4sXftZzn4d@pj002|hID`NI literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainedHelper.class b/idl/orb/.class/org/omg/CORBA/ContainedHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..190f9002eac1e6ec918b53b6a7124f5954878528 GIT binary patch literal 2152 zcmaJ?ZC4XV6n-Xen`{;nV$djBi`W`A$O_c95(*8_R$5XlP_6W3yGh0v4V#>0(fU*L zSJ3vHfc2cVeyQj5NA>hhve{%egfFu*bMN!q=g!-O^|XUJ?ctg6=7t7@y8TPp=^hjv#R6`p5^EY{4Ly~GgA zPTgY&iEaAm4Xea3mYwn;2~MC;hxX!txsP~c+cwHiibiwCDAkEFP^&Pc3Gvu?YG`%C ztZLh~RWqwXM9tjimd&7LeenwB^Sp0swPD&u&E%E55G?UuY|AJUcIG6kUw;owSy>kyr`9w^^vKr4AX8mNFrN_K% zpDHAIV3r^8@)KUsyEJn{Xm(FaD7sj#x64AoJGdfYTfq*lD!7Ep3MRzteOzaVxu>b% zThL`(Szp^&pfZ~g<<==R*JWXL=B9#4T$6BL!FPC|U>DyjxQST_KPdRIvzTYN?kQG% zPM_D@E9pN-hVvdzZKbfL-z{tviVPE8OAp^Z#Pz*qUBXWabo@NP;wqM4C@7)KaLLQ2 zyDr=IK}kUcT){(B87_MrUB5fL-sBcTvRC|_>tq=9La4#0GR5IDoGnx7*<7!gHn$!c zWv<&KW+^+^LW4X0>+S1IUqos#hLKJO>RnaCs?S%uE~{w8GfpeIB$rhPY@@mu+$g#9IM)Z9T>Y88JAZY4dXo8;par%WY$fEgZrqG;vlE!ywHA-Jb->`ZF z_A5<5j?|!zIoUP>p<@IN+t!%qK*xFm!S-I}Hw52e^jNrsQ;`;=-w~uefna!##voW4 zG12r6G~o~jQ_(JO7E_LKjQj(HimAC{#9EL$!eUU7b6hg?6~Ps?h4==!DaGk7(KK$j zL;;!!q83I-+?lS+3^d1Oi6V(uS@jJPFA;x@|#$r9s3FnP#~x!*uL}}(+UW317mFHj^Xz8?!&-(qy+US<nf>^Ddk1h1*T#X3LmN|u4J8<+-t2C{Ywj<3p85}!QF(g7;ClV+?2*CB zc_ta`TAEVnoM9;Blgg!t6oDfW(~we=!=`T3<##Y{@Gkb6IKe(C;|uk+h<^Y8 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainedPOA.class b/idl/orb/.class/org/omg/CORBA/ContainedPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..1a74c69d5d3b2f1717721393cb92ed2835f7e0be GIT binary patch literal 4467 zcmcIn`F9&v75>IrW;A}O9mfup)1*nEtz!!-X-X+_Na`gJ6DKydNooR!u{2R8mNm*~ z?9^;!ZGi%1-@2Ewm90*wY#Q2>wNREq%f6Jg?Ee8d9PXVNNu!aR-)f(E^WNRw_wM#a zkN@wXM*v)f|ESo9>v@<_@k$)!*{fn0!K-iW~7} zp1p;Kx2kv>-p;dksJIC?Gxwbe-lgE(3U1-mdzkrN9^R+oR=l5QACU1u1s_uIVHqD$ zu?yEL_$cH57$5563O=FWlL~HAaJzy#6x^xcE(LchxJSXg3O=RaJ{g~u@fjJPl@Lj% zjciH6hNELAv_&nM*9y7hlx-P>+<*inJ+IrxO%~Yb@)v9)pBynVwqX`DYl&o{yN!Zj z?~xGd*?w3;c-YM9Y}Y<+klLo6?PI2uOPce!;-Se9{G;0(S>9;tW7(BMdVd}80^;PmMDAvX7*g!Q#hjM7nax+PG?iohzq zCgUN2v-rBe!+1pC9F_$h#W!SpQ{Y>8P~hA6j=*Px9<3o;}60pW){+ej)Hn{7T^0O#TgiE8}-e`MtnBcv{9E zc=1Oz|0nWPK|htwc=5H!O}s8>^W^7No>Ejwls5u@#$N>P#a{)U!QW*3osIlM;698= zXs;dK%|i*7j*g6_D1-Xhb%88O?d;znVN0XL=;Zk92|Z)G0vjBwPWJBCO2?f%kszmY zx=jVZe*dSyzwmFSl^mLcn8S7P#~i9V7Y^M!j0EAZs>?Qqo7InTj#H{i=x`|7Y{|?o z*t+MCZinbOi>fVc=|!_-*rv5aj?3z$jAhJ{NrW2;d6V?Q%%zMcLtJT=URuZ#yp6$a*^YCgaHl1A*B@|t z_<&OgF?+6RZ)4y#ab*ZhJC}LUGUg52Sk%*YM#7HZcAjw1Mbk?~ov$>q61Hj1S6XnJ ziU^|(z;u1b4$fxNPWP2C)Fk8qlYI8ZXi+E4IypgLF4AwXEiF@XX4q{`a+?HTBMU2C+wOB(Wevf2;{;gu=by0zErHH@=qBlOs+aE^>Dy5IgEYTu8bCi(*}`)CAUr>^MNX8-V(9G}Jx2z)cKviPGljx!?T8J9!?OQ?EC-QPk zdLr%g4v|RsG$IuPQ^$OH;iAT{|hS;!+;CYyxZdXh;pYZ~SMj{H zEnnUse1%V#!V-+;m2Mn+yf{`OO{oxw^!9kviF8Fmj>`dw-nd+s3#;f$DVz%3saTwH zyE~=!#+7(1u9lH#=ELVVfbaK#54a_{%vmqt6*O)_+j(q~ariv_07>k1{u7DBe{pM~ z6AF%0N?sC(kT_{Y9>$KDP{+=xnQ+HdQ)du4i(NA-xcUsDREr%iIE&Vq&qF%#PTI(r<7UumyH@oQb@P+~qigAPUY UQHC5!tB*45P=rTe*U{hq0jcP!X#fBK literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainedPOATie.class b/idl/orb/.class/org/omg/CORBA/ContainedPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..e4d0da8adce6f2c8fc77a28a5905621f7e2ef6dc GIT binary patch literal 1657 zcma)5X;0fg5Ph42gkTDUtK3kICIMoOo`g~$=|PJWM5;=N50(=zks;W~agqA3da9yQ z`vdx;s?H=K7L6kzOK;aZZ{N$k=WhUOcoV}Q9&};=4;dbHVF-^Io-jOR*kH&o zY%)A!*kX9ju+6Z;u*;B*AQ#1pC|*YJDuUM$>Pc3iz!kp<~oN=H4&?_`d5lfH=t zOhaIR4)wXjV4`)kma3(nQ>qctu96!9F+-lPL6nccSlb&oWK6eStlE_iuGH!xgQdE= zWSi#53%hE%w)0V7yhY`(86}yhA*&_FEK(Zj7G|?x2YTsDFH1F7BVTaoXm9A;zNCHI zo?kcX>||Q6-MYd?P!=cJnQ4)Q(=A!#*b|e_d`k>EH$pkPj!l;fCThDkOO;xeC>X<< zf??cMFoID9Gq}evt6+|2b3B{p**wn{a9=@!f0IZlSj3WoWuz6TSW&QwHG$s$t0^$G zm)qZR7no@i^d1%6cz~X| zpf?(zkL;lLA7e*o?4$KDj1x}KU!6hG)DMW%;&%i-(<&%BjL8OvcL-Vwr@kTZsS%#S zbR*nLV~|!uUl6>GlJAY^5RJS!#+$DY67V>)4bE^aO`wZ8i&qE-aGeE}&0na)6QZiN z5sG+1RCRx$s3$~C(MG7#6QZW^7m9g8)KmVPE{{Vk=g(0*4t1nIr`zLD!!|f02+;?0 z*KAx`zQUbQ(@1J*f2kf%iaOq((<>S}QLHyPleNQuc=#9kj)L)c;V2aEFMLI?UOfB* DJb*|^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainedPackage/Description.class b/idl/orb/.class/org/omg/CORBA/ContainedPackage/Description.class new file mode 100644 index 0000000000000000000000000000000000000000..b9ddb0f85ecd6c88d20d394a69c1b80750c285f6 GIT binary patch literal 399 zcmZ9I!A=4(5QhJ- zp^Ve$g}uzQ^M9TBJKsN_UjVLgQiqRb4OO&UXa_h7&K>CKJnWzWaV*3M;0$ z?EoCIe0vb%ZDdwJgHy`22>-_ySUyo29VjNl^`Q%EY9 zRuRAr6*uv*f?F!OF%u!ltb#cqOsTkp+Yx%)QSeC^^C}kbsfu1KhLMh737-i^%R=q0 zczhnlijb^^v8Lb)6@wzw0@fq+^`(lhupz#_7P3th-{4yX-zms2gfh;9GH1AuF4=`d zX{V5wTV9!+Nvx4{u9W9VhVE(8GM$?YfwA#*hM*ABD^s$w4CltiB}+0FMy9pPZHHlY zOgf*j9wa5vT*-0_)8hHNMsC|E@I;F5=4`X57c5T(TVz zB(Y$XD-Nl1V<&k^xS{*D=@8><$2woGI1TToE4l^Na0R0ZzSm%2oME!HAx`3S zzEsR}Ti9n6MnLp`@XVA2p0&T%-AWm!YSr ztu)x!Wr#1N(o@v+6C#w?`SnDbyKw5-#3X~>3aGBxp>0JTj)r+u6zplZkA0Cjac~_! zDfn5#FZlIz9P?sXOE- znPF7+TyOP;mg}(JpWPPgD{X_;$(-TpX}X!(Dn|q6@Qf*@Ewk&6n}8}$Ts>IxSTc;X z5}D%n1dFtU7OB_f{Q{)M+82O?vc5DVIW?O&a%mZ8jkPu>V$j}nwljv{{JdoADbT8k z7Pyls+vW}-+v6E0M{Ok6!dI5luHzyvK2yXI4VCLd#5>o3s#5HbBZ zx~ovq@fQd@L{I!V0*?_s_#MHtUWHmi&jDE|7$)oj?F89|5s1+rpoG9rE8X|JNm>GZ z>JhZRaU=8$y^DI_2)!Hquhejc9U{7_2i@O&l))qPS8>*r)-X`Rx&HGM@YO$|k-bRI zixmR<7q=)7-3xx8Gj13l(0}124RjOvhoh98$ZzNfgByn!O2_pYUVDOzaq>R=1hM!_ oo9p<%w;A?r`tvy!l^fPu}_e__Yj$I@OADOnvj|qa=+$}+<Jq3!pcF8QEsTOIyRux` z_x_2#^3vB77}o>SO#9Rsehs`bOkt0#`l3X6k&e#pe!KhaMSs5heILL)b`?xuUcm*t zE8{%{65dyE5g*97q+k#WQM$>fzp>a(?4%fx$6B(N_K4lmvIQMG?!^vFLE^F1>Wo>=)#@ed3MYrqKl96E;Tr@4y zS!R%uscnX^xTaU3YVR-{Po{j9WG;+Mt8Um1!(7rQU$yRMZu#!ktCpjimQl(G53+I3 zvGpPuYlj)9f~^^b^NwEp@w#5y(swEbu|<)#Gn_aOX-|$Jv&3+WGnJxvX*yj z(<)OcVcXD2df6XKt!g{MiI%l$4TsbX{dVSv;ADJ8eE(#d4$-$3h_=~qx^Tg%3Zf#5 z#fn=SjszxU+~CM#nqjKHmK}EU#+{97rDWJbe@n*a9NYMUVbrK=j#=_bPX*%m5;r-% z5)qGgDY<&DXw)3DYH{4c*Bo!-9ga5;=a|B@jBhxSNO63N0*8t;1MhXs@f~!Ane3I^ z0yWyK2(sO5y;=+BXXj+>a1=qLp9siA_@?T9&r!w?92(4{vovvDBP3<5UXGkQ24MlByrbH^;wTGh6?iJBH4CewHp{wOiMa-LuKI^jwn!3}K zJ?7MQclAnxyp0#BOC6(Nik2s9ajH< zbTj<~;U)&!AW@vbSx+rTZ=t5D&oTHAlj<`JHX-NI&mld;Q2H69-w@e*gm6x6LTO=W zk1S-0a@vjd9N9)7O|Hp!OT$h)VC+|L zl8f+Z4CpC=O%V)jFArwK1tCFf{8f^)_B`PV>4(W`ilB}y#h>DMPFhaHf5vD!p|AN^_A56d|D$l_@g5RPzy81TvJ|jT2`PS z&XD#QP(ciHGI9#?*jBKET?KncGUR*&b>sfrHd}_vkm%|IT{Cs7t<{=c2{S1YQw*rUXXVf`_FD3s5dL!b%fN0*fA#^q6R|G(>0uS;F!x cQYyY6IE3_j(h8CulAyn6C^SU)Nwfj{06IUu_y7O^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Container.class b/idl/orb/.class/org/omg/CORBA/Container.class new file mode 100644 index 0000000000000000000000000000000000000000..3aea5d8828d0f01661764a3bc7a403d597a09032 GIT binary patch literal 214 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2J!r&bp8C?bbV+4ASXwC=lr~q z#LT?ZB1Q&*ti-ZJ{hY+SbbbG%tkmQZMg~P3iv0^xixNvR^Ye-s8N^W4cm}~Vi=axt tgcVSQ3-XIf5|eUL^*vpDT=PmYODfqI85kLu7+4sXftZzn4d@pj003hBIG_Lk literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerHelper.class b/idl/orb/.class/org/omg/CORBA/ContainerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e8796ba574c119b00f2d3dcfb3f34cc98d67c1b1 GIT binary patch literal 2152 zcmaJ?ZC4XV6n-Xen`{;nV$djBi`W`A$O_c95(*8_R$5XlP_6W3yGh0v4V#>0(fU*L zSJ3vHfc2cVeyQj5NA>hhve{%egfFu*bMN!q=g!-O^|XUJ?ctg6=7t7@y8TPp=^hjv#R6`p5^EY{4Ly~GgA zPTgY&iEaAm4Xea3mYwn;2~MC;hxX!txsP~c+cwHiibiwCDAkEFP^&Pc3Gvu?YG`%C ztZLh~RWqwXM9tjimd&7LeenwB^Sp0swPD&u&E!^I2$uLSwq=wFJ984&ufGSTEG%x2 zre!~_*|2P(Sz9-o2R4c1#$Nt3qVO}TW>boVp-h_xc8}`Rd?Kb{S&e55vwpJ8(qmq> zPZg3pFw2j4`3bM+U7EQeG`puI6kROW+hw8P9bA#HtzZXN6 zE$A|?tgme>P?^n$a_f|u>#{IAb5p@2u1UDB;5$4}u#4{%+{CPe9~Au9S zr_XEdmGmDZ!+DRVwo+Kr?-sTSMTQBlrH5}H;`&~*F5xEyI({BtaTQB26qHbAxa4Ki zU6*b9proJzuHYf6441u*uHPMAZ*q$v*(?6ebux^4A=F@0nd0yn&X%e4Y_8W#n_CZ! zGS_Vqvy>fdp}`&h_4ak9FCw)V!$_wC^{%R6)#s~SmsPal8K)IplFY#S;M6d~Rd3er z{q(gQLtHed%QiU#;w=fK-HR^h!jSS8dedIQZt7vZwyzuF@jKyEcj>6~D!26tuk$Kh z4#VU?mTop{juSm`Bl^AvbExWYK&yQ)o^-N#nb;8l^9zZ&*D7 z`;{gjM`}>VoNOC`&@lpsZEH+)pkuv(V0$m~8-i~!dMw<+sYnab?+DVKKrp;VV-PHj zm}q(jnsA7Nsc4rsiz&xAM*aap#njv}VlBuWVKJ!4IW8Icir|XcLVSbVl;U)kXc{+M zq5#bVQ41p^?o8KZ2AbotM3F?StojCtmx#Yc^1%^C|H}P?RPGH@eOqd-g|k9RC#Mhs zi4-M8?~lWkA|??oq6Yh7&7ENHX^{y(@8ItfUL>`wzD1ZFlA`nrMAg5MJ{*6Egi5FT x3S$AhK;|{hk<9bOX|kqT$h2@_`mn3rl^8)N5>KQN#Rr}nCkF~Zm()2}{15hS2H*ey literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerHolder.class b/idl/orb/.class/org/omg/CORBA/ContainerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8ca04f62e02cd811c47f96b5944a2cd751779514 GIT binary patch literal 766 zcmaJWmz%b01$BnRsqNbQj3KU9?ir+}*C9qxkE95c+zu?W!*H|+^SywZ z4~}JAx&DCPa)R~if{|!H1vV#TJ(AKI@Oh5h=FdJ+3VLN>H+R$*8?9?thNdA2Rl$yi zUF>NnV_(AoG7O~%+n1ixu>yuv&m5YDW4c|V_0Y2(IYW7#^5V zk90a0&VsesvysEh8j(tKnMEp%4_0J}W4bU37?$W|A~w2AGOZ{@sw?!B9#5!S{Q!HV z2FBynaGXPo9zYf2YV94dDP|3+5R(lt$!cwc_zWbC^+ian`i9sD(o|&wnGhn>82w2a KL4Fb20Db|yY_UNA literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerOperations.class b/idl/orb/.class/org/omg/CORBA/ContainerOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..a5f248ce2d07dd5c29fcb2991dd10322ab8505d5 GIT binary patch literal 2038 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerPOATie.class b/idl/orb/.class/org/omg/CORBA/ContainerPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..9cf8f5a49fdea1e02f2e838512d01c9beaf8a82a GIT binary patch literal 3391 zcmb_eX;T|V5PgGA&=3ws*fIu89NXd$@{tn}CtOYx1Hynw5J@&GX;3YQU9zkwNL4=N z59O?sQsw-B{HRoVc30YHb;MDnwyL+Z{nYPuPxs9H`Pc7%0C zGW07YQ4wX;5)5}X46~dzPRr@l+|J5!dezV^Rnvu;I}@gAX@-8DVF)RTRyt?6cDQk@ zUa0Acs+ZHdmZ|Aw@`jf*U9+Ar+)KVfw3&T|;Hps~^1I2ISNH?NkfK&9il$q_JW`8- zggo|`whhx#3l*^|%nM8 zt%)OsJ}S9-0N4+fh`{`rI&K{JzBN_3+DjAz3=8vVD%Im@7)?)l-H-kDA&{tA8=piJ-X-YDH6N zAj>^+cBq4&cUiJH#KUf`jg5%G?2+7G?QDH-lT3NPh9)mVy%8?dN|na%Wse&2d0z?k zWjtGeUtYuGcQh$$b<(y-tMqM~#%@GpsF&4FM=2PW497jD%N0GUH34( z1N1fc69RQFt%d8o?h?f0pXX`__Mr}D1Z#XZP2Y6LV*T~7SlzIBSa4{#wEo?qjL)3#&)3~q+gy{iB>}d0;L@*Jmp+DS+ zNUhaYp@h~j;3=f`>l!oW#iSeHniGbHx9nSp-`XN*j_jB9JO`aa57_pySaj}lgW_*i2I{(o9>Bcid0B@g9e zl&GnF3C(6CW`a+Ij(P8UHjTgeQN+>|W?prE~1lfD2&o;83LU^bO2*uvBV- wG)E`Y9mNXmHb@z1K6n9priD!?FORL=AlxObSvxpbAQv1i-~>ktxL-6r0bOQra{vGU literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7b452c40ed09e9e39bef5152116c0d7a0411758e GIT binary patch literal 2903 zcmb7GYf~F#6n@?&VUuOCKxr*huuy4XQwjAh!B#G=wWn9GT5&BF>NQ5yd<0htLG+;W6TQX)a6~=4?NxZ=d z=a~IX{=5~&Jm0(>#)5=*WSnD@H}P(ScJHxZig)kJ(6GomovCRi7&2}nBjE!Hra&lV zZx#%Jvx&TwiRD)^v5~2n;h|WPZb$NIBQ8)kXy#1&sz9KpcTOP4*R-Va)}p}ao?f3M ziL;QITQw|OV7SLeAIfdUeODv-oUNHT!q84f4Rv_K1SENSanEUV=*v02+Pa~TRZ zXc-z&XZ+q3@|Mj;V&l2OnoaD6wh}+4yP-RlX%phfLzPdh*$3K>i*0yN&pHWKpdu<^ zNx?Gu1o|rr;wVhV^4YXuv3yp-ih>;S0*%IM%r?_rJyF&b6!4*fSy%$64lumFp&L%7 z6|BNm@G=Gz^q^Out`%G&Jg7(WF!P#U(?xC9ElU9xt#P>y(jYGnbZd zhe~{1%dSzHHxz8*BLyGh69rGBPr-|LNua*0*c5z<&jh05qlp3Pg+6w`?T1qM<+V9* zrLSK=t#q@*S)-Uay3Z9%;tSq=so)mAlJK>HZ}2T6^PPe?zUR*m5`I+h6MjBkB8+Uo z0p|eTDF+;Zrb;iVO9>;+yFkoeSVx86^rKH1C6^4i9iMWGoQq!IqF-~V9}c)2h0R`r zS4ekPbz?1Yfy>7!d8$2~y3jUKCbwj2)#*ug)!&vSW97Xo&|V4TK33^55Bt%c>IcH- zVChlu-BZ~y$w8#6(#)uFo0CNk;sn+8zO9x@rsN0{>G8FfQyS;wjL(3}K<`y!#;{Wb z%UmIq>qg4fsm%Pj@|gXwl$_@tbde+ssWTld3$>y@s76XVKbQ+Xzv#Nu+EveEnZav* zA8Y2w?{O(b6nLx8aygAMSBd8%X|K!-ndtCosbcV@ww4uvFi#XWi`6rhXDAi2&yagt zH6cs-A7xCWo#MN3C=y5M@CC|)`@$iBma7qnI1|n*S-)wHs&_8fNq;?;=m$$c=IKDY z2<>TN(f2Z)nrIcYhSXh%-)IA3q*vY}H#$ThSj34fhZ;c){T{UyL7br526YdC`RFc! zI|#W-BDg|7b*_yBt<0vX4^ej)9qI$r?LbOIA0luU_0b0i+(&rpR|FI44&);0w@5-l zJ31Y2pC#Ea0v*E=o@4)MT6vn6iHp5Y-h=WtChPu0!-N{xL&JRYV?~@4yJ(zMgU-3B zh-UX3a?YnHqI+oB!D;8Vh%-ez-h7rEX#E`u>Emz(*melwUrdu>8hoDNla5&+(A>5U z3k_h8*hkTFyj^=ZH@}M~5>d5?_HA_V`s6mwN6AX(HoBtwvT+Q0vfZ9+s~WwJjv_Ab cdcKIKc!p?}lcrPNn`8SYf;Xp4u>xWYahzE$uaK7-0zyLFcn2$;Nm`J|RMer9S fj`>kYA^(Cv7oh>m0unw%vJp`!)P?dS+W@`+D_`C1 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHelper.class b/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..11b9011fe61ee9301a2e092faf56802047084d04 GIT binary patch literal 2388 zcmb7FTUQ%Z6#h;oFv)Nz5L#_9AoON3v4m2!mH-t(mDp4&p=hldhj5I8=_H*DwSDiO z=&LV%#mh>wbjfO;T+3ghuP#@0pUE_rfw0WW%$c+I{`R-8^T&%{_5sXdN5dFqHC)15 zD&E$h;2jN@@ve$18u~F8rkj+Cd3m{@;S?6b^tdWd?`c@VvNTQ0&y^6a$&dF#_&~!d zGAcfl8rL;saYLRyQn9AuCPQD|c~}t)C$nX{m@MBdCev%{%S*`(x=ok2MT((+-n2|- zkwJ;YHyMKRnqK*`y~S`M7WY|_xim7Zs<0h~bj&ATvL2@H`0mnW%P~w#*f)*Bw?~8Yr9U%Lr)2j84k@CN^YGw#xbE{og;@ShD)7&aa5&p;@)bxv@L82v7zD?$0j~u z7#7u}V{Ut$MfK9ACj;n9i(Z=ctpXCG$o%H(9qg7Fo<)oSsp!#Zds&PXGU*N^;aUUvm`k z4M!4Y&zTaXim)j;t@zirc7$y43q2K&VWg8c4Is6ntR=%ttS2nl2tG6_7u_|cIp1hs z+0G2-yEbA=%bnebH@h9y=MKzSb5PpMsqOC@rCstiTA;ykMBbEBl&`vDBsuuEPZOnm z+$ay7DQfn^A^T?4D@?@mSQYnng;fxFr$9B1WqhlvxgPvXngWI)56UQ+M%BgHj2+w| zhun0sZXzDx>U5{cVd-GdJ^{&-yPo&@RQF)}Dc%}=P_D#hw;BK~; zbb_&r?81$%eA!&j{^3K`^V=pw%(3M;0ovoO0QoC)*H|iDeaUNdB}FJ>)Ay zK(askBlzzauVYZD<5&$t*XdZtaAbr4BR_$YT+*lcp{D{iNieifJ(wXEganb%mqF4d z_JmhSKS)-S1a*8N`WsGUmBsPs_ZUu$>vg=6d!(=@|NfO|;SVD40$jy3V}DbE!?Y}C zJh00IrVv=Tlnh|bn=@=<`0{*(!95Dg>n4?+YIq4+O$)Qoh{$0)K! Gy73?F9eS_; literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ContainerPackage/DescriptionSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a7af92b2cc3b95d69b441a5ebd40a3f6424f29dd GIT binary patch literal 946 zcmb7CU2hUW6g>kh3%FRcg0@!emvvcUw$(?BiQDNSoC|hD;;q63e!kh(=Xv?MU!0!y9vIfG~(8KlX&Z>xTo`k_7A5RYkUa7P*qT znKMh8136ivwdHw8CCg@Ys?B%GtKsVg3=|ox`DHLrzylqt2G+1{U;~>5UZc$LetwRY zIQ<%UT@f*qdVI)jkNb|@Jno5(WLTRd`Y*|y8cLnS&4d@KW|=$HTQen`P(6{WS6ot>&q|umYtBpTPcd0G{ZmUA=N+=c-x(#D8#FTU*>9pu$xe{FX06vs> zXH=9LaTfD&x#!%Unb)`H7XZiDbJ0NHV8_8OL-Qn;xjJKLgxxWNH7HZT;3cJ0;$Fp) zPbut#-Qk2UcvNtiMc1mzW!59_9j}B`4EvNXt1K#~Su_}3o%f@`ho3}VQVFg^oZRL` z%5W6^uJpIrp9vM0Qp5{h%xRFY#=X?JFCTh(6IWY}ZKelYQeBRR`Aiw1pNc}zfM436 zriUq*{U~@^Bf9v1v(L63EZ7V|?VB;QzTbLuGZBfh4zNO>rq3$qlVH=`q^M0~MEmdw g>`~_}28TqNYj6$M;TihaFx*7Tu#GLlZFIEr9dne4VE_OC literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContextIdSeqHelper.class b/idl/orb/.class/org/omg/CORBA/ContextIdSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7d0208d0eeed268c9b48e348c0924d37170babe2 GIT binary patch literal 2091 zcmaJ?-**#56#gcgc9ZSYrYRuQw6=vpve5>L3T@hAThK;=6;i8+8n?+1w}wsFY!Kf0 zCwTRR*D9QlqsJb2@*Mvfef4}ZF*%(_8!C0Xsj!e!ex+YRfO#@#G+mHb?ZU$R(jvKXC#V-RY+tU+q4Qv z39X9zj&0;9D%vk9)+dZ%G~*b#AFdhY9b>O3h##u0ai+~$Vcbdft4hUnqV`AIbcm_sK$z{S)57UnK&pCGS1w%+w5{{Yo+DlE~_!2iczLKR* zv`DyeKPSqLS+Y28;cJd}@Gi$&h;YncR>e0QQN%dDMV3QHoPoEe=J*Z0>0-+z8n)wuu}`&=FZv>M>h!1u1Ljp2;RkyKouiJBetvNLY?}+Z6Ve$86Y3QxSKo!pe!P zlVdm^O?6FnbGo|IHw_G99+Xiujf#u28|@vzK0BSIHW6QwYOXV+9|sJY9QACqSh5Q4 z1(#yDIIxB7?Df4kP7X-fKIjZ1?#1vbsXv;M0$U!KwLLi5%S>$7KTCK1B>h9^IC4~J z6{Iy?7xa9azQ*az=sl!A1N)g4AV(T!&m3}%fWHpkfolz74ktb93Hafo-BJBFC^zHJ z;ICn*0TRS1%zJKWdP_H5e}UmgnAV?TxCS*He*xtYM&i$*JVoH(G5l%02Ca^f1By_o z%2~JC(-a$kGQFYVjI5t-84r1h3Xs*G`UU(COw}=})bU0QV^?WeM<_f_fZ-?LWS8aB z0MJtbn;{swqCA)}7laJqiC2fDyUjCRB7Z+c%@EX))yVHSnpW1PB0nJ%pVI3%mU*bK z$N&8uZ{d%^_Yz#i0%QLW!9lvF&U#=M2uvZch#o(z;Z0>V5Zb!4RX9HR#6w58Mnd literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ContextIdSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ContextIdSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bdbe08f6a4f36a87b88a5c159673d177908837ba GIT binary patch literal 778 zcmaKq+fKqj5QhH+N&$=F0Teu+D_k^sXD}wpjU*%_V!ZK!6uTjq+G4YyzLh2#iHSad z4`rOiYAgXSI^CUq^Y6^x{rG%+2e5~&1Y*djn2kflTmo6-WSEy>LB*nqB^ApIO4qbI zoMHN+a%FZ+!#16!Q4?OvX%-ox2Q8;14jIDw&N)M*$L=F>LW|49TBWi>f*jlB{_X(;FvSY z%NC0oG$a{PgCl83U`)k|hE=R-SjUEjO{5uCg8i0UNANpQwrc$5#I-H%1;nb2D}E^$ zR)bZ)Q+^L92mW7~+ij^F`F3r8qy+)jhImiT`!*IwY6NT?qS61q(pc=$jfsIFP7jlY z(S=fIMV3+=r(G5yS^>%Y3s^qYf}?R6g^EIlMKxQ!6&OIA{r7UK6hEdst_L_qo^RhjYHC=M#CgEG^jttU*K1C zw<4ugmVUCzA7y!aW`JZS_@#TM?>)EAz4zSy@$=Ic0B2z8*o#peIh@jPT1NzDbezRG z4d->l@mG>g{?;(24*$`y2jfXv@<~kKUxm7$&MvCuQUa6eWGaDzj?1{B<0`IcnAR}E z5G%?zb-}RDs5zBfZMl*w%-xxq%q`Gqp;i`ohWLbKTk--!Bt5do5LL&t6>H8C!|wD* z07-BKvg{S%NQQJeV4t+#(D8PlkuZv(YhIeA zmp9D%g1J-`R1jk3Wz-*H)|69+Rc6>l9w8!xcZ5mSu^@+f&5`Po+>BjcmBd?^%lWnu zVy_%aQjNxU3^BJVw_}7!sA?o8N>#V;9R2uH!*z~X3^4S!Hp;8tbgfzzj`B1#+~By0 zIffpwl9N{1?nYPO_i&6I^Lt>>1y`4Jvd-)1fw<0PU{#nBT|$aVbmC`tMW$5W&=6gi&3 zU>I)ADukLA)w*yfr)}DEOD}{HOK&Tb^hZ5Zl~d|$U)unLN<(2h#TLEBszx&$+p&S$ zUaoXgzI0pA!yyH3NvH`bo%fOz0wT28WZ|T z(l-q$tq16@mv%;bEb|fUJ$-;2X?lEfk81>?8|YYftw|ihVc)tRQFPF0SLQP!53(N- zZ6M|aNn#L3d^dx3<(A2OL;NiUGG7sIKr^!65P6Hv>{mqoM`HaQqDH0xeFL5AgwTk_ zpv!iMun9y4rZgN?{D*POk32>M6#JnM;NNk8NPa+91AokJpnC&7sa}eg`VXAUiamo0 z6#+X$QRsE>qjbA5$dKyW%#ofI-`GdHBCk=XT}F1(A&V2fLyFAGA)d)Lu-nT%fs-v2 MCNpA;hg|U za?#Qp<}vTRnK${_e|-bE#VA1w{TPE7SA_PxHrmYyt;uvv5UDK`A@{39mlX6n^ eJzacU^GY&HD%ltr7#Wxtn1PUmffeXdAOHYFt1oi^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CurrentHelper.class b/idl/orb/.class/org/omg/CORBA/CurrentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2c0e3ee11ce7495afebcf4b726e2587e47675099 GIT binary patch literal 2130 zcmaJ?Yg5}s6g}&gY+1zMn8bmm4IyoeY!Hv84@{s2+J+XF6ll`Whbr3}$BB_WLT;L$ zlKcwV&N!r*X__z1On+3TcWqf%GVYhv?%sROo_qJ+)j$9K@h5;qJdiPo8!|q?hcQgx zBbkPe#jqSjUTm*KaZ{{UWvt;7F%-mdUB(7B#q3iFpGo*!#wcz`xFur?Ur6{ej%^er zd?n+8;7?*l47VkGEn$}-tlLkToFTp4u&P?)u&QnB?5-EIecIh?uFcxJ|jBshUWUD}BOb06`@o^6yL6^-V;QK}PVpjKf>5#piov!T@u zv#RacR?Vym5jFFOTQFh86o{Mf456x`ZSo}HF`O7uUGL`=i78jl$?Kh;j@Aum(7 zL%Gc8+`NKmT$6BD!MC`l-~it#n8$*I?-l&eT`VzN_Y|kT zs4r>mHT0*C;iAV=TQ6+tw+p+4BEyu|a*FRHZ|ksGm++$k9Y0Z3dwm_f5)1_;lo=+x zcHMEtUjQDvC)x;b9Ac)iIjx|Gv0?_MCom={2;M0F@q&Tzg=g=TZTX4>4k zZbYb5)&)NC8)g_Leg zAp{ah3W{DHhbu`;;<$(!>^p1m4Ew1Tnea;v{x0D~P;2TNgxN7EN0!$NFj>%JvUAcbO2paH?jB+GPeGE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CurrentHolder.class b/idl/orb/.class/org/omg/CORBA/CurrentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bfd532a32367a657e4d839966a7b377a8a97b190 GIT binary patch literal 754 zcmZ`%%SyvQ6g|@>jfqiP?L%8%Rlzo01l`sL+KqxxP;pyQ8%j%>gfOZ2R|<;7g&*KY zi8E=cCKy64Gxwf*=AJY2`Stz*;1GKXBot(1P*hODDi3QslqFOotV`G+5XXk)n*^mR z$Ls6PsIRx$*XL(?%lACfrcHv((ZC+i6M}TDen%j*oF2oMYY7b;BX&H~=n?G4L9XLb zqidP^rS1CkhBDZw$vZNg2X84m8?5Nm9o}lutGh9{HU1<;ldJ0P0Qt^!qk}K zM3oU^VzPekL=4?JP2`EVmB15RC-)Es?2$+ym}5WTcCiN}vK4cW#Ray@1r?Un-awvN z0zr8(EEkbtAE5BE)_6r~hFL;3#1uk|tTiS`|AFMN9EUWt7o;W-W-KenhY-$2*h#_! J;u9YO_y+UFthE3D literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CurrentOperations.class b/idl/orb/.class/org/omg/CORBA/CurrentOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..bd083540cb440d49c6eaaee2920260ae64bc9586 GIT binary patch literal 83 zcmX^0Z`VEs1_mPrR(1wvb_Nzk2KoG=bp8C?bbV+4ASXwC=hC90)Vvb^g4CkKlFa

w$(ETIHL_|Pn6EeqQ&E?W%$N+F>} z;^Ui%zsVTqw%aH0<=#6xXXeh#Id}j3`}PCCEZ&Of#yDRlL_9=*pMqX=VUjN)5n((M zF$Gz`vaU6Uq;dOj8?Ez^MjIADfwJI!Mb5u%C4@a zRr5qO<@HoFvJ(ql+mu@?oEV2x<48TcQd%W=L;YA(kF5yrrXy`B*~2yEXp<)wFi$gC z$m->eCG=xJLIeu}UP@TRD{d@F@S{gUFZu*TCBzUHkdUy9*9?QrqliTlnbi97Mszco zddJhfVd$#Ukfc^~swrUwNruk4qrwlvP%^PPPm`VEX`7}yKQlE=q?SXM7wwF8*JKIo3mrh_Anw|3zwP#ryX`9+pKFLA8_`2o zw9!}ZWT*sZ1LPitZAd5W4uUw(;HoAV!Km$BBA=7I6K8OTE+AaMvljjh-zB`;+%7@< z8UBU#3rLGY?|F#~_i6Qj{l%bwF*-e{^)pt^1@t+;qhs6AeJgzq*Cl-0C3K#{UFi`2 E0pTD@&Hw-a literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CurrentPOATie.class b/idl/orb/.class/org/omg/CORBA/CurrentPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..228fe702be9b7db91b68efe067a32290f892b67f GIT binary patch literal 625 zcmaix+e*Vg5QhJ4Qj^qHd$Jyj6uoFFG#>8SBG`H(6e?B<(u)x78X_@~ZR~S-L=f}= zd?;~Z1EN&A3p?z5!_Ghdetf>Z1K33|0R;;hW>5%^MFmSLmKCfhSXHpbpqT^ia@z_x zL#gcx+wiY#qt!WS9vH1#A-ETGZn&@l$M=SHhPY`ugCRq%-@dX&mf>2SZFB?Scs9|Q zhT}QGKEq~t>RWn`L2mg2YP?a_r#E*cX9y?(!}dBQA{N z&OyE3)F+Bm8y9XQQ!4AdBvQyHp&^mPERqcAzk@Lpj}F^4GNu|D^vj&uPIa4Mb)s=3 z;?$w>mj0s*>l4wB<0#RuDPT|$qfH{|TN9y9iZbO>n4@!^ZiVj(qLml0%GNVt_ml-u z4e6*RLy=J~UU@?7F2WgPBOI1Vl$9SKjj4(p@)2F8hT%%dZ;;QVY`psjY1{)}@`{dn literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CustomMarshal.class b/idl/orb/.class/org/omg/CORBA/CustomMarshal.class new file mode 100644 index 0000000000000000000000000000000000000000..361aa76eb7ebd537ebb576313174290c1134d15d GIT binary patch literal 232 zcmZvXu?oU47=$miHdYsR7tuwhfUA?Oi=Y$~y8o3>DM?e(#D{b60emR2i$cNSI5_z3 zxYzsf1hBz`W5f}2j2XBl+uleqELTTkOJQ^=((Ih<#GV{w-ZkD`oRy@v>zpC>^^aKm zBMx;RnDt9j-#VjD-_dDBcM^)~Qe;IXua05f2O47?6-tVnl$Qy$GGbr|It{uvLC6qd K2y`BScL_enNIp3L literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CustomMarshalHelper.class b/idl/orb/.class/org/omg/CORBA/CustomMarshalHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b093c6541c8a71c8aaa9ded5d29c033f1228d1ed GIT binary patch literal 1851 zcmah}Yg5xu5IvW+q>VwK0wO3BR4lDFJbY3_OF=ce#nH9!C+}RY4G(={1-lE zfYDL$lQaG%$8m2G3Q3E6$!+iMp4~lr_Wu6+9q2Mhs4UuTHsHq}?E zTvE#$a=|k7@CCV6}rtD>l(QXm2c2EmHhg zqj-N#F91VJ!BUGa^J-;9T`Oq<9#XwdpFMT;9_h4+)6_v84TuVwno8EJznqF;T0Dt7 zU#@Ih#H*%mrBA9a^xD)dB60Ruw8d@f5bi{}!jr|4JtPUeI4@vM!aVvV4B?7^M-mp0 zlaR+_hFG*iM^bkpQK2ojd?gki`NrHm=#awFO$#4#*k z83l$b{|PzDt%MakC0gcZaubg7Jq1jRrbZYBJYcfNV@@koG?St2P&12bn;MsHhkd0R zazQh7wWPn}I$>z{qS3yPI{EbKOvE{ZF^{-S-)qI;;+-*9*=su9R zAB697z4$pqYmtO)X^K5k#VRsX8+g{o7JS;R)%DzGI3k6*^{E9hhb^({ENO}ich+Am3vkZQM_zS&(Z#cEUa#YYK zNYR!MBjnScA(E9>=pY5a`Ur%U%LS=5LO}oL_Rw1Z literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/CustomMarshalHolder.class b/idl/orb/.class/org/omg/CORBA/CustomMarshalHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ca63b6cdac79639f61dffae50c783cad789f0431 GIT binary patch literal 790 zcmaJkS`xbeKmrTz@QK+`YJPrDbtO4HTqWtMbd|UKtC#a zuFhzRGWKxyJm;LFivZK+09uH0lh8 zlTgQYxlyxB{j%fq_$?<`yC@i;>XX~#q@JBgsr0y?BUkyeLzHATH?gBT>Wj@5H7r8Y z5QeH?N5d}C8Zy|^u#Xr+W{&-`ZPiVeA<{DXhHe?1hF+<)%m+S2`|~uiBkWCKe94wg z%MsGjD5TO%$G(szEcz7btYk00i?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuMRkFTV~AtCv%g=MYf!MKzaNHtaAk2x zYOZTVa%us{nT!l_sQS@;z{tSk?C%@k;~L`X67T2F$e=*T%M6MP%)qb%0Tu>Epd;CU zBs-8N2Iey`aA`3zZ(?BF&cL)0tO}%t1FA*@sD>FR%Av(5t%IV16Uh`Npb9Q6Z46Vm RkW2x&fI~}LMi*`h0{}`nXngYKm-8%xJBU`tkDkS%B0q!)gv;WT(ZWA^LEexOaZ zzz`$N(56GWzE@$SV34LZjj*%&zvc2tU{r^=H0#XYU0>=nd6TB>H;b;rp>xJoZv<79 zZkj&*ME;bPE4_+kv$gf*XU0pHyI(wUN)&r8)-Jt6oGvw8Bv2~X_V6t?UFxB9n^cwx z$0byK%XWgQbgRE472FE<<)Y?f{W7`E$1w;JWXb_e-xbp`j;&Fh?z zZ(CQ;R`)XsPUuV4My^F`J?Mz)=BVpwQpTFIN1M@%x;cFF4Hs+9K__rpmulw0z?-pZ z72GMn6bFd%8&SR+t_$b!Gr41h=hbjVzgYKJ52+zzJ$K9jXnAV1g_Cv4?W;3y#l?s4v_XC!P<`j*1=GRFwE-_ zjIxe}I*timPlh^$X^=8y~0}Y3fEVX@(+X Jk-KUE{sY!6)s6rF literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DataInputStreamHelper.class b/idl/orb/.class/org/omg/CORBA/DataInputStreamHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3422ee68507ce8ffc6d42b5d6d9af8c96cedb7cb GIT binary patch literal 1869 zcmah}YflqV5IvU`wq2H2<&8)MmC|Y#P<&8)6i`50ixf$WA2v(bkj2t%mIWXG#DC!< z0iyBs$;97ejB|IFLT{^l+1uWkIdkUB%>DJ}(^mkKSd-BWRmM0bWOQLt##LP7pD78~ zCEN(%rVI(U!epG5kmBb|2)B8}9SL`N&^;M#NK2TN5y4yt^Ahe$c)$?Q%ngP}W=r4G z)uLY7RP&B)mNruijhgeiY%ug@EPGS6wl~$e+{$cPU8UPOYr`OyrWvzjI(G;rHnzqP z!uGWaNWx>u&9<_+7_ zi{=|XH4Giqc(g$@tGtgjCeofk@pemd6=Rr)d9y0Oic40RaXu(5{&pQ<^d1eo2*NkK zb`>~8TY&_fDsF4A!^+ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DataInputStreamHolder.class b/idl/orb/.class/org/omg/CORBA/DataInputStreamHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..607bcebe7b9f7f3be28ecc3cddf56fdcaa3c5025 GIT binary patch literal 802 zcmah{?@Pi^6g^Kjmur=lTGZ=iyMFoLS(N}rq5M{bCo<{#wL6P*KKcGJ< zdQWHR!es2S-Fwct_n!AYzurFp9AH<4f@BmCq*Sb8O@wt3(h4>dY%16ykbBhbS_GLZ z$7`5QyJ40q*C)s3DP{Ds<968%^DNpf5kwA~ohCaX2Xo2JTwhas0y|< zWU!+li=2i$5(N2wEx2&(y5$kXTC_(^n|2yzrPi|U89{cE__Ni}JF(zQam#jvxHL5C zZ0gn%Mg`XVduFol;`vm)2^VMR4US!SjD3Eo6cEhumk2xgg_HRgcbCTn{uduqc-D9W zdFBZW%8PzEg%E!LRg{h5D?%g85@J3k>0_csv5)W=B#z}Eq-eY#)Q2=uSwX^w2sOex LNqxvqVhrFLCHTKr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DataOutputStream.class b/idl/orb/.class/org/omg/CORBA/DataOutputStream.class new file mode 100644 index 0000000000000000000000000000000000000000..9e580f6e68317806ea6fcb1e5a78f8905b427f09 GIT binary patch literal 1367 zcmZux+iuf95FJCP={>!q5DKM~o6F7IZv{%65GhrqNCfqveW*5xNnN?w$gxSor}4lC z@KK1_*;#d6@em!&Idf(vyR-iD_t$R#cn(z;wq5w_LdAi}Q4*!$q3DktSn+mc((~m> z&#yMW1{J^3A8&2$IWVh}+ET`$=sQsG_7y#)>CTZz6jxQ;wB|;d_#P8(EUvUXI~JQq3>c!=+@6x6S7_3O&49fzt#&0>dX z5~;=|Z}(XI5PmHBJ-2kH_DQ0S~go4orYa}I$usZ;UJAx*eKw;fJ*>~6W|hFhDpLH#%Y+Lcoyae=NXHzK=C5u5-d|(VqAeM6kmlh;Wbz# zyv}$7)+oLS>x8#pgYY)oA-oIs2=9YOxCsvkA2L3I#}q#SpYSQ;GyMFi|MPBu-+>Q!8U@6U==_A8Ee7BpNvTv% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DataOutputStreamHelper.class b/idl/orb/.class/org/omg/CORBA/DataOutputStreamHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4551628d9fe843ae9a8def0cd27a01feda557945 GIT binary patch literal 1878 zcmah}Yg5xu5IvU`(uVM=yiq8qP+Dzx2q*=#fCy3qDKg{uArnf536`c40*e2{e}OOq zjE=8Q&iI=g$Gu4?G%fNax4pZ2cK7Vr`}^b@#x z)!dexwoE;@m0+k;tb@G9(3&#LE!o)Fl4q7zr<3v;-Od=B8o5+W=sDe*BA7`3I)k5I z)1esV218S%-xEpUJV?*&YNo|78u8eZxr2n~YF4$>rfy_40neyvr`z_DsxS3h!O3bQk1}-msXVgIc`M2rrp1%U z3%N^OT-PSi|IXAcVsrjVz#?9*1LV8~CNf!jU=liTQ^3501$0U1MW2A@5*Cq?u!I*3 zoy8;fGRV+U>@c02RaTO#$t8wKnqqj<(00Q)!wP4NoTbvh!)ll!;-sRut)jRWGQ6*5 z_p~^#Y*|7Z+8Nr4bF6cRC2eOzGbOa3m7(4XB4GtD8G4HXl_6zVE;j`U5%fz~MVg`S zKOvWSmav9b#LvQPYTQ`|Zw=#v@d1WAMR>B;Xvh+ zx)B_rE<;OUX^K5t#mX@3mhmi&O?%W_sOyc#a7hyh@7foF7(~9CP8AH%G9|bhUD{c- zy@ltYv8!mj7^C}q_OJW9>D_In7rX)@mn;1exvuF9g7F2U?=AY*KqsTKGI|R3iGFa$ zPIS5EdfN#2&roq_TZ0Ir+qE{qM+pcr8aspU1bzn~h#uT_T}E7&j_3(0Q?Z|@`iMa6 z2dWOgKzJProFe$05J%n+moFw&7D4X9 z@mi+SZJE{j<;k&mN*S&9ncHVq%(G~>LJ&J__uA};AgY&c2&AghE%Uth(@QX7xA$I~@do--N?^Wm7xv(CN>(q0hPvi?F>gh~JTwh)s0y|< z>>#Hhk6jG~qzH=tn^1G?rsWYNI&?ryoAz2}z0tAm7(qVB{9bG9p4f1p(b)^1vCprT0)jdI5@9L7b~69s4)eIc|B|B$&l;~F zPdtH9dC@Ot5aAD?in39DL1cniLc+(SeN5aa4-x$ZNn$w+DI3p-3?WTaR*>=`LXGfF L(h%~a7z6kM)c3+; literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DefinitionKind.class b/idl/orb/.class/org/omg/CORBA/DefinitionKind.class new file mode 100644 index 0000000000000000000000000000000000000000..504a3eb44b34f181c60966daf797afb05aa6ed31 GIT binary patch literal 2709 zcmai!>rWh27{=eTyRa9Q`>mAHo0kG!R_onjm0J}Hr2?ha8xFez4(!fsXJ-*wwbiOs zt5&UAwI+V>gNd4mt%|XUe(-~delYRhF)=>xdxq`7L?wBiea`P(=bbbB`qvLX647q@ zI7wY}ob4I5XW5=(JHd96?RmBr*iNy%$o3N3%WS9FUSWHc?KQSDY_GGu!S*KGS+=*> z-e!A;?Ocks(Yq<6_t@T#(|P{=AWk2~=_5snncU)x>$$cfHKM3?&~r#4B0yB`STgCFrOJ5pBU)R4B2yz>jaMH?sweW9t`E>tbCqlDn-@0g>{+t2Z8U* zmIGNgq9|=LGm5q7?5m z=H<$H8Bnb#Spne+<3-!I)^~~P6)Ftp;uWS=igwPP<8vgi=oNzXWtog zZil;127WmkaA!*Iu0c5SkQ+Wlee#@XQB&r+}BSBo9@q&sd-a*=7U*%S|=sszOXO}$SE%Ve?efD*vsGiR! z%`v+$Yx_K?4aeR{!x|mHi`PYL*EP}r*Lh}%KMO@w;cv9N2Omvr(8~cP=6tU((uwBoVVcX4i8{3_1d)W4} z^|KAJ-Ou(Q+ZfwHwn?^Wwj*qhvCXi}ve|4;u`RNd=vbNxC}W@Kn|*bSTj*RM-vIbK*8d`q@fsFa3w;6L6r{3F{=H&X{%JCU!# z4T#XyXrnsF9kk2f-Dsm=!g~#V9XM(z{04*H2#&G}zscadA1W>U7K7gkj^Ycy-QahC z<9!If%iwo|;}r?-Gx$B=cx%G%HTZqtc#*;f3_b{scPo6@;QPSwx`jVr@DXs_0O9)$ zJ_?RYA^d>B$H8$=gg<2P32x{)oXJ1;?Ee{#h@yv8j3>+C<&#Y8Ym6bLUm9*)BrU?O;9t`0<}VI zP&>2<>R45)*hP^K@1l-BsTlp2KZ^19t;<1esA2?DQoU=mxwrFMQeUIR3zcaJJzSC& zw76u6-tVaMd)mSq=_19zmnlIjbPNe&)h>#1r|P^+T}Ps8wDl52IL0JKIaW!GajceD z#W60inqxv@oMVF?k&vv1Bqi%HDalD0Un4msIW4(Ha;@aFlrwBX4q|B_Xf=k`pN>7cxPeeeCY^R4~YKfnF~;2^$9V?Ulw;}o(w zo=GEyku*jzrsH%PNsOoXaz@8l^>{9g400)w^ExgFObA>Qcvj$&z;gnZ1)djpLEuG! zyueEWmcXPyL7*sL3rq=23%o4g2wV}kDo_$AE2FL=odPh%Ey zI$qK7s)j^9n5)am?J*8YYo;%{W#eU^Qw`T+2D$u~8yBUZ& zjabmonhUJL)iJAb-kL1g%sCO)Bi*(J@v2zYIYkW}l(=HeSecULPG@p~@3_+pDel`A zxx-OB70(ZplT6mF)B=jzR=NM4029}JCtw~={-?R|TCig8-We0e3Z<}61`gq{j@Jyl zjw2d&HW#)zQ>VOA(e{RQ_NS}@WmDvidBs|ZXC*mav3*NH(U9gM8Yn z!41U~t`lypT(@(^cgk$UnTCrc@CsVazE-nc%WjEr-3#j84j=kuK2_rS+&0S{J+N=Tj*ks|f=_jPX5e#tq3X!Xmj=GV*Y|1DI`@7ZARq9e93dC!@Zu>u)VpU%{5~OPx)S%afkKIM%_0{b6M_c zwzdpn^-|-wgiEjiBi@tkorrhy=e3`IQ!>>q;VH#4HyY_9ytVVI@tZJjLHm&hP>_St zV7G-#Aijuo^C35d$MATAyA^S)<7=z=8)BFGZXv#aMBPXVN73I98|7DtndTiNZ=%b* zjpPFK(Y`x~-9$^@ZNz?onExK}QF8(5MYPOQL&pwuhiH#cS0L6ksN)HR|2Up(SiVgF z3jGg1!T1y3wr%+xts`bkuFsiqxglpJWLwTm%J!V8OPMo;+?X@llCpzTmz|_SZX!*| z&7^6$g|tO(B{k$W(pGsN>3X@Hbc5VM+9tb5+vWYFQa(VsQFfDd$epB}au?|)xtnye z+>=|x-bFkpdl*&k&oBs5TLWABHUty literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DefinitionKindHolder.class b/idl/orb/.class/org/omg/CORBA/DefinitionKindHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..373f8a972ec911f5ea47cfb686b373fc1d640ee5 GIT binary patch literal 796 zcmah{?@Pi^6g^L!OIxL-R`yd1()nT3S0gATiUOgcuQJ<`$=qZ-jsB~GBI!eaKz~$p zpU!B8#^YV~?mg%1-t*q)*ZT*61MJ2jBOOB&nK+iQBEqT&Ss80G)@5ukNIl)|nhcwl zuGiGuc2ld=u1=1%s(EiY7PnmI!g7o_JcyKRJnxq?2+;!KqO6u)5gK6@knk~S9}`nceT08Ol2{yvl++i5`iP8FmXPux PLXFX%B7I0tq7C31p=Z43 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DomainManager.class b/idl/orb/.class/org/omg/CORBA/DomainManager.class new file mode 100644 index 0000000000000000000000000000000000000000..cbc78a09950f51a9492ce860ce41c22252be5060 GIT binary patch literal 192 zcmX^0Z`VEs1_mPrZgvJXb_RBK1`c)xPId+^Mh5BpqICWI+;n|s{~#wveV6>)#LPV3 z#Jt4x)FMU(fvm)`ME#t^ymWp4q^#8B5=I79JR1B9Qi~ExGV}9_85u-S)xoqYpb8h{ l7nLL?<)rF+y7;)}m1LGwvN19+GB7bP10f3oE6~+I0011KGv5FJ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DomainManagerHelper.class b/idl/orb/.class/org/omg/CORBA/DomainManagerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..953909022d23d4151c4201990919ab0629b2b871 GIT binary patch literal 2196 zcmah~ZBr9h6n<{rHrXsD#Gq07B4TUUAS+O8OAs4~t+b?Apjzq6c9UFVG;A`LqRN8WUQhnX167LF5wFqNi0aXBV!F;O86>{b(AE0 zE#sWvPhmq0cO`ryVUr=O+s|5@A+z4JYFcx*rmb#lt`xLw+Ffl{d7dG%R5$DPGD9#s zb&nw=w&|lctun({cFKn&IDtZ4+KU6neZ(VMwo!RfGFsb4xj~eHdX*tfh{wh+hSo65 znzm(Ib+aZ!)XhC^*$neppTC0nEbrSYHg}D>Su#wc#;v>%E%9G%%cu~3?j*cF1}_0c zV{wDDt@^R8rezE5+M3zgw@EBFcJrr^g`Zk=o5H<4lx<_*KBhZ0wuot1R`V&tf}e1s z{FqnlQw1gW&B`NQdBUrDkLtz{s-4qM}eo*jZcQMa! z)lFK==hmo+-vJmEx}Mw zMup*$*Gl)8ZQ1)}1yyhb4^bO%@3FnZ8!c`zB##@Vn`(wpuMcWQs$P*0hO-qaPn+v? z)8^Jgqr!EYL@j3r+ih^ipZ2~k_Iadsr1W;XRqv^q9a2ud+ICq*%bsys)+Nadyd_S3 zGhFsY?dGblEg9mXiCwnIArNnQD4kw)K^KO^A@rubguT$idVNnf#6x+)t?tlO={0Wa zRo>t=N)9!_K$LDYMaPJq!x4SYgSz4uHVB%!7n-2o#5nzK7-Z3qG*f6!eM;jcT8+|| z(KoCfg8fDlkRdg#bDZoP0-+-W4mzhX(T&dOH3U0*nU@H@#psbR3#TG&NWUXUdji4m z0gXYhG-Bc*aG(i?IGBp|c(a&t4#&toK&Y6SJ3_1txhpIN6* zNa@BDLLiZ%py(}fxKhL<+(p!2pRc(S&X2Xogr9ft_X#h8x~0BFm>rO!^m9bjzmYx| ze}RNbxBCiX0X#?MHO`UD^QCDzO|_9}0!$NF$1mJQ*hgazIJyUM&6x Dr{osg literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DomainManagerHolder.class b/idl/orb/.class/org/omg/CORBA/DomainManagerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..145c62a8bb4935e278bfc6dcdbaa323cb0825ff8 GIT binary patch literal 790 zcmaJMhd=F$XGuDb?rG8|4q zyN>JehGpnicDLu=Ll#EuG*wH=p#b(PY7NM$$ zBBo$R#V&Fx^4L?ck0e8Wj{T}*H4T>`-sXL-TiiDFTBB_|dQ-GNPa`|R-V`Q~Y}K&3 zLRuPyRGH~G5YmLjfFhlh?B{nmQ!S9+T(#k0i)?X37fAub0=-PcNS92e6{SjbiM|rU z33ZDfV6W7`aJ=k~(+JT6#KgE*dPiuCSwY;#qyBQOkZ+FJhGb*;Rm?G$y&8ZmA}I@ZCsE!Kds%W#Y|_OyFis;HTT z)TV72W`RNqTDnHk6+fSH$+Cr$RK_e` zMbbiZ`Jz)Rj&V%LxXrPN7{ipeww`Qfjf%ZiD(>o*FxrywF~>GOVHnmcDcjg}`+=&) z@hR?bd?u)mw(_%jKd+Z)I?WEoXuv?gV+P zr#hOy*}ZM%)SCCSVwJp&=Bb-)J!gp4&Q+Y=799LT-$ZGj0Serk6HhhQ++0Uo7Zv@x zs&3}>oShd#pYg4T=8*bbHw6qsE|gX@w2FhX9q*jvBW}Djn}|JJo%Wg>6+eR_Hb$;m zESUvoduAAxyOys#bAHF3#L+4`)5UxHzF-(|_RA~(!FWdW*=kn;?Z#pW@GO>&~Y|oKx2-3uojPrs&?I{=eDiILu&;A7d2gd6dlMTkOM-3$mpveX*;^YYos3}t4V@7HXr>R$FtJHc=QJh zC&$$~Uf+BuvB&@XnQY+?BJdJi#x!GpQG&y?(=NDRR|rfZu&A0mtl3_b*G*f?4qA4$EiIfICdM{a?ZKKYo=FVi0)aACH5J@`t~(L zlUEtG^nnsh*Au*Ao5q>bY>7)jSfd~n(ei_52}-XIm6TedU!#=8W0NFv`u0GXD>|3m z7Bpx`Fw6%Gsv(Y16)PIDSkC~giq@Stb?vI@F(m8!o*OoIYDTG2H*W=b z)Gz&;x;wBm;2-HtyD8I0x>gaPZ(?3zdTNn>L26NANoIatF(ZROR$^JAeokUuy1su> aR%&ty&@M&>CZOdE42&#{49pBHASM7X*(TBe literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DomainManagerPOA.class b/idl/orb/.class/org/omg/CORBA/DomainManagerPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..4c46d3a75d2f3667cda9b7932f79933f9cf31d20 GIT binary patch literal 2441 zcma)8>sK395dSTCY_e?SQNX5@wur5PAfdIz8W0UoB^C$*f{3~<$u=x(cGJx!ZG6@D z`}ueH#nN*EM~;tgp5wn{kH@*Yd5}$xH6QNXd+*HL-^~1GZvOh`m)`(f#t#C9Fu{hW z1zf{3>?;<;W0+*alz?Y3E#Nsk&m%4%h#4NU0@^Vr(D8KvFW^Ns%(Ed8#7nrrz7_;5 zVkv;6fMvYQjI6MoRi?Bi;1#U1y$v3(2C&KFH30*d2w;m@ew|(S29Gy+NIc%+;FBaZ zo#$|JYhhO|%27?$GtpJcRQ1dxhk%q-tQ~_1^f~7ROVy%tYRXa#T{cT3)tctu z2@kJx@Xi`(h1s=sR8l(^9$qlaOw`C`qO-}BnRs;0$jYj|DC=@YF-iY&*d;(xlMhqs zkYr7hRNYd{n{rB_i=L{RSvE{d-qw^=#VjgjbU7KH+?p9~>7ZZLi^d+|JzrOMU^>bx z%B_NuwqrPr-S@wG&9iJ8+mbk$RmAXh0~A`Ik2+=9s?FTz4WL=m?| z++jN<5pUxi5%1zX9`B2|iw`)o=L}6vl_aZ_BhVj;_y`}1_ynJd_>9@w!sk4`5b-6x z67e;@;m}#X)?osNp~T!mjB+@}K)1+a?9$jck;qoGDKanTckCpP7a7Hp(stG*2McrW zTM^&kdk$wC!_dGE${dH$s(>r4b0uBQs;NXarzu%Qw`4|14i~E8El?(NifM}xUyeDM z+}>4E76;MhtYlP{r<$ni2oh%p|KpN*MWbt|E~q|C<2Hw@ZfaG`JdER!CcPGgQG?{7 zQv-cD1dXce9D2wvcZSKQo_g}?^-Wbx+2e3Ad`zW=ziy=lqxZOArH`=U2~e%B%UXd- zjrv4_`h;Yd+Z=kEgG^o$X&NI;J%N~Jd%Ws%k8zF655)lxsPimWocSXIiAgF)*b<39Y6GWaqAi=%&{;|Re`wmyLH`{*BNFGHLj z_{qMX9w`RX`SpyHal%{1BQY=gDx)Lj3;7PwxsR?gy305j@^<%xd?eDl5ed=M7xI3{sfVFs)-o!>oom4f6~syCq!V z@K7);RsF!R{7c8$tsPd%)}DXKrFXzR?uejvB?2Bw-@D#oNZPh+T{DcFRxkJsw_NTy zRwE3g=MdVrEj=0TFqDe_e9=5+PrIt-N(wF}pTApu As{jB1 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DoubleHolder.class b/idl/orb/.class/org/omg/CORBA/DoubleHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..65089e6e91cfa85961ae286b046039b767d4ee33 GIT binary patch literal 853 zcmZ{iZEwK>lQcIvbf1Di`(2Wxy!xO+BVoR z*fqGXC{BaHBvh!5qVzNxMf#Z{?=;>k3hlTjk%H4ny`rClK~GV4-o#1Yi-&!$-F^Gw zxi^jz9UKip@6~8L(eJdthOLxQ@;@e#mJH5XN_V1{IYnQ88VhC1X{?kvl=HNqmd!;j z*=%4NJg|94-N3PFP&ROFnmjUiZ1V)qW{-WzwcKwfo=CSZ<3TS>6y=j(8hC?X)c3ka zC*iSHY%k;I^PP^Cj;h#MgIUl(v5_j~_p*AKsG{-i8sef73OiG7POU7HM0QzAx+_KX zKcOVrQfw|$4%@Gzk!;V@ALdzWs|sfr;g&eSNIhTV3I4!q(a?u`f5! zL}AG%QeeyNEQ%$|lmBJ$Dp^EM-5;ngazGX?pM`7WZFYAFzu5w{x$mQIMs7^HzZl07|v`#f9`bS(mJmo?+;oHB7^q zXONN;8w_D#rmbMvTMTED6M;wy7eR(u(`|=bka7(W!pQ>@glZmbr~{$S5(KA&+fsPfJ%cvz%UYY{M)QwXm&gbeat2 ztXj4slB9EHweFC+uI*-sgpALqPe0m*LuIR{My=GHR+v{{WVTpwd&e<^VHv9&YZzr1 z>g;vas#DrE{mxCRQqpbVye{K&jtzXl5YuaE$0+&tLfzx|61O?N60`$D4IaH(=qDRR&N}vKqa@qV0>0nZD^t5o~ zGBZ6nCF6UJGJfDNuq|VUqk>%y6V^-W(koTnrczpLSGKlwaq}T@$^D)EAO+DaiN;ai zlU^$WF4P7J^E6iQu1Z`T!}zK9)AGs)@x^`dbwpo2rl})Qw1pF^J*`rwYy(9SiK7<` zp_oF=m5ksJoQWfpc4?77JL_IwS~g5lX4Kg!lw3_PoC{2k=R+!vm3603wT)fFG4}L= zQ)HM5*6uq8*|g0`+%KS}->K_n(Zji#%muSHUxSxG_4!a*#n5UlpN-`4@jJm1Xu|(U zb*VGtr0y~(V$2Kmie;AFrz^+MbSrRR*aH+BkE`#4jiJN`|ya55((#64pZFPx-T zEj&t(?;ySCL_ka*eMRY;#-G*^`s=5i(cYy#2K$*lK#nw_{&CDb1i}Xh?YpN@T*8=t zdJ$oS$l9wufpk0d7~uxGJdh|}$7SCwPrGna)#vDbfMN9+x*L%5sppU$peOYV(yxf@ zKSVgMHlQ4!XP+WuVma!v9jDj`q~S#wZwUTLO!&yxiGX0QJ_7$8V+ZJ!i0C7{(m-DW zv1KwGpg$fb*nwZb$x9SLBSEVKHcnvl?D$}PE)*Ta&ooP=N6SB)r%Yjr8X>5&bBU*N zUYZ|D{DfF)h%Dz;?@R3Azkj7#@VyAVK#z<`#{Q-*N0G*qk9Cc5ON5nBQ-=+lm*x_w qLqbwhiRlI|+z%1bpQ4K%&nQCwAVMHbvMte`m`M!gzA=|e#vWc1>L%p9Ujx5j4ltqO`Hq7TrA ziq6#)Di}TNaL?WEf9^T|^ZE7m0pJMx3S=Z>h$5w64QU?MdC17vkg+Kv%OLelJFpmp zTA3kw-0rpg6NZSEzhMwdPLqB~TCL1esqR^3li@(Sbi9_~bX!KLa&>lUxQ^$W4cjs< zdT!uXeZsm$u87v}y|zy!w3(7h;7@9#y8qykB%|f0p1G!b-ceD-JX94iC^EKGY-2}7 z4!bJ$kYLD8Hdl56YOQMBojZ2Z@)+VBvu_%<*=re(h%qbsQN3I9(k8v zAUsiyA+;D%DWU|rQ-)Mwj9EfFWRf8h(+dMc#*k&KOd|#T8NvYK&r7RFgb1(3`w<6_ I9(fzUH@!2GH2?qr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/DynamicImplementation.class b/idl/orb/.class/org/omg/CORBA/DynamicImplementation.class new file mode 100644 index 0000000000000000000000000000000000000000..65af2932876d609364ab649799709a7704e5f219 GIT binary patch literal 307 zcmY+9PfG(q48>oz+iqR!Kk($q;-z|7@Tv&f_E2cMQbq72+ifVL-I;Yd7W`PA3JQAn zLx~wZZ4UV*c`uNB|Ga+!IK^&^I$9C7Vg#Ps5q1cTbETELAk;d?cZ9HOW-L>sSLR8I z!_Lsyd18ur(oH8W^;; zM^&-+sr;nUF?+)7t$c`OEUBGiWwOsP*sFf7Nn-6rh&~9 wL6w4;seme6kY7}in3R*M@9E;>npcupQpv{1z{tSFz{0=`#Hp>5uB^9axZEBwuD{=HBO-=ia$@_TT^h{0qPW9>|!$4H+Nd;|Rv_ ziA=+%Vps|zC$^WvxGB~vGFI`K81iDdCSx5NVs=Zy=Muh<5yuS)w`FYNO9@{^v4w(! zuVq{i{0VG};f{oFBaNtOHX@{1Se3SLpwfT?js)AwT;rFg3;JBiZ!D2Rm%)XLOe8nF|?Xt zRsBEIr_*N4%_eN#=%-><O6yHwX=3%2I;U@(;ex|B+`#O3h7z&CgF^s$I zy5q2GH;W3&;0g{ z-Mg8-24jedcI>fD4S~3eL23714|Hir971o>P1p@Rs8^44Lp*b5WObiXrB}GEmwAm> z=yDjQ2BPdmv*9?=V>Y56xlq@B=y)QL1+q17mT8GVE5 zbFklN0&=9bbj zNkl}eJJ6Uz>`#QdylG53#xe5u5h|i)P7rB9?g)!OMaFSS(N`Rk6GSbHkhpVQmsx0z%L<(&&PuDV5qpN{OT_O#$LOofKS*R=Bhj~|W?DEeq;z5m zz!ytUQ1tRRTnSrkf2hb&T5{v%<+pqh^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/EnumDefHolder.class b/idl/orb/.class/org/omg/CORBA/EnumDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ce3a9ad680c7d6c746a76a37b685942def930ef7 GIT binary patch literal 754 zcmZ`%+e*Vg6r637#>S|v_M)w~s$iQw1bwX+yn%vHQ1P{-HkOt&31L(5uM`xE4}O3j zCGMuFnqUYy?4C1c_RQ>le!YJH*u|C%3HdZqD99*ck%uK7N)pNvmL;qZh(q1<41(gN z?RGVL(A7?wSI0-%ndJ>mjr#^cYOiPY=m9~pTDv6>PV5fDm#Q%h93!?|L+=o5M?sG5 zQoU^&+J)tK^qMl*pusy*tp~S98E-YVrRmXdkJzG*jz3B*GRqCi^D!F=rlBZELzb|r zU=8aED%eo4i5x-sU&-gT*)d##OkW@BnyFh|t=aAyca)$KZun6%7Q%(ak{YJNNrka7 z`>`rR#zbWO-ia8vbr{PNaw~?%zfSHUcGx44KrqFA!tG)YNMtMK9*Z+kOn}J;n6z3SA^8WA#e5V}S6`4AL71>CAQwP58(}92 KBZyCY4B#7iQmZ=v literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/EnumDefOperations.class b/idl/orb/.class/org/omg/CORBA/EnumDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..03e119d35a3814a1a0fe431d8ec9763236733bea GIT binary patch literal 200 zcmX^0Z`VEs1_mPrE_McXb_Nc122Mr>_T1Fmq|~BfMg~z0&1j#j#Ii*FoW#6z{osr?XQ7 zVYX~2W$!)9Y8;SFLfSG5El_6JyX>-Q84ZE=y*o*#J2?;k^wD$Qec!vk_kF+Lce?ZJ z$y)(jEUc3;36+N#8M8RVGcAN`aF~ZV89C%-6i^f~FC&B_B6JzeD9OY&WGrBjWsdUl zI$kcxcsicJv}f|{n2cxP*%F>3}_#@D3U8 z#JhO*ZXPJO_u#!E-Y4Px5lGS5Fn-Us&S~u0-Y9r!O(KC5iMhA#X?$NBAMV$t)LmZ1o*mp_6zV27qcqcH4bT{ z7U}L8E9$ecVtzI@JU%%z7~5S~$d9Nqq#5mYv4}sgws>nQoy(=Pf}!d&>5NLoFR2-r zDC$OfI;SR7eNok86XSye2ZwqZZYro17K?Kf z^HXeG#AhfcJ2N?R#|o}RQo(2OIT4>%@CDq#i!Ume!V?wj#{m&vQgA2k67gjPU%^)e zY^qPi(BMdFd}8z&AyFOTo8skAm;uy9&OC z?<@ELekkHc3Vw{ADEKLUrr_uJg@}9k{Y$FDVmh}#f&WUuukjlNzs2uZ@%IYu!(9sg zfV&m^kuCp8!JqLL1%Jig6#Sie_c8B&p54#02YB`X&;Egbiuf11{I`M!nS2KS5pk9& z|5b2OfG7yG5Sl1~1@&kuQ!E&1t)S|ZJzf{mc}jmXPpMcXY9$Ix@F_SY_!S`_1Vuq) zeM!M-Bt;>_3t2#0EjLz+3fM9_G8U)i>gUYXHCX(j{vA|fFMn!jUd^gA)Pt5tmse!i z4mfK`Z1qZvPL59>Rx^er&>#v@VMi8!gBiGacJ`!8hs;hDprmG1gHBj}nvy`}7n&78 z5n7m0sxc^=rks}L88dhmGHF&KLnhUlTQ=>iRxDMQt)>=jo{EvBqa+|~Qqt31PRS~bN_xQZ3n*sz3jz+P{#F=0~ zN)^qjQ8XT0vIGg1T!+*SbdQ=N2LyKndwTJxfS4OSYy)cpSf59u0p6_@MjbX$W{Z{W z3TUUjxK9S{qrKL2HNYmArlu2cVYfr28hOo1HH;3YpnWkgGD-x*`x#qI;2))CNEP*I z0Uh4N(k=WfBDPY96F)iiZoPAgGJk?v7tQ0I>p`NE-Tw;;G5%<`TXi? zX(307osAS(%5R;Rjh<98qVWCd%_sS!&UG8C%Cpt>`b}9` zLdINGveOm5B|}lRG4{^uT3$1>MKxt)1nh8!YYV%(vYJ%^>+HQ&{rN2z7ORjeJJEKN zr=pdcMyHUr)EB7As&t$OaX6i>{Z*B$&leZ4cdUWwn>}$&RuP{9+gcx3jaP}xleq?w z)wIme`aLcyp=T%PlPf)|#zxGGW}ZQxg4j_X#JQv^VNpBRD>Vq~Tz2e08yIo7M8yi1 z@hZ318qQhYPnqWrf?F9G+jl$$EYz7ni!DYLJV1O>_5~ z>upzBzhbrj|FBxoG41&YRr9lMs+V6J-A2roW3a ze{<72NObx#r}0U&T2F6*-hti~2*+sxS{}rcZFalOmWbW73g0bNiKo~S9ps{ksG;7z z75E(@PesZWX`{D~MEuJLR17=~X^ZO*!cTwG;JarT!M-xYGNirHJJ5Oxp(L+YAm0|f z9nEDZySChH`uACZ05B*IR&H_z+^ju5N4fHINuOWJh z^jzOtMvJeEb#Z@R#9u}$t=r-Ork1fj9*hJdfmMY2BEd2?9A`2Kk#I#I!0h%iIwJmX zXCy$(haIpCG2^^=u$MI>rl!lyMwgp1Hl5qe=4EUtV{2n)Wpvrjwl#9L{ULI8ej{fO ze~6r2(8$>%T+UW;p(Bm1oIlbfT%U87aJNf%6+LTP?)3=wIfSVP+)Wd;>i8(TX(|mx z9k+_QO7};CW?NMx#E9sUh($zKuykK7&mnGH2+oT=eqjmF6!RjXsDQqwP^h$W~B^&ToJ; zAncY-^gxUp-1@2Q)o{5R&Z4r zg9n%}#00;CFwBI2gD}E`po6fR2?RP-8;@gx2p=EO4R# literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/EnumDefPOATie.class b/idl/orb/.class/org/omg/CORBA/EnumDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..7e271e59d1200c0b13dd2ac43df07084bd700ed3 GIT binary patch literal 2002 zcmah}Yje|95Ixs+BE?ZkFiC)f5W=I_39)(fMUqnTpb!Xkh*MfOA3U;k;}O_WMi!aj zU$vzjCd{-ypg*d^SwEs_r3|B)qpQ1T&)wa-tAGCe@Hc?F*w11H-;H1z4+YjnaS7`J z8v>gGj|9FKcr5TlU`ybsz%zkuf#(802$ThO1YQ`}HBm9KXW~Z_FHQVp;AaC>1HUMY z)EwQ?O*_;I^V@#VEcxwbX`{TmzE*nVy=iaigYuyc?9lbS&WgfNt>!u%g>(Dcuk0hc z)Uv&1sS*aR*Q9lL)%D!)fx`9tC$$PM6*3#X!-KEo3!kJboT=HZR?YQ79URyV%^>bY zr|kGaXxCf1qJtwHly=H%EBot(#2}5fZr61{|H*tZV=ABEDDkFTM`41|CgeVukMDMK z^z1fsG#FNgMO4T-`oQ(H!&DSzVySQVUTD)Eu%2Ufz2mpugu2!fnQZiotadHXhknNm z{ot*_rI^a@iIp;@qdSejtuu^bj5#>Z*|8h1?WQhmcFBiwGq6BZXiT2esF(#}ZzNMZrFk*5R4Y$l$pKV-5qK$))q%GKOyt8OLd%78bB5aLdAytd?X|lvPnyCET`fM?UZ3o`o;)rG>BX zwS{kR-@>wpuHsvT@&7k~!tB=O_A-a3C`0t00b0IOyv>~Bb_tzDVeUQ3T%0l}v(sZ- zjx)A)%k@{f5%vfPQP4#W>e*)!N1Wrb=d!vNPO~b^C7Pmt11mnw{}_7_DLyPce{NZ+ zKHn4EpT||=HGWNX8MH3Ehgw+t6RF?03tDG!z0Wzzx8mN=!XHTe+Be_8=Y8`y-)Zh< zen)y>C^nd<14*k5m8v literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/EnumMemberSeqHelper.class b/idl/orb/.class/org/omg/CORBA/EnumMemberSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..454729fda6144430bae207536862e9b7a23f071e GIT binary patch literal 2088 zcmah~U31%15Ixs&B3n_2PKcYf*fPXz3bcunlq3zr)FDuZKq+8k`_?EpvMbA_ zeea*>D=&QwALDvp$h1$)@N3|eVG4U?)wcWrFVfZByJvULp1b<}`On7y7IC0p8jA`p z<4qZFDUk5Cf-ATxV@bg%mV>mDlCdH-R~4MWT96*s#OfUd>(~&ko8t3&09)eY-2mQG zu#L2g_r-}D3NqLcs}E%C%J`6BBxgUUa)#5Hid9Nh4ok_+-J2Wh$vxWLtQ2{QVRXeX z4SS72ipBRC{9>D4xr&u%I2nugc#^wtGRzvcY=(HO$G&bpNZrmH==bzwSvO0`tZf-) zDJ7s~e&4qA0(r#-dBq2~F^p$zz3|PBUft94WlsE1ZmpW8`*Q25%4ZZAPSAO>vjicKyiYTz)GR)@ULP9 zvoda~$Rf%R_4aGatRL?1!#uaL{O)$8T;!H;*pu-5aP9@Z4}-9QWsQwid!l^ z6S+=xSlGH>;8okGm@01La}}@S4Hd5-qGAqF8DFS~A+F*}7Sy_U{%EinjjFkBeg@Xjem?_pQ(9`Eygs%^`z z%bnzPPcPRg+EjsLX!D#QG?}Y8q7*sw-pe*hw|E(5y+ovo+_a552Di3dO2aOGjo+zKhxV?Uwt-V)en`mfTh1`%OobOg{js!A*7DG(-Oj0gX5#z)C=L8+`hie6 z;+oPbNNbuE^n8`RCh5)SJ)%7U`<@n{gLIW$bI36Q{w91!jx~t0n0Kvb;D?WP$F*M| z-AX)xzk!h!ND$|6-aVF~w>YM0&oKH3v)WUPHXvsb&mcX*SmG(9pAa~D41Y#zKxty^ zh&*JP3+>*IeT@I`1d1If6Q|8u=9`Gt$~jRlK?Nl;J-8NKO+%)E#)HyhLFTNM;ZP#>TV z6`iXqn(2$3-Fx;s&pqea{rr0S0I-McD8fi7n2SKcd=v{vi?Ardl7eLgD+*Q_^RWC4v4jNX&J!Fuy>@`EMXxE5MX(M3qU9LFXs4?tl=eASV z?N(hcmM)Kv^tSD|M%Co{nbq#NB+rdjK~#h)_fEqlO>JyRspI-<K!VhcX&9-xG<(@aKTCj exDZU9E#8JqVw$r%=vMm#3vJF-?9{Y5&iVkT6);l( literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHelper.class b/idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..12efa0c3b897be2e97e2e1a4573f4c4cb2af566a GIT binary patch literal 2276 zcma)7U31$+6g_J>k*#b<;wKZYjX9jh83*J&^7tF9>R6`@m>h; zYuG?a#SQ7PsUeLmx%xoGwu%oK2C~kBvS2usF4_4+=}tbewtaJTC9y-hYo&dWWEfnu zik7p?py;t(hM?T0SGHvDF`U$6zDNp}K~}LMY=0u;<~8h zY|C9Hne8Z7|)ki%D9KJ{bYVzNvNsI6-WP^!s1JpjKzof_mu<*S%8=pwu|jHjxpyt% z-L;PB*{=K16nI-W$@ZREsM2ZUITE}hvX)eTw&KcPa_~=yCQAD?q5L~b)6`F!CO5nW zM7)zK;%-$Gb0X{H7%uB6-)L!GXFr3cfnmghG7FYjadCF_?mOROr;}|H@qdo;sj^oY z7&JLsveiPVn0Kdcis8nwU2HF)|KMKrquF(~lXsIu`($AlawpLX8bLiJRhK@NM|*J6 z*My!tV!Oc^`dLlT&yP};V}Vv-TGM=@=WFyeMsG&%0pkhS53~R|(&+HaqplGM))6># ztzn$OSAjHei^K~2Y>L3xCs z_){o9BXsx}!L(6>R>#mGMX1Db#$|h+Vna}-R#jY({Ar?j$XAJgWPk2Q@ZT|6$FNez zOErva(z1@x$QS`eegY@Eq)+#Ro(kAB!O%GLU`AXJGDOB-BuR7BGhQSAAVp0R)QP3& zZ#bD&mM5d%V>CW#)bVoWp~4>j`&Yb$Ka9Y0a20cm{Y?c9)7ZP{fn6amg}|al{HTUk ul%;6=h>(nUbiR&L4+Dhsrz~KDXc&Qi5F(HW<$tN8XXJwcMwvCrjsF0LG*R3D literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ExcDescriptionSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..768aff9b9bd63525057d4b8d03ca6ee8e52ab74e GIT binary patch literal 878 zcma)4*-FDu5IwhT8e5~*rSAJ0+lQd96~PS@m4b>dK9sb*l$5lI@z&+96cme~AK*uc zb7PdYBIY5Jxx+cLoSFBJmp1_GSWcn~!zxA+P%)as7{;ZUkY-ZFl!|E;GYrbLX*W2- z(#4VERSc(AF?RAN+grxoZHc?Wa_YPMs^nR|n`4M?SanNmGDP*&bB5TCQzo{qhoVb{ zQt-H0W?0cX3c8Lb%%aVWgSy)gr-ER$oMglcH=ZT@Dt}S(4bjd~3gXTs%DBGT!8xP2 zY&xewLl49J|6^-NqFcqRhB?e@Siqu&C8SBTU)&b4PWk1&W0$$dkgA&3reT})ijgl? zc}XzLwNrnF|C(Fs5F$OdU70@irRZTeMMG_h_7sSI{AboS(L-hRFGel~Yjl-eU`Wu% zq`Y*r3VE~=vc2>gLxen_C-V%JiM}H8gy;hW;KTX?*f7B&6ifQBYzroZ{s5B>Fo{gI jiC7C{0E3;7Y~~TsCY0|=Lr4dZ6#ZpGu_og8vJK!9+mqUD literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDef.class b/idl/orb/.class/org/omg/CORBA/ExceptionDef.class new file mode 100644 index 0000000000000000000000000000000000000000..fa1ac6441eef23ff59565a0afc671b25446e6a6c GIT binary patch literal 252 zcmX^0Z`VEs1_mPres%^9b_Py%1}=66ZgvJ9b_QN{20lgxsr;gJ{ruc?eP{n5Cr5qP zisaOSlFa-(m((;y27#=^vPAuy#JqHU|D>$c`L3)cB8N^YQIp^n< zBxdHNrr?w*Vq_3O)dRCp0adslzo;ZJDJNCm)5XU%uOzdil8uppk%5VUm4TUo1xT_n JumgPz1OPgxL*D=Z literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefHelper.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..18b62848ced947702e8c2ea1aeb3b183c68a9cdc GIT binary patch literal 2185 zcmah~ZC4XV6n-Xen`{;nV$cX}6|psJkO)X$2*n0sD=jG&s8;&2-E4*!4V#>0srpm& zSJ3vHi1nOSzvwyrQ9ZqrY{Kpa4qs+x=HBO-=gz%%_TT^h`WwJ39>^HOyo`_WNerX- zRHorGF)Tz;5ZjAUd@j~YGH&7vF%-peS;h)VVs=ZymlD2`k;J@&+cH-1wS;ftSVLLD zw=&KN{uI{5a7V&-5;hpZn*FrJ88T~4tCnx>*77Us8_UJ~7VWMytGvJvS*)9Ndx;^K zoxIBs65I6AnpTBjBs=Lt5}ZJxF74=m*+o3GY3s(LvfkR#D-EIy)T<0>LOj%e)AJ48 ztmQXtt8UhWh`PDQEt_FB>pQP#J}vmRZap!0%dR)g65lBZ%@TiNTe?B;nd9L85IlH_ z#o{_CTlPa+P0JR_^Q&fS-zKSC-z}WN6@F~hZHl#YBH8-BeZ+QJU=dTdtmb2e8-Bj^ z%0q70r^!j~o5llfJmOWY$25Ne)AlKmMHh`mr%)7pfQu3~6>Qt z_vI@19+aNTtEIICs=aAZgWdXbdo9dNUso`JD-!N0_yPA7Y~x1-*D)jECj~!u7jq0( zJw>d|YIFI1lHB*oaNgsYUoMukJH?G+nPJ>(Il^}?bal7YknoEF4ZkvsdVSrZCFlw& zFc>a+oiw-CroCTLPz6`8gBrsnudmznHgB}J#gIJej&6<_hP^22Kq^|13x=}>Ri(|f zx@mK3M>n`;lcc5WV2=&%_!I7GUEhh+gA7C67S(#H23pN2NncI(Sw*9saT>Kxk{NhF z92Tk?Z`A!nxw?@dE_%1mHgN*PTN_HJNBf`)Cp3i6oAwg+LJw>8Jxv#{<1x3oO;@GW zxUE%rgV!iI3=;!U_M<5|PV@#2X?q^j6~C}S(B$3FIQ<*O=pVx%i(aIeLUU?S8ZXgm zn7)j@Vf6*r?=%59QolOpWXA}E4iPx$SYx6U9qTm&JA0Ww5PXN>L*W)qMcR=5M3D9b zg5g6NgJ5aI#2es16Ap1O747k6G3gjb$Ui`+n3_98tPQyd{QGjNGsEr{Kcc$kujlAQsL??-}vg#Woo+JJW$@?!b{7>#JQn@!sxwh0? z8)t=-ZcHHr5-AFb9wLV;MNHzjh#GXAHG7QxNQ+GPIR}4_@FJ+2>N|wl0Vzs9LsWf@ z^ugG3BviWHmlz4)88WYMj%1!MPmwj%My8DmQwKfmeTfl-BJo5TQQYukoE+!?N>cY? F@jpIp6Dj}z literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefHolder.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9b47f9cb8bb54b2c48298f04a605dde553a508b3 GIT binary patch literal 784 zcmaJ6a+#=uQGMXWV$h~R{yG?NP6f8^rNDC zbw(RZ#y;-8@0_!H&b{A1pI-n@a417UI*u4JGB&Zr%Qi1r2|E&U5_Sp1v2KkFg50(3 z_B4CY)9THe+PQY|)G-`t+QWwNP$h_+nnRPG5kyPndjg?ucNr;PTEyZ&vE>?im*6Of zbZnREZOhQEhR%rIQU)7TIV0A3bWO^{OQDqJi26BVi#|Jyk}Z`38@gkCzSpXPWhe^b zkR|LX$fKa3h{%w@7Sy&OBEfvnwQlV2QniN64<1$W|;-R#(_paynsM z^#kOUH835odgBZt>;YsxRx9s_%rR?7c$l<@iK~?fqW>UCtOp?#^$n2;gt^KFQXYh> O5%wox0`Y}!1Na4>@3-{; literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefOperations.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..93c1ead1ae69499ab254a1ed58d728feb5cf7ccc GIT binary patch literal 309 zcmX^0Z`VEs1_mPrK6VB!b_Q;C1|D_>UPcC%lFEWqMg}PjO`rUtbp8C?bbV+4ASXxt z5TLkoeoCq}BLjPGYHm_$Q86QfyoP2pn!4bUqSE9NU$6?GS_KWf3N*tQ8B|a$a;->C zEhx#%&vQvl^Djs(N(8Zib_rx9mL=-vB<7{-`zK|kCYLZWD5C0g&d)1J%*;zoLDq&t oO%Xy38zTcF0}~K3Gq3=Igqekrft7)cfdNRfGjKp@PM{0}0My%4Y5)KL literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefPOA.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..c1ceb1f37b25272c1b0818a8c4e4805dca8d2f95 GIT binary patch literal 13358 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 eNv0y??RkUdGH_j8AY@J literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..6a7101195d4a1b86e21aa4cd2944e9b5c44384fc GIT binary patch literal 4579 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDefSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ExceptionDefSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..0eefe7f0f996e6c7b4d68d6b582b6fd002a3f42a GIT binary patch literal 834 zcmaiyTT22#7>3_b*Hzof4p!PpJ8pWh)U6Se2?c>r(M=b!>LkYMZp+x=UlkNdP(Pp_ z6@6n{sIYdi-_8ur`yJky&#$)+06W--A%Yndvr(v+iy?`W4D&K9s9037q+*#txizge zXIQ*EvE901H|s{Bbb7FF6z{9t5e>U_$glDY;oU~7A@&%8`ql+Qs9@JfmDY#KB&n2L zZq^t!^??G8?FzGEapSn%InQKDOzlMZgfHk4Y=( zAu6;Y+bNFGE{OoGfYIzLST^{Mzzc#;bbu~4?qM^81?Vi+#d1AN91|Xs@R(>e*FmTU gnZ(o}lFL3L*n#p}X&MO+iPK*;6zU-SDBA$O0V~DFEC2ui literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionDescription.class b/idl/orb/.class/org/omg/CORBA/ExceptionDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..5ff6aab7d3d5fa89dedad35a67294b8b89397f8e GIT binary patch literal 559 zcmbV}%SyvQ6o&t4b7^bT8gH%F>Z*;EfLle-whN(9Q0Z3EWDHZcV-Ur&HOoe|9E`^aE4k5MQjzYT|@yDiK@ho#ID4iiG33XCJq_2$QyG8 zyF2t|o;&iQ(7j6&5ryXrIT0|F0{$o>9z2MM!JP4ADq>n`>3l+7r5h)q8;?V`)w{jE za__0ziUUrzaUmj+UNYqCjXnvo&EVI6zx2<}A1^oh7Hq6Dz`_zN3(FEK5~~trtT7xf z%AF^lPg44@HlO;5P)mmL&rEuQA@@^;+M+j!lhhlGxO>y?cA`|Ia~#oti=eqdCsF|V zCroBgm13w$NmQjURC9EKA`>@g*HC+4-+2LZ>|BPtqNb=T8qai4UTkCYTWgYLP_L%6 Y6KORwXwGQ{-KlCB45zARFuzQE0-#cKVjjAE{Urb|0%)Qt*j}4w3Uyd={o%QY@c~#T3i3a7~F_S_8*z@iU{~ z3k4QKDCuq%IKzoV-pR!CxlDX~_SV>Fe4e!9`7|G5XdJd|%N=0|M0*z)fOZC%FqJ%Pw-qWf+V~=cD%Kkfgf4k>Ul{%G(pXm~t#{J0x-`e8Y9j6onb67e-E9 zHx5JdoNK05XUxL9xt!(1J)tk(y8Qt9s(UwBX@+BDv0|>9@vLcQ;&ZNJ*%`WC(BUSX z-jGoh@{TK##HZ}SnoH)~%ncn9X6TM%xx{SZg+XW6-2JGBfwUj%RGtnn(;%mG=n<g^NyTtwlxcMx==c zX1E|%PCdw8V@W~i6)AAJWs~Kq6;;e|UXEBP@O>*UV8rj#8t-!l+N+*B4WV^2yGGf1 z4pY-qWGQMZms257HzbQ*lL@GDpH-4oHzU?r*?pcy6xAnn4mr(sO%YxJv? zBqJFzcEEn64akt@nSb2k9Rk4;8n(RCF#2)PKRt;c8c5r0>>{uj+d*&}p>mKg{T+GT zH%pKdW`^+`jStajJVWC)ltk<~0uRv?dxpRhs9V1vm@u}XmC&?B9tuvO%R~DH`KkzX zjw!e-@YBroBR?W5f&Ttu=zrm^`Uje)jleFN7b7nb;>S3$jTW|p);S~SX(N(0@7ewO{`drNfNT^pk`aWFieecn;#d_&TE?1;br~BBQdhS+21EAB zb{m@AYG|eM^~tez_E<9EmYctc=-SwPIkBz;UoE%Xrl1&L#E98yqU5$GW_ UsIr8F4-wTEDTR8Fo<$qL4=e!8;{X5v literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ExceptionList.class b/idl/orb/.class/org/omg/CORBA/ExceptionList.class new file mode 100644 index 0000000000000000000000000000000000000000..3f4ccb12283693125fd7e254037f05bfb32aa59b GIT binary patch literal 336 zcmZ`!!D_-l5PhQ?W23cd(^F5qX)g=CRtk;uAP9np_cU3;29p(&O8Z%!1P}dyepKn~ z9!foQ5A&Ee@6DV2`aXREc)(47CI&u+KCTI^i7s{hL}-r2Yl4`XR1v(yyp^>hXI$en zCESkYW|v7*WOBM#M$dBfu~k<7=#08ng%!=l|H%l!%X^}>wKiqtBjoU%D$Jhq1l!hK z2zb2WJmuFi*A-vX&*Ob8H*uNC#cQq-rowYW#HXi~xI=^gX`crUaJ9wVfIG76{SkDq bb3yRYc6fonVFz6nUD_dIj}=$w|7Cz53gAH% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FREE_MEM.class b/idl/orb/.class/org/omg/CORBA/FREE_MEM.class new file mode 100644 index 0000000000000000000000000000000000000000..26f0b5a2666a109b641b9bfa2b55de7a6b61f49f GIT binary patch literal 475 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDLv?{$kgIFFud6R3gDk2n&~)|J literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FixedDef.class b/idl/orb/.class/org/omg/CORBA/FixedDef.class new file mode 100644 index 0000000000000000000000000000000000000000..6d46278ea12fc91e34036ae36e727c6106761be2 GIT binary patch literal 211 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2C@92bp8C?bbV+4ASXwCx6F#v z6qnRAMh1bb#Ii*FoW#6zegCAa)Z`LI1_kVD{R>iy5=%1k^NJZ6L{XJ^y7+`t7NjyV th@gt&FtH%Ns3b8dCsiM)&o!?kv!s%Zk%5tciGhWI8HiaK*nl1Z0sud|Hr@aL literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FixedDefHelper.class b/idl/orb/.class/org/omg/CORBA/FixedDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8185229d4824022818227d035d49e279696e4dd4 GIT binary patch literal 2141 zcmaJ?ZC4sc6n=)cg=Gy$(2$s>HKq+ND!w#*5o?0dG`3PxwMk=NwhN4e1c9@zP4ZKc zUt!yGh-uDgn=j2d{ZT!=1G@{mh+k%B=HBPI&z-q<_TT^h_!Gb)9?F=&4H+Nd;|MO{ z6Pboj#jqSkPHeA)@tIh!%D9PJV#tf-nv8W6#O!kkw%kk)2KD7LPV``$PJTWF71hzZ#>I+wr>P;dqBO4w1bi>nGQ;~fQ)V)g;9GlcDf zRPZh68m?>HfGp=d0LFg|qMI5|)Nx}@&G;(y_0^Edh=M?<=&Q`OM44`ktJS|MD3U((1Nu?X zy*i_f#@NH%^PF>b&$;*O`{NV90d{3b$R?3MPR1(oysYt3kWiFRlCVx7jtqNf5#%o& zucJHtj^1cqogC|D-ABtjweD*KiNo%oOX~!2wQ@@!G#rx=ifR;tgT$6+879GA809)1 zHQKhNUkuzKy`~J-uW?4A_26|W6ILTB%^?kP#1?&W8Kt0BLYui^eZJ3{f_W$kl8_~A zDA>f7f-<%h>>xu>`rq`qW1E&okm?yDL${4VM{l-!)*U4%2N}P1rcSuCXjRL0xvDUY zrXJ}t5KYL~pK}rYz>Xq?0)a&dP0p0(h<$cdBoNH8m+;8gH4@p1CCKUm`$|tHtgF3) zys!o)<3)d*LySFu%*R^w4Y3(!2`L|w^)X4UI!62tB#q@Tq^i9lHij@$SwY5!a5cjI LB#a?G^KAe>APTKx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FixedDefOperations.class b/idl/orb/.class/org/omg/CORBA/FixedDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..d141a6d79727379eb2ea108f4edfdc19461ab565 GIT binary patch literal 185 zcmX^0Z`VEs1_mPrZgvI^b_Py%1};Vhwv^2D%#vb824)S-U`7TOjbP0%Mh4d6SiW;`bHeH$~WwR;N`@s9Y z1rNONKt)5)}WIEaX-h03IzISi`{^!Ca02}a!j1~m>agU7M z=;qTNKW@ife)P!b#l1565E9WZ!;kw!49FlRgG@do<6(rEcYsON zk0C_(6lH-XVOT~CBTVS5bdVpTOvV{H#-{}HlKdE#aR>&VQZh`W`7|Nou!JKLCM7%~ z;!zp(2ugU2-FlpTeL}*M5}uOqw1j6QJS*X-i04E+FX9CO-f&otrUX>%?>?wbsLgRT z5o->ahMtJE36R2LnmLkWK(#GTn|i#tOOKd(GNBrigz;_B6S}!gKuK-gfB;WtGODp% zb3`Y#rL}e4Nh8*r9E&w~_VjhMH}BMsXwfchm{ix+x?}`sy9RzySdGWSdcxFCb8k<3+y0KadBgJQiHYPWdAV{<-FD7a?$ZvXwUpV$@hl9P zYGibeI^NI5MZ8E^*%FCcF)P@DtqNYk%OYM;@G4$o;&la^ai@Y-w262_!JBwX#M=tq z!Mg%#3X{>%-WBfY-O<X!5yusLgpU<`f=?Bk zz-J0R#}^{LRPYr}D)<`TDEO9v-zhkS?-l%j9~GR&PgIi$HJ+vr&M26|w1Ts&eS)>l z@#$wiWmsi~$#YDe#(5FHD7b)G1;65=h)YadR&W$s1(eOXYWIwQ6~V6VR;qRr2U=M1 z*7Z&61S~HG5T}1~T(jl#7zpPvc)$Gz4@oPeZ_y!6Kr|TD;87U~#K2;H&ax zP~H&mWl%B2YyuHD3-AWK=TSM0stl?#xG~@RVm0KH28vByv{nd)S$W>unYVA|*YEE?0j%M97I{3#U<4HrsyU3JCc?4^4@Gz+ zLR|z+gcTX93f2^?D|js9iHxT*o-t$$i@V%5L(Z_!@B>@(-`d)4^KfTdd+EI6)*kOP z&v;;lj_-9h8B&JfSY3v(asyd0N z=t4`X+csSiBZU`dbW99sI-Vh~%lcsC6Ei(W(O zq-?d_o>3}_D61%7OvN4CRWXHW5oT1(imzGmHHUc>3s_XKgfc_^f8QBq_V*eaG`PAL z;J?G$Sgo%xOb-(%Bi?g`#}wEjb z2ZdWLYFy!TrCSMM%BZmeN0vYb6V+-jWKp^j4~HTmOvY H)hqD_rh?y^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FlagsHelper.class b/idl/orb/.class/org/omg/CORBA/FlagsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a3a09488f2071f5cf11e0ad41cbb5a4a73baf40c GIT binary patch literal 1713 zcmaJ>ZBr9h6n-vw*<@J?1QjtBi&RZQOMK~zB~%5}k`hZRh_$V*OW4V*E}P8eLiMNk z3;Kl*t?fj{&UExsXZoW$eeUie$pZay@9sIzIrll|Joo!xYJGU`1N>r+2K@sDv~)7ve{@n!Z$rl&fBAOA>Bd zn-#?&^|S9t7F;|sVtGsMhXkc%X6tUyGy|uQ*YLH0C5*Efy-luqa~>i?8__7(FazJ>I|FyIA~3RF)U9WAyCt2bXJ8fg3=~l^a1vu0)(qUo_XZx| z2Ltb8+`t7CSj%nKYP1dfh@S-V)tj{$PJCLC3a1{pXD&@sa}NzXf~n!L0Sh&Ov0mx{ za?y5MwoktMl$O_@*lMK1y>Nb_N#FSoIkSf`>2Z2Q!dg| zPxQG1I(awfu5fl{+j6&fn&8Ao>KwkbO-CugYzIS8GLH-qz9i+k} zSxn$;1gmjZuu|zQ(l0PxdV_QaT5akr5--p{^#+MQklFbK$y%uceHZ;ZjL=A9B49ho z*bEZm^BO)>{LkThl=&(NDE5;tVf>BLB>55p9lW=+i@{wC<%XFr_d5)_6?=A&YXag7 zv+!z1Sq6g~bmT_%YUG;`IY+oF@)}beo6Ya=Q*oHWM-d=Lw*sU~`3{bU)o1W=Plr`Z JN{~qC#(ytOkLdsa literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FloatHolder.class b/idl/orb/.class/org/omg/CORBA/FloatHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..76273d15992e58528f00d7a28d99effb34e76dd1 GIT binary patch literal 849 zcmZ`%ZBN=z7(EYCYU|yEDQvno6`iHbRsD)FaU^8RmXN5~*QQD()j~;g!T7J-GTE{Z z`vLn=%br`oP!`hM=HC09^SqpM|NQ;+8^AvHO&EA;U>?s*tYFo|bG$I|60Z!r#+ur# z>)6my*0D*@242|r3Dh9u4uWnV4+(Qt=9Pd{WikLlOLk6<;R5lr8n@L(CfCH z=GmoxE(z;t_``Vjlc`Aw8#6Ey5)e!!n0ukhC6cnji6J->k z_@7D~tr3>fl+*gBpv%_H%d2tH(zLn>gsJ(qFWp`obOIR+d{>?mcBk#T&sUr25cc@> z8DIr?@i-9tGBw_@ar|H8Qz41)t^EV^l`oKl^P_MH8U6rMh3)bkGGj~uPez#H2xHjQ mA?79^OIV(URPFD`43QmYDWWt{iBzSZ(7quzgnp}<0sa9MJiUkj literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FloatSeqHelper.class b/idl/orb/.class/org/omg/CORBA/FloatSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..315ed6ab8b5ac0cf3de9c009f09679b9e9fe2e9c GIT binary patch literal 1975 zcma)6-%}e^6#i~@$tKGpA@nB(D#hZmQ9@g_N`MNq*hnh2AX-t^CE3P>WjEbyuzl}8 z(N|ykiq%OOb(r?a8UGr6b)4$C*-euy;P`Uy?z!iD=R4w_fbvA{zY`Erfht|zd>e?Cm$ zhKvF};>)s(B5v~KV+kt~K4Iw5{RdT(;Y`u>Dmizjl3QH4y)d6!BkQ7DHuDVe8OyQ! zIR-(USZ5HqnKs?^HW^N;6Ol*?=RuZJGd-Vx)yVn0^B}*m#E~TPzV8_&ayosK)5OLS zL*J@zl(ugg)iq<&HmQEf955a_l(~a*%qlaSAdf9$*T~t1Q^~FRp5;`Cn&_DZovP8C zRoC-*l3c;5)_rm}jh#G^kZ_Co^qptk^&7`hD0m3f-cGYpi_ z@|eCjIVIt)f(pJ>U|~zbwgMYF3LLn{7iHR2)1x}tR97~)On&Pze!&CXy&(0_4e_Q? z&()xf5f|zKg$4T3gKOf~#xQ>D-L$>(TzKhFcwNyK4(aKoAUeW{)vjUJDcfL)1mc^z z#nqzMnsVVBqVw<)rBhZU&hEO`7MCrDRGIL%^}AdT45uQ46S$CoQx((KtDd!E`PQzf z`z3~{Xz8JIluXBnq(lBS^IqL_N&(JgwGhqPdIY|E%M`K+slC+`SLqzC^a z)%os_qngVg^9k4Mw(C@yuU4UD3Oh>=87Xh<7^u!cX6S7WehW-g3tT{P*V3s28N zM2xI`+Ak39WS>H8peF!H;&ogI-HNnxH%)tv_#=#H&k%1wDrTQUc!b{UGYCH+vG*8a zQENcnNADg*NW^lq$#$G#6A(rgB)q}-tC$FpuMz>yUV8%NH;nD0PavXC@Ja*y4WyRI zu#bUsnqUWighF1t2$~041+Z}fqX#Dh>u*BQLHb0iRC=z$!#VO7De4?Sot(}58ZQcS z!~ACpBu!1Y*mZH_gC0hO1wF^V5D?d& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/FloatSeqHolder.class b/idl/orb/.class/org/omg/CORBA/FloatSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b0560e2a6c324eb4aa6fd1bed230fc291a204315 GIT binary patch literal 679 zcma)(Z%e{Z6vm%BH-%LIt50JKS^kd(J)QIbYxJp8$@quR%pJhA2`R){quqU4)E^4Ha1xn+!_dc6$zk zbX#VK9=EzJe!>tj@;3}}$!pLr#kehtRH+4y-C#H{F1?^>d7Y+Js$89&TD})>yY4#H zMc41~DkrQ{6pCo=A!uv5g%a zIqd4#LxLeY*<9K6Y+iNl&po%{1Pt-E-M1~*?l!GTz3tp_hTNp$Z=BI2VzSv)9oH9C z<&ibB=bW%cc&&uinE$h8v;tXpgF{-W3WhoQn6QD?t{a(W0nvPnPkYs%)$VXF=QDl(@4R5fi!^p`_d{BAtI`Ye&hj^ IC(#D*0}G*%Z~y=R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IDLType.class b/idl/orb/.class/org/omg/CORBA/IDLType.class new file mode 100644 index 0000000000000000000000000000000000000000..8205a6ac6188c6a6e10cc64d8493ba1b00e81445 GIT binary patch literal 210 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2GRVYbp8C?bbV+4ASXwCPZyt% z%7Roz27#=^vPAuy#JqHU|D>$c`OEUBGiWwQi&{PD$w2Gigz=Rc0 og$weFN)nTDQbDe8%`3?)sbphhU}RuoU}0beVpaw=pg({B0M#cpOaK4? literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IDLTypeHelper.class b/idl/orb/.class/org/omg/CORBA/IDLTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..5e96dbc2f9351c2ae868301f2018a60ea59098f4 GIT binary patch literal 2130 zcmaJ?Yg5}s6g}&gYvOzqWJ}`kAXd7BwQlLpgAF3=XjuT^hglL+d zlKcwV&N#H0X_GI_On+3TcWqf%GR~LP?%sROJ$Lus)xZD!`4@l%JdiPg8!|q?hcS%f zBbkPe#jq4bL2NHaaZ{{UWUS&7F%-peO~yJl#OzZEpGo*!MiMt9+>)`0FC=^!#}-Nw zzLIf4@TagXhT9UpmaxMR*6b%OlOeO!w5n?JpsKEK@2nNoJ=$GwR?GrJWVzO;*((ge z?DQRmkl3b=*0jnDW7%mRlHddib!o>3%zeZoyS8pTD(S5~y<8{CK&`@%Cd5PiXI-u9 zjjFn9TeU`2h^RFVP0MDO$@=0I8&3+pt<8-s5vCyIO6D)Nr5l9IpM~_R??EX8%hXBF zO+TvDv}~bQ-E6duY!Ybd2ZiA@;m20ZrsP(K@@ya3r$leaB+}3=tNEBg^;2z^ADV{! z1`)}lhVj5O9+?%bM>02rWPf-n(Pg9FDFu$V@s5ODjy+uEcng;~CdKSMT&ELv&XD69 z&;?wkz?A&7PLjx zy@vkdW4P$?RM(0d+U?>_vBWUxwVdKRhqrmqs!RBhL&Hy0)m~pmuLPZ=41;0ZYu6ly zUHhoaQGv;EA6144ubbm_%dEFdiy?Vh=G_Zq81(|Em8cHIku#h(sL*Uvt2J!Xy006i zW|NSW>|nDD?)a~?uLpe*shJo?y1l0LRLu`56<@8otfKACIc?{XWCmUWr)n9ldb4(K zrmw*m;-Vd0wy7ZyZ!z#r@428$L-G)M(_X?}>S3*RsOjRFJL6RM>8P}-X=@d;ZdU1X z7^ViYbhFuToaiwd(GESRYkpyapy@lINqXcb=x4zoiZjaO(jN?%6bu<{)2 zSDJtvsVyCIvSS27CkPyOtTEAhj&%mX&R*s>1YcwHM7V`hkv62?5u`nVV0f3tAXpkP z(drH~;SdK?(H?IW(~fbB`~!rFDY+BG+K{`#Vo;ECTr%_(!MV~#e2d(8Dc>W?W5y*4 z&`c1uF+$?b^;~A5IxZ^|NyN%3uaJ0#_zNWOJ;&(Zxqpz#y+W#QOUboyUP$TY6ha`8 zqNM2Makx^%B*I0MU|+0-Gwi2YWWp~x_`8G`Nv$fc5oX7vDE$;sIprHZJ9ld)i%z5riV~L>f`N@40bupa679-Gjyd)t&kS literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IDLTypeHolder.class b/idl/orb/.class/org/omg/CORBA/IDLTypeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8913026ad3396ed70faeef0aae1cb010d2665a9d GIT binary patch literal 754 zcmZ`%+fKqj6r6>YO05dYMe&N72<4&CSG+{=K@t)YHNKJ}4S^KeGz-SR(nKTi!4L4G zjAx;!B{oe@wtMDGXJ+^F>-_`35%yImNXHRFMnx8@qO6IMQ?RaJL%}A4JT&cr#gMHz zUfXbbZKG1ZzBo6km$lnR*D5o_jywGhKV^s(igyfB#c2^fR|pvp7`fqDW{crq7UVh} zH=DL)RQv9L-*AHU%3>ncckg_Poq7NK0oENhsDrXdbh!Ip+? z>}beiSHm7s4D0_|zH;oA=Fl{3v)?xA&8~IN8S=q_A2$;t!dNJ&WxIk@ngnwa z>M{__jIG}@k^QvJLU{sdh474zQ)Gxkx+Dr1=ICW2F1kQ6ttdUJ3-py7cW76C1AC?o zjN6NTJA(*4fGXO0=@pSFW(f%&llC!jy);7f4b=^n8a=VcwNLB zxWm8R4B`sn{4pzH4sVH=$J+wl5fMZ}z=DWwEQ+K~inxn+Ip#fnT;j)+i1%@i%a*xp zMZ_x7{A*3X2LY@HkP)yUVg$DX_>jBW(afvd zuf400StvZUY+8kwSuDgB)9VX~SSq=^aadBxG8%4Ck$(1kc#o{;x~v(tYV9aFm7L#f zI9M|+TiMptjA|XIR%|VunB7{K>KK$?GY-ss;yBSTuTiTRud5F#YT2IU(Ok&bN^XBe zDQ$4)0zRdj%;j_^VhLePN%#!1fX^i;*ye|vgsXU2!Zo}iATL41j(~!MU1$uW&8b*O zB<1wl-SxyqD!t0x?J@K<%8;T^3#uhyAG(Ah3<0Ku5*|pfP?lh$BH;iJ1$-gl5MN68 z3SUe32Hy&J#3kQJ$YP42x8bu^T842dL!62-!x=RdCVpe)I>V(7`t|hoo|?03fC0y+ z(+*2YdDlrkLr^ZLwro>)`yZjiqrFi5eqmYw1lY?Q4r z#WcHAHim2AGbX3Z8(vOn44nnK+k%fvfTnX((JM4uv<*_U4P?{WW*BNuEJaDp-dr@A ze}?Xyr7E^6>spy8g~F-U+^uddlZvc^idCra7I5}V%Pw(I&Pw9_$S~4Ig6|=|uE>|@ z-l`bXmF;vB248h!&2;PLr(K{KWz{0mGp#k{<}Li{#?G1%%QQ8XTCV71J>1FK$!=qU zCfZ_2sylou(Jb7f86&cj&19SPb;`Fo-POXh+0xqr1+!py?edN7D zKUkAscnMt)`P!r(OObC*dizOE`<0&4bn2rwqqlGR80?5XK*tE8u6oc_2T0xZ44%iQ zh*w?25M9wl(%^LD7~V6G8N^&jFTFhk@jijC?%+CZxY~b6Cy@5>6Zj)l2vr1DqJN?1 z1i>snA4B{j`X{=pkmkpKaqh>@wU=}87=5Sc?_j!$3!W-ohel%)B!x$1|B*eJbc8H#pquUpa;I^7!`2yIj*v3bPxgDI!*8vd;|f~ zzTfa-*3*A6llAt8GEd<_qpIQ7kJMICb+=o3Tmao Ef8@SKLI3~& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IDLTypePOATie.class b/idl/orb/.class/org/omg/CORBA/IDLTypePOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..31ddc08a5fc74e91ce29571ae8426dd3f44289e1 GIT binary patch literal 896 zcmah{ZA;rw6n;*VnzW7D*3J1^?R2y4z_{(3%D|T|!$QT1Abtq3xeakKk@OU*bppru#ODZfEV4N-WDP2IDywA zOr13^+-uhk-N?7wG6^D|(Xs6y3gjEYYVEL&z!FZTH1m0JBlI$_dr!_WyLDUz<+ z5!}S<(JO~>BHi;)v_*0)68o^VvvsyxPi<0{EQ&C9?@=XIHN-+pPjsDkLF5sZ@A39U zSIJ~Y4w%7g!xKH3#5V-3revAhov?3&g%TDljAO#WB#IWEV8+5M<}A!(fl&O{L&74v zzR5FKSF`wQ4x2C6Hwcv!{HS$)Av$tEm`@!d8*&`5>Y4wcgr!tyG<{TgrwSlmr3`;8 zikB|0ba6JgUP77U6#q^48H_f*f*LQrAoGE%V00XhhMW>-;##)x8JYJ(_%R?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDM|FXxZ$P|{r>|!SBZDleOmJm!NouZZ zMRIBZ$bpOua;Wm?Zf9iRarXBO@No@sb&2=$XJk+y?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuKy`tqpJ#}tqmO5lD&z10&FVY(SD7 z$P)we85p><7@0RQFm7jH+6Yz!Qo{jNBLY;z3>4+iVwBcFQNf913KLKTmzFk$DO^aV PfLy?#r7fciH-!NJhwx_W literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/INTERNAL.class b/idl/orb/.class/org/omg/CORBA/INTERNAL.class new file mode 100644 index 0000000000000000000000000000000000000000..dc60ebf2a71a34cc57a972258f4ef2bc97287870 GIT binary patch literal 475 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDLv?|tUx;gvpQ8^WgDk2n&~f$G literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/INTF_REPOS.class b/idl/orb/.class/org/omg/CORBA/INTF_REPOS.class new file mode 100644 index 0000000000000000000000000000000000000000..bedb27baa9a6b4273328b09b45539e95060600bd GIT binary patch literal 477 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuKy`tqUx-_LkZXW{Fe8I3s#I`gaY<^f zYejNu0my}n405RQ=#FP(;Bof%4e)UdadnCJ^JipGAmm#HMFwVIuz>&z10&FVY(SD7 z$P)we85p><7@0RQFm7jH+6Yz!Qo{jNBLY;z3>4+iVwBcFQNf913KLKTmzFk$DO^aV PfLy?#r7fciH-!NJv8!hi literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/INVALID_TRANSACTION.class b/idl/orb/.class/org/omg/CORBA/INVALID_TRANSACTION.class new file mode 100644 index 0000000000000000000000000000000000000000..8ae998b4a98601965562571c7d5d01f7c37eb161 GIT binary patch literal 486 zcma)&OG|`M7>3_(w9zrUUp8H6poKYw(4tKdnBzh)jZtPhNQpR%I?SA+epYRQ7X5&J zRCJVxv4T2_1K)cd9^UV~y}!HyIL2BF^H3FtSdg$NVTsT@OY@YS69ny`PY|u*CMN7_ zj$2F;qsS7&@_QGiVHMeU6tlF*0~WE{>1j!CXznn&i;Pi}Cq}>~X`WR1$uIdogc6oj ztYB5e927#k-oWwtrt5SEVbAme(+VBmBka_f;9<(*%)Y;l$7NN*ZvFlH76jGuFRxrX zw7Ub(C+z*THrf#Q|CL7s@uE$BOMKd_W$G)PBU&?- W1}7A~^TVRdSjq;n-q}9-vfu-A;AyS^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/INV_FLAG.class b/idl/orb/.class/org/omg/CORBA/INV_FLAG.class new file mode 100644 index 0000000000000000000000000000000000000000..059c7f961563dc6b9e89dfcef9837178698fe6bf GIT binary patch literal 475 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDLv?|tUs$}GkE1&ygDk2n&~?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDM|FXxUs$}Si>qG?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuKy`tqUs$}qlUI&z10&FVY(SD7 z$P)we85p><7@0RQFm7jH+6Yz!Qo{jNBLY;z3>4+iVwBcFQNf913KLKTmzFk$DO^aV PfLy?#r7fciH-!NJo1$j@ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/INV_POLICY.class b/idl/orb/.class/org/omg/CORBA/INV_POLICY.class new file mode 100644 index 0000000000000000000000000000000000000000..0397cd882d08585f82a2677508a36c74d1f561f5 GIT binary patch literal 477 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuKy`tqUs!yAzmKPLBqM_?s#I`gaY<^f zYejNu0my}n405RQ=#FP(;Bof%4e)UdadnCJ^JipGAmm#HMFwVIuz>&z10&FVY(SD7 z$P)we85p><7@0RQFm7jH+6Yz!Qo{jNBLY;z3>4+iVwBcFQNf913KLKTmzFk$DO^aV PfLy?#r7fciH-!NJwH;>_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IRObject.class b/idl/orb/.class/org/omg/CORBA/IRObject.class new file mode 100644 index 0000000000000000000000000000000000000000..d18795ef6f058d2a5d54753eb67c5e22eab3d715 GIT binary patch literal 182 zcmX^0Z`VEs1_mPrZgvJXb_RBK1`c)xPId+^Mh3C`qICWI+;n|s{~#wvea|5Oq^#8B z5=I7rti-ZJ{hY+SbbXkR0(Q0j1*t`eC7Jno#f%Ihs7i3?EXXe^NleN~)%SGqam_2q XEU9E;WME`qVqgYB76w+JTY&%ob8jz` literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IRObjectHelper.class b/idl/orb/.class/org/omg/CORBA/IRObjectHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6566d28508bd2615f98e546c99bd728d1b077acd GIT binary patch literal 2141 zcmaJ?YjfK~6g}&gY+0!j*Gb)`6w(yx$Vrq3J&H8K7V23_ptDt}V%y9OuhwckexC&)s|P>fitV_!Gbq9*UU64G|yU!vrqj zBaw!W`LGg4fp4$I@d;nAiMWYdd?@nex`+*I^4X^XJ`?b{h*8`Sa9czPUkLazi7k`` zd?jLn^QW=RhdTnk7O=w*RqdxOgCV=sv}#K8pr&kW@2nSfRkta=TSJMqkL(`PS;53i&9a(L7#4zDZp6dT z45LS;{?O1L8&%b1SscQ$e?~O%RlU(E2nkp4wt!s;d$=m$GTxFf#b@u~Iz!yOND1G7 z(r~4;xwS&|HP7p;TVt-r%HsTjglSw8a8JUwxG!NJ-$_`&qJZxu{Lo!2GhFu-sk)>t zD_%1C?~vhw&r?}1ZmM^RJH;}?l;6_BcS@#o&}s{2`09$9Rnv)Uonhy+fH>=4J(*H)p@ME0na%N=#gXx9tEd(8Ls-H z_L9@rX$(o;mmb^n5Qx7Xq)rcdpo>EapX<%|3Ej}6YW+~v_=|VSt?tuRsWrn^t4719 zQF0ij2cq<%*>s%fT^mskeW+_eVS}KVyOAk+?=3=(uA|@b+`8a|n0#vcDnx24g4OEt-zCA^eUo?QsOdyEKNu zGDz@#cc3YUIGm2VygAG`#&Plw5h@|)PmpLs>> z^N2z;<3w$YkhpWM%RCgvWsOeaXXWJANIggL6-MvBz}R2;e~`|_Xy8}x+%XwlpT|z%rnI0zmYkfe2$b% zxBC*~Av{C&6(&gLh4L&}(`{tixHx<4YWF0@5Q!yI8N~6vFXQAu2T+o_7mNP^sCoY@ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IRObjectHolder.class b/idl/orb/.class/org/omg/CORBA/IRObjectHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1e8a12e643822d7ad1d0c85c1412bae6e44ccc61 GIT binary patch literal 760 zcmZ`%-%G+!7(G`vmur=lnyLM;g64b}^=e4vOF|%6^eQWdDASEGjsB~GBI%(&pg$`5 zuFi0yG4^ryednCrbMF2A`TPQKhGQ8LvPmS6ld+9FFFU*xBorl-B_KAt+5y6h#l|QAxc55gf??WeZJ3{f>kIAl8`0r zDcHw>f-(*j93jI{`rq`mZFNnTAvG{2hHe?7o<2{5p&VrV*_k`x&Z1RK%i*fRJeqo> z&pQG!(0=qo*&P*?i^d!+_u z<8^YXXa684M}3#n zw9LHBlFa-(Z=ecmMh5nj)Z&t&{7Oa!W)00SpcYj1oK@<&h$5BIz21PHa1MAp0QSYF5jNZcUJ%W``aG?9^jRXG0cd^0~rtT zNW6U<#tnQT9-qp1j3+XZNJ*HL5yoc{=4ABZsZ8q6Wu!4LY!<{eBesh&zQC74wj^X( z315ZqOv18^tC$I4MR>0Y$Xp0(626wOE@6WqpsISY!f<7Kd0#uy5{71$5*v=Ko23*( zNG)?`&k_d14Sm(ojYLK-IJ#wO_A%K6XLVC|<`{gj@ht}bf>q=K*V)s_?Rso{*|JLs zt6WMfD2c8_=RZ&b@RwNpeS#)-5bF*oY(owDz7*xky9&O+mW1aDzC~VazEf}$w-nsQhZ43Ge2*U_yilOxM~0EkV$7#AYHn?DJ-wOD ztqM4eVW8cJETvlFwt^iL6cj<{?~QjyAJ zTgMF1&b*pUrYlMRvH#t0n_YgFG&gB9^w*u+nLI?L4!d5e3 zh6rWT-AjfTXtc95+Nx#m zFbth9EoDi(?W`-!GDB~{=9q$2OIW|yjh1=QYXcNsk^H>xHN z#q@TgW%#ZbOrp^$7dVkwd;TN)PIY<0b^kJ06mb!ZA4!kSzJi8 z21!oW7CrCLZh%%sYha=dc0wWHTfk-FzCe809V#yyK6I--Z9;fZ)1{xc>M zh5oVKHT2QGKN%3x8U~WVXfPUhi@|s_Si_Z*3ydQt zB7cS{dR~VA9Y!Q1-r)|Lj39*RR>>9-APeA$|91@KeS^arZxA@e)qEY--XKV63`S4U WoA=dmy@rwJLNF=>eoxRSGyVg~P68YN literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IRObjectPOATie.class b/idl/orb/.class/org/omg/CORBA/IRObjectPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..01ce854eedbbe2a0e2f8c5e1445cc7fa35c54c79 GIT binary patch literal 780 zcmah{YfIx$5IxhRP1;85Tf4sM3)%`s*KaCdC37$JGlF*|8S}%~e9uvOK3r=s&KU+LyNJ z+ktD=;>ZhJMpJ8E;Kl2Nx#IVal@1B&R_Ji+*<$H?J|Sn>zHfO!ETV>87c67>qt9L# z#rBCWY9hK6k-1mhSUuh>b(E<)qG6qRfkP;K>bxx)atNMxml-^i=7?q-g;xZnC^hSA zb-y*HfgDB*WMLTSLbriI3>g^42%+bHa|jbV+m#h|cR{-Rufr=#3yXxY&i3;l2OfKr z{}SdYI%6My4pY1cX%H_#fidL{2MCaox|33<|GMkB6Q^ca`I4H Sox9XWq>hw6t#$|HjfPjet)}<@ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IdentifierHelper.class b/idl/orb/.class/org/omg/CORBA/IdentifierHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..68d7176c30ac7a9d89cf98a5bffa01833173f096 GIT binary patch literal 1830 zcmaJ>ZBr9h6n-vw*<`s0gcpI@D54UQN_^=HB~%M&1zAfAl$NSZm*kpR2%F4uLHQ~C z0>4u0M8?iI`pKF8s7}w_T}ZMCe%ZTw&v~AG&biOI|Ni&(9e`Ufb)3hfjx26yxTzzA zTRLvzOATM?h~n!w?R=wQN^O3tV-VAEdgS7m!FLLENA2BJkMCocRXcMr%kMJFO-sJw zY%&a_CIU!;E0AUH3P&=eQi1raeULM@%zZOkHtkY&RXUbk$|+_|ypWDrAkcU_&_pYW zp=(u|h3!XXbT2C)q{2x+h7u zFn4lo86wXeOHz-f&!kx1lXZ?(5vm)pnL^oZJjVz=)9{dE2}y>L=7aM3w@@h;g`+YJ z4Uaf}#4Od!oMgkcTq9KYf> zjt%_I@i~$l<47^+i$!5e>zSo~`4~?aE-l_OrpY~%N}T7Qdd~FCNiy+Mjz5snkmvXl z21ByBj(YlnC|89;^6LthH@AfHMQ<~PtVYMBnxu@_zKsD0b%AI+bLPD>RAu zoVEES%O)Sk<+kFYA!8T}%%Yb=&LRVMXV(XXN9h7RPZu(IUQGnO z#p#{qk)9XmtCv@Ru&CDNey;T|^#gpbj2A#9=KJyd_Q0m8Cfq%pW68Q>UHJn>IM)xs#61~Ki_#2$UNu;)U@)Kxw|l literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Initializer.class b/idl/orb/.class/org/omg/CORBA/Initializer.class new file mode 100644 index 0000000000000000000000000000000000000000..fb4bbfc4de1822837ce7bb9747606dfd71b8fe86 GIT binary patch literal 392 zcmaKoPfNo<5XIj#HR+#dYy4A01iiIU2=uB5T0ImZ1%+NbZR!%XB%2b~Lj6`Air~Qy z;D-_?L6jnRdCR={G4pmlKHuH}^wDX+M!Sa1I@aJ7vgKgg!H$Dnf|JTLlKCUy;6BXq zILOjC7>sT&FM>OhKTXU{**_&zwMZqw3#Vc(f<)-JAe4@|XP+sp%sIj8_Qs43vIj={ z-G4{^9n>4UaIsEcZJ_C*hB{$yHP()1P5%|-dzB@u7q$!BMe7^dXUJl&RYJ#0 JRQ;155MO3MQegl9 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InitializerHelper.class b/idl/orb/.class/org/omg/CORBA/InitializerHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a7abbd50ae7747bd8264e701a347ab5fa722af15 GIT binary patch literal 2445 zcmai0ZF3q`6n<`iENm7_Xi}TBp(eEv77dBjsv)gSNop{}Xo=An6&F}>6W+QkXM!~_qO#I}!4Uy1k{JN)zwzuOh@Exr@*y?_jZCu7{Nsto5-6}=Fv zlnSxL=AB#1u`RkyRPt(^VR%U^YsL)*S2(iG;O5u#%2f0$!+1F2uq1PCq?K!`ZZIr_ z9rES!{kY>QN&YpZs69~iI1eGHhlZ}?$a=n?wKJmKoWY+ql-&M?Qr%LrMU^T_SX((x z_F%PTIi%$o#zgh|DkNQYf~i(?g9nKv%hkF;>Z($T4@T#? zr)vh4FLA1`&AQQX_KHGzmvTk3ITEg5R=^Ju6hs&32|qz&INK@6>S0c;8d{|+VGsKf-oyJ6F5^vx$?kwuih9o2P)k`= zr*@XiLrp+Y!aNpu^b%FItdyufuk=vA zpE<3A1EpA}Xcq<$k0_BNrWej(g$>7n$W4>khV+Sl7xl%RXbD1E=|BIOi~L>CoH<3aXK*>RO4`(}9{Xa(xz( zrR+?-4UN25)uM1T6sDKmez|pcMHS(TXV-ztUZ|cmV+(ltZn5_vGSEH4)GOpO-G%Mf zYno!dIopK}_I8wE^;BYaZNheLe=*X1%AR}r?C*Z~q-TLJdxOSq) za5vy-Iq~6bykn`Q=*`t+`2~g_A|yY@a05ar`U0+p7>PcI>j}I^kKj(p4Tw#Q9Fc{9 zDZgr zZ}J2aJI9zzMdckSfP8I literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InitializerHolder.class b/idl/orb/.class/org/omg/CORBA/InitializerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..afd7320a42459d4e138ccfaa46ac43e8fe295e55 GIT binary patch literal 778 zcmaJ0D9>B1D_Dl2APrf< zo`N#=6;yDb;1D^6a_s1rj@>mqhD_fW8@g=_dwQ$WHy?b4N|^LF(QFt#+(Kc~cDb-H zGpG?eZOEX=c;Pz|1LvBtS|R5aXicw}dx{f!JQ5g|=x5wMdRQW@$W4kXw98H_l+`}K zUMYcTc{L~(kf0Bcd0DHyBQeLUAroNo0Vb{0CP@B+WU(HF)U-DwCJ^Q-8^{F^uEyvj LVFK}mw*mYD5!kkq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InitializerSeqHelper.class b/idl/orb/.class/org/omg/CORBA/InitializerSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a93a79b33c1fc36a807535e7baa5be90ae662d2b GIT binary patch literal 2174 zcmah~-**#L5dLm9?Izn>+NPkirlo~~$wnJmRHSK({edl<6OpnX*^qz(ltV-84`MDm#75VXg2p?$J zKw8Cz(&DOy46e!3M=CZ|e9X|7v+q>|!^uq9DkRId3dyz2>#HltEt0O4cSVY!f6*+N z_A-MKi*GXorI=p1vbDo-A{O^~lDl*=OI2an4D&Icex-CTb<-zHQvlN_nm-CFC1a@K zu5B54a-TcOJ>JWoVK8eO`R}h8l`UhZD2Or2wpr!)p=>>M2FzWC<7BaC+%b|xqf|&{ zZObebsGOiB4AQRpv#FFVTLwv{OO={U=EAs@>Y1L3Pl)v&EYl_u*Sq3v*6cQ5uW}__ zp~ZaBxg(AVOscrfk;OE_>CQX#u$&dQH_F9bVM&iI6`yi!<1>a~QBB(BuG<83RUDt= z2FDjN>(MqbSMKIT#Wu?&j+^+B;|;vY@fxBWQGjM4HQlUCwApx_b_;W}=T+=*(^! z$d-%tqMKo)GYM*UY7fai!>L#=S9w!DXCjzn%~8oUyGM2t!?~`F(YA6XCE`v>hxge- zZQklrk2|&D9iv#IXrp=RTU+Ez*~Gc3)5S6e|7f>RyxmS^cQWF+!3~$?h#R0PZr4O9 zFLHLC;X*9!TLZ0O^apM!7=~OZ+7?FD!P$--p4cNKok_M3dxY|h&r#JgXmT^;YQ=J? z;B3e=!%El7^YZ2o?4gYo&Y8}1Td}=+fnmVeBQK)|V`GP$bab(ue{Bp3M-B_Ok(`5F9oOf)d4G;pkrp{sOkU^p^D zfRSIoNiWl-x2ZR)n(U(QiB6O9P$v#M4Qv`KEO&k!Co`}vj jaPoeDkp7eeHWLja@DD-+5~2F%I_`{Y(8s8b9mf z8TREVdCRmNwP9#f$LcvXhhUu&X9Vl_w(gL)>`AHioJo#QcOERFq~!cmnJdckUP}@r zL>ZEvLrREXPQ;dkEOHXIu_Iv@afX~HrKa7TnMPBy8DedeES>6V0#PC&Hq23GKY!1oIOGbJ#DEx51*!F-g93}MAFObm-IChlUwh2j8#F~|~@ dry<3{3;Y8Jzm--HcOfzQ^M(Qg1fO^tzz=}0#g700 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/IntHolder.class b/idl/orb/.class/org/omg/CORBA/IntHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..cf4d33fefabbb34281f88f077b87102bf89dbacf GIT binary patch literal 844 zcmZ`%ZBNrs7(LHecWJG%AsYg|@S@UnLV>R{B)Tsynk*6G*QT(hDR%AB+|Br})W{%w z@CW##jL$8_tTRhn4 z1hxfs1fCPLu@{Ye0(A+M*I^vWW5R;f{6r{sl0HYuR#%-gH}$4H78+v4rWRKg0AFpqa+S8Jz3tJIkagJ2u3DaPOKFvtT+3iOd{0( zQ;4H&!b*{H+Ib(wY@3ju^PG)YVKW3XtAQ`wVHyrX8IFBdo)Zpcox4rfo@)*c`Qho{ zF?f+Oi65oLJNAtKOMI$j5x%vrK;QWSS-6^q8z}Jy7%FUUT%vS`sbM+C)N_n(w7!xLhDPcyK6I_OkHYwNllzZXjc;JDu(j+35zDyY0Ts#FYgi3iB z7d`ZACJgF3YWx5K0ZQBe literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefHelper.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c113753a3c805c476064eeb2d096cb3f96b58b5b GIT binary patch literal 2185 zcmah~ZC4vb6n-Xen{0+Aq@hhgZ7J1;4J8GNF9fN9sErb-fUU)sb(0Kf+K}Wdi?u(c z{S~O^q|~0H_KQ8oALa2*vI)BzIDDC%nR}mSo;&y6*?<50<4*wdc&K6miz?p72N8_p zLzRY)ekb?U`VaE%v!d!SIe$#Y_8_B+qApZs)`&#Xu003TPqCy z^z=Q3fZV2!-ZIM!W9exRlHddi^k~P2%nss_Ez77pE*b4@qud}$U%kqZB*Y`*XCvD% znzihfW!9TDDWcxo7pBE9pZ1)WZ$8a=wu((ln7c+r6vS>$YF5NAmT6Q7K6et_8-fc@ zv6#XjWvgCjyJcEZdA8VWA6O(+7<;)hxPnj2x<#=TP9@tou#VZz3M|w#OtbZb;g*+g zqx?uzth40A51N&SqViZ&^*+<$DNH+OL>6AIG`fYt@eVF4*y7m6RgSmtHpir#y@%@z z+`jg-TvKqL<6Au7*ui%kH!-K+dyXG^iv@=3 zt|Hdw^@Z#pNzQv^xajiCuI3B+-TY?0#4zc$9OJteTHI?l6#U4c<0po3x35#Q0)wNB z3d3c$lkW7|vJT1|RS1q<)EKU~eVwj%M58TChWK%J^m5EF>PArqQqjs>Fr2SYRa!!? z_gg}@NYYArxW|Tfya{)-uIEJRL57iDi|Tzq#Jt_|Mp(E;evDGed@Cf$Vn(1Ut?UpM6Ic*3pj&{gR*Vd+)T z5H(5;!_-iegJ=r26TN{W`o0Tw%`0peG<`2HN&kik`o}P+vKMK_X-+Ll;}u$s(wEUU zsJ#IDl_nrZ>Q~zw?;3%?5qyVTYecr9ZM^}1cQ5rD{BJONB;A6EPzTEI@Y9||FuY5n zA1sN8d;@G~%qI3H!hPN}rfuUG`TGbJ(K1JfbfETxMW7*LyQJtV59eA3(RFg;rI|j_ z3~mgFd^D3p9gL8;bA6XtWNnufI!T_D)?Op_9MM;ZKX`%BzcT+Ik$H`TV@u0)a9&F3 z#T0-qmY|^MA+os=#3YXkX@199^C#GkwWx$&u<`c^FN3&=CH4QATfkMC>l#5j9adZlLH+f+FdmAJC7A z?&uo1pe%dYz4x3mbI#27&*v9_GaT#C5Dz1SgpO_O$g(R-Qp28xl!ko5CGjx<-G|$%MLv z53pBiU@~6!#t8)I0dzSo6yFh;VKxx)FmVqPE)>TI{)0rZ>4y{xZwQQ`%v81z^B_`< N(Mrk~>Wkb4@C#@bw?O~^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefOperations.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..4f29a9e98ae8dff4cbaa6c19cb595d8235791641 GIT binary patch literal 905 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 I+#7rLzk_cswEzGB literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefPOATie.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..8656427a187260424ec2bede2fb49f6b8a64c199 GIT binary patch literal 5470 zcmcIn33n4!6#k}7leB%cv``?FvI}XUEsLU3M7n@hmX;RK7BxzhCS{{0UCJMn!3w&Q#~ zdhrm8ha0g2kFa=@#bYckuy~xs6D*!&@f3@TES_fZ42x%3JjddB7B8@Pk;O|aUS{zM zi&t5^#^QArZ?Jfi#ak@iX7LV-cUip0;(Zn$u=tS0M=U;O@d=AhS$r13=TUqS#g|ch z6~)(4d=tU95nPJkI|=oPw31b(WkZp$`LL!>_iA&~y@MlT1O2_js-fspa!MIerbgx! zT{beBn(LELmq=vNISETo9iEXFT!p@TtLW5eG zD8%EPSND#D=7gNhCNf2iL}!<4Z&cF_Ihj?)6@5X`dq+q5`%VpX2GVU#$~k3`p0#m8 zmUjhhab3J3fH%~b$tC1u&d}wQA)z+jIZ2z0Pnvt>B?)bDzxNo`npSctJ(DaUC1GDh z$BfFUS$SINJ($mCOQObV<~e9Yc}YrFD9Q=hpg1M-9Pf((1pJf&o_KsSbolt$d8NBNW*_Z&;mG%B>Q1S~1Ne{Pn-GbMo0_=Z)s5tjlu>W&e;F3d@IH(19~4#a!Vn z1f-UC%Z^EF%i*l1&F1GNbO&tI`|hBo8gfQe(&VdXivB37K^foYX1rChq?(J5LVhTt zru!y+iCn6v(PEHLX|EEF2GAJx#PnaOZ*lV2B|LH^!oy`5>%}B5jfsRNJFn-obUsVl zI2N#tfE4!iEw9HZFG!yis%F~;?IUN%D%JD(Dy?|@Ib5c6)U&>Vp}?88Ek?y%Q-8^G ze^IOCpjT+O;WGDR)K%dI$Z z7dv1<&gQB7E?3E6a?)ewBlK2O4l)T5nkI&>oi)!=biS&|(0j}1Jzpm;bF$(?rZwpzbR^7~ZL5JO@KmMa zpM-WFiQ=%-Y3er7VNT1^xyc@vZ9LRyB-5EUp)2!RE@Nmqv0LraGUlxE@GcHT2|Ye! z(Ox=u)P?3Wj>UfO3@yH<_xYXSe`20M4LYz%Smk5D2RS~8Gt<4Pta*?Z*o|31UqrhE zuEX^LdvP<1eFC>&KZ|~W0SpQZ;efzF+$wMzh6QfNA%Vjlf7g zU@z}MpS`?8g-xQ7Fl3z+S|Hgp;%o34Pj@8 zR6;g%BkJh_R+K!7G!ZB#qz z=mMH8RCimbfNSa;Al0-Dj3Go9&}0ES3TO^FFsk}M*tYHhmbftL3pOm+J1wqvsCxu5 zWJeaz>N2DbQ&HzqS10wM3Obj$I;mGx0Jgb6>Stw*w^6v4yT+;O+0ZR$qzh=b!`&8Y ztBZx(DBQ97SVI9T8Xdn-se&<^Tnr7eV9d2HhUQ!_X0wZ-F=%7_k=+t!IDt%}l%4{-Owx+vbcUtJr z@?jAK1z-J9;+?S(6C;Q(=gi!hbLXCW=iB#BUjS@l+rcdERdBzGE2wLDpy8p0hK;6X zu3=rnhK5ZIk8Joh9^2Sruwrp48EWklaW4FUh(rIaN~1V@#!!fQ3{Fq>qgeKiqnN=y zmuVIyv~rT6OogI##!x?MCu!&>r=h>wdGm6|?~D#xGV7+%P~W43j!=|4I8$<(XlHad zE}9EOCh2u0)4u3x<>Jw_YAtm!Bqz%grM#o)Zqk$V{7jS`iy%{}=qd(w$WVSB#gTf! zP;4|0s2Tbq!`H^2`TsBSPkouZG_?;?EdR~uVe`Pn3RW55Vjc@FY8nY0p!Qi*}uYr#})Co?c?)vI@ zzG0Fo5e%fi*J{6tRirMkMn7~G40EUwQvLMT>4RP}xiEV&Vwh?+Ol2D;BZkR=VKPBn zpbXRz!Zq4$nLSYFAHjI7kfUhOGFUQL=Ecvjb5uT%Ko_uryO;77$sLM4G4ge--pFC` i%^W4}SvktwE9Iziubji-p3cI(N{$)6RL$Z3%!nUQ8|W7R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a09b275e5d9d33c13302f6f97684518ebb0273d8 GIT binary patch literal 3979 zcmbtX=~ok16#qRFm}DF(;!?HN)*TW{(Aq^pRRpa_5CybFTGL4~;AlwVWI*k{@B41| z-R{K&NTpi+)YG1R=zq~aqUZGV-pM2+lW@fHfp=f-yZimUJC8s9J%16v23(fWgl-u< z*e7AX3>WT_aW{G;9FS3oJ}+_Zk#H|F56TE4?4{*C391JXFQSOCt|p@j{T_ro81Ueb z2fB>IIO0KE#vs##j3m=tGEz*BvZ}%M(!7`+46&VI4~|JVE@KtPbOQH#Y4-px5AyO5 zFAuZnM|k%r8-I*%L_pFTP@I0%%z#1>I@JlTBG9SDm;Z+H* z2~>p56Ddt#Q7CB)1d@XTftJp$ZOwrm;}Nl)nJW&u}i-F^W#vx$V0Mnqsi zZJk4t)LBVSq&347=&E&`Hz!U69jvy5sTuuhRBP4x_o&e$>VOv5F%*v%@Y7L4Pnmi$ z5#$&o?YL>EQ8K@`oOx$R1$M4%U!bbnq#!!fRF4{oYlH*JHe017CD|6#X_g)nm`@Ui z)nPRdR}%w)Zqv{c15^&Tp{aBlaYma;8YVjlv?WqQCW&k6U~q=vR~$2RlR6Ze(pl$_ zIq7Ytz3?^Y{6CuuPb;1EdpDM0d+M!*qMySG=uHEDd8;zZ{r<-YAqcw^_Y!M zLXm=ZaZj^Cu))NH0Va-Sr3W=ReX@<&(OiTDe!7j8DQ#GmMks(tf z=9dC78jvV^Ga7w!gmV3M~8w4e&Aqf8Q|p*FT3%h0v$i`ZbU&G zr+IfqK>}xacaCecS-~jA6dc94gp7ipabCe5Oz`pxFBf>ZsNh#zni+(&IQ556GYO2& z$YG5~#@ylx(7dAVGlB)SIIqmrl*gJ(4&wwn^ay=_x-6CZ#NcHTI}0 z(q3IMhsvqbbRSmZL*%V#CYPLUSCruy0xP_ZOpAH7Hg)NP+o9lv0#^$N~U!)X`E<_6_{IEER{zrYB=7w-Vfhnrh)0F$4Ub&;zl)r-4DdaXyH`kIb(N*j# zSG~>Cv*_q?K^qmTLwOj{OYeYypg#vh^Ia)?LI^0Bd*m7}nl8J?*KQz$U7)bJ`^U}4sx$NGJ328*)4tFvm0Ggx9XvKrTAu+(N`Rj#)T zFUy6N!3`PQShJjxUvU-+<-(;F;Jhm!{=uJ=G(GR^q~};E1Fo8txt7p7)jm8(mF8M^ zO<+~;I97-JWOdCb*4nhzrgb*;`F$DqN3o9SO{1u18W=?b)Agg+z;ZW_VxvFjYY+C? zzV_L^+I;?VSUZMWnAX~~&ZeYp@z-T=E1%bAa2wNx3~pz-A%jg!H;$n(3mp%-ir`7v Lph8e#vd8!j6n$}* literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHolder.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefPackage/FullInterfaceDescriptionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f4c88c4b38794287f15fb0b91cfae2053d74916e GIT binary patch literal 976 zcmbtT+e!ja6kSIhCvCb|YWIs3Wco1FtJ0k)2#kte<)|ka8=YY~7X4L0k@V09^ik11 zHiZg8B*PqL_Fj9feLEkYZ|?xMuoi`mLhtPYT9;({kH5`uC$y+jv<`48kXE<2&Ol# z7(xe5g-CbOgRm+ht>_6}VOZ~Fave|dk}W7vw<#|q!Rk2`5iZ_)mL&0X-;hF6cE@N% z`QTE>Y5|$05uwq~pafaRhH}BZ7E5c(Kukkx>+PqOU z3#FPUONLZ8>u<^5)vD?TQx>+XltbSwF7@qKSBrZZ)UgkL*%QqlPNlC{*Kh_AYww|& zD>ms0=wKM4m#Gob_0Z^xCQ9cB{l(fIvSwbvp2&c9Px+T+3ghuPzt5&t%AD+QgTcGiUGp?c2Ba{PFykLjZHw*D!%O4VUni zinlc=ct^u!ysP4hhC$4S=_ajWL0&FuIE|$+J+8{rdm5IpB28E2=UNEs^5gvwKG3j% zjEWDX#x)IDT$iVhRBWpFm|-CA+^-0RQ`xdzOqFjJQ>&XdR+dv+bh}#K6={aS1=BK} zB?cv)*k%aIYkK9&_720zc*18%=F-Tts={^{F2#NFW$S+WmhUcOIl|sE3Sv#{rKJ;9 z+;eQBK=yOT*(dq}FbwA$qww8zqq1e}lmyj`;%(+RaU|Z3OataF!wJ&ZH|`p#l3^87 zImb4wA|({Gg+bC)e>j!0?MNr7j8&;Qq%Mrx>HhJl_=F1oy=^*F$Mv3on>DA6*f(KW zvCu-H?mIW_qvjU=rY&i5opTg#o9h&MA`)-y-= z-Xd&=InnX1QL2%*@d6Rp5qVRxIbU_@EMxFbc?+eJ_LO&bNjlrO;T1aKd8mpzHDMJ* z-YLi}k@2mB)>!&Iw*mY$5h>b*9_oxbzt`xg+wmQrRlH z+cLwj(zAP=h4VY^tQ+kf-wd~$cWwxVA$Oy^a373kB+J%%`tLMO`-{qcxqXCOEq18hQWuJ)SqIo4mF#62IV1!l24)hjL^X&1haY_ zS_4A|WT8@&({8lq$ugz~@G)ict;0He&B<;H(W@F}(c literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDefSeqHolder.class b/idl/orb/.class/org/omg/CORBA/InterfaceDefSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..80f0ca5b69ded05425ba071a5239cf02ffa63b19 GIT binary patch literal 834 zcmaiyTT22#7>3_b*Hv4~4q923cHH!0saqo`3km`uqnj>d)lrPqwPh^&R|Q29)DP%K zMc?QaDXd-Ww==`@eusDF^Xu&cz#g_D2qB?jJ`5EL5iBAp!;%ckDpD#|RID;6cc#_l z45{mL+i4hft6>z17e|N2SzBozJ3 zDWCTQL*e|6_qo^Qe#g5~q4YcZ3<=q0$hO6;^hLWNeFnQP!bk?R$~So=sHa4D%UdF1 zn7kQwMovZz-i%bpTZ(~QGgt@Gm+Fuqxw%!R04G740yH-Ny8qW1661QS?qCM93~(@t zF$Z~#ag7O#F^vD7-a!GA4yG{8uo{FNFX(l=lZ(saBd_)~^Qnkhp}be-J-(fA(YzCS z*wRnmeGn?%>NW@4QrVP`DmYaNm9V7Ed27S>CiUWI<>^Ai_jD1_XcVeX6-56=Nn2KS! O#WXqHX)DIaryn1h@rG&u literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InterfaceDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/InterfaceDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..429505a75cd01bcfa2f03b0760c4d08de908bbd7 GIT binary patch literal 2855 zcma)8*;gA?82{ZSVJ5>x($LlxElO!=NNfYOE+t*0&{|3=TCf(d#z}I)DPfXM1`6)` zzAsfCeD<|gmK-^H+9%KPU-BG}-<=GB4C6UGN-2DCT?|%X~hD8lWFreWa z&MSCYLjV^v4C11KAq@>khlz4Y!84LLtl<$n8>Zzs1(#KfgfWWerR)_AO?W}YDHT^$ zjHwvcFo73UT$3y>Nx6(%URI$?{;Z0eg1m+{X}O&6`HWN~IH**|>wY+rJesQtyfNHH{=G)%)j%@Bxn zU111HGHscnm1Wo+>+(pFxD+zXvarZNZ_IPwXD*~Xq(Rdb)})>j1EQR>jFN2>&6KpI zhBetHKzND8%^=v^Hk$aJZo=g-7bde z$y~unAV)WP6wGqW;W$IAKH+}YT__gv!jf_~70h!i;8li*C?{fC%zIGN;l3vY9r!BZSZkz{DCw@fI_=Il#iCMzsL*3@SxNAGaFi}yI*#|P5> zhYVU?Od6)hXAF}HV@_CQsuG6gtX>vGb1R6d`Xi1MPBJta<&2&!I|an?vDEe`j&qy> z)$%UCcsV}7rwsAIfpjmm!cpmGwH^GpdwY&{GaRT7#*b0KXB?m7G{*?OkoIZ0Dwi?2 zoWYkIYkb3T4c{vGj^lg$z|n_W96#cx?PW_8N)o}yMh=Fv*M;n!o%K#qixSYX zC>RcVtIaP0rx`s;DD$Ma+UA*RrOV1^==5r=HN^&(qcG}rcb)X1EiLIMPJ?SsFU*p) zgWKr?D$E?UqAd%BIw(U$L5(S0_4a1X*yaYNa;XP!w13DjssF?FwA4j2fnkrwktz?( zipZ3(GbPKIF>GT_Wb7P6w-+Lp+3U@wX*3YqI)}U#*JrkePUS2WIhc3U2Xa}Iie!p+A4IM-`j(-%DO68O z`K5%qTTb8__|dK4_`Df@no?a8ezGmTRPGq9Awv)1I0K`f2iBUQ%@dn}I}^U<^ll#% z<*S$SR)?=Tf_DqzQo5;Xq~>HWHr{n5*iQc;j?n)Wnxk?E(?(IGVv4f~h@ihd-5~~QVAXHTn#uIqbWlPg8 z+2ZkgXjnvB{4N?+prjM`5LiTG;w}P9P;dW&U^>16t%AneB%xqG+8u9CkgSS8+gSy@ z(tn!ruI44;lHUJ(2mCMGiZuLzrlELX4NYUw`^e=xXkI~ttzzd$Jm^rP9%{&;ws@!w z4t1A@syNi$73`^MRGshp9j?9Wb}HCcL2L8@isZrHz{xR*8xl4RM--I;Ud%$%LC?~hLaM@WaEA|65zi7-~NCXaP_Bvovv*i^B_pmYtZ!x_>g z+imD}tDzUm*Jr2tWm|Cf-l*|&{!nvGN0@fIzz{q(+om{S@Mp4j41uCuC-OmN7PcfP z6_*?JKNybf3ZrUq5_US`Mi8u3kc?pE(KQ8$WF|#MlyXOmbCimBa)^@5WG5QCrMT?5 zpkW@Gh7iIkwl(ZvS3?SW8uk$*t^duqu&p|G86r)iYv`8IZs_G|lh*`8YMedlb1;>h zayA8SIZ`1ou_Fh?(w7SlQ^bR);< zT%fOLKSR;nJJ<^a&`&RV=>&ZA0AZQV<=@~NVwMo`FmVqP%H@0T|AIuZJPFC?Ug7H@ VFs!nImq!*ky`iC~VUs}< zz9YK4&!BYL42fgmi|B+wt=8@sVy(d84Do8GEyH~E^1&Y1mS_8})s8~pyA7GqP%^NE zvVkZW;WUHAjr6V7$uiLQ`; zD^BKb`#d~*?($wF0-vEWnVqUW=U$J8q)#{u*=lW80z+<&Fex};_j=r?x`TPZOsBEL z217Cme&>TjT7gb`A+>TaKWLT~9YVb))v l{$nd+%%a9BVHNWOvHKC?)NhDHMk710B|TfN}@ z`dS}-=_}S6SfaIkaxH&~5B`8IS9PDs1jsO02lGCgfll=b+PE28%1H8x|GZI_~ z^Nm>tUgDBD2VRzN8S@gZU_rzy4!kO%4zG!bNNC{Xm+`ujR#CoMln_IlKNS9WL&TDZ zs|+O(eIupl0UV&Etu0>;n&~+4omDLKt z;0o)}*ve!yJsVw2C=_e*Ie*r=Lp~oktxb(HRFlSXbS>&nM3YPYu&$}eB|4N{Q=+sx zYIP``(sWMZ4<^%Doz#`+YT!5zDNhvs>zb-lG{+tZIhED-G5<&09DT8bkuMqT@QP4n zEaN=G+2Z_K;x(R1#1)O3tcXa+SVfYdLdp1bHEvb}WWDzGTE3usjMz4gdnQPxEfP3GS1<=h^&k?T$iy9;&~HqacAC^ z@g#Z}$}R57cn9w?v<62)y;QRuoF-ql7RBBR9i1X>$aoJuBHowr0Y0RnEp}^ia3(xH z7-BeSS~qD*I+aoNl(x~N#yhwtn+y%bRu(21AK_yellVl&r}#|7=Q6&)ri?G~m5i_P z&9Ny^5@{Zmiv7S&EiNm(11gJ|sl%uid6F4gtc7E7%jhMGJ!O(G^9>rwS1YexhBhnM zUSaQR8GvrHIg6}Y54F`%=2Y|4>{((vb4)c;jm4;wbS0wlwu)qozT#e5TWgQ!VE<7U z7l& z02$?4R!PS4IF~#@D{Eoc{s+{E=kP>&6pTeqUBZ1bGFJ$xQs`OZXbVSy@7Ez^pAWzV z3oeQG+WFA9I}nAI;yfIcErv2aTX~L&si+C^ZqfPzkg_GRu_QbM@d9W{{1kz2|IM{;$bk_XIhssZ)Trd&2E= z_GY@k+vo#qK#DXS&Fuj@GTrkx_^yX?_?|qcsM5Ff}N^=lHzWWevqRe*>!W}ra zZowY%<{<5$Y>O;J`jBWgyuC=a4hW4yA}(?NyU=YSPaFF{;5Ovn(PjS?t_iQO3)j5+ z#16^@^7=L^a;VI~&9+e$CgBdM-8IB>@<+&I#!toQ`w8@Y#Ciyi#=nVPPH+Ab+@}g> zr;EnijFY~dHb)4mmN0WT{T*DpsGD~`wvGDVcF{1ujYfW=GyT5$Uz|UoNf>CT{~lGo zJ7{VkdGp++z;6BXmv7&P6A(^4M2(1E#vY)W+zFu1WE>+#ff&zu4Z0RD$GMxsS)sq) rSQ4}$tMAU?@l6{+|H+e)Kb;e{zbOb0P)o7wFUmjZpoCF4@~OkWkDIO0 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/InvalidPoliciesHolder.class b/idl/orb/.class/org/omg/CORBA/InvalidPoliciesHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..14fb45960d2e9579fe30addd5f7a00b2186f20d1 GIT binary patch literal 802 zcmah{T}uK%6g{J^o3@pfTG@xGLApLH^=bqqQ9)o-^eU^n$ja)Q+D)xey*@eCE;>}Oj4Q{s8kTuqW(Xfz9g80^1PjGGhET;Zh?gtOAPTHhb4}e~ z*z<$Cj?4ABZPIbw9>3uPYnKHhTzhaWPWpwZlxmMpa-=GqiDEfN3rMzgjtY99B zf(W8AwiRTsqacf%f;Ga%WQCl>?HALs?k7Vz?tHv z-4)`Ykx{2pr=Bp%H|F0vlROvCrs_?&I74rE?ZRX1)1#8XFh`pSJL$nm^hNGcT%f=B zutHh&4eXf`7?u~katZ-jKva~~(klXE%o1WACh1`!YH5JrFGw8Aen?4uL12K;SY-tX Q41 qR7M7Yti-ZJ{hY+SbbbG%tkmQZMg|d79S~ulNsJ6kK+FuZ0SEvvej2#| literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/LocalObject.class b/idl/orb/.class/org/omg/CORBA/LocalObject.class new file mode 100644 index 0000000000000000000000000000000000000000..ca21256cccc695d24aab9838da06d2b94e121651 GIT binary patch literal 2581 zcmcImU2oG?7=BLk;WnfN`oVy$K=(z`bYx@S1PUcBTOesrTU8pnuuhZH)Zp00cA|2> zKe5~0Oq#gaO_4T<-S4mP50Ex^kL|dQw# zm*GO8ZrYu)+3l38&8@p@<>uaF(Q+%rM-0=dVH&D9)Ew8t5)-Xv)C2Au5M!ZMtkFx= z+781)q4;zCG4J!T&W%oa+qE^LQ;}#2$fbSM>c!Z0dFx4oTRVJD7Ya5Qa%#J0=~|1s zl<@gNF*!koN!1p*;0~eW*QY( zqV8WB*`wOPxGwgo%ei%7*+On;n_+g?U2ThfsUp+f^Hdbemo!NPr#v6aBvm|D5T@e}Vieq5x^l$cDtLM`B7raYdRY)jdS;HHU>@t?P zW<+^&p^zN~_Z0jf$5k*7wuGgVOsos1WTxy}AoFq}CakAtQ8VfbKqE^(BWhQVR` z)+~QoQqo~l7>Z-iTcXQt=YZ=GY?kIB*S#qo5n3Q2Ii)A%$oFp$x&&zIM{4m$eR_#5 zp()T=r>p8by{UWjoTguA>CNb!S$+ZbCw&3^oWbe9Jc|kX0NLfz5hk7o_A{QFbe{>_ zCsG63Ean1VNiBUd%SQ;!v=@PSo{Tc`jSHw`p=O=J{L4U1$rAm&ZOc(KG1d)`-SNJ;8*-?&fDEBNO UzQuRM^gV7w_(stTl@sd1Tj3F8`2YX_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/LongHolder.class b/idl/orb/.class/org/omg/CORBA/LongHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..5fc84da4cd25e3a64e42902e792a28bd323e3493 GIT binary patch literal 857 zcmZ`%ZBNrs6n@UOuC`ooQ#KG(1XQ|CEbw*2ME3=eWC;?#Hib1!v1^y+ZpMG5MyBzD zKfoVFIJdl{omrcEbIv`_bIv`_x&JQz`~|RwJrf3&4BW%AiAPv5v5Lngp5Up0H9S++ zx{eJUn>wBow6PbBd;%R3s{3Ia$~T0v)%rxJbdx?uD%PR$G&l9VK4Hr`O47hd27%M< z9lv|)43kuPr;+cxkB1}qQ8H}MQH-klB@HEKux3(vBU$8VuKYS=%8J#RDs#f;>OviX zc`OLbLFjlP@Df`(EP)nkI&6V9Ug_8tcnwEj2fKvj;(d>jI5FE`?9YGtCb#+x&!c_j!7nQ}RDy+~u>c`#~P zgvNhTakN8NEK*LoAHtaDHzz;m@;0Yc&QQ#*1-^8LX*dXFIQCt6M%bAi<8{i;%t>LF zU!ehl$%`vP@C()0;sNr0pS^k(;Zyq;=sO=E3)gPKO_ccuOcl1*E>OC~)bZd3(_lo2 rF^1iqpqzs|#NsrhZU01Rg34`{2AX%3N^EhZ-_U-bI)VO;J^ro$9?ZcM literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/LongLongSeqHelper.class b/idl/orb/.class/org/omg/CORBA/LongLongSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..85baba53cd31481494463477c41cb795758cbe3b GIT binary patch literal 1996 zcma)6-%}e^6#i~@VUx|JgwUTDz!ZziMhR`zDgi3cY6Gd%f@noumt>6#VUsQ!Y~TA& z^wpQX((0s)I!ycIjDL;3I!^W6?9wC)bbQ#myXT(so$s9c-SfwbU-ki9LQTa0E~&VT zcNDyPSJVzgWpUmwOWi#ZWGFP3Y;(+6mU~4pD0*TaEqbK@b1?vhO>pLTh3Ou%Gvp)+jFzo6|&A(OID7dd&+if zZ-znA##R|*VWyW+b=MhAX=9;C3Kv1Pvu(K^0c)ZCS?7LkZ9yO@);-TPi{y0XD5tTt z1%{qw&n#}i2DOw?r8GHF)} z=d4v-PbA6aom$-^cgx($5eWsKQlEZsZI8;}tl=w;x9~Q{Ye;dtjNf%p2Nn5f=!MJwm2MAUs;`1saY-+)Z)CfzF`RkM8skDb@qjnM5iSh zNd4FRmWEuY85HJg&G3&*93jK#vFFtC$_WuB0}*yaUpS<#m*Qv(CssRVrB2!UizF7$ zGHjt7W4kFG!6AG%UZS*1jD*@*_saaD?T|v_-lkC@U5JO_bm$)WUZm$l+478Zep2kYk)M_qSNq-~9ptWCZI+o@rIKY#&ypYie-`GNw zHJWj9nnv*e&37UpZX$if=$nQCt;6)!M{h>&F8wLkWBLF&(rpd46U|LP-a}-!xf{cI zj0C&qAR|K79{pEHcQQ{QH_+vS#P9|#1a1X-3pZVVj_!vT(x0Kb0i}?64(TD{nP-rG zMs)WP=nUObthvx4Tl701Os zqe2ip>9`$wN)XWsHw0qYYqKv&YgD)^H3Q3R6C7$)FR%@-XB*|()%ls>djU0Dj%8fB zexKGU!+Iqi5pCWF9m-N@b34VQgvRYxL%r$%G9hFqXp{j^Mk+Gv9hg}tU z?5WsCk{~zTT-9@Je(KiUh3B-bfFRK|2d3eeu5Hv>UF((-5;bqd;?kTlivUU literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/LongSeqHelper.class b/idl/orb/.class/org/omg/CORBA/LongSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8cce9a97e7a48acdb2b68dfe3ad5455af5eab13d GIT binary patch literal 1955 zcma)6-%}e^6#i~Du*q_f5c-n_T1tyyqlC6ilJwJB+%1<{JSF3FlMESq$*!S=oX zL|=XBE3Hn-Schq!obj*GSI4P6cXw%$1sq@Q-97i5?|kRn@7zCL{kjX_B5VbNxTxR~ z-jngZ0tp`|xQq{Fe59ZoQ*pB7WK0X=jDnMxjni^Pe0?0p9Ogynf>^E!+qD=z5kH^C za9u$jH^j22pn#iVxh110<1>aX&3#Za7)}(bP9=k_q1u7 z?kt0p9$#UI3Nvk5)mdXWnjQ~DQn&~*?YiN(1e^|?&)E-ht9gMW8~0sDFOk#ngPg`! z^9;R9u3p->sn?eEHOrv-DYMUba9`#&&JnZBaD+V8^({SX>2@W%_(CIWC z&RMHEu1J#2+qH&E?uNdZBN8$`r#}7Ym@bvA9vW3_xUDe1z}R%j@_NTHgkc%CIhHWO zaH_M{g{oayGVWckT4lo#uFEpM;8?+z3<;y2b8BGQQ>b4jRYz&^gvn;!u&H8wgT!ltIM}<*yc|NCOjspRa?! zVd}!fq>LXpD!9vG;;xK!jty8Go3IY8$gpaLLq)WB7T4AdapMtjx&57eAmz~Qh=x(W z(|!v>F4O=D^R=b&bpTu7EPNJDZ3k*MOt7u7MdB~gS4Bd7_L@x%uUlZw+ziK zF-(Rl51hkX+NL8J(61Z!8irl+aW19v;jDXaz<)sX1yH(W>UEFLN_zj$9bgHy;D4k# z+Zl3DZy6LZ+*-qLBRyE8vbbmREu)8Ev=1*sk2malDABa{S}DF!;6z90g&m}4oAQYv zqpvu9(~Q%4n*RD}XS8>z&%mD02gs2IF*r_mhd^`(k!|lZjM;KOLpu0&Eop}lA5qdH&ApL^a_G3f~Y7@#1dbTM- zCYB=}+cAobK^mTy@wVWf#(02yg$M}t>QnIFF}j0ZiHJVMTTS#ekys?d4*HWxf*tr7 zoV-L4q<>l^urUIo*Chb!^PuP;d1S9tdYgj7S@Mrk)MX|NB>_1>cLvEA+^iVC-+|avWJq23VH~OCqe4n%QmQxHOZ>>=KfiNli3y;$ei4 e{uEvGdBzd>2QdOkQWGw8TpanJi&0^I&+!`XKhsD6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/LongSeqHolder.class b/idl/orb/.class/org/omg/CORBA/LongSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..32ef700a07cae1c73a31550a85fe7f7a32d97e81 GIT binary patch literal 677 zcma)(UrWMZ6vm%-ZZ6jc*pSwVANjJh>~@+LtLGP?0XR*s>}ZH;O4tqO`Hq7TrA ziq5MmR1mt@;XUtu&w0;z&e!+*Cx8`FJnu_HiI-Uoxa5& zG^-5p(~jE-&lqA_@rFUHcy0P6Y0WB6rB+~>ZH6PQ<^{Il^=zY3zq&X#d@l&iTgNi0 zuHO$EAz{5TSHxQnK_{dV+FVJ!A5LqeR`}?XB&QW;p1G!b-ceb_B2*O#C^B|b>|#$v z0sATrkYdPBH&^pqyJ6j5dQRI47?NFcU>c6;+D84hYu$wmg=xXxG~+?|U~`LFj?asV zV`Jt|Ib{rYT8fO(|7Xm20U~z>$Fxux3=8xzZUQY^q7!*Safz}l1Udn#{syMUK9pAo z&y-_CEk{&_D1q*j5mlOCR*;OCbi^d|(h#u;WEE?(NJ)QzFogK~(mGNR!mIIq#37_7 H-UjdkVv&%t literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/MARSHAL.class b/idl/orb/.class/org/omg/CORBA/MARSHAL.class new file mode 100644 index 0000000000000000000000000000000000000000..28247ef7d46861ace1b3ec9a6e6fe63f2791db10 GIT binary patch literal 474 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA-~yVC>H=TKpkNP2A4UdQRPo@-;*!){*NWuS z0+90<8RSsq(Ou5Sz~k)i8{p#_;_4Fb=g-KXK**~MiVV!aFarS=21cOc*nlKEkS7M_ zGca&zF*0vrVBF5Yv=OWdq=o~kMg*va87Ru3#VDiy5=%1k^NKMHbk5H!NzBYk zEy5|2!pIX&*>e^gKJz_PGQ$d}ofx%YYQb7$_I{rA5={{paphcYH{TgC_YFoKKt zNT%UqF)W3V72C^Ud?MB>GFI`a7;<8{CSx6WG5buy=Muh<5yx!_cVukfO9@{^v5A6& zuVtJQ{0VG{;jV;lBy2MTb?a%9Go&^fW<_fpRJ8T2?X{e?OS|ihGS4!EmaFxuwZh;} z&)j1Oh;91l4YSBFk)H7&2~MCum-gb2d4PCq$1+Nf3r2I-DAtJ5S1mIn3GvAI#n5U- zy`t?{X0=`sBC7R6Zdwdl+7mBVf134d6&mGMjpzA(RtT2(ua;?)2s?KY)~mk{rYuZu zkfv2HuGugxp;_CgH(M5oPnI zvQ8BeZ`Df=dFe4P>phx<5j1dI3T|Ou!Ve05>@F4=Zn%n7 zU(gpd=Sl_-lHt6|Q(MdB^}D(4T!CTAZRz7Xhq!UjtV#GufsUVtSRBO?3SI!f@H`==j~?wI(+i;{D?9UMIu28$u06l_?IN;cSUY&*FNuZgF$p zC~@5)F)Qie78>61UhhC>dLmMbF^qLPQ17W4Rehe?by!6!p0QieAxRCr4|WYRTytmb z+|NMEF+@d!I&9M;AnuY-I=$$CE{rIDp*QI!?4=&mtB1NF9={V#b&rlpuW(B*^BS+v zR2P918wU~_&a;4-{F6Y@nhi@OoZBy{(ztM1cKpR8vS5N zL`2iu(3nl^PlS8CY0TKh3G(+5DxzkN5ots23X4ER#&${3R|HqoHlmy4rW9s-M6RSZa5h+SOLs)%{HfGp=d0LFy43FI5|)Nx}@&G;(xJR1m*w$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ModuleDefHolder.class b/idl/orb/.class/org/omg/CORBA/ModuleDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..4957c881f4e73f621ce17ebe529450a9eda365f2 GIT binary patch literal 766 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ModuleDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ModuleDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..bfa32788f1cb62d591761b612e8129b8ad3cd37a GIT binary patch literal 4304 zcmb_e3sVzU6#gzGB#^ZT8Z`nwYSn;1wDxJNm4|JqC`f#PZPQJ1Nf*K{ZZ;Hb?aRJ@ zO`p?AXY3E?kLvWC-OaAqY|v&pnK?=Je*2y8o^$Rw_wRrH{0qQ~_^}VCQ0&D?l-S4w zPGgl#naxLRG&XB&*4b3pY_QSU7;HA#+-GC5sj{)y)YxpX`IyZ%n;kX}*nGm~Q#KFT ze8%Q;Heay$GKR0>cofIiaeNcUw=sMd!}l@#AkdpH$%-timJ~QKZCtC+L7+dcRw{W-x1_nM79|Ne?|WJ_OiL|PWKNn}(#$L_Ol9v) zkA@4a7{+>SQ(z+9x{sig8AG>JO_wFwVZ2Cxq;8Sttnb;07{!XWPm#K+>80!nxo!^W zlSBzeL0(rkX#dwkWXuKL{!jD+C0Q++T0!Q0!3$3lJl9sSxu_P`)w0aY+O(UzNs7jv zqA96(@*8%o2;2zSMr(Xqp9CZB)gJlicYV-4s+Ou-0uMX%5{T#A?EKB0O_>cmp3--+ zK|Pc>+c%})iCtGMvsNTMdWU*~d=2+T z5eb+bIuAyBuF>1r(@Ic7)2cwD5Vq7xjk?I=4mGT-1VV6|`D_6}dEQEJp-EZmBDF=z z(u0t~_80{kVYRoDFBsbbYaMPWu%Sk62jgiwpEkCe(<--%(r$4A_dE0-jKHpE`%1%~ zBcst(b(*?cl-B>Nt6sPH93SzLT+Of3m=ZYFGJ6T~(KNA4V@IGn%~QKeqxbgH zdm(p#WJtv9N$*U$7>(wt-M0Ej0#8*M=K@15A{xWeYq4Hth^WfyowR!(SzAyhhx!PE*IrBif)E{KzSs|j2ZFPxh^8;bDa;~?xGK6hc5VioFMu>M$gAFL3Wb<9k3C! zI`#*|*qPta^)o#Mt)`K2F$451=vj2^H+22vE}z9YcX=;;chl3zFX(QpQW?0b2VDmV ze)&utkuEeqR3WKR=s#g~_f*$$+12)_EL@JVs*3sMJF;Z2BDr9IKeZE4f{9QQ{ zJ|~@zT{sn=lg`jCz&$>Y&RJXMN!rkJzH>T_F7z}K^Z|z4y(c5dXsRa}OT|;YslGb; z6J8YP^zI^LuP=m7_%6T!A4pxm1vV#?Gd1XEiu!~LJ3!xDsC}%qj(x%tM{Oh=vtOW5 z@YH3(F-f0?nvjbL*7bodkBFL7IMG3$h)97Gwfri!G>c-d<^y9aLf@OL+#ncv}X2b#0_K|1utu9`#b}~vBx;J+&y?aw;UOK VKDQhlJds=O8GIr4E4rOL;$J-*C9D7d literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ModuleDescription.class b/idl/orb/.class/org/omg/CORBA/ModuleDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..c144a4c9332897b06c9205613bcbecea8c9d9e9e GIT binary patch literal 474 zcmbV|&q~8U5XQf4)22VhHP^7>S!okUdTw)MBp z|1w^`iW=$+sKP;|N%gR9|}l literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ModuleDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/ModuleDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e2f2b2c771e9df45f69f1323e6b48a4c5f62f7b1 GIT binary patch literal 2387 zcma)7>sA|86#fpmOfpPtNK0)|pp?>vi6zuls(@84wM9as1yMweljJlGB$GIqq~JUF z0DS`g(pm#cmR;?yuH`Gamdkx6LoPGvl0Rop_Su*3eEX8W|NZj?fcNo>jB(7$n8Un; zk7f99N5&`kRKkLcAQr=GDw~C5 zxl~9lr5`RXBsWOARL=7`hTyzz=++$uUwm?t!7tP#GG#N%Fc_b7d6K(u(v2!NEr#21 z*ZqRAKj%`dmGiYCU*^@EsaGt$Y|M#765q2-Ek`kCdc|<(^#);xtXo=ccTKBoXxSns zdI@*)y+a<{9WUKigwWyT*WmBKPu3mGE8(A*+bd=axu?M;gpq- zQ;-J%i}GsH((_JZQ27)*LP5b#&>7CQDZ0Ct<978F>|j^H2bfWC1rrQI-D!!OTFzSI zr7SmzP(v$GX^IL;Fcg$g5&3^+kn{YJZt#3YH>erv+^kY(D42w*;3jS{40!M>Fi~Z= zwz8a>rCy#Ad7J(0F`d0JHO(;Ejm%>u!BSAeEd?v6i?nn+5Jwty36B-*VgD4g@?u3i zHQFXCo!#N0wFkNZ(C`o=qI3*b+zsJDXOD?10@a72Hm5JsY(vqO3|HOZS{>WAvIEAP zx$E+t@XSjuciJa)tyrUMWB=Qy)H^vE5{pxPsl78*dt?Mo_tdm9b&eJdXg75mORKs; zlNq*lMJ$?DhVw2IO&glxXn|Xqim8`$ORw{cm1CH8^Wzx1(RA#I<+yi4xHF#YQJ0=N zR0OgKk2*XMYMKih%yzHH?e3w9iEXs)3QFqMV0m^=2ky(=%=O}zpDK^BMlzrtf<2`VkRj~? z=Q?U%0{$cP9oV;FB=DYddl7#0kv5_p!?%?>t{ZVX;6RXlHC-fG>9OggDyV&gBg8VKZ`!p{+x_lS)w3cmKe! zBS#!L>c~rplNh)0p%de}6JtzGJjZYYwj6Qfs3R|tY!)PhkGhIZs1acFkmfc11A8H5 Ai~s-t literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ModuleDescriptionHolder.class b/idl/orb/.class/org/omg/CORBA/ModuleDescriptionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..4580017a7ac608e7ba30235e70e68a86a7981faa GIT binary patch literal 814 zcma)4ZA-#X6n?Hcm$phvt?bn@^5w&*uSQS?B@{wMUuC)>lj+8~8vUz+BI!dvpdS^T zt21&W#@ONRoacG&InU1L*ZT*6Lu8|nk&GaWR20it5n)w?w2UoPVNq@HGV4Tj96 z?KV}r-Biof>(dkU%GSGw@4JTN;BpBh^gKKiSAvcjy?ecMsRO62hQPR1*ud7?ii-t=I zW}zsEASz>1!4|d^WU!-P7YT;FDK=c#mTtHVv6j};R7>kL)oQ(EG&or}PW_o{IFcCg zAM%Ff2>H;^tn-PJkD28g^{;;?d0ti~Dvo(MRdKKY!fPDRg2`Z*p_d6;Y562Nk;@e4 z=qo;`P`2;}_Dl&3%JW`1g#bN3RFn(FR|H0w1;ji|(!)dw#Xf?+AaN}EA;rQA0)2!= UDoaRs5TVBCrcfW!lV}6@2K{2i8vp?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuLUn?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDM|FXpf4r}&uYXV^BZDleOmJm!NouZZ zMRIBZ$bpOua;Wm?Zf9iRarXBO@No@sb&2=$XJk+yS6ot=iVw1-B|Ffxzf{U110xsMrg2pTYX;M1kwge3!rAbOV6@4t-2rhg8 zA4;4Akwyib#lSuHU8mP^8FK@luwC7i)YwLAQfW*K@9%%f25F zcK>=X_8^I$D~=2jigj@-V%jWcKr=~t0zISlSW*R}elqKVkwmJR)I6*ZjhU93AT+b} RqeYu(DGXGzwblM=!3S3cXaN8K literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/NO_RESOURCES.class b/idl/orb/.class/org/omg/CORBA/NO_RESOURCES.class new file mode 100644 index 0000000000000000000000000000000000000000..c897b3075b76acfd341a49bb4d8a72f2f0c065ba GIT binary patch literal 479 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuLUnn(1mP3 zk{!qs1M?XexU?9VH!(17XJFb0Rs~YS0aYUcRKpAu<?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_KuM0J6me|(T@aDcyGuqz{jEUH{^WpPPr zu4_edY5~ZJj0|$9^60K-WZ-f3_YLrI4RLje_w#3DP$1-821N#DV7P$*3j-t2fowpM z9mo>{^BEYpv>2H;F)(gtVA=>)1yaKSRU-ma!weMV&|;Ll=V`9DC?sEv&7 zzcyEOCx+k`cWdy}JpI#Qv zvQ(GUG)4x2ti-ZJ{hY+SbbbG%tkmQZMg~P3iv0^xi+~#Q^NJZ6Bv93aR2HPBq^5yQ x6hW1OnW}&)T##Q>l9-f}s_*IIRIBrU~En^MeNVpTlItmi* z$~YtV6W9>LJqh1R*klOm*7GK3NUb-_iq_bxXsa8WD>-eOc2^r^o@EFvR_j%3iNT+q zy3Y_0+w{>JW|3hmJ>@|XoIrsN?fC(7AMwbRWt5&2jOMmctP!QJT4qQR;<546&}v4# zqHS4bwO$b-s`Y(tS`1p+6E9bPp7m_qHLU7Wp69z+Az0$STBcDV?96dkul^pGvM{+p znwGt|X2Z0EW^JwBJg`V4H}qH^(gL>%^FFoO9y-PDUgl6ZYgu;uZTDvS1e1J<5wiImRvVse^s9-|OKEgGIh;y0> zz5`vxrM3L}0+rc}D7Q|jIW7ycGdC1W;);X^3cklf1v~gb!41qx_))=6oy9!EHCM6f zbNamITuJ{yGMsgJYAdf}(DBOvi=$YAp`eHo!v!~+ z?zn7O2So*Ca0R=lFkEyyI)1l#t;tP>c(3?7*U2#IhERi1Ws1XRI9;OBv$$TZTio0= zN?f-{%u;%=g$8%L*W1^bo`}?93?rQm)Vr#NRiCGJ9ahnbr|edANKymugI&W6m)%)A z_tV#M3{lab4%_4qh`S_|b}u@hb3@8s=uNr_yQv5D>b`D>$M2X^-Jzq>E8Nn{yv8eZ zISi8nSvuL|Z6|u-M)Z9b>WWv`AZY4-V1l0har%WY$fEgZrqG;vlEx2dHA-Jb-=O*m z>^GW#9H~KVbG&T?0!Q#2wyhD-fwuKJ{O!He@9@9F=#g*>CPFPpf51N;VMn6~* z5z+KEG-ea~6X7mz8dJ7$jQo9sil~_*L|TwL!Xi+Sv0YO16~Ps?h3GoDDTV1S(KN0* zL_V4cq83I-+^Me13^dzii6V(uY4t5)FA;r%_`_Ei{X6q75}CJ1^lhn`7ETK(oty&j z#S)Yhy+1Zrf|x|Okm~P?HFu1?r$r|Gyp4ZAc#+hy`VK*MNQ#m#5LW*|@^JhmVk({P xYmE8u0;xARLo&}6rpcOUA=SdU>BFveM`8$pP&AfA7$3WCoE#_sT~g;@@gDDR1n~d> literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/NativeDefHolder.class b/idl/orb/.class/org/omg/CORBA/NativeDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..e581ff3b949f4ce1a0f74e8951600dcfea2c0a75 GIT binary patch literal 766 zcmaJ*`Lwt2dfAXLbGBpw`GdHy>*RiDPSE(G!BWTDd0>8cv5XifSZ&deyQ&uA>%^?kP#1?&a8Kt0BLc6(ReZJ9}f<-6_l8_~A zDcHu2f--g$>>)!?im-j**d5a&NcD`7q1(owt2f&{^MMkSgOoo%Q!CusKeDFna#>*- z&S|96KsX_5^JgRanbjke0+~fBO%9f4i9>c_BoHjHm+;uwWfIwnrO4_M`$|tHtgC&1 zys`!+<7I!GLySFu%*R^w9kCf^1t}ks^)X4UI!1gBlE!KnQq|rN8$+0>tRdq=xEf)9 L62=f;_%?uF@~W^i literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/NativeDefOperations.class b/idl/orb/.class/org/omg/CORBA/NativeDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..5b63f4ad0b8e56ae9eb2733bc1442cebb71b7489 GIT binary patch literal 127 zcmX^0Z`VEs1_mPrc6J69b_P~<1~x_p#r&dl{ruc?eP{n5Cr5q1#FEUiRF~8=|AN#a zAUi*=n2|vsE3qt5KPNFSUEe<`D>b=j0{Xb%nY;?2mlhU BB9{OF literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/NativeDefPOA.class b/idl/orb/.class/org/omg/CORBA/NativeDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..c4141e2bdd866a77333a77a8569d4fc7baf44697 GIT binary patch literal 4773 zcmcIncX%6T8ULL%?sPskj$?<)8BGEd$5ySREfD08)}s&;Cw6UEc{0OYZ6H z)a=!=8&=tSQ(D?2R5nf1!78-uvPTPLmc3^m9^Uu6JLz<%;55;!7bRz))kDzWEO6j5TC zd0t-0OG`x=Hq#b(xtPFFT*b2`W;|EH^He+^FW|)sS?NVQyqJfV@bFR|UdF@ARa}j0 zc=ie&Ua8_$cs0*nqvExA9doZ$a7@AL6}*90Z)E11czCml>+lwyy_JV+RlE&vm+=k- z?^N(E1@Bhy9tH1}@jewhaD{^R^N~Kl=lr084=MPtf{!TpsDh6v__%`W6?{U$4GL~l z@JR(XDY#k2aTzCMoRkpDX3czA!kU94NAyKKUC@g&=?U91i!*%^lN4`oNkE*tNk93CZ= z%W;>4)wNU%(@|#(OT%aISq-1V=Vg3B!`=9zhA-hB4fo=-hA-nQGQO(eYq(3p*YOPv z-(wccy&$9=3_5ja*f}hHG zP{Ysga}B>>@-Oi#8NX)ALmF21A(Ct-pJvv5w43? z*{zoki=vbuXJ-tXx{Z_kPYwUVznNARGzkg8b%K=;RA;UUx*ItOnqXCzs|1&hM*+`M zUr1;Z6n(l}DlFKB8~si}bTdP(owbblQrWai))HkYZ*>Hvpb{hrSf>4am%qks~ussL}u8FguQcp;y z0gP2$2>?JH;8281-jOA=(|LkjKxb*Ml~)ak34f`)B%I&nQ>pr1vr=`V!!PI}KEs_t z=(?X_LLmAu6-BmWO-twq2bWGsU{xPkLU8K#oMq@#eFd{jE+xB$L($tmLM+lw=+?{v z7Xl?X84Tk-M~b~_GN}$#*Q{QoQVjdkU*!8J;13b0pv_|0uewgtCyg@Ykt zIN`gLtVErLTNl#wMA+Man@;RF!1;Vuz`lfm1}P7C&Swv2iy%BNYJ!|O$GFP2^js~N zQ3t5xDk!ObJPLmRcxY>pu|Qi^S=F|55+@-YJUcrY@V%<-T-yN*>^KAbtq;}pcoiJU z!;SUXukkz=L-}mrSxrm0)*IT=b3H#spBnm%kscD5JkRJzPHd}p;%w5MTa@d1r3P-D z&5m%iGvuhRDrL728hpm_Ucq|yHsiEk8g#D4^r4pvN@0qCDJnAedfF87k}iAhT?!ue zDs8x>J{I+SFJu=7y=oA$dQB0e_4T&B2zgdR-?$B|dOE^hl;D#3IWoUM;IqTuvMzS} z0&-@6k8Y+v4|^bC1Wi!+dzAh%sr*Sw?>N!v!vy7-uth}eesn;11&=wi<;RAE&-V#aT7ubpoRh~cH;-PX zsT2a4-kOYyOnVY?QVvLTC*`_YSV2!l;Zo?#B$8C$of)+|sU#CgwSrWm7+w%^zSrk` zAS~%d7Pf^fYursTFKPMk#S6n0E4<4GqGr)F-;oI>+dWEp)G z>^#7PCo>`HBkW>A%tyF{32`6cQYH`vRBiM#LGcj=n9%Ci859)1(vYC|wJsBsgwM`X b1V!~xo+>EKKFV%E(R`F)L1}R*4uInS@H_>S literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/NativeDefPOATie.class b/idl/orb/.class/org/omg/CORBA/NativeDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..df4e522cc62d2d4a16a0c2c0d8786c56d47026c2 GIT binary patch literal 1864 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 Pi%$OQ)Yzf?o{9efsgSoj literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ORBPackage/InvalidName.class b/idl/orb/.class/org/omg/CORBA/ORBPackage/InvalidName.class new file mode 100644 index 0000000000000000000000000000000000000000..5667bbad2507f3dff88ec7ae93878b96226931ec GIT binary patch literal 475 zcma)3%TB^T6g`(Btyp~U5R{DzGzB9Sm(-XDx*#EHG@7`a&`C2|T2d?Vx7)X={fIXBAET%D!B^}FYXjn0jRcB5?UPnR4Dj~Hm0udh& zG^=_=NVY?l6AD)Mh7FnRv%s@2;z$IZqtct5qi!?od-X8#?Dpw->(G{9cY-1Fg?qyK zyxFMlnn)uGcZMjF#KVRS-B{gnF literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Object.class b/idl/orb/.class/org/omg/CORBA/Object.class new file mode 100644 index 0000000000000000000000000000000000000000..1b62e20749284a9c9734b271b5eed3a049f2083a GIT binary patch literal 1014 zcmcIjO>fgc6r6>mDJ@M)X`$t#^yr9#C9Xa}!y!^=P>XVa!)mc#TvyK8U2mfFFYyyN z@B{c!i06$_#U>m%jqEq`-t6q#pTEBU0PqH<9h`LVN}w&XN-BZFV0f+OD$JEm!%J&2 zokqRS0^Pb!H?wT6a?)1dI2aZt4U1_So{cWvy$wfSuPL^Uyd!m?B`vbbI_~|TZqb%k zs=5+r1%uu|U`r;mGS6aVN#H2xt#2o=DGlYMDrRw?acw0fD>H4$OjOLjPgcZ(KgB*x zA|BPJ(oj7q5!nA*E)$w8huqAl;)A_jmw;#Pf|Fn}x89YpA#Thj8@=&^IV;%B!bYpX zdR@=QLryI6|Eeh^W0lV+@-w=#@$LT&_3XS~#8ld>(CfT5M|Guto85LdP!@doxAh_o zeCkJ6;&cxjGbyGj({ie`O373Lr$O(FXRGfxAC?rStawS5Gh{I*W3q%-u?u)tbbI?S+(C(ALGD%AL2=aPaPiN*x@rgclZJ?YvpffUmc17 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ObjectHolder.class b/idl/orb/.class/org/omg/CORBA/ObjectHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9bb6f40c761f6bd19dbdc96f437e31bcbf8b495c GIT binary patch literal 916 zcmZ{i+fLg+5QhH=IL2mM5+LEw6Q>r(p*3)u3JG%4s+A&9#I5BJ6FDStWNm`_R&7O7 z#03w)L!r(lCdz@xvbEm%W_IWQ=i%}09>5_EO&C})Fo#tWYgjk&3a?GP!CM3Gu%T9) zI<|Cd>)0V^9k1T@3EA&qRCU5e)hU)vPmY~Zx#nNU0wMW1Xa@3#Fk|J;3A4qp!uXo? zJg*SVjeM^{*d1qDVI;kB-FLn=TW$G6GS(=ljHG)V1(M5JQ&UQ9Ihv!n@@I=v)~(#w zRnB-{-LfF?0xt#TA#}VK_<&s)FB=(nm zRIU;-lSiGNut195Z-R z!CP@icsq`(ct^pzar9y~Mv|<8IU$^n<2)8(bX*f(@5Qi)CE>a(j_X2pBZ~LM&j(T5 zj3b8+#jz4c9=F8tk%EGPj~RM&?_SMhIG1Czo{li{>F8S*4|;bhsnrt1-~8qzP?_p%#H0!cCNdah9-qqD~uO>QhP z^sjkFY5SH@D;k?slk%s?KI7pdkvlj?tTMwXve+{Aj7-(AE15OVwd@K}lU>swts0J5 zb6igZ$>i)>-6M0;*vS$J1)orzzIQE;($-G&D%8EUo1b8Gu2gN-j$;I)3RXGRFvgJT zu63d0nckXt=cZFFo35}eD)^LR9iK5I%-xJg?Nl-_9WdVZF=U`jCbJE3JU zdwFVF!M7Y0e8*v7OTjir6+0X@oRgC>t2NW5Jla$Xn_H%M^@w=j!B8z$NhXV;QO#Aq zj3E=M0lE48rTfn$o{eGR#J6c%Wkus9gU0LfzI3FYUNl69JF(g`s&$GsRH6p)Ox+UQ zqVG1_MQ{ku!wZzowxZ_j&bzq0V%gM{QEyv!L_aW`2@Q^KLJgd#n4Vs9tsTp=_DtO? zF-(V34~)ZPIz}WJ@ZUA>)J?nO~=Y>xD0VI;d;I5*p=qi%C$s6WoeO7myMqQ)j7xvea*pdfyru4G*BQ6;AEB7nLI{Y zcbHZ=#S(KzUorZoxu^32{SDI1=vMzyEtZ9vJVpFw(nzVuT_KOwsR5OQ8? zAbxepyqS{OU*Tw(< literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/OctetSeqHolder.class b/idl/orb/.class/org/omg/CORBA/OctetSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2b1e7e0f6a303cdb78f2a9a647d50e41519e9c3b GIT binary patch literal 679 zcma)(-%G+!6vw}JZcf)KD>XCwVFk_kFzVF^(wBl@kkN||GW8~PQB=X>rs-}CkT{t4g|M;cV5;)o)xVG|hg>_ylB`jfd*+tki;hYg`c=9JTCJr1Bssi-FyQvBOkF> zNY6aSm|6*`G^Zqfr;VxN6tjv%$fQChZWc#~Od)GnpGS)33#1X`-q7rz_=n8Ut?G0bVW zgtt|^qd~#D8ZP5K6<0L$V?Ibb2^9-+b5X--ECuOtRj%IGu#6QMx+*`{0=OnWJ_z8t zhIJ%W+>jm{8dBJls}EJARorCg%i0ghg5gxEWaZKUr9F{g=wC34 zroF_VM4~$kez{GrY{}YXI2nn0A}L%3nZ=5*Y=%U{V_z;lNZj`9rOU!HY_n8c6P280 zmgO=b4^zc`+cI*5Gv5s-+7l4NV8%9b-){%Pi(8LBAyovTk^3l}nZ_4~Zv><*H5Y!nl*@ji-u_s3G53rcL$TJQg@z zwOhzN6+l)pu#hV_edHL&go-VW45k>SJNuq4x3wT6?yi>#d%}`2+bTZh*uf_Z!=e(m z%{^Bt)KHF3af{H>2m{RctM+8xhFOlWY5hGyl z@f=^lU^tgtOU;uwXC>K&K)s&x7iTZ1*yYH9+H%I5)lq#(IwXa!Ir8|1BM$Tbiy;am zRHE5RF}=Glq&#POY6QcGhuGE%NlEsFArk2cLpIZcLLH#J#*NE1Bqt?Ebvsr>EidPu zh1`4A5j}I{ZZyT+7EY4AXB4V*+Gvi%Zi}obm7lFR(w7{(6QYUIenlvMPieZ$gmt$8 zA@`(;xLXy)oXFZahD(v8XRI`@vX?>Az%b-O83og*I5<0zqxZebPAA(Y;(r|F5oNbB zFlchFWUGZzG4D*=B*TqkyVzbp@4;PXD#O`M-c1tiQ-xu`nL;mV_#;WFy40~e+Jh6G zCUoTy-SJP+k7|s5e3Y`B3A75*nr0I{-=MD%dNX?W=}*9Zpasa0=7wt?c8q|(4&Q-e z4dM*Wy4KV1!$-S=`ma!K#h$=lLtg_Vh-u8YZYg?8H(h^*{zsV5pQ678H5GdXl7^^jyh{Flikc*-6N};B za5AMVjfcO-aBN(!nw=YrSCnD@`;K6a4@` z$~YIQ0TKg?PUlX}na7#=`hNceu!GGgMvzc38-a?sDCUurW5P1A00 zhK-vu$EzC7ZPhp|Tpa8h1($oKu$=l4zb|{1E8RRpc-N|1VvixHXRaAShfamqx;_+L zGL)jn%?iVo-dE6dJYkk>Zk*KJhPV_2yUj~RxcJ~%qFv=bN}(ZoIZ9DHx!v^9E>;2p=tuFc9v13=b#}KQTP1CT=detbD zYP>8MQoYQ-**jxP83t$PHm!(O(9!dBI6a5j6K%56NX;5NtvDtu%wU4~fxVHWX?h{3P1|egLeM*|Puu literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/OperationDef.class b/idl/orb/.class/org/omg/CORBA/OperationDef.class new file mode 100644 index 0000000000000000000000000000000000000000..dd88e613760a4c6061001c1d05fd0de1bb46c249 GIT binary patch literal 221 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 KUKz3b13Uw9AxUun literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/OperationDefPOATie.class b/idl/orb/.class/org/omg/CORBA/OperationDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..59df32c2884efa7370b7e1b4f52f84865289bf04 GIT binary patch literal 2651 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 U%Cdr_4-wfIRf_Z>J&QJgA43q#?*IS* literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/OperationMode.class b/idl/orb/.class/org/omg/CORBA/OperationMode.class new file mode 100644 index 0000000000000000000000000000000000000000..b1b424d3fea5125588821ab04e217bbdf05c557f GIT binary patch literal 802 zcmah{+int36kUfI7?=*)Dz;LJwxw3U%Ot*9O%Qn?flfmWrcY!_M=}*=2poxilRjX* z)M(-d_)*4nhKZ>@=)>%@FK4a2_MY?O=hyE59^ifk21?58D09n12D>J`+sc#;RMc5D zaL2%10kh{E^!A-jyVepAO@VAZ45rczWY-ShjFgnF6*gT*In`>&Ocf{;>>oc|&0N@2(u~ zPt-V^NHv1peA;RR(wA=piV?~WW2J|Z!;F4w#TI{JhJVIH5_v4aqMzlu6S%~fa_Q%> zav^_(F(-)ba3-EfVmJxy8lx4SLS?HTA>Ppe8*s+B{3tH(uD^|HCE7&ffn%yi0^B@9 zVtxi~F6L2Yoi+(=L(`zEUBpzY1S+UmJ%?T`e1dq-NKq7VgB7JF7q?4SKO^}CDMiQz j{B%|}k>&=rW4;oiXNt9NFpjiyq(2~`Ts?BN1v!2J+Ypd? literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/OperationModeHelper.class b/idl/orb/.class/org/omg/CORBA/OperationModeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..674c6c728d0f2353d4a5b2295052e6fd350d8a0c GIT binary patch literal 1922 zcmah}SyR(c6#g!4Ng4w}0T)!H;!;wj?h7DV5Vcw;Qbci!p^cqrNjf38{1ktIueeO@ z=;+{+GyW*YbCU=pMR~b5IqP@M`Of|I`^$F#r%{p6i&GMPoe^+WLImd|oW}(L7bUdf zQk*2i0!FxSRKi|dj?*zF;EIT=BC=dG&W{NZ*Lavo5!WT$z)cA`+~UV=33*Hjm=;iA zh^fw-n$EB%Z`qZMwN%MW6lTY>nK_b9SY>^Lp>@gV+u90>k45wz<4o{NF znY9&%%yn&PWIKGZSGM6$6DR)}t+3*3gxj`V;%KSr4oSuV^a+@eaR*6;WN@f~KHs#e zW!>fuvjU1T=5UvxLtoA~M%gC;jY`Hm?#Z~11%|GTwoJY*=`}tv84vJK#&MjGu@Czx z!iJI8JBD~+Mx8FqPG$4ncVT++UUor7Kaw&Oq-kCOWHKJ%F~dOaT7H-qImCyc`J8X@RwS3g|Z#^FNtWlC1S3l zs|KgBy6p0pV+>PyJYl+Hshnov$4;a%kFc6Hj4q@}YGDz-z`yisJ+~9mPNsn?b zz44^vi$Y&<`lfBA^C10o(#`0ODWAdK(+9|qHpEwVxJn?}K+CGDjpGmoeC=LD(L&NT zCcGP5%Yq?aTrH@vpn70Oi_NI^)338HMG_topCx-83rZ?ZvracDZK>+wI)A4PIu5p4uH-oH2y+g$IU6g~|-s{9KwuDm9N=4Thsh zXxH_GRd={?)#>)cogi4dEE&<-lV=N3&(EZoJrU$6HSydfN+w^JnCPDBa@ewtMd&(W z&{XW|*h5xF4*NO|kYvcsv0rta2KN}^Evs)Cj@4-zX1&E9#T4z&)5wmrH-!l#TjdS~ zO?i$&s?2m82x-D%K#|T$@$hI@Av8c_tg?or Q50Pq&{uCKNd68oPzrEwS%K!iX literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PERSIST_STORE.class b/idl/orb/.class/org/omg/CORBA/PERSIST_STORE.class new file mode 100644 index 0000000000000000000000000000000000000000..c1b0026796e43eef7e4009f45268352ee65e8491 GIT binary patch literal 480 zcma)&%}T>S6ot=iVw1-B|Ffxzf{U0c0T*r*LE|h6(UeSZTY`oVX_C^8qK~B;!G#at zLy40h(x{-b7`W$t9KM;i_m@`y`&epW8m0jiGa6f@1Al5>&UijtSdV z*DFSeQ)G$b`oZam;}+R)5R0_PxroH=_^_l`Ebk_|i=07}Ck_{*G*7Dh;FtU#g&O8f zEMU>Z6bwSUZqQ=^@A9zELqA}I_4<}Sj76NW`>S|ZN)k5e`|th))Ai4L9t+u7|H3D1 z{`FvNL6JXK9u*`NoATD=v|7!8VUzL%dPd{1qDn^pWR@kP$W*tfy;~z%6D zeo?x9er~$Hvwx72qkce;XP9G%YrLXai*(~|kq)cvh&%PhedEU?c`}yyO0A{hLVGOexF5-O^ zA81hUp@vKNNX2Ch{g?}qB%xwn3Kuk-#A1*hSLEqq4NF*-t}F6$HGr$~@k8&0$*Acn!TZDfDkFiKm-PF_$BiGMxru@3$%k^9VDhGS&0XWTX7 zd83evr)|qD6J%{z7E7{`Q)n;dCOF-*7Dohs2%gS5D_R?P1TOFC_-_?%-KUoZ@da@;m| z-Cm)Ja(szf9AC)@Mw{8XdM_)SVshNZ*BtNSJ&v~#=9t8kif=d~h;n?342O;w!$`;d z9N)oUIG0>a%~5;KNV@eF?J%9YFmqnT4o4PLnNuBsb+niyMBVT`M-D%5#9{W350Nhk zi&D^xa&u=-$QGUMsTdSwJ2M&>YA0D6hDf9*3|UYQ3KfB5^{LC$+fKG2!`UMnscGfR zTF9NXHt*?<`DiqFi#xULT_azi+eWk0@V3a9vimb-r~M@d@0Mtww2leI-=3OodtuEj zK*+tREbdf9AuBR=mf>O~=~*p}arQE3C>VxZC?jtgWd~lML66tYT{dy%%@OAMLKw?YtW#S~m;BfU}8S(eOu-vg=Yu@@REV zc#6=KM|9giML(-C`uS1FaxKs)NN3tl^n8cDM(EAx-KReRdrSwAA*~KqJ?tm}e+|9^ zM;pW`oOZP*;fIf;gZdv(ZpEI!UqxRXB#1MZcFj`smS(#C4E+x=p+7}`6>2K>49Y_c z#GXR=4S|D4@Tc@Dv>FBu$U`NTQx4m+{pOYJfd7T@8U~db z-l$?|osKmOheil6^eZ^&C4HI`dMaR(1Vii4g&A@{ND&%+6(sFZS9yi({p2-CP{$U+ zf8uybSsV}ljN#b0Uc;N|2MT-i;@?;ke-OUs;3{Sq`;QVFq_ub61-nFG3W0_7*kKiK uDGTA)AtC9p@N5ky9{339ADO^9(I9;PBS0V_ivL1e&Bz9Qj3TS28!rLwfKglk literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ParDescriptionSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ParDescriptionSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..fd8f022964c0a2f5ff01bf3ad0f25838d05bbca1 GIT binary patch literal 878 zcma)4%TB^T6g>l!3Kqo&zMm*sVbSOoW8!0>QG-$A#s#S`Ati;@I%xbWO*9e{{Qy78 zcn7Ni46%#3Gjns!eVltgK40GfY+xmhK8&dtk3q#m9Fv%mW?GsV6|*YlRLnCdx2E0T z44KO#$Ez4ltzzsJPItDA6Vo$mTySrX-;_Md6_!)aGekG7x+S(4!ur|;LuA(}6I<5< z(IrDEdfY5Ctm<6}UB?sVmCcQVy4w(Ef?&10WJHU1o+VmYdQl1u(aBMY;@&07l)l!* zIVZm?IK^U++71nR^V$s(EV~wpp(j zg{vwr35LZ^>TmPkeM=nzgy*&^!$-aqJq)I3ph?l3e9@14M(q$iP}J7O$iZNpwz3Zl zF*;1jOG~TJi$+3rfPRw*(F;gqU%;~AH-w%Mek2E4ut6U-Mz9e1;w@ON4U@!>k4gEM mST@&0qzy8Rk#0yX`-E^4%1@?Iqll7O0B#!9(%2FiXQYR*SmW#&3g&*KY z8SfMyp>EF2oO|v)XJ$S=-`)WnV>=H6>jp|W=qM|wD5xsf(6Onbrelji^Z8gXSnVNy z=FW)wu5%|t&v#F#C#MtYmD@q+I>Fd=nw{H=bLXDeW-t(>FqGn9ARZY?3Ds4rt%PdL zn8XaVgy4pUWGzK_J=>K%^?XmBF{JB_E=?&5244T4EV1Y}PlEqRkf7&%8(k9?Rv2I+ zkAg{M!Nek#Ocb%qus47A-{F>c>WAJ$dV$YS{Cm7kZz%ebVP}4B5`>cXM#7;`m%jAm z6ua~j1{iYC2+5oNjVb%MQi8Zr2&yUSP)fp8I+fxxP_SRYY%3KZ{X(=Fx3Kmt+9y$l YxN0mqAdP((L9>q{WbBF-Av>GF7m2QY0ssI2 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ParameterDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/ParameterDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f92b563d4dc7aba6979ccbd919425f82e8039a8d GIT binary patch literal 3045 zcmbVOX;&L%6nNmVlCCtjG<)dSW`)H=I?Mdsi$V zZ5pC!V^*NLxy4~g=4_;=7B#~ZXm57NdsC|&j;*Vzp(Zs`GX}K9n4xD(J)P>{vm|ZB zG}IWuTq*_QJh~)~K;?v~#ui4^%%nP-&?qCsKIe7KF7`Y8F4N-zhe%^yT~@;hH8mHW zFbzF5NA9@|O(p3SC#y`_F!_-1a4NH8lDeiQJN8J^bIZ_8ifrVepkqtsHtJqu=#1?SKzP*Z#|MQJH!j%vwSjSAA8qEe9XmV&qOj)Hgb9-sfd zgbx(7gF^4+)J5akO$i^8dXlP9!bb`<K8GH+!Lxl%8s z-G08cO`xHeXemVrpDOqaT?)qWIXn3U(`@D0mkOrw70F)e6OGfKk(;A z{`|DJOlXM=N5{V%-?73lr97}2%>hDLCE#2OM{`xoRV~ou zL@X5iww47LusgTN`t+`LD`ifX(z2RZqSG4pQsY!~F={hYi|X8S(M7B2n5why3Wx1% zPAZq;08aLg=qc)LpSi$T)b9d^9Yk_ERE+*P&5ULYJ*k`evKBRC0&UI^*~(5fJ8qhR z=G}LU^Thmp?AWJrW*{r(CmfF0CPQ}Z94{8zmU(G?v9wSrqtst{9lsrD3JZ0tf1$1RlyhLjDt087g~PT^|&K2js`51K!FOriwmg=><*xa-1YQtb(VhT1Y~}kXy&6iJ(To4Ppc{#1&yBICd98a0V&c`V~hQk z5O8Nvwq{9vcpOjI(qnL=jCL!7TX0Q>HsRiYCkNugMLcP%MQCKTVDJIT@1QPtALSd6 zBB2Lx-9bg@K3w z%3ruH{ejAnplb`2(}72b@m(C)fM0B)Y9i>ib^}=)%&k4v`cM|txpld zERF?gh|uxhpb$R0FTh+p5dYu?5uw-ECUU@{0k{Gu@?oO?0b6*Hytn+{LhbY>>LMXR zeRLfsL%}TS*U`Y^sdY5+czPX8p*%(pdToqzHb#9gbPp#taE8Z*ESh<2%%X+IrYwTF S@O#l$lwx8Hk03{KV*CfDUpndl literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ParameterDescriptionHolder.class b/idl/orb/.class/org/omg/CORBA/ParameterDescriptionHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..84a3078139f7481c4eaa5a99a92fa02cbc1d3e7e GIT binary patch literal 832 zcma)4T}uK{5It92H*G5|wX#o3$d8AmUX7sap+Yb!dX-f#va-6%b~XA}1x3l4RM--I;Ud%$%LC?~hLaM@WaEA|65zi7-~NCXaP_Bvovv*i^B_pmYtZ!x_>g z+imD}tDzUmH)p5%wc#2qF1UNnA8M}Y2-9vC7=p)U+Y~1Z{!I3sAyBmIL_WyO!j=T3 z;&P+@2g9*lVN@-yU$&i&xD^Cz6(l2Ad2~%dBAH2%5vAM_;~b?To*beiGues8?kFyM zE@+sCrXhr|ifs)$*wv82o`!wINb7$yE^MpLU4}^0=o-3Zv>ST4+T=CCkQ!%?`W#Fp zr<_fJTaHu+3@p2vI{%nu69Z5AkBVn%X=>3iQ)emK-v{YC4r%37FwD`*q{Xz33f;(Y zIv40G+Rsol_YU?#0rb<0UOE9EJwRBdbNM&;hL|NpJWSlfgmU>F{J$VkEKfr6xmWml W2n?&NAm%}2HAYH-9+YR<2Ji!r8_bUY literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ParameterMode.class b/idl/orb/.class/org/omg/CORBA/ParameterMode.class new file mode 100644 index 0000000000000000000000000000000000000000..aca9c19a64c2cd8ab3c40e34af71be688cc64f24 GIT binary patch literal 884 zcmah{U2oD*7=8{d6uP3D;&fxU4|Rj8tIkUo6NbAW0a@52@rrb;l1^wzcO?3kj2AdR zW;F2!_@j)^>FS(b=tbYp^E~hKp40C?zI+3)fd@Hcv8GH}nTj&D2@|(XMt79CYhYb@ z$G|-U_XTp@ooc(ug%mPYF!@B9BjGx??q1Af0%vT%jzzMtTZ) z9)-iMA4q|va=r2&E%{yP_FgpI(Vn|MAUd<@2flnnHex%R9C_|R+dB#eV|EMWO5@NS zyUxH3`c7;A(CbOH(DtjIH}y+?hJOBryH=Xm0o?Y7|CN?cvlPH?{-m%hv*>80CkF++E3yhG&AY%$GL#ep4{0 z#zLO)1-?oO7nxHt<2hV9SHH}hYsB>{=jyYpbF&!Bh3V7e;)b+EW;66cRqYQDZy5kN zwR_UuO4|1Po4B_YTO|ZBe3AafF;bIbX#Dhvn6M&noi+n~LDMwo>Y@_9St1qIv`;v) z_z~hAGlf{j3OhL zXEXrAK-DvAzb>2YHFKlMsbz#WsPkkG-hGw!S#^eCvUqGhF$+!8ZWOAXYuODdNOHMJ z+Qm4Ww&QvtNugx7w>&cEW^3*+e97Nj%cCYP{b#hwmbVw~&~_>FwWdEL4P*FJ#;S%Y zCK$$}LyffQn$xUvS2(Q6xUFFwcNhlwX2G-SAqi+y8t&qrhWmKHaBQzFOHXUO?OBek z;URw1Z~@aAKEWx9uxAwXjzL)|t`?V#(oKeR@L9RN#?Zebraukin9z{Nc^X~>riPzj zFie)NmS>5c)1sn)q7k#%OVbx+{H(#mhK!nqI=FyMKaVst@XI01;LSF7Bj_s|kGUY= zP_&0cZz6+eHpA)o_#%*eBFDU`qZBdN4I?0nAP>V-Jk&0)_N@GXnQ${A-e-GQeULkC z`xCRdMcGdMFQaJEHKMV{4NGv^*z`#)FvfYkn`J-w8IFYR+}>&#UX9^aws)m^B@cQ< z@r3)9bs{>KgP;)K#MT;3$8Pw~SBYUX>K2(8QT37Qw5V)B>sl7{X3+x-htXh|2BEZgm&CVdyae+B*qqGWCi{l^f2-Q0TAdf{0Z$Xrcy64 za6?aIj#PCibF``_GlSJGhPudPj#1>{zo3z!sDnWSO@QSn9=!!&yrX_JQe;MUs-^cP wR1VWEk|`AGqb@$)u_)kTXfZ-%ibB(RzJuc(oCtcM;8LXDWPv0jFo7B$0RBPT^8f$< literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ParameterModeHolder.class b/idl/orb/.class/org/omg/CORBA/ParameterModeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..0364a0b6847b5c95cd0f8bf4c772ea9744c6f539 GIT binary patch literal 790 zcmaJ6#rbxO;6kc!?o=((1OvDML`tKQM&KRA$KPb7>N()Ld>h7!D_) zj_nGwZgJzX>-5B(AXuj)8R6QK+Y+R%&!kj)!p~7^;@KfeTF*~RbWe3TY)Qi+Gz}3% zRqSZkMOH%&dm8qUV93p}U$LzQcNt=Bvu_%f*=-utdYeCrDcYZ>ksWDo3gb(*!YxNi zhejclXFB$UG-1)FNN1&Z`CZIZ^W`^JZFtx+TO83vQo*o5FOxCSB~xfesnWVcU-4mw zs)Y}*S1MrGUiR841n2>xvRx>?BQVCSAm(9`9wt&K4iNkYiDPvVQY^e7FhFRmvWA2Q Pk!p$c`OEUBGiZP6W=~F<}SCC&+l9-f}s_*II bYV@)T=RY01k!7gwz2%c(7$# ze!U-00BcM*x*R=@KF5G#$T8v=Gt7-u!d#RH;?s5`j;6@cD!5rIwPTp(bSF`eRw7Pv znR;pUClHs?lFN*~{wO|>CM7Mytlsh+T-5c*q*R33NqeSLGA!$MX{@89kRsegd+jn; Sbr={LXrqai=MK1k@9_bA?@15< literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyCurrentHelper.class b/idl/orb/.class/org/omg/CORBA/PolicyCurrentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..70cc1b81b43b072c58ac444672e8995eee21a7d5 GIT binary patch literal 1917 zcmah}Yg5xu5IwiAv>^zsJPPSk& z`Fa>P`1z)YNu>BP#gDf{Oyf4+-4T!$Fe9QBBLXraW^q@*JpuOxJYWc__HMyoh|lM( z4JE(5p=1`9XVS_lSu^={BgGJ!%9>ewn!%qKc*YRmX8NdkYmK2jG2lTGoIrsxZFil! zhPZjf*7U6ft+1-C<%rUkU1w+`#HRLEQ*xTQp{&?e*4*GlWX(5*WiyN?Jo(b*Zpvd? z%IC8BZf3`_4AV~Wq6Oo$3CJvvA2+^SyuiX!-SV`ac$Gk=>q;s!O*&6>aPub%UD+{RM#3% zy*!C4Jf-JKa*@!5ZUJ)=9^$NoPQ)dg;k#a3WN3EXu!KjLXXu-oou4EL4s$7%W#|f< z9338!a1Q4MEJ%2aMF~rIA|Z)E0m~9r%7y~S{u%z?h#v5;U@TOG z@CAOdaRkE!TK!;ci12xFpe+uuKNha=_TiG_Y^Qi1p(1kf0FffZa$yl%#uXUo^#IbIro15e0~8q!?6MxsTiV2E7-)ADBGfBWbDY;m9fVl^$ojcGVI;D zUQ2g7Exla5zq-`#T-$04%016B9bRIHo?DK^FBro4!V^QJ>^6y&%`c=0q*U`vqseeG z4eh!fH|n;j-#FbKf8Ye`lmsJMd-g0&>iM~pYL5pwQjHI~M9Jg}Q#*R3zSwL@#WGYC zF(@+jRU9CzB8Nj2M@TZ{7TB-2cGL72;%%dE=(gds^lH6rHuwzf&(qkBus4GVBwI1< zu8@w5Ln_a890+O3VnC73O7io&o~stfZ=u@gutl~wrHdqkVToQQVx&tZ(TY-~x#z@C)i3yLkWr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyCurrentLocalBase.class b/idl/orb/.class/org/omg/CORBA/PolicyCurrentLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..26784cd2e68e1a5fbe46b3857cb36e07a02cf263 GIT binary patch literal 527 zcmaJ;OG^S#6#lNx%V{(lwer=2T8u87YN-*VZ34q+AdnU^=`f5;Gcitq|Eiz|1V!t9 zRCGpLXhm?(J?C=1?>mqC@%i!wU=JHIWMo8SCFCS5OIS%DfmIoK6htIN6h)Lolo=Ae zaC~j`oWY18bI~4}x2Eozo~;{U;COa}LD+XZCp=(?Yn5{buH_Fba#Ko9tNcMykisHE z`llMh*6~rh?qAt8Kd|*y=d5|CpZc!TAGdCT!1BWSZf)lu)QRbtwiQfK<=MjtTSv!1*z~~McaPgberag#>&sbCYjFV(CUW_#rfP^-wb@;^*vI^YL%HSPPq+k zlh!YTVSy|bbw=M5qnP$YcbZ-rc#42h^%<-xydu_(t8t^tshrW}Ro-}na8G# z!;b4)b@$e)x4Ku&^ZKPbvWJt_o$qre?0VccLfdtM21EMPcI@zsLDv?HsopRoTdqlE zs#u6$;8KWGuYXXa684NBw~OoXq4(=hC90 z)Vvb^g4CkKlFauivBDQwxZw< z@JETW7}VMxc6Mgxnc013KR#dI0UTh*Kn^Pg4CFJ&prD~>Acc}Nt2)YZU(-<0P-RF9 z?hM0#f%Paj^a3wFVolQ2GzH?>v9Ng=7{?Y+;-3Be;$lLpc<#9p1Wj=j@_=Y@dg|*MIB^5ekONWbSgv zMfai4qu7&Au1#kDRGx4@;#9AA1BSfSn0`4!VTK;5GwnnX52$W$7BJN*k=A0+9q|n4^9pq;ndXU0NgP)V^8$DaIF>ymKr7 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyErrorCodeHelper.class b/idl/orb/.class/org/omg/CORBA/PolicyErrorCodeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..5de814ecd5299f34d3f4d49193977e50f9fa540f GIT binary patch literal 1745 zcmaJ>ZBr9h6n-vw*<`sC2r42LMMRU(618uZP+LGOlvu1mtZj8&!cJTb+0164@>Bc; z{lbUVb|TZxbo7%m{wT-i?k=5^e_ z_Zk*7ED9tHZ@Xa$oGdwRwcu=23vt}M_~_RPwYn`UFhT&r0u zm*)n2PaQh9jd7Q~E^v$ykIgN!P&4b*LfLcedX>cDu4U4DF?wXfaXocNVX@xW^cZfL z8%4z-@w;n#EI9XG#PX(h0P#ypO;>7u(TGiP5f5E(YU`G(0!tch zO8kgrfj+BQ@a*;QGT1VSTlh)hHppn;pse|)6|3RdPF-RJcO-JiOPs`zhE<8X_*vo} zev$YXBN7*p73jU?)a=Ukyz4ryx=4v%@teT-;`P!LZ+}t|3=|LvoVq+oCEk~K07Jt= z2@@rOvCe`bm<6lWuv}JiKzMoWv8ArOzY|E&@M=`cxMlqwMk3e)q5@SJ!S$%?61ec* zdpU?ID!pYwy>+0+59w%M2yJkxV9Ts+@-(6PU!gcW%dnMFjHWLY#UnZi`E{P z`bk!^hezcION98|6Y+tg&UHeL>WF}@MslxqJ~C`^L|6N`_E8h)_D3^7#z*xS%h1fH6PrO9zAEb8vK)jT1LElC9 z4iOq@jQVWHh)p3jGOOXd;y;cHVdkqOpxBQ+hkT9GB>5aYEqt`Ji{4%IW%`*f^EV{j ziak5XH3o5pSvdG%mR>&x9hrf>8u?;`&H?UGf_bifpI;V2xXr~Mgs>>0 zfF%(hVp+gPA$%;N8!H0ti0I{U3s?=)(}@G(*RPR@2N$hCn>A%n;;ax)pU}jp1TE;qxSS?xfWks$nvW#(nxs zZ71y$-PWsGX=lbTbR*3}2N;hcR%W^glCsCn^Qq?MsgqwIlz?y^-WQKlkF&++gVO2BcIpOXj?~xuzP_ z3zV0JUK2omI_eVc!D7&mkbo@VWsEU&x=2be(PS9RP3Om{C5Jh<-Igw+@zLQC0b3I8 zV@$xdgdKcI{pck!pII!-X7UV|aYWmm-c*YkpO0e0 z8W7IVKO;vm+=E2p=uOvBc229&9EQw|V&g8&9+lM>-Zr6;jaF2%SU0py&D6HkqFFj+ zmpI0LGOndC9Y47a{1FcqrB6=1%Ym#+AErS)oF9wN>S^G|Jww&v+h^5>OX8!^Iv|%LiqND9b5N#xl$Oj0lB=-<(q1^@v;}(V;vpn6onJhm= z$3yhVPtehVkWW5E;2}DbPY`&F(C*I&=H(W|eRS@Uhk$DswAiM|H-tdnlzkd{gA#tpzYyl0($;aq#VbIQD2yb}mM22W*#NJlpKgDlXRR910 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyErrorHolder.class b/idl/orb/.class/org/omg/CORBA/PolicyErrorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..77054c255118ecf2ecd095b7c6b791716fc81b86 GIT binary patch literal 778 zcmaJWns+jD6gF-#KUZoO{22KED8*;aG-*Y!V6NWNc%Hmt9`+5(*ObB|%**#nNPTjeVtO6V}x} zKwen`v+=q=&LPGgK;~nu`i|HFvw@V4$@-Y2R-GdL50b`a7*f^V5Sv0+sB9tQL%14Y Me-fq;U-&kFU#g3?R{#J2 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyHelper.class b/idl/orb/.class/org/omg/CORBA/PolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bd12702506ce018f7a1ffa241ed15751cc522c4c GIT binary patch literal 2119 zcmZ`)Yg5}s6g}&gY+1y{F^PfnK}Z`TJ19WY2d1P3+J+Vv3N&fxLzQL4abjeT5KZ|h z$*-X8j6<54w)xV`^hb4i*OFyR#$Q&ez4x3w_a*)N-yeShSj0mS)3_z#eSDC>6h0Jb z`G_yeag_M+N*o{a_f-+M@d;nb{B=#lIyU(3Qvsg|_*_I9w*=e~v57APe3`@+DgwR| zaf$P1u+5hp0bdK)Wr(WwN!wt^ZMCer(mJdw>)X3)Wo4gE*IPBC#1LC)m<@ZCA)KGP z%Mjtm^iW$?m0==37eEr6KoN&_YREi5Jho?R`s0e$-q)&4q6{@^3|T@v(tg&Ire@Za zJ=qm+*u0vcz!R*Ocm_x}3(lJm17w9`_ueT`|)fuT-2$*Y(s6BwqZTcbVIdC z26a=P#hsAhlVC9i1}|_UO%TJFGhk{@)xwA-3G}GP%7^WOJ8T|FZfN}7c4fHgkJ>BC zz+5pT`4oC=vm+q>PLR4Y=Yb|i#KH9j%H0b+sy2>PjepzD$?5^6O065VS~HqPor=RS zI~1iC&4%klU$8Ot$cMTX6gCW+yBnFIFZ(q8As9qHZM2hUPeVxS+w?Y0Pe#wE{2c68 z+JGEsB3*O3YXl-^2%UDV2|jqP^#;P-v)pe8zsC3(cZ+6X9SFZ8OlKUy@D8nEuq+aM z%3Wy6B@SoeJ>ER#T;l}!hX|FB3uj1lAUeVlkWp}5a`fbvOL7OvEpn48#U4=+H$0*c z?Kn{fV#|BW@w@W!E2N$w`4Z{-&oTa2;U8oQuaFryk_#PNODEky~`EO)Tr=KAuQ+8iq vB7~>Ny~HJwdAU*~Yo>!-2b0Cqo_0@S43Stel|>xy`6^BhbO9B~Ni6;cd9wL` literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyHolder.class b/idl/orb/.class/org/omg/CORBA/PolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..148634ea5f4afb2ad7155e0406492532162d39e4 GIT binary patch literal 748 zcmZ{iZ%e{Z6vm&co6EIIOD*lM6*T9IQEwHYd{Yn@6}^?ELnhOWF%7>}L6P*L5738- z&ebVxC}W4abAIR9JRX+&ati5sKSt_T7Ao}F~rr<6N6B9+JxuT#XLvEre_*$hO;Q+I-YMl z+opcgcL)B1Pgt+QI}*(o&+5p7$DX68$RvszOcUe)e3PnK@vV;Q# zhd5GD#Ib@CWT9}pAR#ggU_{0)3jZ#DNJpt zE}b!COJu0|d5D2kwWTs4s}{>lPLlhFbGjZ97*^{BCW_difiVBSeS*DF z0+aH3P|hJn4qGKV|2s{Qv*} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyListHelper.class b/idl/orb/.class/org/omg/CORBA/PolicyListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..78890630db036b2d7a45fd0127965a2d6bb221ba GIT binary patch literal 2108 zcmaJ?TXWk~5dMy(M7DB55~rnYa6-}>w%o>T3Y5mVkfeo}x}-EAPzo5u5k^6kjVzbu zy?>&wy!16(#`UyArhQ_DUjwfUQ`jS^z9>;&q@%OD-|l|#qKF$}^|69A1veS`O73pWU^rf^I+a}YZY8&}c58Vlw?Vrr)omls&_8F| zrn|r(r8Aohve>3qsp@Po98G6JkrXb1OuKG4F2nhB$i8In=I?~|ZdNU`yqg#BigDj{ z^fE=BJ1jC25y~*Q?&{_5Z|JoReakY4C#uo!ZR|jeUERgZZH6P{v7_J9bCzyba_g>R z+7)U-b_|`Y^Wj2jRmT-cas|8AaLL`!@8+W_Q}7AV{G(&K#M)vc)LO&sU_~@3_=(Sz zEpHwi9Je{X z5XFvmsJM2&Y}8z{YIEGdmmKGCp5qOqI3_Wr;46+aG8|u{#GxU}pmq{-d;^_fvT(IH zOTwBK1^VLZ_{?6MzMx=>qYN>I!+H=&X`J73RPY@~4(6+xHLRN9P=B2k*0y#GA*W*z zq%w^3rX>N>=mp0NW9f(}F^W(eu}FKq?n}NXgh&|9Mh?B>bRE-e^jdht;qnpZv44RtRke%N8+K8`6b+R|)u*ONa;;fe%R@JU}H(h~Y zE^=<&l!X)fjM43JDk5$7NoN@FZibhM<#a(PYaudocW^#LdyqM^DNoT)V2pk$)Rs7{ zv`WyL?hAUpNna!MX7ujU9)tZ%3y>q7=)gSe83DP4*q&!i;3Q53))SBsquoL6DWu!k z$B>)o^Fb0gjWdB;k>0{h)1IUMAttnE=x;(PW}icPh=J@gNWUSz_Xu)PYeH>dV2>gc zs&dM!_AJH5Ax$hRcuUkz7fpbCg$fYWpZ*2>4~(}kD7Elf6GPW&*}`yggaDJjf|Fg8 zPwJv>yuSWG zVvqj&JKMn@MC=8)f@#M7A%YWhQ(XwaE)$qUU@0xT-^4L#K9$`kBrThoY2o;T7$N;7 c2=oh0Aoeff1d^owFZRrge9*_JGoNn!4<|zmk^lez literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyListHolder.class b/idl/orb/.class/org/omg/CORBA/PolicyListHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9dea3509a8a296a3335fbf9e05abc519e2d9962c GIT binary patch literal 794 zcmaKq+fKqj5QhJylmZq-<=_#;BZrGdZ}AZ2MiUc^8gINH1sYOPD5(pEx6(u-G0_L` zp^URojS%X^&Tc2){5$h^Kfm5S0PJHYj35#Uk|8Kq2xAdTA}ourqF_})O2Ha~+|{j) z!H~SWu${VQH|tulbai^7UD}pe?G+dT2WHFUM+{OXd&}T2+BM>rG9Cqjk;{&u*BEv) zW1?-_;d;d~wDVTG!>>7E&4Q>1lph?ElWxYdq}1V~HFBBv+JjcIW7phJUbI3n=Fs2l&t4L!*#U{2?Y$MK)nnYii_x#MZYKFrQZRlNHv-DP7D^(gsl{2JAYkub( zjwnX{PuH;8Lf1cZ?aoRed3FY#A`2Qetm>);- axo1dy$Uis55OP%sD z#^sC7_@f-}Ytz!CcKGu0-o5vnd+&Sa=Fi_R-vCVDnTT$Ti5SO31YMXEX}QXmYhhgH z<{M$$#J2WUQ}UXbRn}}PXJ&a3IrEKS*$k5jPrkIdpYoVi z3i+JApV3S$Ygj2>v|zlmElnr<#Q*T#9^3@fjb&(5+ng6$ELb+LU0F1XyEYYTXgjHs z$bx%T&Zc%3nzAkL+Q)P!_7*ZV%PQx&-kFhLa1y3X-F)UzJ!dm4p%5cRcW_3cHRBBIEf4K}ju1IAzJ+H2$SJN4W zez)fsU%u4Eonl_Vx`d}7dG)ztT~#+Qxx5dIe9^ENqQ{!Ayc$D?o0R5?gvjrf;gn8F zvkf(8+J^N~(+$0Cyx**L97%O!6jUFLgMu0$tAgj zmL&?4GQ(A(D@fFce6-_4CA3m;ZPkz=$WF)%W#YLK@=vsXK+9J|pC6**d-4}z$)AYT zndD>%r+6uqo&xZ-$EYb9S%)h|Ogvpk_SfYa`H%m&7Lo9y4t~t3rC0uqAUmLnI^QEK b|3K$KwXFK=p%#RpxSo>SgrwWA+!+1=VQa^K literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyManagerHolder.class b/idl/orb/.class/org/omg/CORBA/PolicyManagerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..932587a905c7b886a7ac2fe770c7854b801d56a7 GIT binary patch literal 790 zcmaJ=vV>(KTHp0^#JW4|5hYV726psFeZJYUjAh6& zqKHY@ld+GSj64ox93sh(Utqs#n=Rd8h#_ytHEx`_Y) literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyManagerLocalBase.class b/idl/orb/.class/org/omg/CORBA/PolicyManagerLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..0a990c39ffda97a078f1c5e3444b44ab321cd3df GIT binary patch literal 441 zcmZutO-sW-5Ph4ECQW0lX{)vsLG+OH(5S~&1Y0jcrD8!44`oe5NQsH0LFm6y@B;+J zvp-6lSPw?J?C#9YdvA7TKEGby0qkQ#gNhXehKh0?3Mv|^SXEF^u%=*LL5(3lN@ln2 z$RAG`%2)jfzvFhmL(d*2u^)OJhTMT4`pF@KXj&HxQZE|2Wag5pX)O@x(6Pi&`k#$q z`{cOaj&8hG6nl1WaNa$#&!WJ0W~V&lo*TFKTDv;5w8VmrIvNZ+DU~FP=>5pyL6=Xd zpjwvpgAA@Gu9Gk{vRLLv2H6RskTO(E>rel4ZAaRo!Kt7@(Gk+hXtV+1_dPzGL~fQXjsOIhE=RF?Ef*qwl^@Gu1y0t_z%@ELW1p1!&>gpaBOq3 z6k7}-p$le*)2KN+!yc_aP2Yh*61+)ElCD6dJ43HL*(H){kX^m)4&1j$e zqICWI+;n|s{~#wv{Q$5sYoMlLtePw}aOglYCpfjlA8J)dWkIU7W*8#_mup3GYC%b6 zeqJ#<12-dsDmJTq6Y~<&Q;YlyQi~G7N*NghvJ%S@^>Y&Q()In5vQm>v7#U#(kR7M774NXr*2A1Uff=WgP2@Or3 z{GxRI{M>YXXa684NBsb>T5CoI_LS7(lA?T|BA|{iMg}=->ii2*ixNvR^Ye-s83eKt w%M$f-67$ma{gbj%lS|kb85kLufNo)6U}gat!@$D80Hj$N*uXS90|!V70O3|A&;S4c literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyPOA.class b/idl/orb/.class/org/omg/CORBA/PolicyPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..61e7fa15d416ed1046073a00e2c67ba55f89a228 GIT binary patch literal 2102 zcma)7ZBrXn6n-wrW|L(rF9q5ZT8q{iNF;r;)&$W2RZ;_qKvNNQUBYcx*zBg84K=>} z0{@AhN;|W3WPJJNjNkk}9mjK%g@gbz{gB;z&w0+-bI!MgK$;gLMknx3rDDH%@Eb^>~Q*_q;yQ*^PBVnH3U{|`0T^ld>#kuY=Z%tU*p}`z2ost%EW@2)2*f6e48b{jlZ(9W zmO)_`V-q>sDJShpIXRbKp3Ni+wrP|^U_934A$R&rbf2c1re;_!cOL5{PN{FV;|sRq z>Ki6s;m$61l7)OGy*@i}>XAZ*wQKKCg;(3*t-@Nt%lt{5*W9!?%efU-FYPSq)m4#P z##hvl>5|zzuZnjOQ?ZV(WqhOJTWDhQorZ0t zxQYgTP*FsTp}(E5#VW&Cc0QLPKBh!Dot&g@PTe3SG$WckFX*+cW?w0fR_3l&ZE~l% zjVc!f(>H&_PsDl2t~MCtO=_HD)9S+UleQ=)Ru~e8o-WGf8N$NBOb+q~p5s7>i>K2M0 zf2LGlOV~$6bgAN)3K=5y;b9quXqLL^q*DyF32P4~jUy4pa6Q%$a#VOb%TXD_ok0Hr z5Hk>_kt^zEohF6`JWFJ2wzI)7d}6T0_>zK;_mqqby(Ne1F4s(>MkPgK+3waY6?5dG z=!ou=>wah3!)tYusvYUBLSz#tx=2JUN%}NI*VX150BA0OTXPo59b0N-be-G(V&Mu+V|g;gw?}9DijS3OCAQ} z(U6Dpd#8YhQk~$a^b*5ogGcs6vlwpDvk%fMjLNw63fEX7F@!K~A2qlLi6Fp(;P1Gw w78ty^@&eKUqHFuO^a3F|^x)_Lde;K`81r!XkuY2lhG2)`O<|CHLyIN+4@X!Ai2wiq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyPOATie.class b/idl/orb/.class/org/omg/CORBA/PolicyPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..9a58ccd170780c989a433309f80fb6d805a23252 GIT binary patch literal 820 zcmah{ZA;r=6g{^|O`E2(^QBr}I^QE&w{;Am! zEaCIZ9WBof%o~(vHRQ0UK|@x<8%%1*V@|_73K|x$NXY%~5@G4+u(8V~Z-r+6YxM5U z);3`w?hSaNW1IEPjR6V8IOOH&u*%Dzf_MiK{IOo%7B!U2S>bvPZ#ho!Uw+77v~mZk ze7r^ClB-};!*s+6xx}?(T~pge6g`VSWD8NiBq0f@6GD^Nro~D6m13F}NLpN+k_JkfeyPG}JW7P*5ep4J zCBL9AJhW-YVcMBa^3<9Bs7}vHBDMweWmnpJ?%i|mJ$L{4_m95-+{A{Cam?tb;<|<# zI#Rf)<88d7;aweByqD+6`xDq zwN+CbGCu{5WWwbWJyv#P*Ck9XH`jE-q8T`k2@RhaSVob>=r3~JlS{t4X$K0{&~VSd z=U5RKvA3(z*^FDkf*H7vFAO}us=!z`sk={_c3V2WXJ8Fq8YrV;;4IE*SU2z$zBcd> z-xzouMFZDR643AauG8F8r84j>z7x1qztfmy+h-KBsP$dU?2Q?!?|TD3z|`=g0SgU* zVt*1{_>%3m?SS;V3|BTD*{Z{%{XWzPJE1DXtrV6lfnd_~ibP~a-B8^TxO!q6x~Q6x zS0R>HpZAp`vU%0_9(Oi<*K&7wo1g&3n$&`{O-BjC+zyqYcqE1YDpIe4sKfr$*A|x@ zj{?le$L5afdo9X8F(DCzS{-TG(rgFLmLr{A+mua#>&f(EaFR^VGz`c5E!VNO!yxOW zqmyyWNrL#{i|{{JUG8@|t|Annn!v-{`KGYMQz!WKPL{x6IEj&GdXi7uIG;+!Q%3W~JRGvfp$`268Nr=rOp%F+QVBnX~n#V<4imm66#sE);Dt{vNaN;@A z9b}>)c}(JR3~O*#uuA16vQJU0yg;@Ctug%)sizp6eu32Q$nF1(bfeONet^M!dT69E z8M2+CZw{&Af`&H~|0}o}N4`Y@iv83x7=PmeNj}3+2d^z3VE6zdg;B;U{04(&#hw-9 znu55~nal NufobFBS<7N<3C%)mS+F} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHelper.class b/idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4e60f1747ad7cd347ec4bf9e9505bb612a2e2496 GIT binary patch literal 1929 zcmah}-*XdH6#i~D?Izo;ZBr16X=y1xl3i^;RHSLEZ9y9d1Zk~e)wtbU<6_tin+?); z{s~@v;k5`8GU{~T$r=9|eRUl4-0YHM(?(zR-o59X?|kRy?=OGe1MoJ!Q!s&Z3f<1j zct?SRcNM&c3o_nUFo=tBdYPAz6^{!Fj$$!RpCxhoK*5Jt7N#rWcQuAf;^%SoMQ^9d8II;1x14eAlryV^n=8wi4SHR5N<7OjxM10qx5OZ& z(whuX@k~e2akm)`r_w!^WG;*>yT)CQfKxs4WqT*Pl@mxZzwfz*NlHf!Qc7>-7>3t9 z!~Fi5QQa`ME1W_n&pzX0`#g7Xj#wpzL!@!rxMyT4hF#9Ad#+`dg}uuSlBRlnRvp(9 zPBJ;WTK7nu8+WoqLPmk|^n+`86t>pas!;bjW`2ON1+&u1or)wTW!zBl38ool!nwZT zR4j8xuwUnQ*PKd;yTah6jCB^Ik*D{_}3Ti_cRI!QARD3R|jdx zvogL>VPISMFlCffaD1y`4(0y|k5{VPrHDGD3){E3Xo85S_gFYJ)J#+`kwYp$%Fk+# z3T1=L{B|q)RTEWYINi5Y9j&bB!$i=BA?s87+N<3kUFO88fjw{esD#p6XwG*7YC z>K?(NcRboC-Cf2o6^^@;@3kOdi2%RG@7B3(@}g%loKNL?rmH;zy?)yQhLHfus8~j= zg|nI3KPU&hggLem|HIXZu*pHeGbmypi}i|QQ}fW0p*A?vw|3oW6PmMqJamsE!%%B{ zU-^ipTKgy6*Gac=mUN>tv{EN%MH5*uPjrjZorapeQ}j1RC!=#fdj|HHE+9pkxj;PH z5(3dCBD*bV95Xl(NGA|QgkFcWUm)GmpCQ`7fDaPKEKUY$c{+ufroF)6LriJUG1!2d z*Iz(-h#~zsq^F4OK0-9FHJ~&xv`ZE;ahz$fJw>)LNK-2^P7D6D3IgPdL_n}V`4iON zFxkYg)WmBIj9jH_6QhYS0!%!CN^(J;L10N>(*#3%B!C%dfsi0E{whdXK!I?H^rK{T zoS+UZCVy4(($Zw|M~v!|S`&v04JpFi~u{4gRfF(l(H#{Q!G#%Z@?0;~&!B@tFq x)At&9U0O`)dxWIv$+;$uJctm|A0mG~&p0A~BSs(z3jb`VWTb-uMuGX+#=m56(AWR~ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHolder.class b/idl/orb/.class/org/omg/CORBA/PolicyTypeSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f6f13bc4676112b0c6c1156f53b098265368f1dc GIT binary patch literal 689 zcma)(-%G+!6vw}JZZ6jbv9R?wUeqh5`md`Sq5j9z?@sY52yt#LK{uL_DJqCcQN zD!Nx!I7R4ThkNcm-*eCTp0DrsPXMPlQXnH4Llh|m8%Xo8$wNlQmW*u~I|NeSbb1zn zP%RNe&+M*E&j})0?w&v_x=r>=(yAq%N;Tgyn*_(&wd=PGx6?9;<=e{(!*hLV)*Z_z zb-f;~P=<91ToJ83`Zi@Hw7HUUkA^i;jSf5}$!NK$XYSZN@2H?+5vqz96dAiJ_OP!a zivtyhNDySh&E2?;-579f#d^4Mou=gz#M@@yG#sDCXJUNa+h$zmMeo`fqjG=&h{{heD~Jb7GGJnQeu&5fvWm57B(J|f7()DgX&s3G;njFQ L;tiy5=%1k^NJZ6L{XJ_y7+`t z7NjyVh@gtYOjSS?F32w`NleN~)d%Wx%`3?)sbphhU}RuoU}0beVpaw=pof3}0MHXU AcmMzZ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveDefHelper.class b/idl/orb/.class/org/omg/CORBA/PrimitiveDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..430537b0d8bbab6007f488951bb1e45b83ba0651 GIT binary patch literal 2185 zcmah~Yg5}s6g}&gY+1y{F^L0h6GGY;nV_*ATyWZcGQVkn5^vWyiJ#q4tlUr6{;MiTQ9?#NihR}#LCV+|z< z-^jQi_)}OH!-j-!C2TT;b^B?HGi279R!wW})wGrM&EcGAab0ISK9$!Got* zEN+mpWk0mlv}~bVTWz!sY?8{2z5E$m;U|`9Q>?{P$<`0-W45ybi!=<&YCd7O<>y;3 zKjanrEIG-8M&$voJmOWo$25Nm)6N-@MHegePN67x50@ouDcHtU1@GWp1><7&0j@JB z?#os19Vk6lSBq;4RD08+2D|m=_F9;kzNugW*CgCi@ICG;*uf79Zem8lj|zV3F6J1n zdx}_})#tQ+lHB*oaM9zbEfod|!(J41AQi311;hCYRi({! zvte^<*QjvaCP_=#!5$mj@h9BXy1o;s2N{OCEvola4YZn5lD?Ymvx-JN=QL`cBs1`U zI4o2(-l+SDa&;p^T=Z_AZQ>M&w>FeckM=>APH70CH|-_tg&x+;ecceR;|aIALszBO zxUE-to!2Ni3=;!U_M<5}PV@#2>H8kkHNUVy(B$3FIQ<*O=pVx%i(aIeLUU?S8n4i5 zn7)j@Vf6*rZ!`fpQolOpWXA}Eju1HPSYx6U9qSDQJA0Ym5qyK;BjFZKMcR=5K#=wX zg5iA{gJ5aI#2es16Ap1O747k6G3gjb$Ui`+n3_96tPQy`qLai~S@jhX&k=u#I{wMbusoX21Tw7|c zjq^fEH>MB*i4+Az50S%_A|`QML=C#mnmxgOtVJgLoP)ndcoEcX^$o)8kQAk#A*%k1 z^x@cZBviWHKQR)(Gh|-k0?E8snj&kejZ7PtrVe}B`w}AvMdFDxqPXSBI62S(l%(#( F;(xts6PN%1 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveDefHolder.class b/idl/orb/.class/org/omg/CORBA/PrimitiveDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1e70e3c3e5e43874a9d981ad6e08d3abc24ae99c GIT binary patch literal 784 zcmaJrq3>;LesBgF#YEfSlaGtU*r>tRS$dqZpjVXm@)j1S>z Og#AgFKz!lb0Db`qPPj1u literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveDefOperations.class b/idl/orb/.class/org/omg/CORBA/PrimitiveDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..3029b2ce3716a3ba17a6bd7f00e17fd36af697ec GIT binary patch literal 176 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9Bmh8;D6h;Pl4Naf?qICWI+;n|s{~#wv{eYs( z+{}{9vQ%%N0&7MF6&%toscHTNsYQt;nfZCej0^%CgumV{O08SJx`~Uy| literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveDefPOA.class b/idl/orb/.class/org/omg/CORBA/PrimitiveDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..07931803cbdfa39c1f249f9de231e1d4ff4511a4 GIT binary patch literal 2624 zcma)8>r)d~6#rfF*kxHO@~Tl$w3Y^lMAWtl)E30nR3Ma4Y)aeh5-wpO*~QHUi+$Ml z`}tRNrk|?L1gG@%tuy^E`hPf`p1Yg(;@A(_-FwdOo_ij@b8i0r_m|%RoWTzY`f))# zMiq=qR773L_W1GR!ADAX*sRX8ZB*uo77Z>iYE zO%-qB9To55Jr%d`zJw1{e29-!e2h<2e2UK`d@dwksQ40JN%&eUzEQD^Qw;631H6he zoJdSfk5a9Mg?s*bjgAbTX6W^UNV2fK$vyqiJ@oU*<#nEMJV2*=uuG*YdST5i7elL- z<&L&tm@6Uy->Ucy-&dp#8K)Y!h!wu-q8OwVs*Y`KlS_^1tmhaJfFV}VH?d=C+tl+$ zCXwIF@jN#jUGSRWWCiX|L2{GZE{ZBtmq0H(22~Th*DN<$hJ!x(dq5(7--FM%!gF*A zwHCFQZQWov*UZndm521nkZ;=_y;XIniINR1Ky|PxfirYbRL$I>h`MTJtxX7;3shEy z{%GBns{1u7RX4ipf#pdg8c?QwU(|C&;sH&X1Wg*vvX>dU{VAp>seKyrOJjwhEn{=t z;abipkV}zhqB()Hi_@f{-L1NvEeb|ZnIp|#MZ29@&Bx=D2P z`#fQaS$e$D=LQ>9QW$1|+vI-T%=2g}Y%~qi1`F;SQwr2%HZK%&WTK}zGGW3E%WJqp zzOY1>iwRH89%*#8qN(^fyqE1J_bPkbGv!)i_xaAH%R-D=>dtaLPc)w1sIU0o>zh4N z)VR}&o`^w=3v3oCN9XJLSZ3+}qH^#!-OBx7cmgd@#9cuD4HR)5&^t_Wx-{rHOsfO* zX7mmX?ttB<5707>(`9v6SuK;gm(N=;lr*->iNJvXKFdB}8BcXff7>a~T=)AoLxXTCbelWPl z2Y&Ry;DfhCb{U?cXFJ08aah9B_Yq~WSgZ>&&R0uv9U;O1Jp3CX=|IP!R65vkIF$}{ z97)|pXcxWd9UQ%jFeR+x*e=@AfgSXfaQvDOoDhOwo!~Jc2-OKr3PHFm@Jf#V0BGu? A)c^nh literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveDefPOATie.class b/idl/orb/.class/org/omg/CORBA/PrimitiveDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..67e7187ab0c8392e2bda1c38080772acbd2201cf GIT binary patch literal 1058 zcma))Z*S626vm$mg%;Kc19duO!);E=lumuOEhhW(#z+Dg%M!8|O-C=yon5<>hGgH$ zzcHHV2k=7~&!rF&DQ0PMZhD^Iz4zSboZo+b`~vU_J9#W(JqH~dGHfp34xY-eCBrir zYAOs3bq(7Zo~wAFqM^cM$XO2exNAq8VXGO0t{Ggp=27e9@W5<`;z~qf$d7rybJv`x?UU9%H~!goo{?h9W;Zy1c)?G7}~7?h*Hp%Q8}<92%( z3YP78mhdAU_U#_0a$ZmGYX@OuUwFL3!yymNcI#m8{Ln}&S9vddhhc60&F=`HcPY`$ zHI=wB1D;Y|mQRf4@V*rvSe@a>M(GThI6hHz_#g^{8-{dEnxO6XypeZ0%Bbonpr~UB zB^?j3qT>-B>!@H=#~P{(#ecnLSbuxm+@%IKWFu#rxcjoP!%&%pC?g*c>#GU+N$cX0 z_o5i6&L0yp`c#lfmH#3PoAdSQq~Qq-^CB3HZ;C#0gQh(%4WU(|d>MBs-lMr)$57{=d|3%QVx00E?kQm=rQXuVskwiFdhr2?Y$7B|TP3(IayHlbLxYSpS$ z>*a$V{NM*aIHS&pt%_r3bjFYVGyVb2I6m)tHgM`VnwjU>=lsrP&%S#$zyI~~FGRGD zK2FgPHP`~SCR>YbgY5*{Cfkc_C)r+NdztMOwo`1cvc1OkI@@WsH`v}}dyDN1+uLmK zq-mJmO(UIUdoMxn^Yw!SolDS%ijt+;TFGm=t|B$9C_CwUjllAPMaym4QS6!&C3c1k z&-nG_qQAaeoSdCIbg+1=?yNh3)3T2^UUh%CTFZB;JX7hJ+*Fj}`!rVkdca)~3~jf= zS+4Ibb5~T);-;cB&uZ>Wi(#D|5U$y5PmJp|r5*MyxxOX$>(G7D4p*)E&9W;`n9!?g zps17YS@wO`wmjZY5)*bwxZBE#Rp-u>-Yqx7d-|2YmV2i4J*ACNysG7G@}y2h9lE6` z!+c@0W>5N6*-ZvJFc4k|k3gZlic_;(o}a}ulZ8*z2rx)$*rlIHgRs{xuh#7)o}Saa z8iYIGBDM>e*E?vVa0gP?_KxdRIv7h<2k_rtcJOZ*m2#qs&jV3cU$N!jE>E$S}m*STHbPTw!CUr0(=tb zsS_2u7C88>67&(aFi~;CWw5oy3{`0)Ls!!^8M>Zrob4vITi9-6yOZr6wh6ZT*$%Ny zu|3RogzZtb$JiFwo?v^5?OC?x*(z*nRL_u2OBq@rN72xKeAGM`{|)(nJ{byl>8u() zZ7x%B`tZz@7dXMDqG6fk_+d5X0~Bn1ryjHye?-Ihf4KtBJ4jd32=ZPW&)!_TUQE}n78~hG%yaeHQ8T@W= zycgm38hk%EUX}3s41NF{Z%_CG20sXn7b<+x;D^ESj)gyH@Q1+h+J#RW{1I@R1mQCV zKMIb+A$->0$G~x3gwGj#9vnwV_~Qm&1jnfo{-nW=gX5qHf7;;BfaB~5f6m|~a2!YB zmch&5IHBMX{w{Eh<4oYB!k5wN##J#L|DM!02>1u)GaPpR5qAH!=PT*^Rh*~~SDwBG z`A`GefKEcEpwrM9=qz*&`ULtE`V9IU`U3hA`WpHcx&UoM7td2<>pVrF7!-#(pahhJ zQcxP|gfdVT>Vk4m9_ogApkAl|^+Em6z?Ry=>WWt3Lp1OwtwjIzM=}07!-wxj%_5kP z9^a-AKQqTH#X7is8t zbek@}KoO2Hi9+KNV@x|F#yKV=c5qBeOmNKW5lP8k~5M!C1)jP vBzH;9O3q2{lAM>EliV#iFS$o@x8z>QJ(3HOdnNZtE=cZ|+$VWJ7n1%4Z{**a literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrimitiveKindHelper.class b/idl/orb/.class/org/omg/CORBA/PrimitiveKindHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2a4699034d163082f121e0d39b10a1375bdb0473 GIT binary patch literal 2345 zcmah~>r)$56#rfF*qdd6aDm!~U@5l3qNJtP2VfN_S|pXWL9|wln`8+KVK*)t9=_`P z{rKh#AN=fB)DC5IblOkO_%Au*cNushAp{zCJdZnjz`9Q!s}a;v<%Ac^4TXy?wI`Q7NWR)^T$T z9ld>ZmSirCEPL5>J%;nWb?2k@`f#1-s%tG-p0#35S$1JqUZR+5o@?aEe()gs`a8o8 z7@9Jkkzc%GlxK`w$)s2l-{76c_wn8H(gv%*&`uf)#)^?D8Fn$1@m$L;(u1O|Y0&9- zJ)N@Sdh(Lgq+PCfq;48Z!-w&Ut-6*+L7ezcZ_^cT*WIDv;v@NzpCk?EFsNWn!#XZ7 zbcd4~3e#n$R4`p>@RowNHN1m&8ItC5%Cid9BA`@hcn`NUypInU+IGV-v6eT>p5@pY zKEy{Fp24Vw6wZ=|U8Nv)l+5yC)~=LF!D_{kQRXCDo~PIa!jfYb84@I{RHag(5{Tt; zuH+b`D>VvEh2qVi(mLljCDX72C;5594Lmz}&m`?QX&Cl8LnAF}d1laPN1?FuR@op@ z(&w_D=3wpQ7F=^KFp>lU64J=$6KtDkD_1o#lH+PXK=N9xIh1-UMyXajfS$J;bVNl&@*`{Jw#nNAQKmKVn}W1+`w4{pKACFpDXx6!Gy zOZ03%xs&y`hm?szPuSNEg}pP1+R>kBRT9zO$-dcWH~kR}(0?Kw%Hcq(1g&X85uT@A zD}5P#WBMJipJ)M6qz|>-P}fK$m_O@hvFn{(FdQpt1ihBDcXee?&B`Z$aHg<0e@s=tQ^Ac8F{_ zB3)w&h9&;{BEqfTmCN1uZ^*AR>Be@ufjtJ#441 rd>$ufecRA$8e~wqljuWh17K}*!$+J1BYcnae9uIQlI)CmGC8HH4c63jDvDvbUMW`yG zh$+}nv5TCFJoZ%VBgv4TW54P;rsXljTSni|9i!9KYmJum$fsz3o5`86x z6Y3T}z+S0=;dt2}rxBtDh>3Br^p4ONvx2yfN%@#)u{1#VA0&a*Nl2;qhR^`gSY-`K RA0pHk{Ye@?ei7RMegPd^y8!?I literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Principal.class b/idl/orb/.class/org/omg/CORBA/Principal.class new file mode 100644 index 0000000000000000000000000000000000000000..96559ad5ff829d25be52905728cbd42368daa6b3 GIT binary patch literal 296 zcmZvXF>AtL5Qg7NjIq&Hg@VwnTjKIT=Tb1%K~NKl1d2oX8b3lr6A8ip)k$cf-ThIe zcTO$zhI_bspW*KG{r(By4t);}E?r!Cu!LO~Jwo$7FY@|%llf$^Bnk literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/PrincipalHolder.class b/idl/orb/.class/org/omg/CORBA/PrincipalHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..68d95413a33c903ccb9b531a506f14d55e83811f GIT binary patch literal 937 zcmZ`%ZBNrs7(LIRtF2eqludaP0fDX)3w)h1(S6ZqG6Te~P1%~I*tJb_H{-ujBh&c7 zAK;HNK6i|zD`}cGx6gCVd0x)_`|tN304F#xVc?;GJ9uPb6>BEev0-8pj}2_$i8^iT z*wL}8<0(NKdEw9}tiF%az7r4nPP=pZ`jzt`4We$4cwviBei1~0d`Vca8XpOZ?YPH` z4Xco%P@0?iUXO5)hb3_;y^GLy-bTq#o=JucT8dG2Kc|6YWvh_V8OnK%=E^S#Q`W3T zuA6g?t43P__pl^z7edFLz&;LiSON`Hbl3t-JkxO~@Enf75snF)1)F#ihdnncV`-?4AhAlf7nD ztMfc|oNZMm6Kb~#a+XW2%u~+W?}CW!74lP7xSn@m0%Llm?@KpHgFzsJk?+bb;V5tO zwPvf(NgVU7Hb5}>CFLmJc#ThNFn^c%uR6(a)cy(j#sN&ym1(+;5jsiB^!M5@v+Xx~vDL;tFp0saHIQ{7$w literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Repository.class b/idl/orb/.class/org/omg/CORBA/Repository.class new file mode 100644 index 0000000000000000000000000000000000000000..93ec97b76ac0651cb308be0bb7cf4ae4de2091aa GIT binary patch literal 217 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s28sNlbp8C?bbV+4ASXxtpwxo= z;>?o#qDn>vfvm)`ME#t^ymWp4q^#8B5=I6kT&n#GQi~ExGV}9_85zV;6*=eUl_X~7 zr4}(Vh@i^AOjSS?F32w`NleN~)%SGqam_2qEU9E;WME`qVqjrl24YqQHlTNa005W( BI*tGU literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryHelper.class b/idl/orb/.class/org/omg/CORBA/RepositoryHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..493a665a9132066eb9a8c7c8ee656ffb24ec0a84 GIT binary patch literal 2163 zcmaJ?Yje{^6g}&gY+1pMalnv538BT2LzGA9BTfTO(w4MwLz5Ir`cP$iF$PEWC`xI5 z3jB(+oiS;dY0DRw;YW3P*Oo0yj`L-;+I!F0b9e8N-v0O3-vH+ENX9sB%J>i;#c&ZH z%QSoVLOeEpF|@j2 zR<&*0s+mB8Yj(pr%nQX5|JAmPGJ&;|!2SaI&{T)T z4N`U64{SCpTd3C7&E|nkGP$vrKb0x`)T-H3<;qa1%>&!zI=!TbX;@a{DZ{*4 zm+jM~BoEB;BVK;OD|(k_VF=IesWnBH%Jp`0D7cJwC2T9$!BqwC;F5v~F?%1^8D#fJ z6?_Z2k}Ki~r^#^Mlc}u~*7UoDtwNDu!W(h%?Sow3Yt|+Fq(H~d!2;EMl}`%LQFk=({G(lMjnRW&!Hd3-(GV-==6n?aKeE!Q)o`cr11*9jnb3R zGpxP<`;8``L~^MUPPT(U=oo>cb~GkT=tOTI*j~&0j^G=N9*eYaD$;`V2ZFRF5Df3p z7z9frCYM5-BQ*K0yvwikQT95jEJi*Zc`_SBp&e1qXkh@S><&>KlaF5h+SPLsb12>7()I zNT_tWe_||vXUM$7Ig)w4I8D)13z-%!OdoZ%_asITio_FXMDc;=#wmd|piAl;EdB?h C(+#Qs literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryHolder.class b/idl/orb/.class/org/omg/CORBA/RepositoryHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..03db3d7a97611f1b1e6c3d5ad24fc5a5e6f4da72 GIT binary patch literal 772 zcmaJYg5}s6g`U{vc*!s9~&vIv(PY zhItJO43V7Ntq6u*!*+@pd#jk4TUwr-$*j`uoLvxEhUm0aw&Wd#P;z{YA*{A($=S|2 z!|CLB07-BKvdUHANQPuG5T7aUW{nMV$IO(>axt?a9jjc-DrQZ*la84u&{!+bcr%Kj zV?~J zZe?3CMBX}~?M`aos zo^U+H5<{1$W~5c{Pn7!3@eI#7ma)Rnb6oj@cX?5fmR;sp#m^k$NOAO{Ps19=FL=T6 z60bPE#{kC|k_>!VRP3rHZD)6(!0{Sy7={<_8&l+;2_?_-P<__awFxrvuN=Q2sUgSl zI}C=w##-tD^P*G{4i#~%b7_4;D0g%>qR4P`XsT7pj;)&+fKV@p#94o*Y2W0tn*Z;58HbTD}`mJ~Tlxhz+8ZKi|;=j@2O-i~DI z#^$WfEm~!Ab6jpJE*dq4Gl7Zpa%gC~ibCcpjRNiy!WCgFtv6ZF_Dsjtdy{qkRaYjdnXy|047< z{So0BA|6Q`Lm2kc3|duMDs_P9dkmyLBU*!Iqz@2!kM{Iug#Jcs?+=8HR1Nw*+V=>d zk&Gc%?FeCG2o20?xTy4B!l=(YNdlDmkq_WsaGpedKt~PVE$*XpA6s7@K_!-O<0`w0mOtAuDOUBhXw`WUV> NbeO`3FcRX0@jrry!HNI? literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryIdSeqHelper.class b/idl/orb/.class/org/omg/CORBA/RepositoryIdSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..cfc95a9353098eb99380a8dd76528c3801d3f253 GIT binary patch literal 2098 zcmah~-*XdH6#i~D?Izn>o2GzJ)6xRPWTOof7234LwxEp!t4*yUYTTyRxHV+MW`p#d ze}Y$EcrEIL42~Uma>l<#UmXWMceCWjCe@eSyZ4;)onPNM`}>QhhXCfVr(qm(8ZO~2 z6>n=$@Q#MdxT0cS!yp#Ibdy%GC@+^ZoWgRL9#`e*T@5Q(m8NU*^I8bk<;Qy=ysu#$ z85JK$jT;)WxG7H`s@PER5yL><*{=wOlUd6yrmQ=~)Y``8>Pl*hZr7|`k!BcNG|Q&5 z%%H>*+YCW@O|QIV?=T#XCw!Juc zI`0pnV%d&#lFF1THHQKh#+`J(s8oDRrTyME9ja9NNSKY9)5htOoUBP`u~2gB&oO~X z6`LG6Of#JA?$@TMSXI-p?ETDcPTXC$O1r|ACR-{#;n>Ef3=vUHIp(g{Vd?|NXSl`j zxr}zKU5D%U3!>tfR+-~AzTkKRZ*shb7{?T*ReZ@2M}p%kqupgB@>2U{y%|o#`&h`9_-v?VEzRP;1hrKQO zb(j;)?ir;Tc^fMb9UYN3B{%a`mz**N|9rMkI!Vkh)m@0rMy-2Ajd~uc;%-fp3nK3n z7%s&#z5#Cyncs6uK#cLAjFM?oU7YQB?5j66_#dv$ber@`pFxuopRbjya?#y$ z8HOuIcCWK=efNiNHd`(`=bd55-48FF2ICpYt%W1Kb{eO9E0fp`PSffir(X%BBgd6a zVLH>+pyz4&8l^X*_kjKc>@giciZs%mIN}O{U;}{zR~p6{ob{xq5JZ4(hxK2e+)6${ zu#SNyNEqiZ5E4YkUM5NV%@bZF{UBLQ5!A7z*snOARhB1WKOmBv&>J|Bd!VpK z|NNP3;}0Y70$jx`V}DVB!?dI>cwm2QXri^`RGYZ{K(ZW^b;x7*DULww(E+v0#Bs&Ah&#ExBy*sMMPmj9Ky&rOSAORuRmW$CKi*Z}0Yo8WHktzzLB5ftjVD8X+?WX!K55+KU~!HwiE# z>0#0~x>gFU$XJSF^fiYFt$@+O3s@oghR8FbkCZ?U8xOE7VG+uudRXxflg32AWCA8x lD0UJ1gG^$oA1M}|5bZ+w*=ZV?07=tZHWce3{vg``z5rt_x1<07 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryOperations.class b/idl/orb/.class/org/omg/CORBA/RepositoryOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..467b457f5e94a4e3cc4edcfba77b26aaa666265c GIT binary patch literal 691 zcma))%}&BV6ot~S7tL9md%oP$xj(;O-vH{kuyAJK+(MNgKauin9t`-9;MVSr>4G{FDtyP)iVMGS z)0N71C)V2Wxk#f+e`IfdTqn0cDuYCD&lg4)Eg1O$8L+c$@n%MfI6 g02s}}iZq9Oq=z_)w18ryC6ptr;5gC~oEifD0A9kyivR!s literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryPOA.class b/idl/orb/.class/org/omg/CORBA/RepositoryPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..588ed97bb2af478578e5ca7c932988478faa1645 GIT binary patch literal 13569 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 W?V)^3Q090j*9pqpGR1wT2LA#6{C8Xc literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/RepositoryPOATie.class b/idl/orb/.class/org/omg/CORBA/RepositoryPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..e96a3abdb439ee56fe87b0ea4a61026161cbb5fc GIT binary patch literal 4271 zcmb_f33Jm%6#h2xm3Tu)Xaa5$?h@z19Hj@Lv^k)42_(b;n$Y6P^2SwSOGcJMLQ60H zP|xYOGxP`aM|JvEhZW1mP)|oQPh-7r-}~ORyZ-y1KmP)71uy$?7GL(^3=}DHah!uH zMP3Ra#kLd$DZY|IlVV4TT`7uEl%&w5Fr+9;@l*;^ii#AL6jdqqq6S3J6;%+GtG=%_!?cuKQDlUcafv#i^E5`-+CKTP;&G z40FlmV1jg(4Bb*RUF0du(SoqDs-hdZrYgm(bx;1< zY-%OV()K77^FbqPp6-sO=bJ3mwaa3gxDBYLpn_&Ac1;+@lj)#ur(6#Fhzoz_;U}8$ zj~tz|V9>KKo>qmf65ngdbf9$UJ!JDhCJ*k{=3GNeF2UT+8U zX**vu_8ZG8_ElkTaSTtp^dHPX$JxH+`EzJ^`-@I@CwZ*@U%To(+n(bimKWREUAh%8 zoNl^65#;be#t@~`#4-&!YkQOO>J_`87VY~QM-ops&f_hP3z+1%h!n>qT;_Cdt>Cmd;f%5euP9CvY#V-;&0 z_p#2A!3M_zJmh$U&p0-*#qk)Qb9{j()IY(CB?U*7zfO14i}EB6-cPSzzIch@R5Qdo zs7(iPvKf(HU(M|Z)p7xi=e&OdrhDXuMkO5U0AM)VPU~Nw>5sq}`dh&0PToTgC7k{% z^vj&ndxE|vF-3BkevR4)(oX*YHa+t@dVZ#_Ankd~xR@b&Gx`>u{tZ1px$0TWx$2|z z?xnAxU(oAmsj{y2xa%M;7thoX>VXHM%C`Z9eGqj<8&JdtQRlP*jnxqKLDX4oKrtUg zo#%p1P*5@~E{TuL*3j2mXHKoz4%P3YsCQeU#%qZCC~EFjv?x{Fr$x=*%G3;*8t_fg zbhxN7gy{hW?W~W_jf84A60Y;7337o6gy;bV9NY3e)Je8aa%J3|NHh!3RQqpkB1 z3TV`KPJ4_CokW}-V9bquBs3CEL`I^CSfVe{U&HZuJqxrabs%!WCqnyH2VlYn(%$9* z8w)Bc^`>7b+WlPED81!O_e-`ljIla7+8kSB#u=QwA%<)nbI$G_;CSQ}CN_JAPi8hl R!>2Nv;o;MnU(xF6d}VNiY-h(Nt(P;fdu2E}gV zA!QYpJ}L%lPUkd|z8ejFw|jo^;n+R@a*YFZ#9%RsQF0YTg24*Wu6f4YkPF}asAM2~ zO`$635QR$qSLv*G8YH?>Sz?lgq_&w;JL5z2dOS>#cm)(0gRLCtL}Y=Cgcc%J6-NV% zwJ%cL$&;t6R(xR)356qVF<-emS+mr_K#drzJ99T;Nk{tr+Bv=HDjDOR*AGOWE``Br zj(9A_Fm6!kL@S@e}YY6%LG68N2u88l4f;T1}W9)mhf7^x&Nb&AN< zlWAv?3cMwH9EIVnbsEsm3`)94%%BoWjJc$J?RjfYg5xe6g^8HX~QB=e4 zopIokGyW*YyGfvJTKtkt_TF=H?%i|u&)*-v0GxxVV;_ceq;W>WSsekK({UabG+fjX z#-%9jT-GqGHm~T|i;*ZjGEt1;szO~;d)L+DMg(JOXFP%l9XD}H$8FrvFsWgRA(WLL zDuQ9ZQML=|@=_r^G5c_QEIm)V6Xm?fFoZ{~k|nP(1QLS_3_-O`OSWt;GVDnV`j7-y zAgi=2Y{`&F_~K)w4;kZ)xoW11W~q>#leSeVWE8U|-b>re5$I$q&|ou)p<_;(xwrSs z%DlN)6x0w>=2q0(q^z!{HY?Atn=+b&5Z)FhMTh+wDrH-$pQNWsl@&?4g}Ibz$q;&H zTatP-vLnUpimY)oi%{K&jOL0?<2ib9P{Uo0X~Y?N8xP9u-(v-@-ya=;CPM~3`eJK8YASMAtlarP%UTV>=2pwCC4iyG-Nqm!(fQ}>e!~7 z6vc|LNq$Y??BW}te9_&AA*<1GsU|5Swr-;jLR}yl*PL1R4Aq%34D5JTwJgV_G0&w9 z=o3w5+jdJGoW^a{EUwVsV$EXdNOEK;DYBOGS9aMkm=flnux;vkBa)pPn=?N#ZI#H! zQTbMJ(U39h_06K2L*v?25Hee_ttCrZt0F6N3}^fe@sj;&>ZYpGE5IyT=CVVw(Bf2@ zOZThVx_kcft7DDDwrUAOyPD+f;`?`i)XyRVcV^cE1^eg%-A5NPd0tHfy+!Gr=8>L< z=&PGnMr$bf9qco`fD&m?yl|Hj1cK{mTXUjO9Klg9dH_MR(QZfbCjw7X-w~`LZCj^aT75X~b*9f7Jj6O$gKVc&X z#K$!pSNcz2z+)aJ0ZM)U7x3RWL?XYSql#VA>*!oZSFD@(Vqd{2tkg3ossPv#Vxfz` zW9f7_C=lz}s*!FGFW5t?60Z@}ZX>mokisc1Ax2@95KgA5*yC0o!Rdw$Qy3veLfkO^ E0dF3@S^xk5 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SecConstruction.class b/idl/orb/.class/org/omg/CORBA/SecConstruction.class new file mode 100644 index 0000000000000000000000000000000000000000..093316c4e259112ebc83e73ae0f9945dfd713def GIT binary patch literal 130 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gv(sejX!(KvrT|qJBt literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/Security.class b/idl/orb/.class/org/omg/CORBA/Security.class new file mode 100644 index 0000000000000000000000000000000000000000..485207ccbd128b39c83a51ed2f4ea94308081c5e GIT binary patch literal 123 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243g z)V$$c`OEUBGiWwP1QB`@m_=Hpz zq%tyypo+r`RX`Ok$S*2MOv*{s2kLXpE6FUWWMgDtWME=oVPFPgRt7epcYpu@8WuTr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SequenceDefHelper.class b/idl/orb/.class/org/omg/CORBA/SequenceDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..f0fce0756000758604ed2daea171d85bed2e8e07 GIT binary patch literal 2174 zcmah~YjfK~6g}&gY+0!t*J+&wTGABi$Z4EM%OegcP69L#lM;uPhKG>ljqBEtjUrR} zQ`%nfqIo8O^65jPkO$g zo3(t|w(4e0h^U(f+_D+wv%dX`=Hr5Ismyon&snE4kxwhK&G1+UXikP}(H6Jl7`subR z54d5!MohA88uz*JkXN-n(e+b^c3)jqblGThTSUP{T#`^$u!GAA-oTp*CdKR>TxE#6 z&Q-xzpo^K@Sl?WtrkfSb*K0gi($f6woPsG_k#JYR*SM!(7vCtD!@PuV6@1rwS!B5C zX=RKME)#AE#ySQB}krr>{7~eh2jr~?b!uJX^{J=2o&2?#(pev}r zV7Tbb(OgMoyIoOG1y`_#8p9=Tsw?vrZ?w3@kUX|T?{XPNy&$q3^{TiAhO-7Wqs_It zX>)5&H@Ie#pq1>fv4&UtSMBnvZ$~m7!${AUT3^+WJ)K_k_40sK*z=5I&jCqh=&Rwd zFkJRlJ-8*838~YBWe03ir$D@op>(}D0F9qw1)(?XCG3|T*6IhEE3sP zC!Qjq(&_$=u>hVR^Bm_$=K0bLMN=JQIvAfh>}wxLj35+=C(?-Gy646zfi|E^>K!cp E2hLIs4FCWD literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SequenceDefHolder.class b/idl/orb/.class/org/omg/CORBA/SequenceDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..554c3f2c527b702c41a8870ff4b1e94bf101d468 GIT binary patch literal 778 zcmaJ|7d5>}AAM?d=p}uq5+u(0R^K}(h^ys$0-2ZgAJ>kk!U@+eUE9Yk(7q-g*jr&dv+Klua@WbbI1C8t5pTdP!uE~ zOW0FT#J++O4ip?BLr{#ger20o>Jp>|#>mi3!|Lgc_JDRgf>N0D=V)q%n_DPMO@|8$ z(|~G`ZbJdh*$bbM7$jGZ)CwiHKx=ZuJX4&o%OinciM@o!$1ax0RxC|cSJ+p2GGSfq z1LT!8Fd44~;~Zk_0c1YbD({HRFl$H!m~4PaYLzkK{~&3s&qFHO8)9P!GnEZw0ti`%fN;tSsf@C&IWwJQJs literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SequenceDefOperations.class b/idl/orb/.class/org/omg/CORBA/SequenceDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..d254e90ef692523d2a922d519f4e878dbcee426e GIT binary patch literal 307 zcmZXQxeCHi5Jm53V%)XW#=<749@tvBGyx%?Vk^;%L5c6VM8RLP@B{oP@fj4iVz@AK z?p$WBxAO%+3l$4R3ndF>f;m$M84%L8;}Q(pbtZ%&N4#bkPvg^u33b~Us9h-3Iut!` z*zJh1?)Ox{Z9?^vod&!h)c$z4KX_O)UblZ%y+)7R=6A}7w+EJU?(@Ri@Xn8yO73;y x%0K!d@?|Kz*^1{eq48~e?tGgv1VTzzT0g)v^r0|;L^Fw6$R?UY{;35`;tmSCO1l66 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SequenceDefPOA.class b/idl/orb/.class/org/omg/CORBA/SequenceDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..f8eb45145367661fbec9bd77d07d1d54b234e901 GIT binary patch literal 3582 zcma)8`Fqr45Pm~MBFQ*1l=;J?~}0`_cLY>Z};+6mGJ;H zmi6#9T8tQUe(PmLTtc4=1N(T>&qfJe24p0W;`FBLYUBcBWYM0 z1Qb*XlFKY;IL`Tgr^rr3T`4o7y{?o9a6C{b@ZJ)m!vlvR+>0Qxm4~ z+9uOfEs;=-q@|m^T2!Y)R!unBkuoiv5ZiHx#^yw?w?H;2pdxpmK6bnwwhG_8pr$nz~xsx3jzV1Wcc}j#dgauA2(p#|H{N z#1Ro6Dfk#i6?}qE6&z#nXZT#i7Ye?_R|>wyaRnzB_>F>Z@tuP2aZSYB_)z_PKUZ zZqbJN?5h_bt8v{@ds69SjI&9hUB;g*9&*K$UmK$*^Z`9-sTLh6pdwGE#`Ip6v!NI3 z$ct^fV>{J;C%D>gBx3@^7}buM8WAvO@@0GKpQ=+p#8vxBw`C-$4H(hZfkB6(#w{mc zu?x>jY5SmV+92u(&wV)Q5}?=}siy4g37D1Fm=2J7a{m7wu|-eNA=LBK`)2CEq|S5r zWSv~QgKPZ_SE%W8bbQU?bau8m1r(>;umzM;O#VWoc*-Y=WMXpByrLozu%yakl4C#N zB}b#e3(QVP9t{#rqMh7Q_5^ID38<#b9x9sr1k-4v!ke633SB@+)YLUgR};n%Q3_YJ z`t!GaXB(-=x>z&gX)am187Qo z6RBjJf+9}jR^~=9^`Ufvc+T{n&)ygn;JHY7pB!n|rmc2oNLIh=b*69lI}l=2$_+ed z8Uu!94C|^DE$~l~1^ZLQ(}Vwm$V7r1&Ka}GWK z*0cdVX4eLhnW`VOOf8zrsN$U`0%qrxOO9pU2yr#Jc69Daz%qZNOv}gAHMVc6)Jwt{ zYT-O0*^x{!_*yZmaA_>Pj?-OVoOv;u5t@O8Ed3YjnsTmuF}W)CDoxDb1$m*+M+es? zO;WB!ifGZ~8l9|n16%DsuRvNSTiVGj8cb6c)O(93J58=@LH!EkU4<)=}R!ORS93UY&78K?*hJ_8G8jfjEAx?|)j=2V>oASUn zdpP+5SaOOhNWd0a%OPJyrHIz6s23s|BawBHNI4|jl`Fkb1PKS62%W<%-9=?po!x=5 z>dx+9Sxx5|1jkX^J&MQ~gs3pemX4#OyJ!^4GN{|dg5@j-cmyk05cCLEvLNIUtYQJx ZQ_ja~7Dyh!tt=?@+N`l9u94Fq_z&5LvZw$6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SequenceDefPOATie.class b/idl/orb/.class/org/omg/CORBA/SequenceDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..00fdf677530b5b98001adaf39eab31ef3dc2228e GIT binary patch literal 1308 zcma)5*-qO)6g`v8CUHv$Eh%Adpg5t$EM1ed63a_eq#%MSMLbweGDN1vrj9}4pZd^M zRVuX~(2uHmCvh6omT;Ga1iiypT|kP?S(&7}1;D;w{7D3`={C+tQrVmbOzl*xu5r{M|XX z8+?}^SI)R=c&1~wiwsd+H=AvS@uR&HV#kF3@bW?ws3A zhOn9|lMS^j+$dC$Q*L{@cX>vxGDEHoX*w!?jtK;QNfbJDsptCf1Ap%KsF0B7^`AHhK8fCzPiRRGpzA1*W+gc z_=8IQgg3mNVD8%KqYfUL)QRc;DHyWX(u48E0zH~BFnSUp`lvees^X$Rv?{cp#y!GG z`kUw~h|PZk%ddPz=p*fd*l}chjfli(FPi^?&>5njEZ=u4)#8lC5+g50cT01P2-! z1fmfN*2D)Iny_F^g83Jdk^ig7BGRo$I`#ufEu6YltwmC|tF>rqwE7w0UM27c#?c0Y literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ServerRequest.class b/idl/orb/.class/org/omg/CORBA/ServerRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..65c6605b8c986d33c5bc8bdf7a978cbab561c770 GIT binary patch literal 727 zcmaix&o2W(6vw~Q)~>EaRVl6CE-i;mT#1BokW?$JNSvBclg*0muGy*7f5nA_gu6dV zyivk7!e!pPdEfVWZ@>Hc_V^571FII&C|VfCoQZi0$$qk+Ul#STWMbLG3WKrb`JUQl zNS4Yc45>u zOT{of*s$Z@e5kERsMeRt5WThtNj|Dy`w6XP!@`J-48|A=@!e|m*1_RXb^ma`c5Gt` zIU6&`+bAH

gGvLS75m5LaCh(TvQuH}$g%(N?KtayLys0W^<%!U&x%Qr)4Q7C>m?) o_ZaGr`{L0D{@`ghRF6p@NQ;u8(UUJs*8S?_HI9y;jSOGE!$tbJ!^Y zC4|;xLU0x_q57b6Z5|2kU^pjK#>IyF)j_g|hw}gp1Oa?p1*oA;2#Ycm#ak-I)7SV( z%+9RIABxb~%Dohs%u_L4ZPnTkZZ99~iqgncrbIG%dCrYC2i)-j9vBISl~KGQSsJ^Y o@DEs=D67LK0 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 VOjK5o_90x2u$zP-#3$Yc@D2D+$FBeY literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ServiceOptionHelper.class b/idl/orb/.class/org/omg/CORBA/ServiceOptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..8a2439dbf98612985edc849ad0ea7e6902bcd9eb GIT binary patch literal 1737 zcmaJ>ZBrXn6n-vw*<@J+LR;EWsTA8LK}lQRD#0qyDv{J^LA1WDOSqHSHf%D>1>2v} zU*H!$XmwIXXPowvGyW*Y=k6{gyMSNr-M!~L=RW70=iGn({o^kHH?U!19J3}WxMtwG zi4<;_cnfbEc*jH*@8)^(o`IYC@O=|!Fqh|2&0`)PXw)rz_Mu)r%3(pDEatFe;x_J> z_!yrUST;}-$k^&}R|=f1cl=hRv(>6BHSR4gRMvR9)Y+6(f$Y5Nx$2fcs#sbVNb6&6 zcE{fkI9)6ykc4ZH>upP435*vL_66^8wWb3Z@{#hLCVkEv=TjoPp;hHHAKrDkYtBYn zGF{#q@;!g#-af_y?xw&gdOUD;ol4vBT9sAhyIzaL(!O+Py_&qT+wqmYq*C*`JBseo z*{W&|nV)=DG2zmQh{ldOgaoPO=9}%HXco?6!oa5%Rxrt8#EV?>)N-f2DSho$H*nX& zXJ`nF$nA=9H=|atU=}{d7Z&beRbcEesXLFFva8&VXJHLrS}37x;VjM>Shw&MzP4~5 z-&lARlNPR`sOu^HUAHM45$aofCoo;RU7us;XEnL7`!Tn<>$BA0_ZEJDZQw@>4(b9^ z@l;}nW!dgZpLrZoZEQS{y49m`7{$Vt=u&Yj2DM9gFngjxHQ8ZXbejaOoY;>;ud3Er zA<|h4effxfUJ9TO&hGCz?H%4GsD!a5MWLkaYK7R_fkZTqfTu&{KasjW@eJu6 zGGUNBrf?~8t8>?G`pgTYo?vk1Ia0qPxA!yB^>Pp9J_h%QFi2x6 zU^`804ynmS1FviTmvJSEe3Jw;`{}2!{>BB8e2SqSURl}4@IFQgql{Ph4HnIsJuApH z1#yv4IPy`H;UESLg|UMi`Bp^6G47hY!BD5>C-(TMIn3aV$e}>9cF2||dN>_spTnE6 M3TsS8kVt68e_|+_7ytkO literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ServiceTypeHelper.class b/idl/orb/.class/org/omg/CORBA/ServiceTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7aa4199991ade9d998ff3e7a34cda63109064ade GIT binary patch literal 1736 zcmaJ>ZBr9h6n-vw*<`sC2r42LM0`ntC2HR+p|*gwAW_s%T5H?w67Hm{A<1kOsz1eF z&@X&wtrMAc#?epC_@f-3yID!HfM4$2z2`jVKIfe0+&6Fkdja4w)=dm!+C&Z)4O}u2 z!DSPl;xhxEn~39!Bu~CHa77<}W#SlSl3emh%;IZ}x~k8<(aX09%;}T)1QtwO!*vti z;d=v%29^Y3miM@>1dbPKZaG)mEaw(h?#|EUR(ZNm+faFd_^eZPysH9{bY@K;s*kx@ zHFsU$XgU)@60Si`wV_;3U^pGJ&s87ii#m{@9(k@^qR+8|d@@CWzM^NB9^SO;tM+y&a5uoDG2^^mt%z+qsHeE$51!>r~4m7Il?P>-q4N^_uJHOL9xq`j$s` zWpCy+huEL4<1yjPp@@|&uMP22OU#xke$gaOVAQ}3iDirljC2>d_y;dttW`FYs~rml zZc5z3iok$s75%H4KKN>@wbK7J9HSh`l2VdtkcxmNc(oMtXfQ-Qxq{07Uw?-Di& z0^^}X+CdjprLJ6N&?dRE{y^zA4|ann6t+W`iCfyQTgZcX6V+0Z)oO`uk-)h_d(rmF zYmKD>jdh{V?$gd*^E=?|{I*@$;%!3LyhK5G%5tpT-TUlO7;9@xcz&XsOVHYI@z)6Vt`*-03SDo&L98?ktQP1IC@_brYRgWLu8SoS%@Kl}h4IS+w(z&8TXUG)6zTay^aslYmdD0+C>m;E1+d!x@0 zZ6ekRlEef~2W|!K+AW)Xh4>SUWnUuRgi)A!g~${1PQ66r84^2xAzH{bVeX=LhX{i- zCVaMm3Kn>TPq^FNDoLF6kWpxIA8g?x>ZB>5D5O?`js8Sempn3_ER literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SetOverrideType.class b/idl/orb/.class/org/omg/CORBA/SetOverrideType.class new file mode 100644 index 0000000000000000000000000000000000000000..d0cb5e235cac1fc23efc374e03b8680dc6a483ff GIT binary patch literal 820 zcmah{%Wl&^6g?B$apJnrLTE`Jv?NfH@UX;|f>aVOA_YZCqDZVFH!+b*Vn^-}(Qkr9 zD32nL_y9f%amH9x%K{d2pL5SW_s;zM_3a0M$9R;7iLw%Rl(=glk3EalJtZn8s!G>P z+&A$+V0qAWdxLi0?R1(AS3oowt4HCn^g`M9CU1O=un@2>-`i-y3!O<7hHxwos|Ij=Z_&OuTUHv=5K` zp(Jg~eLM7LGT;hKJS2(z;UtA2xxS48Y#UdxV&l3Jn<&}1fi)X9Q54wz=UUYDErFH4 z`wHw{uA4=%R6{t;M#~LlAWsOLR0UDWwJSN!^qehj^I7wJC<_LPSb|M^nOo1`3Vjl$ zUBv2z_%-^RA-Th;s14R|7Rq&ctJFe8Yo8$A(*PTA$~65nP48{IOLAq(Ok#m!sy_ql zoFcP0g|-ljB(gziK-CBBM+_F||M7_zj*@mP!Bs literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SetOverrideTypeHelper.class b/idl/orb/.class/org/omg/CORBA/SetOverrideTypeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..caefb189a9391780cb7f1ddff96486eb5ce9c10a GIT binary patch literal 1952 zcma)7ZC4XV6n=&z>}DMVBD6{?8Was1OSIL#5Yz&R8jVH?;#=G8l8iZP!*0&9Q2i7 z?jg-^s`ql0V%_kXb>T~wWeru172IbS5gWO{sYmTVm&UP*2OJOah~da?af;7tq7^uv z%kdabIL_fSj!*C@A?zA;E6BjB#TBcvT3lW(6^e9RC=_;%94C?HFp*^#Rv2=8hwmAt zONH_r_2{fjr`xBB;oODU^BR8Ou<)Y>n_~?%$(asy4uPi!)B{jZcP7j1KXFD|Z&M|`# z&V58Ao+-_&#?$m{t2#8PdE&>XA?h#5)++ z4z)>4;Z&qOhByXDI%K{^>{0d=;%y|lAW59YbYxbhU7DHZdkntBr1=hmZD{4}d&FMi zQ1%^Se?Z^<1@W@khS9;HZSv5FWjbVghJ1CzCKolFmHac9iI6W70m(k|8~9&HC*EM_ zmKjSOuA1@GaJ7Sx4n|Wc0zL9OIN8V)sKaQDft@BOdK4n4;Sh)vsj&}<(u)%*$7q*v rbb=c1;G+)~v&cmj#zurFp9ARI9j7$P?WEHGqLzGQXax%7LY|GdokOrpHrv&+H z*KZqcw{6twH)p3tgR=U7`o3+^+eeR93F60g&t@kCQLTJO5UaTs=M}X%M1hr>J~b_Z zgK4nm`pj%O)VS(-eb!(c)~yOgy!qhUjO%MNDfK=JbEGEYlM>{#^3+Viff%={ViBr} z1QZ#&D)QJi-77_jcifHSVS41Y56(j>pCcq^0$`H|CkQ7#@Ar<`vks)Fel{KUT Qh)^T^Pq87SCou-_4Jt>!=Kufz literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ShortHolder.class b/idl/orb/.class/org/omg/CORBA/ShortHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..883b3fb9e4c857576a85d198bb3c0c327e179136 GIT binary patch literal 849 zcmZ`%+fLg+6r2;{7@MU{S`x~wl)K}U8h8ytg1oe9rAP$z)iT6N4M`lCO%Q)YtCCiI z-~;+mRnM9P#X*s^*6yB}bD7z{|NcAxIKY7k1M>!^@y5gg7ELT+*~ALo8d$|UwOiA% zu46;TCPC|Y&8|ygSYN`Z;e@S*Q>mVw z96OyblHPgKcRsZ{U0IV1Yn2rv-3<2_EMCMB#-z>G*hFqL5LwJH}&$_j5x;En1)n2B{8GIL1|YtEi1qX_wD zDsi+-m`hU5DxZTkTQ@DQhDi(K>c$YJW*feAJ5kUIWYF_nc|q74x9>4ud7?wu=htU| z72w6=K=8}dc*n-^|0SPtafEN}U!d=NfjFEUgbPUV2bd~sFWnbM zcNAP!A>myWSMZ*K_f_;_CPtQwf>~jlQ*j#eFaE~S@NZY?gPSIN3mDOwqZ-dWqR zy?F*nn_Od%g_$;^;%+b;*Cs=e6fS~nr)Iex0c)Z21?PTdJui?H>z?PD1#&uhnA7BX zo}oYQnT4&JW_8uvC|guNW%d~lAIRLnIbs(Xj*-Wvxnriwrc+AiJ=b+X$8xoEk_&RTEX`mCEVe#v8iB-ql|412bH6XvdUGaYZBMSFmdGFw7oJyc!@xGUD4+c=;@UpI>L$7j#;i#wxI$E#Ip=r zsKux?sbv-F2@nE!z&MGU{y^HK7NF6QRNJT}Z(3lI0my*WR{0d&e@o z0>gB;^uRexrej1B0soqHw{AHFALo*m4QFjV1pfgw5I~t_+pIPDtZ4@)?+{C<2md40 zx$cm|n#-Vy2{-EHic@O7TG^H<=qx>Cq`dJXpgIScp|3gkEihTj3IPSi08ZBEIg`ie z)g7j%oN|e|qpui!)7;Z~hW-X=XSDa|Pr)A32gs3TGdPYn4*_`(k=^EL4CgQ&oSue^ z2wD5}XOM2EoI^|0pG*E4%SrPi z$sZ9Ob#df_9!7=vJ;%TJ?AXcx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ShortSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ShortSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1a29aae3c5a7f5628e459da0a4360dd5f54a8802 GIT binary patch literal 679 zcma)(UrWMZ6vm%-Zmz9WR%&MU#|oPBV$`h>ls5%|(4reJWacnsx;3WJw<;)-h(16c zDmt&OP(kQohxfeuJ?A~=IbYxJp8$@quR=yjK^$onYsm1h&O=tlhK!tyO$MoNyFG_N zs9Fs1<5ss7o-oAp!VQC1_8Rm{(yJCvrCQ+F4Tb~#(hHiV*J+yN%GKGa>3czF*ImcF z==#0T3JL3!xFTMA2wEYP&}T|2y>L<^)xt-gBw4*M^~^Qh^Nvay=Amg&pvu_Nu#FuJ zdF*P~Ly{pk*_?Gp-C554x#u>VfFaSg`?l%Y-KJTox1HONAwQ}38)q~LpKNwj$Mtzt zab(TxIVY^)UQ3ZR#{aAttw7}7;E+}-gJF(7#%-W=OLQVvC@xTzfj}ofGv2_A*oX28 z;hAy_sl|v&6D81{I;4tY%n}k2lZqI{C=L)CLzb~JjTDU+2m^?}FRdaOA-o#zM;t(U H;%xvwtg(^X literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringDef.class b/idl/orb/.class/org/omg/CORBA/StringDef.class new file mode 100644 index 0000000000000000000000000000000000000000..32cf848b3be625ce5e3f3d5f7d25588d708c9ba9 GIT binary patch literal 213 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2J!r&bp8C?bbV+4ASXxt;F6-u zymXh;G)4x2ti-ZJ{hY+SbbbG%tkmQZMg~P3iv0^xixNvR^Ye-s8AMUlc)Iw6R2HN% xGKipx!;Dlw6)wmxDoISrN!17HbImKsEU9E;WME`qVqjrl24YqQHlSC4008)aH|_uc literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringDefHelper.class b/idl/orb/.class/org/omg/CORBA/StringDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7a78986576b850a0cffc1116148d0c21dab65514 GIT binary patch literal 2152 zcmaJ?ZC4XV6n-Xen`{;nV$djBMYM(uvI4a)ghB&p6(z+2)kP=IBrR}BV!GBCESZ*9R&$r z%Qz$W6W9>LeF@)4*klOm*7GK3NUb-_iq_bxXsa8WD>-eOc2^r^o@EFvR_j%3iNT+q zdcY76+w{>JW|3hmJ>@|XoIrsN?fC(7AMwbRWt5&4jOMmctP!QJT4qQR;)(H#q1B9f zMccB>YP}*vRO|cPv>3FsCtj}pJnPx&pz?e-D+EjYSIaa?gq=AK>($=_Qx+ySNYks^|;Av8NDB@|vP)!JpD-~(Keu%%!dR}@^pMFkUL_93n_M4Z!9@Ga;v zF0JL)7pTl;M7ecJ&2d?now=!C5?3WWRPY@hDcHgH3T|Rn!Ve05>@4OPuDgm=pVQ|x z=SunylHsh&Q(MX9_4~QaT!CT2ZRz3Lhq$)atV#GufsUUCSRBO?3rH-s9DDpMRj!|4*0p2hWQ-Qwo1QR2Eq zVwTc_Ei|~}z23gg^hBf#&MeJY~0{Ly{VJAM6@txZ=**xu3q4 zV~C0db=W3{K-?vvw0qG3of}gALT}Pd*iAjCSNC;8JbuTV>JA;1Ug4Hr<~3fS%VC%t z$kNFsZ#&TwH=^&mP*=Ue20>E~0u%J~kJB%NK^DzNGlk~VlQdqY)hK-#eS_*Nu-|9` za-;^e&GEJo2pqw8*tSMQ2in#f@VEC;zr+6?qesFmmU#v)At_3}Kv;c?B#8f)n*BJBR t1yXNthGd>COp`UyLaK#x(}!K{j>HfGp=d0LFg|kKI5|)Nx}?s*;(y>-1)%@{ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringDefHolder.class b/idl/orb/.class/org/omg/CORBA/StringDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bedc90d4e8c9d45dcca6978ada2bd674eaaf4d6f GIT binary patch literal 766 zcmaJUW55@Y+)bGl|gkm(siLw5|<(p#OL`9KM(^OQe76D!=>KeDFdb6H^$ z&S|XExo{%ZX3s_pGi$~w&1Dv=G(K3KB@WqzkwCD(UczHzmq}z_EJaqA*k5)$VO{M5 z)};K>yc9+TW(`eGMg|rQPt7n!2F3iMbp8C? zbbV+4ASXxt;F6-uymXh;H2;FsqQsKS{JdgD27#=^vPAuy#JqHU|D>$cW(y3`{`G40Hw)3(z_SRt5$z%?1=<008IdB^v+$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringDefPOA.class b/idl/orb/.class/org/omg/CORBA/StringDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..99e8b508ac088679efe130688a98822e41e67794 GIT binary patch literal 2991 zcma)8X;;){6n-KzlMrGB1nP*mRV~YuaVxc8wJf$!Q4lDW+BOX{VTjC3Fq0Xjd+om0 z?z`O=yQ=35o_e}`>pA@^{R^I+-kW3=GU(}tEbo1vd*A1-$>0C}`a6J~_*q62eSGVe zF@OX7c1JZjaVOsfWenji83!>e;*gAL92PMmqXwfgZ6A>_hH=JB@bYe6PRclndssHb z%X_PF4EOQd{k-vj1Xad^(0DP;N-@60W$2jUw}gyY82olz#GHhrgp`D|2vf#Z^hucK z(@!uZOF~A1Eg>r*C*q`tQz8}w1Xb0DX9TQ1Hhf&mY0;#XPDICT%Sb1B1W0O1w`WZT zG`ag(+ek(SjF@ehY0X+7OlYr>Htc-@s#@D71qAxdxXyO%S%cJ?Tib?BD-ktQiD>`G zSYNMad_bQe-Og6uCLwyRrLaoXl1bG_+qyNQ#dJDgSINYvY1!IzQXki?oNh%&M|yjX z^|dYQSjb4{%sJw@v83+NbCk#Q6InfD_pnDR$89Y(cSxI`VB;blqPXmhB^|F7+>9;- z591LLk1BW!kMrUQ1v{`)!7l6;@uY&&cuK_63ZB8U6p^Lj=<6L&M@A2f^-c_p9APD^IVh0hdxjxQ8^$=YXF>ny$!@wI|)@U4RHa8AVcy!b&u4qXCj zON`v&5U^orV7Qyo+R6U-Qro?wbGv|+N(4zJ7Up$#fBiE1V3A(*O+~x7KC+P_4L+VG%JSkv@zob1A*XpZ|3Y}#du}H;N!fwBLEkm(4 z3oZ+2AbRHy(RDqS0deb~qeUwN@rDCKrx@D``q?t~TQ^bkP%3Sr9p2;SOXOsVYw#KLc zPb-T1QcoxP4>}zo*>eS}O}>HbLWof8c$Qu-$)}2lj`GJD$G^WF_FX zWOIdP0m5W`EZrD#pyP4X8DIkXmPx&jIlEq&H7%vbo!THWEA>;hrNxR7U0YEfWz5(4 zLgx`KcAuM^Wj<-l!$+-Xmc5lqlWAiG0UAb}Ihrt>DdN0&DUGH31v0z+;a!HqQcb5w zs^+s)BYVn2>-F0IYRJGQ`VonO>H;eu^B0hQnq>Y6(lbPI`c%^W7FyNOQ=n(CeG$TW zdI2r>;8t(D!P}N-d&MPG{Zd49dx%ClVg*U7+dCE!D1-E1uLr56XB9yL7Z5BMxDET< zU11Obh;-`K3kY@OA?6_+iu{FDmr*^%>qW?aME*og9?HI!bKd#RgDlc>3tdO(Izt!# z9RAau$I7ZauImnTgadi3qIGRokfnLlb%(;C#$X=x9pO+OtIxBTKm;xTg5lsLG+aPq z9!+^%9}d*72?q%hKI)nallI!KPi!`5||AI8>N$`12^*H?fyTphgeJZDJ2 ze!AB|yn<#Cw_ia-i0qF<8X%#!nAg(?5(vnJe#54zs`}02Q-S&$#;1byTgERUco|!# y7P0LjLKOA-8!w|~s%jCfd9)p6K|2cqWr7YC1j_^w7KF+KH?e?{<=Aiw3I748=m=l{ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringDefPOATie.class b/idl/orb/.class/org/omg/CORBA/StringDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..1f4881d6275389077ef3681e516208d77f41ab6d GIT binary patch literal 1064 zcma)4+iKfD5It*ImTW7HsN?X*@dZ%HWR@?vUmh(f{SLCDtHC{?8(tAYGe zA9|&v(0)Kas&v+oYlvkCf>|`@%+8rJ`{(b^-vD;7o53SIPh$$}B5Y(ajTa)6MW~2S z6=74sOBJtF)KusSwiIkD*kMSUHg|c?3OPfm;Rik4f8W!On`cLdx)BDB*E`|e<`oaD z(DA+gK7(wUj@@UNy=Yuo*Ou;DUN52&nmTYiCw$GYQGUQ}mA4GZW8bFc>*dM=3K*tM z%XLl13whABI-G>;jyj$CL1?vIZt&om2l{FAaR1_{5-U`0`yV`;K`K}3B%)j&XbEqw zNXz_~mUGGroiw3p^RD^M5w$C0JTgnnPgcDl2C)^J_rt)y88o74)q{>Za7e=()->cW zqalx34f9wK;hBa-ENNKAiiTCJG34&s%&=TPY3$LWYGPscmbJHC+hSN8XHZ6rafdI( z;AhSDCGUjM1ry!^d3x>$k0#>`s}sP{L!!~9=;hKrk)V%kpy!+sPSBaA{2U%rEYM$J zz#z2x1FX9F9f{AB1)(_z>IWu$4{(JcI7r+4ybZA)CFozW#udu4)HQwlWi+38C!;WzrMxGURJgd?C_UXv#hLLd2+phH`==KD$yH2MrE3)=YaJKXAOIG`8Y#S^B3563LsABM(GkV^Z>d{ zo3(pno-lbVjxfa$Ml)*z%uGO*P)I{+=1*h>n0;a?qBPNo$xgqa{6Ka9^-c~0JOUUx B(%Aq2 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringSeqHelper.class b/idl/orb/.class/org/omg/CORBA/StringSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..538848c9f348e2f09f19c9e4456567e74bc5f4ad GIT binary patch literal 2118 zcma)7-&Y$&6#ga~*z7V$2u1rN&;k~dO(m47wS*r6tu~U1Hi*`$aY@#=5R$OjVEf*G zqOZR66{{!Z=qaat>N);3`s(pi@9b_!vVteVeY#)a3k@&b7 zLR!VgSe20x^DPyhU`-64%J@viZHAtleZOijoX%9NVzRPROs=fmUS3MBlXaz1Fj5S? zb7tAJ7Z{{ie1jn<%rxaH)+WPnEbfb>a1msdYldYr#ACkwrSkpM-OQH0rzcB#xtPq_ zmRT;Q1hj12vn@SOQL%1O@h)Ku{aIVjZ{O0Z>-uKNAd!fho7352+}g4Vm<5JYyVv|Asujx?ha}VGYTYK{hQ5>P#!5z(r2Ww{ZBi}T!w@!VN!u)VcS|?G@fGfJd@Xnm zwG_BOMmWYWE+fbB9dwROkcM=rCMr>156z+qyGh_%jkJvg>;Nk)ld2gIU+>MK$;N>#(^09o7IGDQ6h zby1UHuv0UtRJv;+F2n1wE)hb1UkqtSHn+HQM42i;R0PB1iMQPHa*90S6?sSW#bc#< zRBLVFR8xC;sZOU2<>_SG$eE%Lb2W#D;NWk@Bb4@vrMmAFVtr-REK|WN_O`&Hb|gW3 zZR`3_XNQZ1ovT{rj%k~FM$XPNO#5^9oc(Ot+ArcIP&0PxMmg`|T#2Rqr#7FVS3nJT zP?geOz@9G^N<&bfMBmZ z27iHx1N2Ko^f6v*V4#8UDj5zi7>N+<&@bTRC6Zteh!WT&fzh+&fekoNv=KSgOqCuz zZ*!6SgA{dvpoZt8PpK)Sg^}n_2q#9!^hWl9#2)?oSE7aAkHAZC8A-IpodXruITs= DrdbY! literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringSeqHolder.class b/idl/orb/.class/org/omg/CORBA/StringSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f9223912c69fcb615bb27e6d3f9f2a98963cdd80 GIT binary patch literal 772 zcmaKq-%G+!6vw~UIj1(uGA%7D`#I;ssJAeJ@})o!GJ5GjW{#muXJZ=uR|Q29)F03v z6`iXqoM;a_yZ7vKzW1E(?$`JGCx9dDM-fI!!b$`ZR-;HG!^0X6>k_gOHY98^h<)Aa z84QWra!c>)nx%J4t?D|>j#*>~oisa5_mn|U@;3~@lHDLSrA&eOcd_OedV}FWDcg>z z*=9SfJnhm5&2;1WDNWy0lc4S166Zg9^BG{Ag zxrCyOaeN`;OFR~!Uxo0sgl`03PQtemzGLt!`aVN+^FTdSGgY-#$?TejUaPD!gcZGZ zY^t@g#xT8EH!7L>Q6;msy;I2BN=3DLqCL>64b33^pkh90knRnS?jGH))%P`08OZ82 z-OQ2Oc%sM<5ZAOQb)&>E8c%pE$(1l78k%7;#N!@$zV>9bo4G)iv@_FC%Vady%P7%p zMKoIUZ*|e=2;kbTsg@77)W)7#suFdd$X<*rdgL!)XevpUy#yL{!xYw;jauWxq;zZQ z(P~eG;LnC`l9!df5Zfo_6-GA+kqTMRP)@~DF=YE9^&q3yGrO9ht5y9M!Iz$5&?3|Z z%k>58LCXs!s0~y!)2hEvwp_I;gJTwR5)_W_k(8ivlu+i#U|xLoIo`p$5;Tq&fh zC%?sU7c;_lgJHz`>{M?qGdF%`S~ynllLUj~7)u-`P8e=(tZ%M#HQ36+y?KV$T)5p0 z=pwUSI?$}*cN;l@7V2l(enQ?Ulo8O;Lt1uf3&12^bNz-!Swe-PBJt#Vj+-dkM7wX*PKLTn*HA3as{4O7$}f zs2J}a1wC&1puWOg-pkNQnYW_a1I^p^3KH7-@ULx`v2A?DP_!+MMoqU1FIbuzWzQC9ZeVEW`ire<{ z2UAVlY>}g1ORU=B1rmzvPNZLA>{kq> z(nO|-TfblNyaErv7nR5`>xx{&7H}dD;eF@br!3DvEIM(4q34*SxNlz|#weq$7sLN9 CjfqeI literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StringValueHolder.class b/idl/orb/.class/org/omg/CORBA/StringValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..634fe125096b24ae37ba28f6eb1fac7b321de7ec GIT binary patch literal 742 zcmaKqZ%e{Z6vm&c&gELArdIaHte~kcM!kxRpnOvx2o=7SnPW_*lW{frRs}`Ui#|Xf zDmqtZHN_Y^+@15B=ic+%{rr0W0C0>01v1hxM3GUjhIJ7(M99k6l(8jan?V{FPTyom zR@=tF&>f>|>9^doyH=SYdS-WRe$Eiq3U!7^#ch!^t<7phS!#Hu(PB8%s;+10ZpYFq zwVTTez2|z|Xga2T-R<=`xtm6(EIOi%2hZkYsm*Pv^?9&IYVgM%wPdxz)HZjN7bh&M zScIw~21Uk>iX3)TA1Q`h@NnZ{>w?0S>$FUdA^wY^)@+;ioFN}<`k81vj2P}; zW7FvgrvLx| literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructDef.class b/idl/orb/.class/org/omg/CORBA/StructDef.class new file mode 100644 index 0000000000000000000000000000000000000000..632630cebb8ef5cbbbfd211d5dec0a7a301c90b4 GIT binary patch literal 247 zcmZ`!I|{-;6rA<<{A(d-sV7+Q2AWt1LO{L1s+*7ycfbW*w_Ts^!|>tPIDTHv|MK OsH2Kn!3|Jxw!j;Hr9sgE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructDefHelper.class b/idl/orb/.class/org/omg/CORBA/StructDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..a15cac3e6697ec33ff68d4cd37fe4c09f4e5d241 GIT binary patch literal 2152 zcmaJ?Yje{^6g}&gY+1pMaljBLgwW#1AtFiXBTkb#aa+>H4NX!g=|h!e#TXpfqsXQF z6!;ZsJ7YqbY2izm>5uC4t}V-!9Ouhwckeytp1XVR>fitV{0qPW9*UU6Z4n>f!x%2& zBaw!W`LGm4o^LNl@d;nAh*-s^d?@hcnuv82`Rp?Rp9}axL=v|J+!3*XF9m!R$0kYw zz7}zg^QW-Ihr0s45wOh=R_&)vgCVoou&PSqpsK8IZLbxSUD{o5RE#`BWVvS6>=lM! zcIF;Kh;P$JZCGW7iR_FINpJ#%y0jOE%mc(@JGQ1jE@{nOtz0L{K&`@%Cd4D{7fq>a zW>wj-t(sZoB5LNLVc85y))%i}KF#~K2-VW+gdp3(L?* z)2biWY*;qetZbOgmQ4slJIJ3#6n_cgLtV4T~Y!FaGXzGK_m6)L>MZ{O}ph>Qs8Rq1H^>u=X|G zP;C;kk{xcL;T`|=4s@n3BDEO9ShoY!o~lvR=c`?pmAB#S48ZsA~N2JK>jaO+kPG3gfu>1n- zH=2MPsX-lcvSS27#|RvCtTEn!j`b#joxRNO2)@PmF?S26B5eqNAV_;0!SF7PL9jGp zyy+ci!XXZ(qCMU$W*p-L`3DFUlXJ(2wIOze#ULZ+xMb+dgG+K7@lA4*O0zwpS=@Aq z0yN`9ZH$q)Gd-6%D2~etMdGot@*52QM)GckUmga&M3t*phQ?oaIuwIfW2N zq$nwRe;lq9G4XH_IXDn&;RJhMi%9rI2Y;XNJgHUrEyC=G6s4abD!)ehX!1D{GM(;A wOa$-@nO8VRGS8Q0$(m{-)5e9_qn>tGVg#W`Jds8e?|W{X94G)?Quko-KTviCI{*Lx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructDefHolder.class b/idl/orb/.class/org/omg/CORBA/StructDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8ace241762d84ea1fe3b4a54a688decb3f96a835 GIT binary patch literal 766 zcmaJ2-#O>rbMF2A`TPQKftm8yb%OW;B#rejq^i9kHi0l#*+9mJa5chK L5+)E|_%?uFC$O;R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructDefOperations.class b/idl/orb/.class/org/omg/CORBA/StructDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..423d5a9a2e808c93cc07637d47c1e8aa0672db64 GIT binary patch literal 263 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 P1NoeQ%yA*kS3USI?gCT+ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructDefPOATie.class b/idl/orb/.class/org/omg/CORBA/StructDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..d34a31edab77963205960b31afe4f9cbe1f96605 GIT binary patch literal 4642 zcmb_f33n4!6#k~o*7nsd5FoULA_84#1L6h+qzh`L(9!^!qQ*%wjcJpaGMUsC#SQm; zU;c&b@x*iR2l%5r-aD(EObX_B=A4^k-uJ%y-TUsl@8z$*|M(NYgZQBxqbRpw1S%V? z14psO<^~&`O@)oYrpjiW&C6^y*le=7$>tR{ud=zt<~262vw4Hfn{3` zE}Qq*ywBzXHXpM2h|R}rK4J4|6raWLc?@5~@MR2N#qf0u-$e0k6yHVhy@a+*UMVRB z*-#`LoYV9|QY#md)ANf{lgX5!S98XUvOK@0=(17N)XIc}a3)jCS0wDXKDQ#T%gK_g z78qJo3p5%zT~v$4SqX=S?tyLinuO4_mM7KZiu|I9pr8hawgqq$EycWqofJbr zPU1uLZ_UV6xlEBqNos|XE1^BFEEiQJPvJ@Et4qkVrW!Jh>m;dD&Q`Qi)lf1PNjzr_ z(kf(hWlgIT4Nc#a&|k;0=#COiEU#2@dNE5f#_N!dzx;xnTa^n+a>fL&aV5~)P+422 zdFQ-+(yVj7V{?sk z?5&%5h2C><(VR$0(^ji%62^ko!ngWP0PHNrc~w+{>SV$ns888aT^aqGsKZiVFW032 z8M8ha|B1fGS;&khc>ZpJXB#TkgO|KBrz_MdGG#4aEm6)d2ZT|-#Px6dTm7QRM*&mD zyKEm6N5zm;L&B{lz4-DuJ2S@>G2weXscugA_0YnZzAZ&g)KqoU4<)Eg>e;@D_++`w zmr^3^lvGu-P26tMzt4k{55KId?8WYV{=}GLR#rM}QHokEOUO2gv`RPWtn!ECGD>jLYKD`^Y8w((nhePokW<@%&Zo4E zt;?!xAOtvd9VKp$IIaAn+23 z0xMXh`tV<-=(0vDdy1~8<9uQBT~kjTA3sJnh$7mxmfgFlL9xL;b|Y_)BDG zi(5z3Z*0&Wsza_sVe0O$A>Qhus3F;?K7{E3x-8UKJXFK3unVN7WdpaSp?{!;-60o7 zZ7mSS+1lg5sPWmb0YvBldhDboLWyt8GpT|j!b{o!q zkCU45HoyT7NDaH8^Ed^x&vQ;~-G&}P2R%Ta9eX?!4<{n=Xd;$qOSIRpzr)P}9Ru44 z8T5qEQLzp1fCr@G#0G9%P+qC~ot28AMKQ@^0qYE}3L7n*Yp literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructMember.class b/idl/orb/.class/org/omg/CORBA/StructMember.class new file mode 100644 index 0000000000000000000000000000000000000000..14e5b73127bd22871674fc41c2005da767a513e5 GIT binary patch literal 463 zcmZXQ%}T>S6ot<;vFT5=HC9vWrtaFP47gPUZCwbFf=aiNv|~tVk`hLtkL4l=E_?tV zO1u;QXxyCPp84)QbLaiz^$ox=_G&P&RY9wYGPafMD6tK+4eT1|FzB%t2?ooZc~2gn zdvU;TWg5o83Ej!%g6`UGk_J490zMesT%7YeatFy&5K&RY{Zu?K*ahlp=qiw)@@W`{ z@{B?2^~W?-^)d{5|04?{euE1B&*=WxL<3C*n5d#=q7KuJp@r*UF&-Vw}Sax^t9a?Tf}I;vQk4 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructMemberHelper.class b/idl/orb/.class/org/omg/CORBA/StructMemberHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..99f238d7d1e9d52215a35b75d82f7dec951c10d8 GIT binary patch literal 2635 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/StructMemberSeqHolder.class b/idl/orb/.class/org/omg/CORBA/StructMemberSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..cfafa22933fba352d57829f418150275fdcdfa16 GIT binary patch literal 834 zcmaiyTT22#7>3_b*G*f?4q954omahB>edKKf`UTG=%x!g3oc38zyPm%LfwPM#rn*l0Dx5rbdP+%NKeMeGcNn5~X4f<%}u zzmW&i%IW`2&aJjg9vHY-@U&#a#fi5X~iC;ECD#uR)rReR^qAUM)I^?$(k3jZ@5ppVVESe!5)orU{YZitCu&ShdQ6Uyd#2n-?f eSQtlg*%$bGP<|^dBIY7d`pbp_Jp`X*8^900r^p2W literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/SystemException.class b/idl/orb/.class/org/omg/CORBA/SystemException.class new file mode 100644 index 0000000000000000000000000000000000000000..a5cd5c297f6de83291184bdf122031403d77a36c GIT binary patch literal 860 zcmah{ZBNrs6n^ej)^-#eWkbP%1$^0BMiG$@U`*I-;*!l7Ml}0m>L|0izGQSne}KQm z#7~;YmT2M+@HZLbxtnpak$98)a-Q>?bI*Ow{qgJTcL3YiO=1qqGE!LK%MB4)5&~8^ zyv9%K5^nPSmW10$+(Ax4UV<*c;OLr&4G{%~DbMwT4g)JQ$j!hD+fL*hGia5d(=r3E zWtM7(#RIc6bh&|FkL;*>y3de!;QDU#kYP7hd2OHBX502#W^4VsS!{; zXcR4imM;ode|H)=p7plrgb}I7ur#XlutFB6#e&E6pg(eEx4YCQDxxf`(r=riFBk*k^3#dBhRgsFNbRd+Un46^ z41xBPZuG(Q>^Wk3;T-YLgz*?^$sgu>V#Wx2^$kL!kEx2G_mSv9d~T@HVAH=K)`LuT zlG|j)dzk)6F*`gN4IaNvbCG7jP!&%5fV82`3{OczogJj=;mRlCkS4TFL->iuBC@ia G0Dc1pr^EUH literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TCKind.class b/idl/orb/.class/org/omg/CORBA/TCKind.class new file mode 100644 index 0000000000000000000000000000000000000000..617290d52d192798a5e58ab6d2fb03f3e64ad1f7 GIT binary patch literal 3533 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TCKindHolder.class b/idl/orb/.class/org/omg/CORBA/TCKindHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a3726990a4456d202ab3d10eef5157282165c5d0 GIT binary patch literal 748 zcmZ{iZ%e{Z6vm&cn@d}zrIz;B3Yz+2)LTU;-xLKxMQ>%cA(QE3T#dd}L6P*L5738- z&ea)hIK~cl=lssId!Bp0e?GqeoZ&bH1-T>=$fvN0EfESL6cubM*io>{Add}aWHID# zT(7IU{jT0@-CmsQ_swg2VAdECb$ej*218scKQKs5*Cf24E#?Ixw>`@+8BW5?(Dk^{ zaV-66FdXqaPFTMtIuh+C&*mhnMYgm?JlG?*`SXxkids3m70QcU)>JG*RgpwW!JdkJ z9H=PaP{k3l)VOHiOV=?ik0ISN#)j?~gRb7{^sGnDPzv&Y!_4Lob46)d&QNGdGh6DB zGX`u44>dmz*|(|@DHE`2vCQ-&g?~7u>!E;QiC!kGqN^j*ikzdkLSLC_g|d|ouvbc8 zT3+?bdBo@eQlea`z9Tkg){yp@oX;dH)d}MNkPOztNVW2Y*aXsCWdm6s5o(P7BuyZ{ Hh;0DBBuA(V literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TIMEOUT.class b/idl/orb/.class/org/omg/CORBA/TIMEOUT.class new file mode 100644 index 0000000000000000000000000000000000000000..c54db006cfeea4bcf450ca4805798733e5d73994 GIT binary patch literal 474 zcmX^0Z`VEs1_mPrVNM2a1|BX376x8+20nHMentj1o6Nk-5<5l)W)00SMg|t={FGEi z1{DoYpZub9{ruc?eP{n5Cr5qf{M>?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA-~yVC>VgnYUswOo5Jm=BRPo@-;*!){*NWuS z0+90<8RSsq(Ou5Sz~k)i8{p#_;_4Fb=g-KXK**~MiVV!aFarS=21cOc*nlKEkS7M_ zGca&zF*0vrVBF5Yv=OWdq=o~kMg*va87Ru3#VD3_(w9zrUUp8H+Xkktvv}jWV=C}|hEw#3Tl!!6vFmsCfS+xmT^aJ`) z(NQAC3hFEleD8U9c)#=Z{_+Z79}6u^LRBDQO2V{+8A9_Y%~N(v5VW03f@l@jF=1PC zy2UUtiYzfK&p$B@tH=iZn59J?u!!A`4oiAT>)u3nkk&5o+8dh?_y?9p1o5U#eoK5>u4X{dNq7Q1qw!c#B_n?_i<}X7D(keeTO(Ry XmIfyjz5T3_(w9zrUUp8GRXyG`8(4tKdIF5@U(@<$UNQoGu4l}2ypH-WnML(b) z6&)pFtf0=~!1tbqhxa>g?=Pd4AV4tRfo?W0n?qz#?`#IWFln&AEy0B4Zfki4m}InkQ9$^h^E^p@c;h zOITJh1BI8UHwb;x4NNQSd+xyZ9LMf;P3w%XRmXyd35zrP{wf}oZ3)};_wS1kRLeWR zaO}|T4P1|~^VjCsg}}eCJR*p9ZSq^<(|R=nicZ24=oyX2iYgiTlUe1Az*AYLjr|(Y YnzA%Fq3E3-7G=s(Hjwqs=E0W*AOBlweE?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA;9_JDM|D9+kfUF)r>kEGBZDleOmJm!NouZZ zMRIBZ$bpOua;Wm?Zf9iRarXBO@No@sb&2=$XJk+y literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeCode.class b/idl/orb/.class/org/omg/CORBA/TypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..8cefffa66edc8c6b47cfbba0113d58631058c52c GIT binary patch literal 1227 zcmb7DT~8B16unbgiltSG3t~|L1#R(T)mMxO)IKxw4wJMVV3^`miLM3AkNA9jV3`2E+hZiF_EYZ^@n%0i=N341^L!mxm&5QKllz zFsh|(?sts#-ob8bueE;!Yw6zSpp;A~M9n<|(l+SWq6%hGyef zPGW_w$NL*J7so2icAZNAJkEh8P*2`9`@9r!@5gYnpgMZQ}~qhxF(V-rR+}iEA*|ufW`Z JhyPPdzX83t@)!UB literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeCodeHelper.class b/idl/orb/.class/org/omg/CORBA/TypeCodeHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6264d47bf37f221959fb0884286a71899b76b3d6 GIT binary patch literal 1339 zcmaJ=Yg5xe6g^8@(uS0lS}ImV0Uv!xQ}9V!5hx#I#OaJMe(i*k=>*y|6Bm?!r8rX= zKls%df0X0hBrQ#NBs064J@?!_d+*8Lf4_bMSizQzI2L6*#3LDx@k9){7!>4X8VWHK z@l>EoQIuq;D9c#JiiBqpo-;(6{M6DJW_EgZTkUn*YQ6Dsb3@&u-FojpuQH6+4AbCi z453{96GK>R)70$Q`wY{$e1J)GK{CwGy3H9%xd6Ulo>l`}!^1>=N&m`itwq$OtEj=_ zhFp^5UL|`;(nw5vmusz~51O^7?RV%JW5xkPniz-LiKccmv#suO+c4X7hp??{gsuf; zSUsBywz_Rv$DG1-ty{f8SLBOra5`)K+C+_Gev#>>;zVn$j?)bVNlZz2q2MLb5?(2I zja3B|WED&zq2QL-t}3YEje<42WtiLE+Nn^7OQO^ME?1UIWeMvFHjtIDsi2NkhS{qv z@lNkpy3LThC|P6wP!}DW@-xT^R7Iip5=1UwNVq0x4*J7zH&~(pR29}pde#^rr2QxE z)!!Q?^=yJ4jRa+aC3T{x!^yVJo0e^K4Q`z1P2OTCUsB)(-_YL$zlN*q!4MZ_8qu_P z4QbR043my^hP3cJ{nByz?HOdzW?IE)O;(^WMPFiOG)D?Q!M@W16i8O^;G_cr;d6|A zbI=&3k@3(J#^?pc3&lP{E<1+XnDOw75PU@4-IJ6Rzec7JLN}xg(5ZxG??$ DR9G=U literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeCodeHolder.class b/idl/orb/.class/org/omg/CORBA/TypeCodeHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d9e50379f9ba02df7d31f9f959e81c7ecf1a41d1 GIT binary patch literal 901 zcmZ{iUvJV-7{-5xt<-ki1RXfH`G;+~Qq)dwF(%55MiUaZc-wTNA>DwI=78~AsZlgu z_yPP-#&Z~$f;LT?)AxOz_s{d3U%!9+1fKBN#^Q#>6}D_{vTd`&uFWlOTioHUKGjV2 zO!iF<1jab*jUvI;n+En zu+E0V8ji_5hx=4b4jo)dCUpmohRFkmhdgrdITGytUx$}TuM?$$(s?)z{a!fe`t8&6 z=u8S~i;TY;UM{DX73}3;GAanxwPwLwdBJ`TDXW8EW2#$*R$injJC$kLLP6ypp;T5` zytzm@X}yjI%Dpvtk*Ql<)_96i>{2(9!7z>cv5d!2AkPFx%O+lyZ07nzP2E@vfvsNE z8Ash_L!Fd;>U&lFm8TgM^}ZoKsQ}Y-X_l^1P!HHT?KQqqm}AOZn_((5jO8^ZtYje9 g*<6M+ye||ctj?=csAf6|-RV2VXNnWdk9rvR0}$%a`2YX_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeCodePackage/BadKind.class b/idl/orb/.class/org/omg/CORBA/TypeCodePackage/BadKind.class new file mode 100644 index 0000000000000000000000000000000000000000..c5128477466d404a0edf5d8b7f000e745d2859c2 GIT binary patch literal 478 zcma)3O-sW-5Pg%>CdSl{w6)b0_{wyyoDEI^X zQQ~eb1zQg;>X6C)w&#$)+0K2HDnAb3i1qF*5WGtyLgwG38P*7B`Ovvs9VUX?< zWV3cn$h0HZBNWZfEqh{CkA=QG z9=zn}x$DJg5QSVci(@Zz3EO|^oRU7GZ4=Zq`q>7dVAiI9HkwfR%EggDLMFF5kMhG9 nQ0fK^AiWMD0+1U4*7>JM{Iy(vhkP?Y#+d0NyTxxG%D4jGWK?g) literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeCodePackage/Bounds.class b/idl/orb/.class/org/omg/CORBA/TypeCodePackage/Bounds.class new file mode 100644 index 0000000000000000000000000000000000000000..12fba0d593932015716eee52fb088060b61dc4cf GIT binary patch literal 475 zcma)3O-sW-5Pg%>CdSl{w6)b6y7wDV;#=+0bLY^ye2SSUvYcoT zdi_?jv8zKvj!>Fz;S7SF#}biVAZ-1s*M^P~$~xAtPN)i6PCrF`=63H~|9b*L literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeDescription.class b/idl/orb/.class/org/omg/CORBA/TypeDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..1d11541c687bed3e87f1888b9e3b2a5353418c76 GIT binary patch literal 554 zcmbV}T}uK%6o%i?{ZQM=wlA$LyVK2B=(Y$-y9flK!rNHgX&KR7SqH(N)x{EY(GTcH zMQ5fULb~bZIWvcO=A1e6{_*+-;0*N=ir6V&w}=8N3RQ(Yg?)ts8#Nn;HjWsKIGAt- zw>t{vfjj4p!heSXEe4SXU@xgQ2!8 zcld0WimBAkEB}n6HyH7uWT^jErb#M;!I=BEo$gI6gVsmAPEfbRE!s8p9;kUQV4j=Hkk>RcO-<{W4yub?Y=3Jl(k#l=wRWPcRtCd6 R&0u;}BZK8t%?$RJiBBv*a?=0+ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypeDescriptionHelper.class b/idl/orb/.class/org/omg/CORBA/TypeDescriptionHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4eabcad10e9bfec59c6d3cb37040cbd3e7921303 GIT binary patch literal 2606 zcma)8TUQ%Z6#fpm%w!k@(o$RGQfR4RqJ-8`TRe zzo8F4`--)NELpnRC)e^Xxt7a)CPOZVwD@xNWS_J5{?4~ACx8F@`=0D^D=IRuz+{C?Yjz^a7)Hj8H+NO zWL#139+vs}_xbXHj1_+FLm8_QK2p%ZV}6WJLiCm3%cp$N`Lf1Mll&{Cz`$+(GcDmW z2_{1z;q2rMhSTw!osQ+Q>Dc7Lt%>p25@{!MDPx2oIBHs^GsfVH^e;2`xtc^GXRk4| zMfwFxGUrC7RWNLaVJIT(k6Swe%7K!mB9G5i*eEcZsE{+goiyC6sc^8VVi+ST z`k^tj*9Ik8Hj~c0kzF%vqSDf{l$0$Mcd)Hu2Vd~`Uot2uO4Z1#li`BstX#O2Q?A3X*L*eBeMj1+o;i(_Ej_bI(YlW* zSSq6=b&6w9s;SBo1-EZFO0jjyajN@^y0n(IrO7$dqV^0q8{8MQEW;@ggL{Trxg~8l ziM(xQO~>3a5>Ap~P-Lg%ux=xJqj4&7bWDg54+p8Br!wWKbm{I8F5;QY99E1+6J3fr z$i=!^FL0%>D4l#_tqL(oU2ehWU8}biPd)k>8u>6R6CFNE1jCrfXgyEQ10u|=vU&Af zWKi8XT87eAha3K)Tz@8-YIpVCCO6yt%l;mEc_Z}7)0E;Pj=nOT1e(8`%dUw3d zG2(|abm;&cEBok-N6Bl~V|07+tS5Us*&Ef0IQJOmqldmm@rLJX$n({&MIWJi4}Dyo d^<_0+Y{SqU2wHYIEkh<(HEnFP5j z*Kg}?x2;!e*C)sN?W1R&n)glL@~GuH6@u8I;~%7!M$s-+1t@o_5(=AkHv zLzb|uAcq|Vc@z{Bks>Jm8^MKZw@jZP(J}glZW~TpuQfVmlM>{^#2;59L)_p@ants= zxG)OpY^v)}P!nv1&rA$bJfEr;N^yqX@Ys3A*k_kY0>K=636GOqIFYSbx~wj+ujH`9 zcC|N^R`xgMP!UwLL$JV158{i4-owYNn-ggq^!LlGJr5vSwSj* Pa5cjIBn%)v@iBmJC#=AC literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDef.class b/idl/orb/.class/org/omg/CORBA/TypedefDef.class new file mode 100644 index 0000000000000000000000000000000000000000..94d722407fb2caea957ed2bca6dce442eee87e66 GIT binary patch literal 246 zcmZ`!I|{-;6rAVp`PV|xQoO)|H_*gF5CY-_Hf9qN;%d;!mO_U)>d`7Fr}4Yu7vCDwM}i+ArKm9 NqluQ|4%mHl_y7WEK=l9s literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDefHelper.class b/idl/orb/.class/org/omg/CORBA/TypedefDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bab459a64df419a938b99cf46f2391d214be1bc0 GIT binary patch literal 2163 zcmaJ?Yje|95Ixr~*|LHih7MiyLb0UZ~y!2ZvcyUC}R>gWqgQ_BDjc; zWm-NF%W@c5al8`7r{aB8#x2|yOHRD5$yi5T>^_t5xr8rd#Bo!?9T^+=Qo>hJY@#6H zYZ>PRe*#-#xhvrt3EK=o-G18O45`h!Ro3bUWo>7=#Ip>cl}fE*uQK@4 zGxrz*;+P(K-6}Fnq-Xk&1Se3SO?z>`+(SIJV;kn`d{XE~#ii{=xt8E!3fwf`a{sMZ?RENb4 z%IbDMuu->ck+rr_YaH2>CN~bUr!obfSQVS9TpLNXb!59-r}AvYiMlHTE28o{%7YE9u4v)URC1()%zgdGLDxT@eCTv9M4cJJdlgX~_Z zf^R`Bxw4VpT&8K86I16-T)Sz@3v=@drg2TeeFfj)fr34JuV5Yv5`IwdWBX-^;ksvN z^+kP2>o%tMHW|))Jhio4UcZ~$&J`G@ycQSVy2y=#MpeR33UvHTD)IWdWl1m;6k#%4 z^1A4*&yIamR8Rs}u#YmsWv{2}c!yUT++v8kI%s#5Vcd%$thFt4YGW8{i&5`nwJ>6MhRkq_RfzJ8Bg!sGYT#4hj55Pj zZ`Iuv^=OYFDwNt~n;rr2PKDCaWEXT{L>(gEq?fQ$dQh(%>W26Z4!PAmx+=ZQZN0>+ zyiCnum>#IITTR|^qOaYUe&|76>rZSDG;=R7MSp=w`kRp8gaT=&(4K@z>lJz%rzfLl zP<;XR8*M<2q*BKmZyABW34F&bYeb09vEG2cb(Z=a{x=vu5pKams0ry0_~}d_7~Z4R z50*qkDBpp`9AbYW+~G}Q#xYKizmHH6HFJVU6LLGT2vlSomlQoka7Aq*x=C(IVYWjw ziyK`cAMFHD6JwOznU2dGG{ym@f*h^{F^O;?)!!3qafsc`MJD``gTGIBQPeH<4T9{LGDl#5j1N2=CkF~ZO=@2({s#xN B35oy! literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDefHolder.class b/idl/orb/.class/org/omg/CORBA/TypedefDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9a94b3ee1619f4df620d7a305fa84073eb3be6bc GIT binary patch literal 772 zcmaJ_G4^qHzjMyMbMF2A`TPQKfhi z*D{=L%c$0FD;LK7vr8@7yrj)CLF}~MYqK+gs9ty=kgATwDLFlyBVcmfqozf0G>dZ` zkC_dd8rMCy&+Zt9b<2Vgt3P>d#-;U8O0Ca=9J$W;sN8^Fm@|%;w5(wfnua)31v?sc zv8N%AeGLal5$uE+zjADgdIX7%IWP^|?6r(qqeCAVK|aWt8X9{M-u~02wkvd{aXjat zUIX#WF*iLQ*^jLfDiw$=TxxW>B2OIiYomZ*fxkpV$FG#kS3F5xm-tt5)Zx3u50F>B zfl+(eZ)XtU51@*6vGk6}1hayKk4gKOc(F7@^baJ7)mccX_=d<3(nMtqDIX%#2>+8b Kg#04L0Db{dNV2s6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDefOperations.class b/idl/orb/.class/org/omg/CORBA/TypedefDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..49bd6f673792328ba692e780de352d645030c5b7 GIT binary patch literal 166 zcmX^0Z`VEs1_mPrPId-Xb_OYXXa684NBxk>g4C4MG?&yg z|AN$_#FEVXykbTMfvm)`ME#t^ymWp4q^#8B5=I6^RDI6*c_oRNd8sML+T>Byc)Iw2 Wj7O+oV`N}tU;;vB1{R>(fB*oAcrFb9 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDefPOA.class b/idl/orb/.class/org/omg/CORBA/TypedefDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..9ad0d9a616f696a40c8afee32df590ab1da23654 GIT binary patch literal 4737 zcmcInX>=Ra75>IrW;7lX$FW`HI3c7hb!^oNffg#K0WY*MII*$aq;5*pu{3cemL)S9 zIk+2Lp&Ly%y6<~KX-QIK7XzUyh3=($p$lE3!7qZcdc(|5_7xVBE9$w1B z%T&A^ui)8rJY28hm3S4;UajIacrEYVpx|{1jw^UQuin6$Z{*=kD&CA6dG;0_Zcy=7 zyiLa26}&^iI~BZ3!MkO=N5w_BO2K>iKJVj8zF)xy6ns#@hZKBR!ABH)RKdp-d|bf^ z1ve@9go2wDd{V}zWZWX-q=ZO1ZDxxSHXRx}sxRruoSvUcPT7{3pBs>%q!$ePNP!hP zo&Az+=8_|3#x@Ii-C8D{=x#G_+Iu8~dUhO;5FRdM4fbmvG0CjEXUABE%TuYaAXi4wG@RC$LK@1CMC2A+6_fX)|vd)?qzk&=D6@eM}TATc6DtQ--x< zSjma;!GS|VI~rasYUY;;^Azc}s<{)OV?1eGT{4RH0N<%)%GNXU`}Du!#)lBF)rgX8g9dyjN3KbfjcE^t_5Uha3noGaoObH z^yv70c6Ua?#%eM~>8f*vrQt4oR>SA;c^O~O@I`z{!`=9@hI_E4;a+@2##c3b4QDib z9pBLKO;-GthHv9O4d20cHGB`>r@Sobxe{IB2O55eA8Gh8Ti?T0_w($2o;|>`2YB`q z{8YxzH2fS7YWM|@qm$#aM~#f_C~Rq+Ek5fr(bws~3-ml9M2( z=M0;=iBtGb4gbQwSymJ>2{EzjKoJvCXRZmki;DzJY*m&U#4fc9!I`D1m(V68`fRa~ zE7^vNZI=+bxKrzutt2G8A`bN2$THo_%#1E9=8Oe{3W1qI!gfzRn6&Xl!xB2w$-aa;>0msV zN74n69SLXG(TSr-RI+uw6ZRT8I)jLc2+JxQldvn;@ve_Y2`13uHIzaq z7raYLXr~(m>zr=WUM;aI+Y-l8iAgxG$7fOrzUrkCMu%U~WpySrh4}LT6Mq8ikhHc&N8mCEj?2OGwhI+Tp=da&q z%En_{i=1t##kR6l=}RYZ4So!8pn=#c*3O4Hz=Iv@P+TK~G3WGCpygg$2^M+7e~GC@)hI~&8)NZSjGa$RfGAS@5CMt($~U3G!_s#10f zK|+6{vx4>P9mZ+DG-y!W^s$#qO7#*!Q&eQ`Cu&<=l=K6VdzZlDUZn#ApP1Tx53&n` zQ8j?9)>44fU5m4akmt1_IDy=FHo{++=#u(5v{)kYx!B*bE_eF?S)bs;=hA-%mqWr8 zXoAYWIO%^Pm49^7J4$l;X-eZHtv1qIqIaZs1=2~HfRw_@>!}fr3E#?8`#|D&F@woLpKfX@+JfAY9C78`8IC<=G^XO%oN+FQx9r38hw5K7* z<$y+ST&}5wRrIA4E`_dCEKc>^l~Q}-N<0=<%SbfB@QHQ7_xpkmz>;j_VP~C(^IZ?z z;}V`lV>enK#%39Z9>#=}xJ3LV5{dufc%nT41<&?KLh3<;^dWW2cVO2{sO^HOnQ+^M zQ!|maCr!;n+nzji8j&?zG_!(>Pa{fw-1d|;G|z-qkSb%~APaW0AnX%7l?4%>U=ItT zKEWj{p!To$xReEoPcX=WR=>@Vkob*;g~V?)A|x@NpUZ?q^+}#4B+Wj_(}hIyN%jg! Kiz{)s6aNP$$NJR( literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/TypedefDefPOATie.class b/idl/orb/.class/org/omg/CORBA/TypedefDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..6ca73d441284babb65bf0e57171dc758ae3e5cea GIT binary patch literal 1828 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 Js4&0h_!l>=$mIY4 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ULongSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ULongSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..469cde0cf641327c4fd4e92456ad6ceb4f3a56d4 GIT binary patch literal 679 zcma)(-%G+!6vw}JZZ6jXCwVFk_kFzVF^%9jK|$m+!hnK_0sw>7Rt|5ZVeMDz#r zM@9GQ3MU9X>~PQB=X>rs-}CkT{t4g&hYDn*6Nn?DU;|kmHhIX&*piW#u}vTiO=n;c z2+b-%{Iu(K=@~&xE8Y@_6|cj7Nm{eYQ>hhLW{2QNt9gNKczxTb)UPhi4c`l>*>)_W z>iPrPpbYDmxgy?r2)dM&(B?|&0~*yxE&Av)Nlq)yJaf(Nc}Haxi%?Z0pvc%!v5P$w z1?;OhK#CwAZSJP#xpu?4zx14r6%ZtQ=Fl`8)3uFyyJy`|f4Qyb4IM;UQ3}h`v0t%tU%=6;Fzsc2EhXR2)BW)TVf~X3X4lD%R*o$K-J$s^w@{; z3gMaM7*oq3m0^^??vycAnqpRv44HJuB=ph?^)RN5nyx@|=lG0*pkZMs4pRB~PME#t^ymbBG zlA_GKbg;M?7I7jBWM>fIVGv{x;$dKA-~yVC>Vi-|Z$JNVKSl;wRPo@-;*!){*NWuS z0+90<8RSsq(Ou5Sz~k)i8{p#_;_4Fb=g-KXK**~MiVV!aFarS=21cOc*nlKEkS7M_ zGca&zF*0vrVBF5Yv=OWdq=o~kMg*va87Ru3#VDj0}sA?F*MGcqm zu7b-NB)q5L3f@=nfrf5Ot7OS2m=VTV4QDZ@(sEUNeW+p{3nFw;EZ2nXdK4dtpO2%s zp&^S;#ImFzhnr&gRKc=><K4??KgKIFqZmrF3PhlwMrEwJ@JvA?sqLXk{3>XKcsz z<`|^p#43X<%(NL5cb(y6av~H-;UdU(YL@E}a58j0?>xw?GOU$Cm4 zU2!Etg7Zv0Yx@u*A(r#3lE4_Jb5ew^ z8D4>5DqMTu9A?utC-I^$crcUd$Jj1E=Gmf3|> literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UShortSeqHolder.class b/idl/orb/.class/org/omg/CORBA/UShortSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a7414f077ab891d18f6f3b700bc18db09916d3f0 GIT binary patch literal 681 zcma)(QA@&56vzK}ZZ2(=m6};rR?wUeqh5`md?^ToR=xNjGlwbDtuc+hRY8$N^a1)% z(Yd<92}Tb)+;jK)pL@>#e15%s064&I95PZdM3IhT1sNVzdC1CGld&!%#~}4hyJs;7 zRf8dV*y^_YBZi1txMmQ`PJ@0)YSrMWRP!ve!LX;EJ6=QqUk=Z7^?&3|x7l2r>6&s@?y@2I3;7K(xx;xaZAY+_46 z9@`3bkYvb(o4Yb@sXfEGJ9X@aj3J9ynna4)GlT)epO==A3=m$8_ahD< IJ@PhyZ#`L(hX4Qo literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionDef.class b/idl/orb/.class/org/omg/CORBA/UnionDef.class new file mode 100644 index 0000000000000000000000000000000000000000..2dc233664a602cc13715ab63be898e542c85a6ee GIT binary patch literal 245 zcmZ`!OA5j;6rA|!^REk0m);=Y4YYM32nEptq?(qLnv@uXUd@FE@K9oKSI}9^W`4}; z{dfXcVNB={x`ZB~PZ$t}gb~Bc*o>QN#>4oqS@V-tMn^JbnB?Lvcp-Gg<0O}7$FThE zjZ0~T^SK+tqHZ}>rM$@WTR5*vq0vq#EiJ>euKbxRjdda^B;Q5*t#-;)0Ruw=Z8XvH J9Dw{)j}Nn-K-T~O literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionDefHelper.class b/idl/orb/.class/org/omg/CORBA/UnionDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..074fb2db9ec9c1f5e75f46f086f477da9806f6a8 GIT binary patch literal 2141 zcmaJ?Yje{^6g}&gY+1pMae^U~HiQ;OPNF5uC4t}V%y9Ouhwckeytp1XVR>fitV`WwI^9*UU24G|yV;}|aC z6Oo2b`LG;Co^P*2@flyQinxhed?@hcnuv82`RsE6UkLb8L=ray+!nEcuLOJ@$0kYw zz7a9b`BT{9!yN(N3fN`{tJc$&&XCz`nl+_)P*c{ow$}>EF72*2t9qUxvQjtd)+$3V zJAIEK#JB0AHqA1_Sa#ZnBshUWUD`_n=04()9ZRb`E@`b@t=u5WK)uS4Cd4D{7foqs zMornV%(_wIBI?GWZdwd;Szo+@@igz-x@**%Mp56-bG?H8t7U2xg3g`>^~-m$l!K{j zq-fO-Yc)-aD^@m)){#XLb?qR322c2jS+^*^TSJMqj;tQjS;<5U%`}@&80P(4TjfW3 z#X3ty^2n$>)GLqms_L*T3}M+jBb(?-rO_z}30Ls0fE@|DxGLc?-jOiLXCL4?L)1A) z33ox)aAl*oxlHvn$Lp+HV~)r2!rZ)sDO?k9U&42IAYl*ROPI%kfFC6M*j+3!T=x{I zx~MKG?q&3!A;Sfar?OTks&@+8g%ZQ0*V4mx4she3)e!KL1QkCsjC*|@!2&c1WmFg@ zybh}4v11*TB~+nH*hh`wve(aXyRA1`y2+62Rebjz8AiPb>MANoe(ntCD^ziouGS4p zH}|!Qu3998%CyH~_s!sr|6=>v(HD{WieaSNcB-RlSi$&e)@9`lc+PG>mn1XrDA>iz zaMhc&dpUib#t`Ry>9S1?fq3gd>hz!sx;Uipx!$yw&`CY4)(=&Uzj&vd>K+}HTGK7H zsyFl+T@J(4K$dPcMcawqwGs8ugSzGyHVB%&7n-E^euDlR3?lD4nn^ULcBJt=T8+|| z(Kjr=0Q-$5AV=y=+nnqefzSy8#~o{ox1VjDMX;}3S6B=(a<)r`zC5@jw-MhYH>ot^ z5Y1rLB?{1t6SXly;?6lPb5LxTRf@!8W#!jMJV*Q`k`G>B^q<@tq;jv3>f4fYZJg&) zx;cdqNTet!dVFlI6fyB|5jofwYw;9&Pm4(SB^!UA@I0xT@>_)2F)2zvLsWi+^zp=V zBxE|>KQR`-Gh|+3oMc`o&5$+KMy8F6Gslj0S7HRANIa276d!tSoE#_sT~ha8@jw3* B0Nelo literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionDefHolder.class b/idl/orb/.class/org/omg/CORBA/UnionDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..4a48b1f8e2ec890691e5d3100efa3d5087bdd6db GIT binary patch literal 760 zcmZ`%+fKqj6r6>YO05bCh=3Q=#8Ms_eZ>$JA2cx`@%BoJR8msfrdcrll_naA4}O3j zW!!~gD6wgJvOQ;Jx-+}qKc8O!j<7F7LN*RiDS#LXq_OgR_+OehTCC;q8i2EAhG3}Mu*^F9_6_{ zHQKhRUpn4^-cSbX*El25dh#vGgw;q&b3nr!u|=OfMk%P3xy{_NKHq0e!6Fm|Nyrkm z6l`NhK^eOW_K+bc{crlhwL7Lykm?yjL$?j5t2f&{^MMkS!;C*W6DQnRw5n-)TveDv zQ;+l+ie}E(%(;j`U?-76p}?Yq#%IcN#38#X5(pO9OL%1L8i{Ph5@dCWeWk|}*3~{h zUReX<@p3TEA;um+=3}k;j@T5lf>eOX2AHH)9U(pgNn>>$Qq|rN8$p<=tRWLXxEf)9 L5=IbT_%?uFA7rih literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionDefOperations.class b/idl/orb/.class/org/omg/CORBA/UnionDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..fd8826edc4105526480487e9d43eb4c755b58814 GIT binary patch literal 416 zcmaKoOG^VW6ot>#w()IsA=rhl)yyj3wkw@(3Y7s-H!e!rNrx0CDQOV=YcBi&{wV34 zp&~N{$>Kon`ObZO|9pM{xW$RUp}>*Au|St_nwjO)o5ENXoF9jeg(mc(c;tL8U6IQq zeZ0SuPyC;_O!oH5`mekfC1G2>dO@F9cEOVxs+$a1q6?4db&l&OTHI z&bf^KtCwL{^}#EApl9hqdlfi}yL9L3UCB3PbD2)&dKw5fb*h}2cWQ9gbyMPOP{wNi hm)#){w)kzM#n*1P2yJu#R)L+h?pC^o{k0yj6Dy1gaH;?R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionDefPOA.class b/idl/orb/.class/org/omg/CORBA/UnionDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..f66cfc54e89241110a1052d76f728a8637f7198b GIT binary patch literal 13897 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 SBKXl=RA@pCpP+-})%Xv!O6uYO literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionMemberHolder.class b/idl/orb/.class/org/omg/CORBA/UnionMemberHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..96bce6a83024fac25c65bf043cd4dddb8499082c GIT binary patch literal 778 zcmaJgy~@lXlevv?HTqTsMbbkbpbr(@ zt25eQGWO%{_dDn8o^$W_&*v9_6CBErkWV9pf{aaU@v_ZJQ9?<=j)YwTactNllc03v z`hDFU_Vrf#=DexjJC^HQo5QZ@HwaRvmSfQ~f}~n|AP`z^k8#TC0uslG9p5y11V>Sz z=lay>+NOT#cq4jC8En|#j8x~zw)(cVIqJf@+xb=V)ezn_DPs+8!4c zW&t&0-G%~+*bASL7$nz<)e0rIKx=x$JX0LA%OinciM@o!$1ax0RxC|cSJ+o}I$>Sy z1LT!8FdeT3;{p=w0c1Yb>hDO*F>A;Kn0$aqYxN0|{~%ecM#_yws*wZQ-Y literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionMemberSeqHelper.class b/idl/orb/.class/org/omg/CORBA/UnionMemberSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..2db0ef41af51f4271d097509402d24a0a80e7357 GIT binary patch literal 2174 zcmah~-&Y$|5dLm9u*tF%2(1Ct5T=`yj74#|q+kroVR~E@rw}3Wi7T;kAifel1%2uA?R4neZBy(Y8m{o4s4D&Ice8s$99V3 zq|IA>>M^G_ysMXLb-Gx@;2-T4inrS-?M_BK72I%Hj<^o0{7#LV z1)j4D43}bQ-x_EQqu+5$z%b-O=_Nz2IygJAqZ50~O=plT#2&7E<8xg042swcxmu}g z7M%^5W?1Q3JTGs4#~#{f;hgIXx8>Wr7Z?VdJ@U$XFqRfQw$|0X*Er?l-s?WT6P%{s z$TH9^9d!Fg9LLvNv`Y0uIB5R=+7^w%M063-z$#6aR1q+by_c!Xd^ zt3zpE;D9V-igMbC_5#_4AWg2ycvHkrE6GK^LIH^AXMTqI0uv1kN)4Q-W9T{^8yJp^ z5MbmNs3aHR(=gCe0-GWj+Gj4zkOM-3$mpviX%V`@tE3+!t0{syxfFehQyFP_BKi}C z6BAkkuVo)d?9sn}CEECd2)u+UW0tYMiQq7;v5PL)Wdf53EUG0A>v&ySiY5*TNlQfM k8#w(SKuCWI0-J$`5%>oo0*O%ma~(A!9rQ8EtVuWi1FcggHUIzs literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UnionMemberSeqHolder.class b/idl/orb/.class/org/omg/CORBA/UnionMemberSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7417f25f5d3b424842c701da42b6dc762ccb3cb6 GIT binary patch literal 827 zcmaiy+fKqj5QhH+N~IRX11g9jcq(ww=q<)X@In&}iKiPcNRbV}lop$U@vSt`NKEtr zd?@2ARs$r(i%xeZ-#L0Tc^BL<4%zwyw|jv?mk0M%Uv;q%66SZX>FWJfKt`r zMx9|>8!6wm9oMLtTtBwj9rxTNtW^|>aP{74x>Q{Al~g+Jutuu74{eepwcN-t7nB#h z7FDQ-G9-M5RH0x}#+r%@vMScGp<)wphODpToZlVUW}Q0>v0I~S=%!&c^h)iP-?$8! zVcp-rKeLM2|EtZ-wx}KYv9RRp$B>2NZiMc`GxyN9*pRv7iuK=t@Etq!#3sNHp^ph0 z=>;(u1K^g!+&4NzvgqO@5m=cqLZ` jSA2nUp1Vp)0L#6APCQ6d0sD<>tQ$PD6YRFnFkTLxo=!91 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/UserException.class b/idl/orb/.class/org/omg/CORBA/UserException.class new file mode 100644 index 0000000000000000000000000000000000000000..c45ffd595fce5a788bf0291a5bf58a7509e5b7a0 GIT binary patch literal 251 zcmX^0Z`VEs1_mPrel7+U1}+f6&CbBX&cMsgz{kkIW|NthSz^b?z^tJe#>l|poS%}) z$RMiWla*MOsGpOVm#!aNQk0pOZmk){!@$PC4k9=i8Km=z()IIm)AgPGgPa`oLyJ?3 zTq}}O3raHc^B5U~5xS8?6;SmQ#fILAU%?PAfwYD=bZUizIz|x#hX(6C;CZHIbmiBfACWt%(005vcmH+?% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/VM_ABSTRACT.class b/idl/orb/.class/org/omg/CORBA/VM_ABSTRACT.class new file mode 100644 index 0000000000000000000000000000000000000000..2d16b9aef4a36b9defa90bf664aa5cb7a5f7c4fe GIT binary patch literal 126 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_*yICZI;3 TJ_cq679h!s RW(F1@%?ji(F|Ywi1^_&c86f}w literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/VM_NONE.class b/idl/orb/.class/org/omg/CORBA/VM_NONE.class new file mode 100644 index 0000000000000000000000000000000000000000..1b4225392cedceb00cf15b6ee09ffad5f416b708 GIT binary patch literal 122 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gR%&ty8_*C2Ca@k!24)5p OAdeNuV`5+f83X|Jei(BA literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/VM_TRUNCATABLE.class b/idl/orb/.class/org/omg/CORBA/VM_TRUNCATABLE.class new file mode 100644 index 0000000000000000000000000000000000000000..b30a5ad774adfc4b542db54852323b113ccf37bd GIT binary patch literal 129 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA2F74U243gNd{&H79hYflqF6g@*9+b&xv6|^7D&m7< z^D+@h9MTNqTbtV}G_^T7J#TXRyxI~QyeU=|=H@k|aFt=Cd$?}Mj;NJ{ zt>HS-8b&b6kSMg8j#b;?cJnQ-YRKc6f>jOAv8G`i8w`_Od5lG4Nx$eqG!$g?)PJJS z_pMSZl{_Vu3JD*fAm_e16 z_4;M#cb(@w(f6OE{|kU(q#x)Mr!yIe)@$@MNIRoFlKlqunGT>p@`Vp4T@VPLpzo85 z#-(9=bihYLsZa;JfiWLkM%0BTz99S?BcUINygEVj1WGCvV%aw0UlAruGRXn7hQP*1 z-Yty#DN^X89}vyXw4r+H;+Vi~A3qb{Mt?`a9o+TdA=+hcvFtBsZ6rDo_i*2j81@Uq YDdGy%81QPuFxhoMlmih)ay=OT07|$~4FCWD literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBaseHolder.class b/idl/orb/.class/org/omg/CORBA/ValueBaseHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..b5e5fcc69b0fba49f433c22e3c270e9dfc0cecb7 GIT binary patch literal 959 zcmaJ=+fLg+5Iq~>7`rY_S`rGBTY=&@1w&thkV;;tiWG?;UM)jb(Sj3O?j}|HRW0HY z@xTZ4qpHp(0pT=3mRIYYbI#738UOivcMsqbc1#$UF))d@CT20GmU$EJuwY;jOKP{Q zV@1b%9jgpl#}C?^p>TNacYIfbZjHyn55!OZG~i{1%&uq&xyLYJ7f%?{m9S3mS$i~I zK{PMsew|^%J`CfA8#WtmrFyjg*^RTZ!$LCI6Xnak z|BWAnL7m48*`7gx-)gwk({p|%8CH^%$NKuEsZyVjkf1uHhnosL1`pWepbn4uK{iXx-!r4K%fD}D| zslra_8mR|N4zCB8`~YJ(r7k9(K;B?_7*cYskm@4+ppr-7$xTe%)P;75%nkHkDjDD( D;X>wx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBoxDef.class b/idl/orb/.class/org/omg/CORBA/ValueBoxDef.class new file mode 100644 index 0000000000000000000000000000000000000000..348157c1669916721bffc60310e121fc836407ae GIT binary patch literal 220 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2Fd)Qbp8C?bbV+4ASXxtu*96w zRHyt3m((;y27#=^vPAuy#JqHU|D>$c`OEUBGiWwOsP*sIg7Nn-6 zrh&~AL6w4;tAHw8kY7}in3R*M@9E;>npcupQpv{1z{tSFz{0=`#HKLF-%U&a`&%lHJJMsNhwZ!00 zPi`{=#4>wW6wDj`BqTbxnOLe03)hY~0LOjra)3bHm zsAe}Uvu0FMw)J|8FE<_+_-;-}miS}K)XRjPIS%cuzzL^H zOs+lBeM5Y6*6?wY&>F^_tLGG z9`LgD9x?HjQNGX14|zrF5nVfhXy@H!g%`{9PKziwj|&nu6>Q<6f)DVaf^jjsj4KRL z$GIx_9&|C|tA(`%YPxCBeBH)#BrVKN&nTF{B?)&G{D6B3cJQNu8O%!fNx{$EmwARO zuIAO|wE1lRdYnhfaMqQXUCtM@+xd-rk+irYNBGWRuI@GK5`Iyj;a7%HcdkRT1YJQ1 zWrp+a9LD!-Ujn!m@p~i4!31#!x!m?1M&6u!7K=bQAVU4{Ei2O&6cUV@`F4j!LU? zORMlYuhQi(Obk@nuclxp(T8tH+jpTZd4&yvCbt9Q^g|e<9}9ylY)CVO=HyNqKccr` zdNO(j)#qTp(*%@AR<*CiW-7J>E1X?cfOI`v?_LGlz(@A$NsEpdw?Zr06L&SJXD5Ym}xG zr+P$FxY{T3(M%AvF+}1{^-`vhwNsX8C$U#reTCRFL|-6&?>UD5&Adh;^9l*alA3Ab zw2;!RDF9zAK}FG5$mU8Alh`h#`W<`C9TPv&A`^bz#@{8pDC&m#20?Z}ijq$eR$n4{ zF!l^Fl}`6BjQH>rsTVjyGS3#LD4J*^)yC-5K~H;MVhDjyG?qjd*IYMF3A6!SQuko- E78n-|JOBUy literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBoxDefHolder.class b/idl/orb/.class/org/omg/CORBA/ValueBoxDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..15c7c818389a7529d4ddbfbfe1f6b62c541c030f GIT binary patch literal 778 zcmaJ&&b{A1pI-n@aU?@RI*u4JGB&ZrmuB1Ev!^Z~ah%w4486l}90b~y zEe7VfqdFh8qF@<{f;eOe zdkXT{S5Ux#fm=t9wuHYPZ0eFNn$++DVN?5nLwDUY#`-9xEiBB L2@{Afd<@_h;zYE$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBoxDefOperations.class b/idl/orb/.class/org/omg/CORBA/ValueBoxDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..f7d9363d7a566487bec53c75073973ed28151340 GIT binary patch literal 222 zcmX^0Z`VEs1_mPrE_McXb_Nc122Mr>!Th4k^vt}(ocNN;g4Fnw)HFs0NexY({GxRI z{M>YXXa684M}1EhpAew5H6w$R1`a9BFh&MtR9#_-Ii;yi`4ujyY5oPNMTsSu`FX{R z3<6n+Wr_MZiFxVz{z+M>$t8>oN~jt^b^%?2qK}P{fsug;h?#+YU}9lpU}0coU;xu> HKoJH2$j>^+ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBoxDefPOA.class b/idl/orb/.class/org/omg/CORBA/ValueBoxDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..0b6c88df853cd45c81edfbe3ce90335c8a14a732 GIT binary patch literal 5242 zcmcInd3YOF5&x|%X;^OF)k~mJV_jA!CmOnWxZj>~uso-5&bGM@_^RR>te_dY-*O#vAb_<{p>uW(jYR@K#>EjhS!f z;THNQ_p961W2iA%{pu_V57sIwe(!~fS$H=Bd?nCgo*6Z^SZTLKyCYu0|G+*Mn+@3 z)?uB*THALF8D_TIn9g?h50Ccsb{|l4vs#~VY(SeN>7DI9Heq_!7HLSSxm-%mTbenk zrZqBh$%>K@!?e_ioHnMJbDG&bGThs9sBcHr%|-P5oH0edZd(y|Ty%s-wd-cJg4M&j zsvon|^wd6eW}KCa_zcBnS2}0!T*0+SD)=luC*t!8zJR-U@kIsWc(Q^6I4I&v3hu@| zBEGEPEBLB_&6OeP>m5i9kL(%k9UmOt&+6_Kuzn>SgS6GGW-9m^zOLXK_@;<&Dfl+- zQ}7*pSHbu2eFZ-?8BD z6+D1@6#N1AD)=L7{*!_~<1Y&SioYrNJM$i3-h(`QkY^9^>>-~01OF89FE;sa1rIa% z4E`hHEK~lg;FJJS5NILPPyqAV(Nx;VTdJPdOo|?_^XfE(zmBJrtOAu3IVRL9SQbKx z5Ede$AhNuq;53q=5aop|pm8NOPN@pmJ~%Lxpd#zy$OZ~6aZ%S!%5xAiK0l*nv`MN( z2htXV^t(=H9K_ZjVsLbL;)s^E96)Ooz`zh2a`+o;=k0T}S1la2tCfydDyvy3!_>2S zUd^Q}f~UwaDh8oW5fq`GA%$uXin1-MXL!aCo<(h%6X2*#b>@mqccU#pv03G1gUuzo zl%xzDF#%0BMV%-ZxmindGq%Yly4j>okutRzqo7-cIZv6*Xoa+?Pf%t<)5aXV>PuQv zQ+l4gB!p!egmt{+%?j93c_utHL5S}Oajg;!2`80 zJfoR5h#H5dken29M7VLK3_GI&&I$A{2S}}}ZB-L{wHz6t)<`YVG>%p@D90aH$=Z#s z)8Ch>^~SP0zMfLi!zj{5Y1;ytX;1zWMEhx8Da@4yPi>tFQ@{o79+9&5D_Y8Kw0ME; zMZz6aqK0kf)V?SNsW_8NUEXSp0G$uWNzT@-soR(vOp@qV>*qWS!iUfK0P%~SOTUGL5Fjp)mSD_t%MJzvmF z^8Z4=Uo7pr4NI2USDDYYsTF2(B)qYjFrz}wY1$On1n+?F=3s2eE;;R2SjMx~=E`h1 z5#%suGAa9J5ztp9@xI;g27@`HOCV!c26-lG$1GD#(+1;ye^_|+#BB1zy^*Woj#%%+ zJw>gDS{4P0FYmz4#`~|fdsNh#DkC@gw&7sN+eYr$Gp0VRTl$=qveH$)XI!w~^Kx_r ztaJBVwij|*wODS;vbQ5|4rI1;Lz(1KYh|L!tWx!L`{Pul=*mLQr;o4sx2)3lw*>qe zE#C^{*w#wNR(K`P0$+kvJX?{nUF!;%EV-T;q0cont91|9m(dJg3gpDjN+;Grm)xSV zt`w@`)>?X8N2@6DmqbYmr|~Mk)fJ|v54-I(NZ}((_wb~9;cg4WX@IYIs#+t@#!v&9Ki26lr_A5$^o|gnzUpaw3a!@DTcCHiV-dm$nt+yv@Kl%G?6M_d z*DRs-wld;rE~14@)DSh=(Yc6_2l8~JTu39mYY7rsK)9sf8BiT=D1s3E)kE!l3y5?U zAr>L+i{FKYWki#_UW9x{{7%#rq3mwG)wW;jI0`h-a)h4a^eobIKY4#XJ=f543qAB# zTR02UbkcJzJvY#^K(_kmG3dFzqlo(2BGx5Bov~064YY1dgqd2z`a~oaiG`QY)ESEu zvEc-h2}Ix$Ak6IMB3fdhrj4;MF&}l%QN)aM5|Iv;jM6w*3(@c5XFe=RHEk&aYIiP-a{F-DeF9x5u4KBQru?w EKNNq5r2qf` literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueBoxDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ValueBoxDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..6045b009aae772e750127defb5f2ece12566a28f GIT binary patch literal 2048 zcma)6dr#X|96dJ)#00ZK3Up9tOS`TKl%$WX?SOUVv30C$VT7?|{9&2o61g=ta$MAY zt9B1fOxixcK2+87%L7Z;nJP=i_WhlE?(cd3d-wOh0PbNwhs*eC2-A2XusVzxtO=|O zYzTZU@QuJzfo}yi1-=t_Ca@*&y}%Cw6@hJmAG6poP&Ke?;3orn27b=smn>>o{Hicy zHMFancBmC@Zuvp8>>oAD>y@3g)$*S0zSL{}s||fvIo5$4I=r_oZlxWDz> zKC#QL?KR8QFmSvkt%EC$=Y)?H3WX2SEAA;|*8K(@xK${A&=!RYmhHNhcJ%_JhzqaCKD&Cpsu^S5}wz*NTbGj`@MpbUfR&!q>-|xj0mqig~fQv9(JxgPV>{ z>Ex(qk|~L+-Kq!90o^FYn7#8F+jjkh-PGlc zHu+e3fqOGY{t5RzIiHr^wqQ9Pc6>z=K`#!i7mmjiUW<9b4wRo!sz)1P?%$*EOE3-GGejuTDn`h!?@!d zai57{{2j{GIHi~BMu%}F&e+_k96Zdqm$$fP=K_Fv~Ol$56P@*Bsp< ztiUvHJ!&Dvho#_En3HPoJ-=9(^9z3>^_Hukbrzp=Ib(b)t_{rp zfz+F>`6fQ?nn(Fgb2alD(mg9{-nCBhEt_+)`4kz2h*RuxE_Iz47S6&c22$vG!InuD z8jOV4QGJB6kq|pBS;&Zl*pPjMh9V(0Y_d=;5@J915gLw!*zd_gW+cRMNal=098OCz z=c9P&~ToXok{(=qV) rOlPs}5HM%_gYjBAKT)k^@{`rtK>kv-HkkjoTFd6As=p)MX&k%u(KJM4-E79 zzTN;PT z|7W8@8evnd?hK1+B+$x=R7q3oTo`86&Mw>^%R(|tt9s3fLK`dMTyodjDx2EUV_;~& OLlZ5u9TPh428SQ`!AGnB literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefHelper.class b/idl/orb/.class/org/omg/CORBA/ValueDefHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e115fb9096197460dbbd46e1ed382110671da5c2 GIT binary patch literal 2141 zcmaJ?ZC4sc6n=)cg=Gy$(2$s>HKq+ND!w#*5o?0dHnvhzwWhHz+XY5Kg1}jqruiw! zudwYo#5Cu$&6nn!{-~bbf!&2&)GxC$bMN!q=g!C-h4E7t_$o1f4w%>Xq+cDF=h= zq-fO(Yc&m1D9&y)T5Xdga{VxO4o~ojQ8OvOJ7*GYwaq@$dC7ztx?wb*FwA?own~q9 z**s51yxk~20DVWECgzpvn&|54q+;kPG zwx}&-oy!ZZO3A72mr@hEX?yx{3-?oIAtCGF6<(wOYgE z#(`eunn_ZqO#3WW-wf|~FLt0EJrSv|7)E++r`f8`Di}}AI;^4rFIWxekfeql1*>=& zuDi2#E@zP?phSVu zjef8sBBI|dXv`w^C&D&w8q=0>jQo9sil~_rL^_ar!Xi+Sv0PI06~Ps?gXku?Da9F^ zXa=(mk&kAAsDlv_cfodMCLUT16yjQgNs5+ zFQ))}u>>VWkB`NbASMwmr1}S9EuLcUYmo`RWZ~}|=GfNmNDLtmipG)%<9*kSlLG~yOX?jg{s#`( B09XJ3 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefHolder.class b/idl/orb/.class/org/omg/CORBA/ValueDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7e025cbc2986c98a373ea6c46de23214d0b6519b GIT binary patch literal 760 zcmZ`%-%G+!7(G`vmur=lnyLM;g64b}^=e3E4+Vix;j7GCqD(i&H2SX!ilm4Bfc~iH zyE?;3W9)MGednBg=iK}K^Z5nf1cx#tq~nMoBV!X;zHIR&Cm}DPAYq$992wToWXRsw zZb!HK9lch+y*Sq!ynJasRv2QZ-9gu@GDOuMw*&WJUi+^$E$YAB^X^nx6*={-9{$*HAl3UW70k*u9e4#&Owq`UxbvkH$=t|W-1#<`4Fzg=ug5J J;tL-G_ywfjt+4`W~ezce0Kz!&gM zEcgKafnPz4$B!hA!wTfZ@%Y?1_uRR6{PXws9{^tCm4-tN&on&O@Iu2&f>soVVZa5O zP8?q_eoZYF5p?zb)hOV$5qP$7JpS1_SEh?z#$}(!nK7zJBx}mq!aH($_ z=Yl)FJxC<#Qx;j=F^jU_tStMCTA!%RjQ6qYX4aCep>P6U9&gj)jEYQW;xW%;oWQTh zyX>UmOKCcWqmN%gHaM^B$*D?~cBYZpph6aD#zG#!w}0!Q)cK=4(P=PcgR;MZU33?O zjML=c2!8!ncjG*fa#y}nXOvTq$$L3eQ;@c@9Q5w9#T1j2aJAg3a>+%?wB+7mC-b2$ zqU6PB%tmu;-Y`oL94_uU4tzl!pYi!^D`KYeG2KO-lXQ+|5$gm5cd#a(8t%%!ShGg3 z4h>LvPvHhOGu%?Rjr$qa74D#s;RA&a(af-=u$`^jNY}gBdN*4?!ebTp1bYfQ*jM-z L2MW9BNoV*2fq;`n literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefPOA.class b/idl/orb/.class/org/omg/CORBA/ValueDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..30c2d0e8ef07b9fb1c4b7bcf7efbf1c4661cf01a GIT binary patch literal 17930 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ValueDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..1bdc0527b771ad649bbac2024becf87f0d58f31d GIT binary patch literal 6355 zcmcIo33nS;8NFl6mTbRlPMlP=(==VEoy0L+C=jKk&QdT;PgUO^gzG#vP4J zQYZxqZOXpy`@R(DN>L$Y-^%_2_$wUlH`|LwBL{rKnRBkj^X}aDz4yLt{L;T)coD!Y z_~#%B_|yRQ;nM=28Nz;iR^W32pBMOoz!wF+B=BW{uLyiq;A;Y37x;$2HwC^W@NI$b z2z*!Idjj7V_<_I^0zVY^k-(1yo)maW;Aw$p1fCUmPT(g3&kOuipe68vz|RDJE^txc zMS))k{8Hdo0>2jcjlgdOekbsIfj?yN#~l8Y!%I2*IfuXG@YgK7B8xbBGKE>1a1i&F<@j~|$xI%(FM)*_v|D@2}Z4?@j|Zj$dAE;-rDhL8r>8Zy2ArJm0{El3A~pYPM&&r_G8* zGj7%M%sH-Smg`p0a#t*OYHoJAaO%KBs+n6F&E;j%t!kUtj&ai4_h2TPi~GR!T|2%i zK~|(>2Wn=$_Mqj`z-!VpV*(|2q)6&nT{{W&;W-j&4%YJ8CcJI&u!Wj z(?23|p0qvF=e@v?94y6ic#a@Jh5rtWUm>!E4#>asX2?cZE+EqZsb zeWfL9scg9h?38&sElGKj@Qy=APMlx13dL0KJ?c*uIL^k<4AWz%l$#Q67p|-g3CEp| zCOXOhD6%LxgZz;11;J4!Nr%r>EPq6nkP_v| zCC5_+OYW~b&e`U&fytDGCf_~i*q&LlttuTVSK%L)?J;r+$#A2zAN`JfPtC3t7CO?& zr9wl21tptnHE=A&jG4rl{!j9o;t@p#%k-w`l8IDhWIqG;7jr_BoO zS!+5;`ZVh(^@6<7VL~t%7@)!}Y1+(k1|GSx`;j#3KAEM9RsL9D)KF-YWjC4f%WJgh zzX;{SoS=OlSZ+-Qb%IUbKn@s5h3fxR8fXufKCsmm-mau#i#W8_dg*n_Sa9p8?69V@soRqtha(BPn-7j}h}Nx_Dru#5*3Tr?CsG!<6xHidIIukaw=uJ8^#r0`BWtne

{?tp!0+Kj@8JJB2E{@6dmEom;{fp>|Jv#^IJ)b3 z7`t{qhn}bS6db(+heFOK{u+GNx9eH-JQ)rj#@*rYM*jBlY36D4Mx%7YaC9qw<>f(n zxrK}Y&6x=~+d?CTgtNPaz8*wY(2LWB`n3?9yo*p)3o!`Ng>qVmG15h7KnpR3(uD@K z5JRks(2y2l2&M}u15bpz%m_^r8f{^n7Geaa3$52e4Dc>O8?+D;K)TRIEyVoLMQD>2 zV*W@Y@o0y8;C)?__cMRSMNWX)KGc&#R~u5_JTJY%PxoYg0!-h?4uz-V~f zBXpvC{|JveKad}6;ku!CUs=sP_Yc3SIG-JUb@3VW2Bi}J0aIQeod5s; literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefPackage/FullValueDescription.class b/idl/orb/.class/org/omg/CORBA/ValueDefPackage/FullValueDescription.class new file mode 100644 index 0000000000000000000000000000000000000000..9484a9b7c5f836d6d9219c22cf162fc876e03afb GIT binary patch literal 1369 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueDefSeqHelper.class b/idl/orb/.class/org/omg/CORBA/ValueDefSeqHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..dfaf3604f2ad054742cd75b3cc19623bcb500863 GIT binary patch literal 2132 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 SQa*&M5q6R=g80PS0KNe~R>GeE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMember.class b/idl/orb/.class/org/omg/CORBA/ValueMember.class new file mode 100644 index 0000000000000000000000000000000000000000..9ff6fc735e9565664eb3b4dd0993c3a18c9cf27b GIT binary patch literal 672 zcmbV}TT22_6ouE;(NUYq?B-OKcGamE=qV_IZV!PWWcVtho@7L4Vw?i$SM@LiJ@fXn9pJWK)%jAO#Uq(oL?N+O4812dR4Fo$`9`F(uD>EDST3meO`C|{qK)I0nFjCj4@o7aRWCaxPVV& zT0RxaLKsc@n1qolu zI4kfISQpC!313OrUR~luWWe6=+>s4!s!JnSm zW(bID`sfX_$S|6o@>r5N83nqq7Y4+Az(bpsQF>Z1np;M(Mv%U0nITCQPmG@ot!C6K z+NNbz>lHzwTHoiU#c(a{@t3PV&w8%5jarKr_+F8ldA^$!tR?=lWf~;{m_H7{8-xde z;xV~F?DAgYX2Y}udu_GeY*|E?8++MP(Spy+sznjsJ`rxcWgX$29$u(!m}cV{!woOu zdhrP_S*KHqx9X+Gy!4cp^&ZyE6R>tpjW4`ds&$%1!Tb0?!lr^PTvBim?Mz`L=?95dK6PT3nP{B8Nq+kc%D!7VS3EwIBzI&Kw zxa?|beNLa(oPzadnBkmDQ(MmE^#{3)T!CTSEjhC9BzASLS(EUC0v$gxTy*QYX-hB^ z6j2(0)ZKcUR;#F>46a}o6^2Xy2YQ#+n%rcFAI(g+;tV5hJDN*sV^I}`GbQR%i|f_8 z#m!x##C3~kEu{x1Z}7%j{Jw$qc%;c>80rqL-eWa;LQ{Eq+(8w?J8TcH1CkneR_rz( z$d*&CzWHQ`ifMMxCftc~Oxzu!bY|8uI)6eOf^X6d*b6=)XA6lrp8al9i00*CM&bfgh6khb&+{GGehukgRc$e~aRCPHmUzrjy;!h+!= zTK!;2M8s=go5pNle#_0;r84A~)PqnSo}jERiSSE3Ljk>?NYF5r6awBY$Q7K_c@8iM}f})5aM= zr5jTKzF2~SqUXrQN)VE87gGIwzUGdRA90b%e%`i!NcJMATk2Z`*#R+1zCc+08_9#Q zmx!s9-QO|l!waNd<1EoUSC}SgqK#A==cf;P+#QM`1VYhR5@B3(Rh$&a0Trp6SiA#F CAsS); literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberDefHolder.class b/idl/orb/.class/org/omg/CORBA/ValueMemberDefHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..dfbb71696a23a66e32349b4d222f0c3ba39e5805 GIT binary patch literal 796 zcmah{VN1eL6g^L!%e6{Nt*k69XzGViUyY!YC@6#qzsk&)DAUQ9M*pgyNczwZ=to8O z>5R6}7`wc8?>Xn)d*1u}dj9}$h&=@|5)p)vRIrLQ5!OXW$=HywDPxO48W?7uGo&vq zyQy29re3OCpPuMdk-p-cI=9RGzQ_C)J?8mbbEd0#vxdzC>Y_|gWYmSUYkm(^c^opsyUB6qNKE(ucceci*Ac5=Ao*H zK#`GFv5g%S8Dv%LBF>PVWx%;*Hn`0YZ5snaH;rynuhiT8&LIoDyq}@Q^N9KW)8=MR zXoto&m8Z_^vB@{&pZk(r3(uy?c`TeQH@b1*FAnHA$zYhHp9w4JsY$dVXDKewE;g!A zHvb0pObLw2i*7lI0DXWW%K5@80u#&D$>|5LJ!x_gEP+P6%5Sm;Me|D%g}#~xAHau_ZbT{C z!!j`Y%?^7yAC3U}Xgg>*cy;hbsFy!mCUjkIZ1Pl@O{)CxdpJ-N@qLrvxFCf z&OdGxj4M>IuKRG}w(_O~TgNdM1)=78k<_|T<$m0EPW5`nU%Z)f9`GXEa<0pz$t3l@ z(tEAeI!jeJUvXR#diPo1WTjqaoczUX0^v!fCU0AHX@v!d+HkJgxac#QSA7u@zfj9Y A#Q*>R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberDefPOA.class b/idl/orb/.class/org/omg/CORBA/ValueMemberDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..1cadf6ba23431c48be997df5032004c5dbe02557 GIT binary patch literal 5456 zcmcInd3+m375>JSw5#-*l{5yhl6brOrXkI+Bh4_lDk?v z4G_xNmb2XVQEn(#lYnd*dT=x?g>n}t_fhV0mZP+x@ZRjMyjm&FU;XK~voqg&^R9XG z-s+ymZn+J>#bTv~y*R|fgoZ38d6tV~5Ar-rX}Aiuh5{S~(;DKKQE*s89j?}hd_=?Z z@O$@KU^t2co_l*Q&Tq!}WLtBd=tJSMl&_roD!@zc!8= z@H(Eop0PJD^^H8diI;C?>RWjBR>t1O!`pdy2M_P$;axnuTf=+sUY^~^!}~P6A0Ob^ z2Q_>MA7<)N6(3RYQ57HK)lE$NI1iuD@JW1%XP;JZvx;LXj;lDK;4>Pw;E;;Xvin7j z$*hVw6`xaai;9yfKCj|d6}PFlUBw+LzM$fZD!!!R%PQ_vaZ1HqD(+VB6$SSw_^LoO zm9jDgfyMiF95QB%?yQj;?;dt+D>uGTKut}W&cQr0w7K+Y$I5p1TWQD2=M4J@@x(S+ zIm_8BP}{zCk3eK=K4Y?6=b%N~R=2O+k+;XY^ONJ!QPGg`qox;F=pjv z@)Kn7>aZE^<{|T{X|v#LWZ&wC9V0!l)0i4z;R?P+5!#f_O8<2{7gy@I7hhNK4ISUa zw|Mbw9iw=*j(vEJg74_~F78wCJssc24+NH#2d1yLKQ*}filN?-fx%rY?tX!$`9m2X zSI13T#}Dx%9Y4lT6#P`j&+u~{zrZhb{0a}~_%(i`;I}${hu`b?1OBMvLHtRZU(ES$9S`F_Iv&BJI!?2O|LS-Q|I-D8&_xZ?9wwTo z#eKSn;C@|1nHu9|EiVK=Xw$_xVu>OWynm^VyK$vJ<9yKE zOcpqQpnpdX%dxVOV_;}-?2wsuT!zI`xx6OZjKV>g zh63@_xap*vBU2_FtXQUtBWDk1iiDN@{qF4seHk5 z^7aurr;J%h+twJJQ)DtfLoe4ilA4;Za%?4WICh?RSCyxIc|D-3DvD~B z2PUVo=A=nU!c|CMjn7`~Usn{U#wyjYWK^hxl$9*XhrI8+Knr;mz8BFSW&sTPb0ZNWk-X0TZtqe1HN#(9Q#?%NX?bEht zP!?vb0-2O(9|(tV*Pb0jqTO-B9-rpCprcNN!{~9z7RC2aU}=RBBZPDNB3YWJ)yPrC zR+`(J!L-TfuCOt@J=FC4&9c#GTnB8kFrB5{ZPj+m=&~PfrASox zLUoEol9izx@d&<=7gm!Vvdx#pN<&9Po{)yHj523h%A@2S1fNzWlahT%psz~)glyoD zRUSQchKx)w@>4Odc5EX}5le>c;mzT+@txvC2~G93xb%55O!dM&(^TOgePU2P zw-3vV;!gm&Oy!=AY~3zPpXyBb{B0pkE(;mo$o*l;wk9pdnlV#OT3}t+ERQ+tNGaG< zbiEMx>T0+v)cYpOuR01mo8!$Fl{R=l#O)YLsXJ)F#;~j+&HVOglMgG(-7k^+RO=2q zROK3!Hn|^MMtKivJwy9hUSZczsX38hE6WX=r}>sugu04l^Sh*JT@@;Q(=)s2BheT) zyZdENoZ==$MyxA0Vj*tdEV>ruo2r<#kQ~p@Dni0J(v7 zgt{|%7aC3?KFaG^XtyWtKwS~~<`p+d{gE~D#nyv-1pT)Kj??oXS)ZV1l%8wpIYrMy zK+Sr3_S17CJ@?Y{2vBWL*{iRc`f zI}@=Y79Xp^+)}~Z8ek@gB-xi1Wm#=SoRf$&FG)m+nAq!TWx~>)SO=?FR!zdJ~ZcSEeBm6V-VP1zGdJ{58PS(QC;0cC4E&n~E@to?CPwzitG zj>kz^XEkNXkg_>k7zkr1>AFJ9F}$q8 z_@03Ap|ET`#&t|!oW|8?IgMos4xYw-kxX8eyxjXGlgUSML$U=bEWa3v2}EfRL@IVG zHjUOcKV^6{(!6i1*0jh8%83PQc0pRHjGzRx8a4v7SJ?UYD7AZM3Ev;Z76p)Di8KU|5s5SgkY`Gy$wS;WgZ~2p%(Dsr literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberDefPOATie.class b/idl/orb/.class/org/omg/CORBA/ValueMemberDefPOATie.class new file mode 100644 index 0000000000000000000000000000000000000000..3707c3ec185e6e8ba4bafdb1da90db35ad564a06 GIT binary patch literal 2092 zcma)6X;TwR6g`~;62hQ}A_6MzW>KQz_5hX51x14dQAABmk|s48W~j+XmH+8|aCxsR ztkNIgkFq>B3u8IsQd4!Nr|;?0r*GdoU%!3&0^kB(Br%McE(~E-V6GbnaZ})yz-@s$ z0`mfQ1?~wf2;3KVAdnYW6nH4GBv24o7I-AE6362No+PlEz|%O^;&>LvbA_&AMb~uI z^t3{1!EviOXQP^%%`eSN=T^+xYkgmDl(aji*Ylg&H9gC*>k|qc#iCWIE9_lccxi5# zxteKLa|O?}>?)(3la_6H*A=pVEty_Xh|M|`+Q_8Re{W=W(X7>qmhEYG-7ITb8uRyD zbX?CY)pS9-TiVSn=BFptX40XSW8Rxh?mZOPdztg%i^oa`hxuAp7!2^{=N5!Y+K_Lc zna6fW&e&;|>5?|1sdRxyP8DP}VpSCOQ8Of&{i)z=BU`q)LC0~Ptj=3eNYa^Q>k6}> zFdQ&A>)4*jxJ!#YW~uJfUVFOO6zMNFgS@_?t2dpx7M=9luNm%8jV3CDid|6-!c4u1(Q0&UmQyb z5kAZ=|9eSEFyH$*e-y`v#~WY5U^Md)DwF*mk$3z8qla*!#o5ER;#^1OKSbWP!Y6U6 z74GFb%Gua^MB7nbV=F4#$>O9e-bPHJ&EYMFb2@(HWLunp#!-N7(aCP3GlI5L7D>2J zT;boAUDi;T(C{`Az7T6HT&T-;#1ae>qNAiQ#1ah`>h^_L!M_kPd?8kNxKNKT#0L0< z&@Nwy4H7Q2+ZSU0gmZd*4%;i7v&ZMK`@%VWK8MZO;tV3j2k2>B?3uIM*c;oqTDEVv w)IMK|-5t*9S1p|crgu2U8=C#j2Td58lK=n! literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberHelper.class b/idl/orb/.class/org/omg/CORBA/ValueMemberHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c36d9a94c1b878d011d0030ec313bee730ae0327 GIT binary patch literal 2979 zcmbVO=W`QR5dS?S`A+BOV4L0yrZ}=hEFh$SX)X{50w>sUa2!z1(qRr{NjaSjq> zEIi7mF%9Q%o<%M&_X+-dQo&OSo)(Ct?F&UiV0o%w4JQjD!^y6mW1StzKB9INvPQc= z%`P)<+Is{-vDSWpFp~+T3)Yapl2~g%lhj$s%$E$y7T6jK@H_Gs+5@D1JvV9`F-C?A ztDUbO#J{F|M59t1rq0W>#P^Nu1Hg z^kh!Y4<~zV%ghf`Fk#EkiQ5r$rdY6Sz9e}lUmUeb+|Wnb=l3ph&N6LEU)P+rdPePO zWB-#Vbyp_m6i4DN+^ygliHq1Fu(rCGz62dC2rn zco8p2yo^@_7ELE)|M`qjw9P_Z;#IsR(T)8QcVfH1%IXU#6{8v3tth20ua8h6UYB?S zZ%Vv{xB32e1hlMi%FG+tw3(-(j~P~pY%6$IVjnsLR4!YZWE8wd9i?Y7MyVw6J{!3g zJ0v>MB~a^&PT~W6DA0VUJGGN~xsAPY``IV7b8Ficffdyr`}hhzlK2>1636igUqavn zgOd!p@hQ8volln}bbKc9Ilhp{;7bKxNqmiOBo5$P2H#11k00i(hmk897L{N+%RNJ9 z4DS7gY7c3yD3x4ofu>;h_}q6UD4F1y;?|&eUibnjhPsW}yC0mz-&04}$|Wb%%fIXm+d9)z@{{%+t_D?Xzr) z23cTf;C@$z2E2aQu+v4$95HQk%t+grSvHR+9Q4MwLb_u!mq+l%%32N3sbSfWlj_xh zKs=R$UZ!yzmAC&JlTPnrEyxU;OK< zJ)5mgG_Jf$rz+AoGh+gK=4?uT#pfx+?prcYse!<P8xl^|tnho9S=KHu_6M zi<`GTouYK6hlk)j^wmIE5RSwrA%39)NRSq_$F6snK)8$rR~&8>JJIfOS0Ic9M6HWo zM`$21iSPs>u8}BqVYeriBFtj(_)XMYLR0((Y9^qh5;qaLgxbUngswroav9-Nd;(e- zwO2?(!5TC>-tHk?6``h11$)_ldT2b$f07h?|MOMIzi_!;`5kqKcI@Ju!~WiHhw5xX-h_-?P0Vp16h$6S#x%Mh|cD iaEpgyWwbG$%qAIcp1>Bj@G1^gH5Yk{h@ik-HvR*_{0h7P literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberHolder.class b/idl/orb/.class/org/omg/CORBA/ValueMemberHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..4e9c38b49b5e83611712b717e7291446a8d25929 GIT binary patch literal 778 zcmaJ=yn5)^J6 zuV*^Lp4n*LUDnN(DBsdyhk7-F#CdJX@dp%gH(b1({y?aFd# z-}@)}%1d9vWn2%PX4)ra_%-m#Foiv`YRgJ&UZkV5yWj49d(j^+emexPfIS5hSWs{o zZ^?LDfrNJyT*13Ct|}PBVwi4{GM2>UvVw7}gz0fjoZeHgiZx-nEWf;Is1N|>%TioO!&TJ;QLuHVWTw8Py#lU*g0VMcc}9;z+cfJOkz~!zt3(GwvFRl2I-u zGPY%wiqm6s>oo5;aqo3JuGMVoy|&Vms`SON5-crviOW)l-Clrx$8Col}g3u zxTWF?5%tLqG1u=Ec-1y5WfiyarHVK3ri#}PRWXej8DFW0A+F+UW+{tM> zzsE((Mf=gsFxDLewL7(kV4vY^te>fI6+VHNJJ1T5}`qt(-Q#5g|=5(=$!9Ut<6mPdv+TDzJD!A#g9C01g_?#=HO&wM<@1}o9-anh<#l7#^<=~85FS@a`jTB zTy!>Miea^9@w~kG9eZe_g>$|;+_rD;USJq<_Q*@`!B|T4*m_U*UgM;Xd$0R=HaJ7S zkqP=OQG#Nw=@h0jZ5Mi;rLQr1GkOnbkHLPT14xl(-xZHKLLk^g;J}fFaSrEQ={SN2 z(Cx7H1kx@2F@g;Yv_Qg`#RXR_O>d#5Y0okE5L4PS3^pLA_2-ZtVn}}m=~sjf9wC_4 z8c>=TIv@*~qMUJ}y-2npNK#s5r6x`^Fmi*AO^imy z2r%*sRFaGEX&C4!flU((?K2lpRG(Eb| j#F+;HLi$q>*a|d^z&{8PNQCmA@2VN;V1Q9(ExPd^M#v?O literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/ValueMemberSeqHolder.class b/idl/orb/.class/org/omg/CORBA/ValueMemberSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..9bb8729cd18d8d1398befa7cc8cabfd2eec7558f GIT binary patch literal 827 zcmaiyT}uK%6o%hX*Hv4~KD0E;w69e!mbx{9w2Oj5$mpgES#uC&b!}OV{#8Md1oZ>@ zQPCOQLWQ-9Jv(!F-ZSUCGhg5Dp8yWA7eW9r8LL6aSPLPJgb3>*BxP*K*p!iCkovmO z;|$5$3)5<7X1k%4%2&k`?MCD;dAr7~0)zjk*=gFx3|=*R!{95KbrPl2St^rQ^#CWUi4Z} zpdic;cO6ne2y-&F6r_<+u#FuByNEJmTqPBLe`XqWZZSk!dSBNJz0=UjwHCj#8Pb!w zzkx@yirN3G&5f?8?HgHGboFDx!dW*$_u-g(>RN2V+*!qj??CvD1A1ZsFa+si!bW<5 z60OK_iu1IK!$T_|oO=Vyc|YKJh4+~f7-9T~`xV6y2A6Ofn1wf{KVm5kHb(iP|qqs0wHc5~MYh*4lO)l508|lB~%<^{4m? z`ocqNyCSPy%cW0Ut3S%+zB7Yl2Jq$HnS0JYcb{|ix&OcU=OutESl2O(DIEn|(r{Tv z3|Dk~j88Otsw0Wd(meTG!&PY6&cu9h1q%&L>Q6y|l@#4R0P z;cE>G8Wsf-ru(!d1&)`RPOZ?~s1@c{?#|5?R(U$#tjeN5a>j1h?lpl}Hn%1aSI6AU zrn4?^G@FYc30EMy(Uy)YFr1CpXB$t8Wfe%1Ph7{U(C64eKDn|$U)i-PkC(01sHWZuqmoo+_GNvA|A}1C|^&e-x$>>f%AuU zWY4Rpl$HsU7DAufr=WKd=z_EVTdHCLLRG#(S-8@)l}60AClbXYIs@+_b&H9T45z+2 zzhpP4#gzNlY%3{n5+cLmyHK_RHR+ly$KJ4AdrO*bMc`62{lGa&rfV?z1O8Usw%T5h zwe0>OIp8EheD`s9&sAr_kb^2BpsQir&7IE+OFVH1u6xJ?dcC3ak@0c9a>INz8Bb}S zUuk}G@VK7j-ynCvJ&}I_@h3k(M~*~b9`KAnd9tUnBVpWBFG|cA%9eUnBMmy_2sH`x~k4-w`k6JJ5H~yG?{f z8si?@31U--jm>E|tN5S8`5^LD5>V_Xp2PSLCrR=-`a1YvX$So~7|0AVUgj?tG%NP3 zAlDegDMsPQ2T}UH7&K&tc5~!g5g3QKEAkpc9hn*3=BMH?iHm_lhGylE%#U_()XzSJ Ok3tnzn1mn^-;B4eXqyZG literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/VersionSpecHelper.class b/idl/orb/.class/org/omg/CORBA/VersionSpecHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c188fe0e18f59ee133af54cda709a48292a003d3 GIT binary patch literal 1833 zcmaJ>Yg5xe6g^8HX~QB=1QitoL`$pGw@C2;_yCEbg7~(EveSu{wv#TXKgD0*SA0xi zbjE>C&iJDo?>Xt<~& zj7w44xvXJCZC=sQh0!QI(ou}zszO~;d)L+DMg-$(XCi`09XD}H$8FrvFr{IdA(W9H zOM>B`QM7ZZ;&LuEIs0g0JT*_dlf@;GW(bd21xsFI2*igL7=mh>mQ2xJWax|!`H%!x zAgfRowq%IMeevr4>oKg}Iz=$PjvO zTatP-x+lf#irnR>7ooZl8O!FK#&dMzu!g%FGw5OHu01HXe^bT$lCV{#q2V6Keaten ziE>I>OWui6-#H%OA;%-kF?8%!e(OV4l%!QGaLnT|#}E=62XRQl0>=|P<#>kY97oZ^ zaT0Nc<^^GwDSxgcvK%k)lA&+go< zm80^V;-WcY=<2lvaMxHTB{->vkYha4e^rwYN`gS)hocvTV~lIS!i%7 z^`-k&ZC^kC`Bi^yv5i_nR#n5iQ~balkm_+{;LiAZpkN=}p$F(rX3*78&|8$=X(Z`+ zgudEoWweG8>tJ8#1(Zm$;)UCsAQ0R@)0z{Fq8G=!=ph8rM7u4Cp9nllt|M4M$R&xQ z5B*-6L90qjB(@O#gr3AE!WC#natnb^Xijb-@Ewu0&j=cc3iJ&$uMt8c8GVl00m4QQ z=$X)PTP$1T^T_as0Ua*5!C0-+{{YG*-A&FC7LX5&HA)H87(CJnm!ReX~Qy3veLfkO^ E0R@@B6951J literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/VisibilityHelper.class b/idl/orb/.class/org/omg/CORBA/VisibilityHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..7e0a7bc7f2c7e69a79b06f7c2f7b8751fa7dbb01 GIT binary patch literal 1730 zcmaJ>ZBrXn6n-vw*<@J+LR(6yX(_f%f|9nrRf1KZRghG)LA1WDo3Ima8y%?%wm9bDwk0bM8O?{_z)p8>pI?#Jq_jt{J#) zB8D3#-o#r5-ZqiMJ87Q0Yv86ne9y!gETp-V(pbd%+Uu4+`#>)rrm&<>mQz?UaT|9` ze1wk;tQuGoNZ9Ie+Z8xlZh7@$Yo}gZ*|@j7RNUn0N^9FK2_zR~Q>t46v0Q#jAg+(O z*)6Xsa5|Tdc+y=v$!5p(l)z*zVqa=LE>(0O!+oSYr$)?~<1qP(z(_?owTE||_NG&9 zxJ;M#27J#Qxwnt;klYqHMZ^PV&nY&XX1!QZo@~}hEbh4utyiO0wp*UkmlW5U?OjE< z>+F;?hr~~wR7^O3qQ}Or>bdx-r50-qzi1ZDVcNha7S@p!m>Mi{m@=?s;Y)mF z;Xb~$@G7zvt|BL3Zpn_U%7#=7`3=4mxVUz^yuilKYi>dFdzgjm^VHvW7QTmV;0Fs1 z$^zNJGw=H8ln;hQ{P-! zmrY7Ar5@THtpE-{WJUrA)jC#pmEHE_j#P5bwN*{vS~UF-93|5?52GP}ry-q=A7m?c zbT*DTi4Z@06aMF_OM@=QRfHncGkBOgUlo>k_5{EF*%BD`XEE@M&+u`Z+yz4DocN@F!yTr=KC- zMIs22#tbfnurhZID->QJ`2^X*b0oVk%5yIedxGJ)=ZO7|)c((imkV8(2N>R`hd~-M zKHFLPrVz_68+c9gzl{&ss zF^CI{!buOKjQTNX$V?pO$R{E+PH@-c4Td_kIK9tL&0!9&hky*t8jvhZcX2w%K7}_1 NDy)4HfWQfxbDCDaoZlNYFfhJ8U0fb@;SBWFLvYfW> z{S$rVrLUndZU&f4`@{^t23{GaaMzM+TS*vRcBQ-bo_p@ybNBa`Kkoy$fU1fiTu^Zl zmlV9KLc)70F5`U#AE@ZTbet?R3TB0IPQ_`=$7#7DzCMg&0gECuE0(Lmb}fdF#Lveu zTvw69Ct_Jrk;e_Oe5zns!DkFn!+Th@7*6FYZYfjQE@iUIHy0N&t7Oeqiq;H6&#dj( z-aLb(O{_7w)K*1#&uhnA601 zmZ5LOGYeZc%<8JSQMRal%Iq^9I*_@8bHpw(93ziSbH~h-O{bJu@m$*}5jEMhOgh!V zIja@d6G<{Tr&{;O-7>dlh=hXAsZaM^+oQ7eBcqntdgMwA{ z?25y&j;}c0#ycFZBgOFsMiqR`@eK@)Z((w5punLc%@Awl<|u;78_8YGPm>BJ1w&s6 zEsyE*lT!-5<0#=ShmB1ITO4IS}xVmrngx3{)?tq?N38EvMSnZhQI%OLykU%`k zu!UNTT2n59LwFuup>)cM#Mxci231VBQ7>1VQuEcywM;>0=^-QKjU55iImisX&B1Sh$y!bbC@=op4Kz;H$Xe1J*qzg`++_{jx?LWaiVz$$a{$FHc#U?i?QJJ zG-O1`+Nb{l=}!6?<$fAO`1b+<^0rC|hAlU0q!GFWp9{MCA`V_A<(BD8} zi41!fNG1t(@JDd+5=GEF&?0a$+%iVl*;TBXu+6&%i!zf4hQ2epyq znjcPmk3@QyEGKR~lGu}f{!F*w`w)4FUImkk{Y71lBZH{`>oQ?Ugq70M`wg6w=2Gc> pLekTzOAVZQ6d|NPL>GOYaYX(`j6jmqg!5e&M?Q!$D$MUW{srdT*9QOq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/WCharSeqHolder.class b/idl/orb/.class/org/omg/CORBA/WCharSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..94d9f5a16b0b925ba28c3cd341be04211d8d9feb GIT binary patch literal 679 zcma)(-%G+!6vw}J?z&v7tklfxhZQvE!>CsysJ#>fLPkCGATx(4)2(qe`mYL#B%(i{ zKPtLcS2#iFVTXI}KHqcC`JS)u_fG%^*j1q*oj@EJ6)VV!uqr}M!J2}+f^`Dgx80sY zAl+C5@xxZP#f}JKdhv=tw!8-aMfDp?q_h?|c7tF~Klg&B>2;c>Rk=7hHhnK(cHMQ% zv##G`RmQPSSt#PQhoHrH34N-h(qmB#t+7X+OLBT~;+ac+FFGn~n1!Yx0ad|#2sSKwiey0wp(ipRVWXPmLCSjBYh>anOSeisi#tWnYH5%weQz0SH`@teZ5*P8kWdjlW~jVYusjt8uheo7QM}-E#UYDcR0Qk zMEjc(T)S5=YPMOeaD0dFIo`trM;wD3BN&yTar^+CV;u#KA`FfcE-)y~)j57diD5W< zH8)Lenh-2qM>TV%FHTI#_=&^B22pFS?)Jd3i3>8y99tkBRn%VBtx>KSRvXI7`i3Dq z)Zal-hQ4;)$gQ;BLSTkB6CEnV9{6fVK8m>p*IX9}S1^p9xYNxn$LKN7=xx>KkJnZk@(-EpJf;6IQ@D6Os~@3#xFy0mOo$n=W6sofFV<)=P5r(Rl@`|FdP4kj)gQg82=g3)F6f4%0H0UqksQOHSr?|yaJbzX6$d0IgCkM z^uR6?m_%T4HFeOyX=yf|Iv^x96`yM0%!2?S{V8O0iG~sQ2O$E9kqT37J4ZR_V$_){ GI{pKMQV~r6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/WStringSeqHolder.class b/idl/orb/.class/org/omg/CORBA/WStringSeqHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a4ff27ffd63900635b22a9bbaf8e364ac361b563 GIT binary patch literal 774 zcmaKq-A=+l5QWcDN&$hKCg%Rwb-SSeLNDAog^# zYcM2kOD(;pYo=~Bw2JFAtww<%blkL>?g@jSqGIo(2Tv*9{IGJDNJa&#?)Cig!nZrieZ)+Mv^I?CHdk;#6vSJhGfzwFVvr|c2nobf_7$^YK4sEdKsm< zt%yd8{&*LSjsOOBEwysEr8f4|a*e15c={4#(IbH&Q&UO0>?hDLOp9B~8}-JCMVZvp zqt%`W;U}hUk(ZTgA+}GfD~xUuJQX6Rp`7xkV#r;K)Psy}$h(@Ut2O;+&X=B|-zL-s z%U=uDgO(qRQ|qg0mR*36T%~4LhJ;zn2~Z?_kF)?)LKzhaGUoYbU&6b1Pk<)j2UI02 z<3|Z^;~fca;7tL#gaaH(sNqP$6z(ucorNl)4ufIVQ_9MsvLyF<5r#33qFgMjD-R1h zg)IrwnBmSF48#6+r-JjCdGR~*B4GtT2{0ubV@ZOA6Nd4P_05&;7F$`kJI^rX0q)U* z9y;6Q1I?~~uaz5W(KyrgI~tfF=GCO;qn_Ze(j}t4qpGh^VOg4D*d?eO+jY$Q&ELhY z%g*Sjm?r$?oXJ`a(;;~$X6g!g-m<7yUHC;M-#xFe(qBY zv<8@a9_f*#R0((JH}Wy&R!?q9zT_W(iEsY|BtRqd4n;_lZN;eVQN?#(>L^zwdL|;1FgkYZ|Ezl_5!d=HK zK`ZweA+zWu#5OQZOGhJzknL>l9R2@bikzQAYGU95{q}w^K17lxhUtPf9DregzCo}V zMCs4Ul7r+1aE`&YADX<5bP)mC@c>>T_AC0IBmVdqZv35of!H|`O^m$2s0V$B&}o)C z_VeU0K=u=4KjyU`%h&)ndH623A=)nEeaD*To?C}AO}y43N57d^b;JuKSns-RZXU zi|Y0HneI9sHyW0yU)gStle=kj%c3JvfAHFzEVY>})gBM_$aVhcQcG4VOl)&Yd2zzB zig~CiqKGNjQn8Jkiad5y>>|aG3m)!nG;K{_xOA+h=`qBASyUSx^PV&0gIzx(jiwRP z{qJmAu5gw{h>m8?8$dM8nJD|nj%Qi~kWE_*|D<4u1G*Xt80P3@0vBBynN~!P;sSjo zh84;d-@u+Jfnj;kFJ};<2Z)JsvGj`2ShIwUxkCdSlD+S+PCd=O15HrB^R1Y3O&3W8UB3{41;x*N7p{4HNvQ1Ao% zC~>zIL95`v&N4e^XU>^dK6I}IXVHc5*}(6m zF=wr2W7mR-JfZxvM*BYQ2cb~uIl|Weimh8HqhetNtAsVxSQ7Z7IidO;a5)IY@nbJc z6g8>VPm+)Ygq`06PHCR-^$14FKgU2QI<+aFhb9a;Yh@Xb(kHzoqrx}_^tw$WWS+(l g1;|eT8*&>N`C6&JK)V?sYtIak+m>et{p$xl0L2_{K>z>% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/WstringDef.class b/idl/orb/.class/org/omg/CORBA/WstringDef.class new file mode 100644 index 0000000000000000000000000000000000000000..e44b839c1e5d9f3c3cccacac49fd17c842f156c1 GIT binary patch literal 215 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s28sNlbp8C?bbV+4ASXxt@Zyr9 z%)E4$)HFs0fvm)`ME#t^ymWp4q^#8B5=I6kT&n#GQi~ExGV}9_85u-T6?wY&gj5!! yGBSvuio?uQKou^?FDgk)%1PA+>T}I2$tGjKQ%zic-o? zfnSlfGbSxFZTV7W`lC9%Ys(MGalWipd+#}W?(RL(zyJO5CxCf8kui>2GCsn`5nRM4 zG7X=KVKI!XSY8U_Gx5GG<2LSyAtzo}WUL}DW}i#=Lc(1caomz{PsSSVOZYO1brd8# zka14%C$J%ghZ4S$u*neA?H3KskXo->Wv#wn)>bz*S901mt*+KfJj)PTs?;j>GJ`)o z^@t%Lmg%9_ts=u%ddh<&IDrCf+KU6>KH`xr+c2LMjK;Q6tP-WKQesFF;;HeIp;e7q zS=+L$O06tJRB8v@vKeO6p8ayQ7g^8J⩔7=X+V9SmHn1mSGZDI|=M9pbt%TSll30 zcf7zx-Li#hZLQWgv`Hp6_Oqul1)p0Lo2pzHO0{ul_qa|kDO58otNxr}-pjU8e9BGx zbSd$}n)!sA&v;4i@GK1B**&$U@RC_=HHU)BcwfSnf^A$?@E$HHm=Lq;xWORzj#R`W|}xFq_k@a zz!ytUQS=FNxDv!9whO8LzP;v8i1)O}gkNy*JA@ZS-B#Zr$c{)+@+HFR-$)*fzd}r< z)BPP|KDp!0o^$Wl_s1uIeeB4PkWV9pf{bOX@UqHFQNo&pbqOT`aj4q^gP?ff z`ljagO|99wJUP~GAE<9R=BaVtAV?ipjztd%lGWM`fzWijj8dw`b2vm z*Qa{NHnelc8_+AtVEqPXq}q?ZMVWLpmeLx~Fh^|DCyyJb)*{=vW_`ZXhJslr3eu1z zlof1XQ$Yn=3bv6WD90H;bM3C-6J&b&P}gkTF|}5wXWUVON|^I&XyS!?`%l-fJ+3QE z;yH@-8j2@kE_6O(5Zg(tR4BH1sqyLZJh8{FjRb-j_7WZ)yHX-su_RfYV_(_vgmu+- zkQdg#csw7B3rMgBkoj1xzacTjEFcqL@&P8T)<;PGfn>25h1AtoBt{UXDoe-(5Uxhp MpM(*_XTA;K2YuGFV*mgE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/WstringDefOperations.class b/idl/orb/.class/org/omg/CORBA/WstringDefOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..504fcab67fbb04a745f357ed872924c1e7f14d77 GIT binary patch literal 162 zcmX^0Z`VEs1_mPrE_McXb_Nc122Mr>)};K>yc9+TW(`eGMg|rQPt7n!2BrL>bp8C? zbbV+4ASXxt@Zyr9%)E4$)HMHs)S|?a%>2A!Mh1bb#Ii*FoW#6zegCAa)Z`LI26B$|j0{Xb%nWn~6AREj237_JFwF)OVE_On8zqwf literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/WstringDefPOA.class b/idl/orb/.class/org/omg/CORBA/WstringDefPOA.class new file mode 100644 index 0000000000000000000000000000000000000000..f6cf1d26a9950532fe1e7c209321957325f47138 GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ArrayDefStub.class b/idl/orb/.class/org/omg/CORBA/_ArrayDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..836e10abdffa9fed0f57709ceca2dcc9f3b3a92e GIT binary patch literal 2712 zcmbtVTUQ%Z6#fnbW-<&dq)-G(TZ+{rTtY>w0!1lco0dx@fYPedAsNyk$t0ajQt;M# zzyARLgAZEQie0Yd?WGU?r*^r|Tp*KRR+m1^nR90E{hhtP^X)T#KmPT10MFq&31{(2 z5KrS(5wjA#FG`rhd=LwGjn6JgxQsX-uJGZighea~Smuir3D@wth*iEw@Wq;lbqO1I zgAZ?t*pzUcFRtT;h`0FrZ4vK?P$b;s-)}+{aY4YAfTW0&2u;McfV6;H0(6EJMbT45 zhGRDtchs^P%c@2?mat6SNKY}ePV0tl%`h~FBO45XxqM2amlM(*jvOA8)r_=t%MOY& zv?nYznORZ`YwA{36R;y7Lm1(BWJ5rfLDsTbPBSdU+A9!vUpTUuH`B3vE*+a&S-m(L zTchuMW6Gza+E+@%YgP1%wHctH1JGh7H*bf1S zudZzEXi3X)==W!)c<>3Uw8b#!w-)lI#Z?<~5aPK43HG?(#{(eN{DxKSc8SzNy>(D$ zRrQ^I?^%P3N-@2l;c$IJ)^>)w1L?8`jQWOJjLVaVCp$)jk2a#Nrv&-R&$+eQ?6>}qg-RAW|d6C?fw2b5U=%l!?x;1 zIiH~`qFFP_q=dS<7L2lP<_&(CP?Ej=`l^g1Va@9(h91H>H!k2Xn7r4-#zRFgQAb%R8|Z#&^n%46fQmMv%|T`w*a!)PrPe6I#%*2voJ z2@iMVNzmLFs)(58N&ib0HLCE!_z~5#J#}r>_30%u@g&LkL#HrEKhCpYc!nN{U$*pf zZKFBey)+Kfs*~P~-YwBzz<#0$XgPvW*WBTn1NYJNqiY>Q%(Y%aGXnH=A{uJ0Ah0<6 z04?{?T7gi3I9x%H9;t%1rICjaNB)HT2YqO-;K^uY6tL_;TST))7&M*hO7?`@r( yTDHY@AO{&ukKmqJ03v4gL5FNepr`dWoZf5>4JI}Np)-lime5e*XEZq-fqwuwY?0pp literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_AttributeDefStub.class b/idl/orb/.class/org/omg/CORBA/_AttributeDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..85960bafa45209519d8c92fe605dcb2aea5a4c5f GIT binary patch literal 4920 zcmb_f2YVYu5PfIMzV+qOL`+Z!DTHDxwiObp9g497B-lx?oIq$omM-RE`6NzfC877; zd+)syK!hGz=)L|K%FGp6cPI4ugM6Q*yWO36^JaGTt^Czr?|cAYIsQ;^G)7yn66Xr& z3O%-W*Nj$43)=>xPc+O$^gKBM|WPq?OK$4W5&|9dsfDC5(Imu zvf5?|v5@!b{s9Ic=Xq@bU~j2?qm1W?-?&Y4VF;qvqQpifEN#$Xu_y@SH{g^T^sIzA zgjAzCt!?31yG%xUoC+Y9G_$DZ4G9XRq#If`rPE;F5UswvVWnx^7E_;&^UmPdM%H4DSVX*$dQnHl59>G2NhAE(+1<=i=xb{A98q0y2@e%sgc&R%UW` z2de1B@hXnRaS~cmqnefCR#EXHUXt;$iW6`mHIa%}@T!W}*mMV8m+^**H&K?bpT7~4 z+l!VqzG_=WvvXGQ7Ivz58}Cs4E8yIRGT!C+_jtbO2IYAb@3Y4T_|T)nEhl3aTYtoJ zY|V3Q^f9Gm!|GWXpQ!j0pUK#*;&XhV;!Au*O{?N-B-xDp^sI_+Fzi7)jo?5!@2ZVf zX)o3Gstjk^tHjc6IT_zFt?wj6?Ug`>&9f(Kwwa9Y+4Bb(KT6o&U&9T?n33OVY$$4G zRUzNTPgE;I+nRC#HB-gU_=U^xEA1z*I5|w?*9vE+?8Mpb5*fd7+}|b43LZP+L8rZ& zM5T-QIKomnw*A`X?nAnkNmv**^4d4+SS$!ztR7l7vPH{SE`&edRCSP~H8CP#vEQPQ zH!W7PgoCnrypSWU^4nB{NNDvh4r%92Q0J2vPi9@It%TWr>t2Hn$Xx%Nm!nCgCb@9o zme$g#fP}iS>GaL_Lwcfpl9nrIggcWv)YPmA)3DDV3t9lnbLn9*Y}SoZevI^_Q8P+( z5<|y-l~K~oyfLmB7DbQwqgO4`anQUIONkRsjVcj>>XIv^a}yMnZm9r0DjbW9w#_or z8LDjv*eWgNIfDre0ra91#9 ztv;%F5$^^5oF^}E4>2(n#7Q@TT;_-LqSd*eynnrXSvIf9cXyfU8Nruy0qHNa+ho@|eAi)p6|P%{ zyho=_!*?A{sls*n?(O3{_rLHRLej-uk4AgnR>Y(GxO`(fFt3b#>#;6leu%YG z5Z=8Z42N0oSH-%F1^;3;f>r-)B)gHPX zy~JgGK)v4Bi33BuF?q5#)vCrpd#W0z#UBUqTx@(9nFgn{MkskLGGp?3dv0>9_^waEJM*m8Oyqx zVofAbhtP0251V7nbdDC#a0L(LnA~X(Nx@HEp?EnA( literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ConstantDefStub.class b/idl/orb/.class/org/omg/CORBA/_ConstantDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..6ec42c8fb0a34093cb28301206898b189ed0757c GIT binary patch literal 4777 zcmb_e2YVYu5PfIMzSZT@lsG{l1VSjbVq1Ywolt@uAi+tDbti<%* zd+)t>0tnMX3%$2rLz%fEOLxNfgM6Q)z1^L8^JZ@Lt-kv6oeuyUir*C+gP|x^;#>hk zp>dmnVdNByz~rAi{}dFQ2TMkgCpH_53X~LVXT$B-Auz@}=kw$OfeRH}go~rN1efyD zWeP6G6#`fCc$L7_ymJjtt`)eB$Lj@d5V%p`CV`s;Zc%V6Bj1YK1a23&L&2RqzY})} zoT=b$8!q0 zLOkTXrl*$y$az6)0NCGZ+a%+8%BiH~Mu`Ct3>dC5$H;$P(4Ut%zXl^KVJ>;qDMd?b zc-5(isf|!9xujb~BX3Gjh`(X#*|b5Ey+ahb^QNuQzQtA028;RJsI8}6kd}VNxyk3(@J};uswK6tW-!GLg5fJY^|XW^zuusaS;* zR2+xnB}CIhx}D~}Q1K#OlJT;N6LAuCjEYzAs*2axbSGYy@rH^wQI@bzZP%s7inczo zdPhcga#ryc`c#bLZK{6-oSRO@JG}lbuNS?bysqLs_IMv3(93l^oc@yWp^9DjNXEx1 zKEbCdKErP6KNX*&k1ZL)u~hK|PNhs8Un8sHOSb+BDPChMUi%sYeztBiM4c`7S#`tu zEvCBI{&c3ZJJEJBzTrf^l@N1w0$sMiS*+V?GQMNa?`8ZTVgK4XZZwC@{C0C=QMam! zIgTHxUZ%c1?E&hRil6W^*XtL0r@Z6lFpVE8r^GEiadtXI#;+XrHwm+XM^D0HI^JER zBAv{~RTApXqOF;BkG{3*kj`Zi_N{B<9JH)!u_$b@rhmiWHa%l|2DRy?t74?=(Lv%- zYf#8rHj7u%1z9sv$dPQ-+EihX9M$gi>*tM9>yz|Oq+BVigxR&$BvBIP*RBz|D+Un9+2=#qx-L;Gf1u8%dL1(dW&l7GI4$Sh{>rS zPPh@|vRX(#TD^PL53*`1K_&y@7sai`iaOC?2T$R|bAcq(%`(suetgS0(1A;U1h?w? z_VZdkmAqnSQ51`U6X3tdX&nmQF!$7_#*mVb)v`m+TBkf1=GHyWZuy0ev2B9~zxHEKkJdczoyXL`xa-CSzU3 z{19t509RuJP7Sl(tBQ3Q@&CfQAE_|w1rx0I{#VuuCt=->fiUZRYFID&FRVA#W4-U5 zV!g2*>;3*e>rM4oFWytEH`Qak|Nm#b8K+gfL+^Yq@mL=)Sx1lKz)){YobN65s&UYs zs>bO!Bh30>550AA)@_rpJ`-noxSKt-J30|dc(^2LLA9IP{t?>mb40IweUUA`@S04Tbb*ZHA literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ConstructionPolicyStub.class b/idl/orb/.class/org/omg/CORBA/_ConstructionPolicyStub.class new file mode 100644 index 0000000000000000000000000000000000000000..7e44255a7198ffcb0819ecd43693ffc9931cf1d7 GIT binary patch literal 2207 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 RP<#A%Ak-264OPy(#Q&3%qnH2y literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ContainerStub.class b/idl/orb/.class/org/omg/CORBA/_ContainerStub.class new file mode 100644 index 0000000000000000000000000000000000000000..524d5ddf77a2f17d5c0fe0e07d982149ba418f72 GIT binary patch literal 9420 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 UzB&N>22MIpJ^%m! literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_EnumDefStub.class b/idl/orb/.class/org/omg/CORBA/_EnumDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..a7c330ddcbde89afd52c47023f73a5b159035bb6 GIT binary patch literal 4498 zcmb_f33n4!6#k}7JFmkON@#(wmqpUhHY{!wR7zW*&;m9sP(fpw3~^{P36p66cU0UL z6h(30cV*LnD4Po^{wC1-W+rKp8G3qzbDGS&_wN1fch{F*zIx^yfTj3HLJRJ%!g53y z1|)h$CB&de*oip*dVqha5_Vxw#1LO3xPZox}Jp`k0g=cXdXl{K82eI0Wtu~$m-cz? zxvMLqLuOIPxD$8DScy9X$l6N;|nhRCB72zwTy4@ zt$>-uc?s=H8%m;MZ&WcuBjY=KFXJeVar|^4{&9YA0w;;PX;_Vk_(8^x$ci{6<1~Jf zaRxtAMalRD>$w=$S7S2HVuOGxQ_ISDm3d^nTW;j*$g-MWPB67bYD>g9PVc+`uX$2Z zO4H0u*Lo6hfoonA@vDHj#Zl6tMWlz`!RCF1?;}0H&OOzCT zV)-zRzvekt=Qx|?AmUGM_pe+8c)CUW&G#+~s3{!)l%dY{t`_Q?X3o*-o(^p|K_%3( zqvk{T^laFtrK|%aKUsb0lD5F-ogO9W|wRFXy>VDWmyf z!!2?fY$emcwoMIK;t(g>Z4TU!vU{B}lu`(M0xx%6F@|+5%#+N=Uo`~4$DVtn+6BYNEQj5>(`8r%R}FCs@K>DHjx$cLUAQ#vK4 zwZ$RnZR5k0qG1e%X}HpLLib*Yi9|vbBXv!<5gWfbn*$ z^7g7#jk}&-myFwdE#``*xzwf^;u6w%E#f_^*yoWOF^3o&3*v|xK`t(a%vp20I&(%^ z$6{nOAf5qUGJJlH6wbmiG^JIfu3la|R4&Rwqz}uYs=M(LSmOmq=V@cyX~-L!IE;XH z`W^@23g(IE5V3}~+OXEP%5f`5AQ13Y6K;277UMTI5&8sr6Y0aDTRc9`B~nS&ib(b6Ksn^fC+l{sFMzQX8V?FKqS#QLqf*jfvJ>6zKW3<{hjhT+x7^&#Z zZqb-^qoQ#)dYr6h+vsyfXI(!E>kxWv+^u$hFAsR<+PL$axV4QJG5?6!=JPie^!kEA z8#2nSAYk>nhv56L#Wr%7j7ZeJ;ehuhGQ!*1yD$rXONFn3TE2mn0luvCRZ<^KrX`IM ze~ai7o6IFm1fRzq3CzbXVXBXrgd`ukfcY&|{82a|7NG23Y(tfZts=IG=r{jp2+_Q- z{?^buBzE^;yUnp+&=Ci7(2?=c23>QZ^Cg3BM}GRQwFBG`@CHrX;>qcZ?8uxm18SEV z4=DYw<|Mn=Cc9*GvP-W?mLZ%c+hop8pq`z@vi@@K&7ppe_m)t9h4+~Nw{ija&Y~(DU@HMlVSFd!6pr znZSn`>v@6B3w2KD++=VPTR6#@P7mqyu)#V#t8+72HgtN#;FR>!vZO`lR>0sz805t| zJ*M*#>6&~hCx1E zr_UOEhD_dpme17bNrP7j$<+p*#b=|#FVg9l!RH9x7xNnY;&z?BXmE!t%b?}8I(^CD zPU&|UypFqdUXMO+(CNztpDW`Vbv_S2`6W8PROgo&{Bk~D=N_GV4c^4Bkf{rF`ntid zl+_oa<;^;M)8H+_cMEUT=^2B!NoN~x*Z5UBU!?QJI``>(iN=>|yhG!DrlxGRkgqZ= zy?V!i+(fRsm@AER57sJ$(nv2;a#NvHs9nIcu)X67ro`5A-bUkWX>0F@-IS;u8N;em z+Blx6ovp}U1X)lFMkaRXx2eTrHGsw5#AtZ}`z~w`>Cf9%>5YmV9TEM(NiK)y zC^-AG2MZJ0$dbL&KX(M|#6} zU^~TI5NSM!fO0{>qY(W}rFlY{Ia!2|IjP3Mu$w9EVi+%}ba3-LA%vKCS_vcDBV61x z7gmp&b8zi}XS=xU()cLT&^%$qp|(%Tx^$Q27Y#OKI7*-oR4Fze02MR+qU zcEv3qHB|QJh7kspc`^^{yw4*koc4t=1ZFkHLFjqJM6Ngv7*EX;#=dBt04_R-#0*2-fWs*)Rh^>7S89Bf#(NtoR&r&B%7>W_%u}|IWS+OjqS#VC95k_g zc-U6w8PlP8@(-&bP(FlFZ1?y%FubHw%GC;TmY%F^JD}(}JoHV&MO9p->FxB6G`&?~ zt2sMj*RoPSrFkD;t?{eVbQ}E<>Z3GY!>>tm7EAeB&S^Z9=3&Nxe0r!#I#R9Kqjh=G zZ1es!kMMPHT1DI~u{18o@BtaFf~Py2=7X}n$Ve!fT3^U(TuO79$22~a<_cHST;p+6 zS81N0_scTbU&yEVdb-;a!Kr?l)s*ww;a;z)9Io~5BE>6Tud_5hEbvf6m}(|eR-K{- z<-kSZ6|Ai^zCm`rR^!((ofTBhp3=cm`TEkHs$KDEXoPRXIa9K)S0}itsz!M-~gC1<$-iehZ2R zIC^nBZ=w*ILx~>evb%nJ4$>N&1t@a-z$^v)A&wl@6s67GxG(hG)D{Y^>RhI zp2l~}&U<9hy&8W&;}1&zL(>1S#vg&Q%9X+hb`)J#9pU>l{wOMlpb%k56K{IzBd5u0V-C2=H%JojOSns~?ip4-1A*Y5WK@8IUCl7nHeAYy7CRk7@k4 zv`1l$@D&2?g{;s3W<0rz@7M$E=9~wuUkDFsdFZB&d zt^TVYYCWbEK?XP`UZl_J90Jxh@LW=!%R8=m*qRx#THXDQS2AS&;`WU|6^ zy(v^F5uSZ=IdacnWD`WKtGKl>CtLVnarxVPA{j%Ve-CO0N4ZYV6W|2{G{J~Yj zwpMGfcd--{W0K&dl*!hHnbwDKI|L&IqEEN2u2t&%S_&mmLcJfVLh7OIseN6TXPhzX zyMX(Qpv;Ze5szZ`Y$!Iif#muiNsn9HGm6J#^K6*RL`WKV38=ov&;$)eYc^t8*5$X>( zb237G7YLpik;Qv~@kpK;T+!z|=XkSt+Y8Q%=Z1#dEy_U+SD`s636{rg77a&|)HDgh z!y46$lf&T~9?)62XMGn4hK^kC@x`MTiZows;j?+{c@sV)d|Q=@VpSRrPY(`&h79CB z*LXNXm7mNy&r3d-9dUMudl`ahI^))c(Rois5iNQTIv%=N$?9!_tf8FYFWEejp-RBN z#3yoW4h&nyzgL-N!)$~P?22f>D;7Ptv3?l}Aa9St5Q-JnhVS3?Nc;E&g?5% zePn0l%)YI&cjh{lNIp_C&I6IBuvz5>-@d5V)GsQ&^e`*S`Zt1X=tQi)?|4XKO&boC z`mSDDjsKjzg_z!gKSQ2`@E^Em;Wu80@O>wGOVBdfrp%uZKaL-S?ydALcY3iqoj6Jh z9&=~$faK0zLJKH?(XNcSaFP-`)=p8=Bqi5Ql7>HhlA8NFkCWc{G#SS*keZ_OK$nnV zdN;l);^*mXjozct?HIa)-W#Rc;?ixMneL()>AufLw+W0h8FMk{_IFOwl7TLuHt|ct zpFr+OSc&7*Y$XJ>Xv6{AO8f$KD6n@rc<-Y3yL2z3g-Q<_Gv-nk@3N!RHc888LOn?< zBB&h(qK&)g?kMV&KGc(B%?I^8ai~u@S*Y)cLw)LrqrNu|^=T&y^}TVZPd{91M2(eqb}Vm-Mn#r z#yrQR`{F3wWu0H3HFvA@v1Y)RL)!g3(zM`t$~ZYB0rL0L$6O|Nf{B6f&1TFFFp;n} zGn2Hor^#wU$akXKCEcWzL>yV@u9L22X&6Qq89_cOCFquZoK{-80%TbF)3m0iSsH(a zIENPep01*1jXti?0~$T3{vo*`UpW76N1g?`PtYe_jJ^cg?J8n@R1y9Jy1_4eD1kmy z&*~Ss3hv05=PJ6vj2zW$BhM*?x~?V)eV9Jwf-Qk)5(@3lm>WT~zjKPt1K3XUCD0qv zXk0>CX(e2pA)T&)>Qz>SzHt`3R4mar4HnUY7pS+MU`0`n(5GGAw}Q70-q&Qzmx1>{ z*A%@Ryt~Zv#bz)qEZWm$_DT;_kr_6@iegD+KiF98mvpft1&d~(F^*vgu)IR--oSFY znDSE6lqnx&50py$%7l;6<1Vr%fh-MVH)qTXfK0eM*sLa{81XMr4Z5#%{R`+WL{~wF zXF--8bQShytGNwMx5>ges>w&eH!MTo8!mi9;HNA!#xYr=@TaU)1OFPqKSn8q|3Tmn z$PjSGqx6I;$per?0;ZZVH;W|D>J)8(mJu2Xs}ndq=qjubO!SQIR#z~j%nN57IIl-*D=4!!F-YH3`+Y6^J3{Xg1yhhJf~oH zF<%nItODP|>_k1jF@ZlxD6&-9^#kB;g|6?&n3oD};F_Wxf;(v{+;B&QJL%wto2Vp} zG!<^BOyN$N{UQeZLu@sG%{!$JUl6~z%u0$E;iJ4LZKcJF(ykY!#fw@jH1Hyr2$~F*L$=Kw` zD3RgB&2EtiB8!aXTq9$TXrm$1+CXG@GW}`LTn$fqlAelM?25X@uAGO(t_oR9NvA9} zMSJIJv3;|&*ykexHe@_TPe(0wb=_jGK0%9JGgphfW;Pc4LPQ| zAx+Nbe*<%sW@t9jAf`eA>UaNYm%^YB00=YRW=F-D{h|7%0W*fdxF zyDsQ|-LV#re(HiqJflImi|&} zsijZR82X2#zsy=@HBZrg^efVDv)U|UimFyhax6Y7$1b;)OO9Rc=Gf(uV^>&ckYlk1 z0@cu8(a1-AqOoUag+Is2srME9eO0658htI|8;<_`U)Ni{PTz?7{&?N@C+6Y%*Nd!f z?wzymA3h=9|0aDaD$S9)G&jscniD!nUOO9UraeiXp>Mm=_-dBdi8QLtx>2M_IDRg5 zmb!wR%$nu(^Qu{N`cC~)(XQS&h)&a literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_FixedDefStub.class b/idl/orb/.class/org/omg/CORBA/_FixedDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..74fbda34ca56c96b9819131b35bbd550ab133a9d GIT binary patch literal 2415 zcmbVNZBrXn6n-uQcC#!LQYcaimQpnd38AIF6cD9ATiO7X0E(#Vk}T zE_4BVGBU^t$jLB}mr=kyA}qs1QHI4MODGGtFJm7BJLDyrI4D|LZgD@U6*vnSpWp$d zDC1L%^X-bqw)+eZWPFax43bU5E`p4QeAh3yyJWk&%U^OwzwOAYB;YF?GorM!?s6{Tqf0UV0lw#>n3{Hj0{AppumPlc0Qnuzt{dfihTK{;qfAn0NNmw4>t^1_X@*542fPU$Gg6jX^{6oP6Hb#3 z5rXWJE34TOZQEE$Y8tt9Y5SI`CaqfCBsG;%bVE^1x@0&eLJgx?p$_V z-RU`R0@cdh)UpN5q&voqW{B38jq^I8@O7utdwW&kC;tnmH*^{!^o6+yhL`9s@w<+` zLK3~x)kn`T&3b5LG`59*2K$j-K+`cqTywW;_B}z%53V(eao2hWt?<$6WH``TfiFIG zh_)wauRy3k9IL=jf2o3w<;YWrkv|~+P79qCbj=QZZ*LT%X9w6bgak|oxJ0;7`b;|1 zZlMKjLYYaI;-`d!v9oK)pQ46Hr4s*h_YQIH1l+4NVcnqaalWB&V93Vx%Aq&%Cx*YXRWZC`OXH|{GFqO&N&@?`p literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_IDLTypeStub.class b/idl/orb/.class/org/omg/CORBA/_IDLTypeStub.class new file mode 100644 index 0000000000000000000000000000000000000000..f729a4b3b1fb4c7fd8ea7ee2244800576bcaf247 GIT binary patch literal 1521 zcma)6*-{fh6g?dRGYo@3Sd>*3#jFIx1p!eu5eT3OSVj4e3Q3b12s3dqMEDf{!lf!w zR=K_S;6G`3JDEf#LCS~ep1ytWxu?&Zo}a%zeF1PA+X}kiZA2%0GW-h70R=&X6pSG( zhH)`WD3m%W;f`3`6$$rb+*dFq5~uJ$#;Am82{STgWjvHHC*hHV#|-uHxR%N>w7-lT zB=U)HCZVUpG0W8S^bAA8tfp($97CPg_kzK_XrwqzrIJps@4_Otb(*ED9+)btd?U`_QB-xp*wLtm#1 z!jMutXPL$+)y*a|MWQNt(5vDax)~bdX>P>@7ZrR)Vok!j ziU>9s`kj1Zr#XusEuSQLRIi7ge+@SOM;!OL_dL`6KtFziIw(GPXwwZ4<%W(9_! zwOVQFyt)*bCZ)zieMv2f2*IW&#>N>2F4&K5?H%x>RZ8e_HjdlXG3$7bVaU0eHB3v$ z9xef_9%VBOoz5J)z9t^!uZ~G}GR)sYoI9EvH_HhDZ>^)M9bu!<$Lw>qFI(j)&t$pD z(2}EXX>#k>)Qg{#q1XE_cL}F9XnNi_Bp23kJx}u1xM^9>Yo?(eaowWs-OldkHpxf4 zYygIYD;&cir&0_Dm=?iEHjZL{X*6JMM8B^Sq7@Ca+dQplx3Ry zA5drM42I~Z(givkJ&L$H^y6uuce+Y6_R*@1W=389DcYjD9$(U9L$SAaVbI758_4S@nAdgKBcH-bMP2fso2N`a;`sGA`HL%yZ43G5d} zBn(R!q0kN7ti^4%aj#sC+j0r+XyvdgHea9L(^|xJ672|nN86hs-?q&nX(337s|r_z hs~a+IRX_)d5&)k1&+zQldD>&UZcj(-16(CJ@dsd?ZGiv) literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_IRObjectStub.class b/idl/orb/.class/org/omg/CORBA/_IRObjectStub.class new file mode 100644 index 0000000000000000000000000000000000000000..6a8bc2b020fc2df5a234f5d89c4d289be6edaa0d GIT binary patch literal 1283 zcmZuw*-{fh6g`~;W(dO;Sp*bWT(Ut}TmexwAsC>FfK`?cQ$y0Eh9om_GKu6<{0o<= zNLl6f;)DOB%Nx09@rmA|n$Z+LV;#4bZv7BaPVoBT5 zjm#25`?7B6_6mbH7<$3rTQ}33rh3XiF!bLfIn7VhtZt+k#)F}RX=P$&J`-EtKUiCh zZSWI8shh@gLeLRiNn1;0ceTQycAVo99!Pk|AfWz$Hbsu1y2+_74TK8Nmy5~flY?%ZY{}5(dPNhvlK4~K?OTjkc z43lo;k&!jbH^xzsTTM7aZ)?RE#^M`^MY`>b$gkfxez1Rh%2W2@+{`S)sGC@AM3Z*u zm|?;lEtr-qsuHU+#Pfw5!=M|}AYd492M+k_5*3lG{U`H+cv-a?fJpGN_pQD;Y-CtV zY21cx^IU;j)FO7JK%Fvj$^S#z7hOa|Jw@`+;&#b0)H-}L*wQUcwCKKe-6)$`V)b&P zOlDr<-ZaX(Wg2;I*hD|7BRHKXp5eS83HpGZVYvPhjuq2ecfXluMFYRlmbg#%qRUN>QX^ar}%)_A-3YUDzAol}9Q$?1bk6=>Xa WxF!|o@_j+iOK+ez`4OJ_jqw+Psx{C6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_InterfaceDefStub.class b/idl/orb/.class/org/omg/CORBA/_InterfaceDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..408afa16a50f0ddd1d5bc8413aa16c5c39ad1bfc GIT binary patch literal 15028 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 Tj?h@r9>!5HfC#9FxFiq=h$|q&n* z<@Vx(|D@&ZWD=PPMe#7*(|0+2@9ES1`|p=;0IuStiZ=Asp%q~T{VL4^DwzjWT*Gxa z+>paf6}NDkV@NKBWx$AnJ1RzH;3)1YxTj)FF2*pfAjC1jF{xlm!F>e}I399LbIdT* z#A13f$I!SQ*^1}m;dI8m8>wN2+7aE*?NNs6Kya18H(@3PO~sVvK=8mM-?nZf z89D;Nh-sz5W+oM$SXde#3olxFMz{66n56(hKOVK?iS4;~b~(P0796u25kj|jv$RQD zMfx(?WdW3_B*kW|xXt;BxJj`otJY1!*@q`Z&bG{5${R_f3ms`VhYk&AaF(GimJ)UW zO~V}KITkbo5TtrEEaH)dB^esUGRKOBRXk=m>uxN%o3lk`>P%qj)+1S-|*RiA@K>haWBu0hJ>p-5+i#ZaFkO<2O- zv5Z(zknI7FoXdKYSEE)p^5!<_wpti@V!J|>Q$}95Od}%9>k`W~#F|-iQ z0nHPF<`kEYr*~*ux{RLk#*AGGnycgVyX8in586w z^C;YXQ%j(OM*(%G4x^J^$~G{x)2GUNO|L1Zf4b&0o~PAGni@&3a zUJ1i+iN<4Kf6&Eond1tX=yj>YJ?`M1I2^bB5ZrF`RN^)`xF-+C^&f&8DwFuY;UU=V zZ!F-t31|xaMAO>>4^8t0G9=MO4m4DiIq*S2ZyB_!KrPTx`xVV=)&5h_HJ`sFx>n;q L9sP)^;#uJz`U1Z3 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_RepositoryStub.class b/idl/orb/.class/org/omg/CORBA/_RepositoryStub.class new file mode 100644 index 0000000000000000000000000000000000000000..73ae8ce7356478268ee64c79ef8e7510d2325d0c GIT binary patch literal 12062 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_StringDefStub.class b/idl/orb/.class/org/omg/CORBA/_StringDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..78d9c86c6732a0121f5f0b271e5991ac0c9444c7 GIT binary patch literal 2118 zcma)7TT|Oc6#f?5NLEAw4um=c(u7`YV`EZ!1xibRCQi5&Lt2`)s%$T=uq`>V?7&ay zf9OM-%($7(^!Ad6{-IdfsBU=Hn1t0Eg9Pi zcEn@{U&@%5uqz=iV^7Auj7Ji_lJK>J1BQsE8Knlp)yEr0dP~n%b+eq!JGNn#7a0bZ z4AXFy8A6HVBZly*RpQinA!CW;xj~VF)ig_POpakF@94$Kre5FE3so-R8wrmIB9TiH zjc;k>oYV>PdLp@D+2yQND`!`?ckixb_h?<@BN}pvA8HjtfWF!1x5f_zNy9Q9k_UN9 zCEjps>xAN#idA<5DyH$4id(qNplD_8Xf8(;-{E@+nu;HwODL!)qNIZ3ka(&n<3|;S z2s}bXLRCc#Cc|WqXa1z&@Y?!uk=F$Y6&C8WGZjye6xkZ5*=*ERG>~D4x+KKbB{(Xw zm{ZY2i^}C1I{TIIRIDE}+zuw)H!G&~)ZA}yyPKI|xc3MdZsyiD7O1GRBHk;kce+%z zg*&rzw4HtrS`pRv>{I91cee{iyy$oiH-gl(E`Hu=78q^?&2`Imgc7nIM6On^GK>d( zx(EzoLCY?G(xlTRy`FCMOaVrM-YcdMfo6AtW)l4(@0FdOfppXZMxrFO3ONz0J{6Lc zLPmr6_f~}@iGownnpMjzGhFLcx$8oq!$OsH+o+M0TU>LB40DO|oqH*txhYqK+HCGL zZBrBKVwmUy>D()EqX!MMWmU*6#7$D)WZ%Bl&6Z(XW{sN;k&FlTcg9GP=AA1*=Seu{ z91tO>KDm}&ZBp9)LeiO$+Ymo?Y`y4o%BJY0l4h8iZc`0a!zA5zZ9V$yRO3Fc*11j3 zfe*!y=`DrGbwM$E?p*Mp>A=tbAJAavB0WS?^!n3lMxP>{CHf`EG^SUI+P7&oLOr8C zlKKtoR~mq(@8DhEJnWmp&oJKo?2#uoj3Fw7zJp2;Tcvzqd{tN>2GT3V$bk@VAr|%4|V4X?DVm|Au7x8_8(XEWw zya(;_o$m6zL;qN>l!C91JLcnFyBK%;0^IrT5#94~ld0GnE^e@}qv?MT|H-Xye9JBJ uX&F=uyn@d)Oeg<-7j)XC3XBi_f$ImM*hKyy9J`S}h{PuI&oSUB0sjHvS^k*- literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_StructDefStub.class b/idl/orb/.class/org/omg/CORBA/_StructDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..d208a88bbcb290fff9231cdaf9a8072c366cbfe1 GIT binary patch literal 12407 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_TypedefDefStub.class b/idl/orb/.class/org/omg/CORBA/_TypedefDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..ae7575a777791ac1366826eb38ef21cee7ab6aa3 GIT binary patch literal 4066 zcmb_e`&ZLu7=8kUq%kN|P^&0j<}4K`UUm_56M-oT=qO&8+p^F`7HQL(h6=lHZti~H z+}!={E^hO(RpvR{+%NvH|4Fy^OVXA!mBTrDPMhTW-uHXn=e;KXUcdYofQ`5;Vlxi; zu?Zsr9uVn%Sj2;P$d891v!_QyC>Ujz7`wzps5ru7j4d7&q2Z{2akfaXMN)t+ASECz z;FthILIqLZuXIeP;=Qs6qCqy!_x)lAILMu|q7 zM>B6PzK{G;#?(lUrJOd2ES>cwQ&~EmdVjV%)H#9ag-kEtf5T*7;J zpT{W)AK*hCrzL!Zk0pG9PbrTQKEvk{zF?=m#8*7NmhcU}<*?kHpXgM^RFl1vG1Ur@ zgzs>M5-s6-P?_;^#xeB+&PezXJ2?0)^L7UPmfU`pto=e=NS3IuTwqCywZh{k3HxzC z!dd*xAz+D1>SL+3S++=c{K8KD%Hte|)oz#e>*IRrxV}H58Z-Pli}O^0x_Vr8098Z6 z1zeQy8-AxqGl}iUJoZ>1UXv$o<(Nl~*}aqx1IrF=O+Xk#4h zmSFj%Ku~FPY-nre(BxGqRI#nG!mH6Yw0HEV8Z&K$KynSg!MW2=`ZFmZ=mHWgqACi{-%wZ9Oe(UGB6JJ(sdrVYiQ=NoktgKZNm-+eK#sl zMGE0?U;&{IwB%4b*h&a>^yH^MgYNJJeOKWR`WQOnZ-dSUcijQ)wsCvPu@2lS);;A| zFT8oyz2#Wf-zwI<tDi@95t%^n; zc6(VbbQPNT|4m zupJp6!4F{2F>;EGh-5?#2Ud|0)*yk^IjrfZ3RY2r-bTx{Y*`(wrXH%JHIn5;mg{xQ+6f8nwP`HAo4nMoi?6tM1_z#ER=dqW^J|6d5KWb;{Jp0#0^M%+A zA?k2st?iV>IwuezZy<^zV;apfowr6tu`GrQ(`=`M+Z+yrEnN2u@Nro`ZWG0=N zq%DG?_!eCiLGgitfC{2KV+2Zzvbf^9KGxNB-PPS?-w*fYz8Bp8cka0}_tluB{rx&~ z=iGD7_x->3cTW1^D^ER3MCbGK7TrcaZ=es*FHHJV3(r5Z=+EgTi~fTCQojC5zW&;x zzoEZ1=dqrC>~lj|)uu%8V!O>QvRvN$Q@B&SSz$l^wN z$>1hDd7eoRn>-)Pd4a6AO#%}fk0)Pf()TRhDC2I6FXA_td@;uSMw5PM@g{k{+2k$w$y-g{X7YB6FX2l~zRctv zi!bLZWNL>=Ke4!1R`0}}au^gTjw7ofV<7r#cHV z=3rI~)DIYIBP%_AgS%mp%uu##n_4_t0a)x!j1P1MgID zu1^o=3ee@*5jfjKIXPi|1y%rn0q~Vl5mF{x&#KQCi^F51Or3EW4_VlQDU?jnUbawy zFLZ~+39&sGag`b&gZr71E(mRxoiRvyLP%!7foXwfv2+dduHS^Y=aisJ@wROoC}lHn zu94#4SRO{cGDeK3Eu(M3k>0E5L0~9-p5_5L%9Tu^!gTX2xrFrT#d+xU=EAY=Fdo=W z@fJh|4chbcG*H38-W0HfIZk;8BkocZf!pQuY zE(}b~xwzm2NsTL87#m^gpCzoALJ?-W9Sjs#`mLHaGWlEv@i{b0wx`fWnDu7iBD|UA zYjJZ(4W;Wd1JFQemdwLC@9{_qr-NY(fmwr5<~)xW&*aAdF_N1hgC6Uz;E~XxiGw>gDxp2CG|{Y+ntJ@%fq~AAg?;O6n&UJlA;euY%NX? zWh?1ubCu#lJZx}2MNiV5Xu?uF!i5wUv5`mlu)(Diml^4Cd9Z8hJ65h_N2=1Lc#OwW ze1u`wWv5^zeVoC^WYvwbsvHYQR;BnYLhUBL83CcF=?2c=x61an$!poJU(3>4&?Ts) zxj}>9p5k}#tp>j{#qZ*Gr}#bmUNnL!ejnW{%VcYAFvahu&oecsU2bpHpr+j4F5_y) z<}$1f=ea^wyEubCAjocGveiteX(J3 zk^IZqOljZ-MM745+~7~3W6h(vuc*de_}qp51hJGK8_c4Iy&+r5RkG0NC;3yd<_LuJ|XIfL(!=e-8QDs?JRr1(C* zUtT_7@D~jJqHz9_j2|@kA$fk;;D-(VioE}-j2|)hQRt>v$_?QplGkvL@M8u)jy|M6 zQx>>7%a;v)LUuk0nRDedOjapn1}Z{l!r-q#F?c&LR<0CL1TD2!qq>PFnVK+*T3;B* zROAGMLxD#jU0VwtUl$%vVY)mvI$A72Pd*6nWYy}rsT8Z9metP)hT{f53uOglaiil1 zpD_5Ota;AhZ^-kTPQ9r-UO}a0WW{9cv=2 zwN8*~r>rm_8=hCvRFANc?SVobQH58nal{VO^`_7wMR@ke0Zlgm$T^5-t++KYWi?!z zwU&i$P(|VtazAicHb0t$2Iontc2kAEQ&<*00eM@x<)B@kD~uP15sP!Pg>h&ya0#kVKL~$_yZ`UG&q$QVA2RfIg6m?WRI%cq7JMM%@Zx%3 zU-qzvY<(Qj$l)~Tx#!322|J~Ki=aV*^oJy_nQ%)WaTaF{%t8%|f?M`(m1_oAyfU0d z2|#&9kc8xS*I@5_>7z#Frb{}wbOk5Lbz#_gaoFp9R&CP$Q03Q{D~K_w<50U*O)8#x z*M@n<8NRv;xK{*auH6lJ6uYKFv9=8)*9A#>+~O{gJSLl`!(=K#VgYet>2GSTym}fr zM-;>qD`m*m9)Fx{qTU`%;+|X^rXyEyE5Mw>$b%l$85vn_x6VF=MSO92K^)SM0zyDV z3r*TT`-{bVHiNs0MC(C$AFIzun0p!(j7d!?Uz9jYwDt&@4e`L^?yP*WY>AWQl+5FZ zMU7Csx0;a=s=GjNWkeS5;>javX%%FoeQ1dl0y>GLl~aVcM?ES_^|r}ld~Oh$|K#dZ zYpgSe)3AT9ij!$MYZVc|hDyKJl6hETt5P_ndYeElR4Db$l1DAnBg$-~WVOXvBJL6k z#+g>(^=`K!vU+z<9=d7C>TQCop*Z(9cpk}+sr^f4YHI&pW$O6a9!esCT@ejd3ndyne0EbHG0vY{$gy^8W^#+o)9$kkolvs<=SNKc!dH9XX zEPQ_yqXl>}o^|bCBYqS=2*cayV|seNo=!YQa~{#NchH@B_Hvp-3B2uWx93h!V#k_E zs+*wtH4|juV@^;*Z^sK{cAO;Z1YRU3DYdgx$S{2z-$~+^>0E<8VbEQ8^-20vly0M@ z+cY)Zc~jE;w2y8b7`M0E^Fg<_V}cg!>;!5XzYKf?^2UUdc!3(6grF9UxL})zU!gVy z_A@TtyXmt&x>^qlHQq&2<87V-@7?q{A6<>NC4hJFZ1CPg_iDPkX|A%{hIV_2#_K#r zODAaARH!HDtO#mXA!5CI=<`w3%YCRPXvJ($-xr5^<(Wc#UmWVQPapODai~|FDb)AJ zp+4vIQ9nRm@Yzs%^tl@KtETdeNjfj$8@0&(Vw^T!eWtYWC3-N5dbOtBIyLIHDNsK| zU)FT5(s}N}cDr5EMLG-TxkVk%QO8{>-F58r<-ATmj}*;$ncCf)mjL;P=_{JaonT@i z-K5*?wO}G?$nKh;bsOuPI;5!e7@jY~dZ!+7v;xBoGBg~cQw@>9oPqhd-m8M{|BnS5t#QUp43vgC14?kc^Sv+<$kWE&$zQ^ti_8OZXRPMZ6}e z2!FzVtzY<1!hfP#g)Y?!Zfmz+r|1SNNK~`6ysQ+eT}>2kkw+Y_Yw%cz2@132KbTN2$+HVwJfXl#BHg(#YWdy2cP0$v2hj@r8 zZSWoOi+YWvUa%Mr9@Ysg0hX=ePcz1}!7x z6jnDNH({u-LNL)YhCNy^l)XzN7N-@EvJl8GM}RiekgpQt*XiJViv6lr?S~4?6LeBz zez1o5iYn$EF6LhC3`+Y6d#4O*No1GC4ErOe%nbAHAZC?NJj`x3!FSbVYPg@HZ)n^< z2JR;4`u2AFO2G|Wle9;0*V_s=+)?4KcX7i_RPw906>g|Z;jXv)L=5P0SmDKAPnDe6b3x zPtVhDYZ*`0BIBxRWLzyW*10l5SREP4HV|3KSm(+pk>SS80g(wJi;M?n8X4D!Hfl1h z2}Fh`(+fd!)hzZc`kko7-c+^NwX?9;n?n{;(kY8g(&Cv~EImz&eLEsxO~x1LJ5h^W zSG8E?G%eOYQ;Q8u$6~)55lCm|@6zu@r5UVBlbwY$*Zcg>o~blL(~$--6$&UV&G+d0 zTACl#GR6&6|I5w7{|@>5Zx|UPFJt&$Gcv}Onfl*I(Eqw(GsX`>Sv-(0en`LXO2`*O z!X?OwFSXkRkr0?BsVEXA-F$%rrt(G7&56iWDqkese9`1IseF;NM@6D}&OEo0CS3{V zJM&!$llEbmU*If|oLd6%vW#uVZZ<>%NxLHBh0a39oTM>~$7Q_8S>!ZK(lEwHWZdjD zJJuu}b&`@}@uhNXi_;=GwngXI7Rj-T9Xya@u?7Mi!+3EmAN7dFzE6w&IaaFPkMQ{e zgMMJpk0ZX}>d*hJz2ztLhf&|ZvFiJ8nT7A)B(mz3kJCF3%(dUucOYTEyYE1q{hq!9_4a%F4jA_P`VN@(`}-cJIqszz{XcK6P=o*g literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ValueBoxDefStub.class b/idl/orb/.class/org/omg/CORBA/_ValueBoxDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..17d97eaf0c8d9faa64069cfa960180400dc829c7 GIT binary patch literal 4574 zcmb_f2Yb_26g^6u=tYQS2(4KyEo~E%#I$q<+5&-6APF=MY15@Tws1up$(0oY-Fxr7 z_nwrtF5Ps|`IkEGm1M`3L_WTj?~5%xz5C8R@4S1DoZtWc@>>9>;ZFs<$h6@cj0t2F zy5cXK#!eac@bzAS5rO+S&;1<#fWU(S z4+%W1;1OQ(2p$!GTLVd^=}puwUL$3Dw+GBj^9 z%gk8GDoi@M=7F?ly-5;Ev-P4?G91g^D`9a6WvDhwFe0ayvbHfsG6aOv#S#toCSJU&Ec1B+vD@~sp> z1Y{!b*cRY8l9Egu!<;d~WqaIS;}T3&awP=%;?4X?|1L&cTQ zs038JiMLd|&FkL5yE5KW@jgC~u%xky(tAseKCy96R(C~G@gY7^u@4_}rc!jK{T%WM zKBfJ*WQ?4Q&s0?Kxr_rUzQC6%zQWg3Wh%bGRt{q%Bd6k9^h;=SS9w*?=1zI{s{6cF zTdF%%8_srTr|M0{cTDu4gt$8sD6fU?!^j$w@jb8nLB@{~PH5C)hdFLqyUiUX-L4a5 zAAX_&Huc?_52)KJe#Rk|;TJk6p7HiDgKuk`XI448B_iWj&ih+c0WJX^eR5^4DUvvpkaVLkS>NN>nJkIj739wWK?CzupoK~%$1esgW9Qx7QBM&_ zcN9oKmnsI!5;#kG_mO+DEk-e>SxP*=@mz-c*nUYBXIvxur56sFTOgwsLu==-y%ud_ zf_%HIYfe_e${=GuIJooLX-b&oYgWrQ(=d7awQ<0PYt>jSo}OUND5-0!i1*UQJx{$e ztB9#1L7ZAfkSiM@tJ$JnuGJ*#jwH!+KzssRHteQT#dFFLw53<9k-H3>bv3`en(Hg@ z0wC9{duLbowdzRr)wq;)vba&eYJF5eBRk=+MTKSbOS%^lR?|n}9|QDjdmi1>Zv*;X zOQX4TmFU`%{2bE9bORc$!+L*ujz1mSkEVV8Y#%oGvs=)F7(MMy#+xgM^{+U9mI_)| zR3OtwRM0libqJ#CAe8Uu!Hfe?2fGEInFk3?Ut6eVmVe{Pe7sO~ZN^JAB-W z{r)~D89%|tJu!?szw3J}f5vU|<%4y-eo}o76-|F3>GgVy;74$=pX5nOqEP#4$@s~X zgxflPN(CLgEr}Lt`A!-pdDxn0r9N6fL$Z>NUO6FmyF+q>M9jAYkr0P)Y(lt%l!Q2l z<-KiusdtEz(DV;3L7R+AWQ@wV)cqq9BERtdHjy6^yUTF7&#}(vh=Xf%lzcj)>#5&- z!04{1x$h=l;Lc<`<>EFvXIR-OpK}HEON|Ak|KY-9SNdd6ou2Gzhb1d;RgG-7>z%+d m@eNjuHpfp-kH+F>q(@ugXQoG6<7cHu<@nj@PtfGOM({7;vwQCV literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_ValueDefStub.class b/idl/orb/.class/org/omg/CORBA/_ValueDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..6351a707a97a92fdc5aa70e8d525fcf0dc0c3b9b GIT binary patch literal 16922 zcmcIr33yyp6~1Sh%p|lZ zilT^$8z721Dxip1KubhcK~Q#NRYXA)5fMcZ5v2H^`<8j{zL$`s_4~-Yx$oY4&VTlE z@05FX+<1!+V(-}grnr`7R*P*kOVVr;&p9T|rFkaJr``Eu5B}KGqy@B>K?`}%#0#1w zweVmO4_YO)nY5U9Ev9x!OZd4|(%vR5>T1hiZI);vww4PUY@zilrJZaMLyyOIvPNb7~utAEaOxnmVPd4d2bc&?+ znv|kbC8bU3rXESXCRubEFY1%xS(8rZ#TkBXlHxg&HuE@ZQa|M+<#{|H#q*NRV9o_8 zUNEW1OG^A4l;TB`h8Xk^ohijjCT-!#t-Saw9=uPAmrZ&1s*eH|ZLly@q~Z&^AfeO1e(c^^$%l=|=`_H|Pd~hDlVWQkmW&iTaa| z-jp6nw`bG2zV@zCA(QLtAW?NtCYLF#ATg<_`2-RbtMa`T9`=^Trsl{^4aLEMfqbE4 z^`v``TBnTYt#P_D*+twRIY})pnKAJ)7602aZd3XDx$% zY|xD)<~5DFt@#9lenKM7Kr`uV<}9lKW^hQf(7|ivgORQ0>;e8|;o5IF!28p^}tJqV>bbDg&H=@|bz*6ZxtNpOS zY}SFsTL(&+d=BcZ?F3#VzU^Ew4=`vb_km=BYdb2jno67+616Co;N+j|0{}tdm zmyrUfhuAUcLb~5V@UB)KVVhN7bm*2IOUeuzYq&F41{ z4v=Vz5L&0RDxWK*GdZgljwX9BuyQ3tREHjhV571^K6g|m*W0l%lz+;E47wdrWrIlN zAUcV)5lA{UE02Q%iK$+6l`*e-C(NBAf-blr=r<9PsN?DV`QAYe`C}u*h={OI^4FCP zHvv7i9Er&e56Dq0rE?_`XHSrerq50%vbEPMb6Z0p1luXzHX>JQWZJYr0a8-eNoJM5!O^~PN2CjGLuDO!A*o@sg?=>DI3KL|mD?HGwY}7FXW(~Tt><&YA z2XXTRVQk!}X~Am*HtGny8GRxEE{><77FG6Ir=>Qdc5xT1dmNVd zs~ZUe^`%tEZzU1SU`GRXgtGbwy&w9<3cKnVL+GDX{xZRwi!7RW)vapAa%*P+^`I8L zXg-Us$|;?VT;NclafnD2tbu$nQ_2^BYgR~z_1-Mka<@Q|SR7jE^6QN*dlmh8w!*=B zJ$1JgI>O2bzv08g-Oxn|?PXNc&uu54ff(#TJz3WOin#cZ*d7i2vvPLI%|ae9m% zXJ*9_nLWX)o}^!)>rjxCr#Po0gMQ5vp5i&C;Gg47zd?alo66@EgP!IszvUU;Ql8-r zzjFn5k0ieNqCwB_)@NP3QEQmU?~z$-sO6)LLC?kM5A;Wao{!U?=!H1_nO?+kFHV0E z_wsrLzq~$9FNynbjB)9B=OA~X`=Z`m5jY*yyUToU=y1b1r{o z?)air@a$vI-&xvM4El#b|75vdMRS|(!3nq+r+?9FJo|5hUWb#RL&G8WKfLG-e*LCF z|Ha~hRUFKg40?+vcHqST_u|mw+jtQZIGB2wuV}=GU&h=%cuNVdCh@BZP>fX?u`1O6 zqLnW6oUUS%-x@}YFD$Z|{!A&wo^Hgdd5Z~$0O{;tuLYkt-6~{ogy#(qeM;6Eva&c$ z=Ak2|7LUbawMMKCd-~H`5ap%80w;@n_a+GXSZuNpo5IhjMl69_230KLvHDm8zic#O z(~z(1V<8YvXZACACTYZWBa!IM@L{q)gXEeoI2dR0qFKCXwh^0S#OCtXc}8qL@=v~y z>BHizTFUQtH)4ChS(Tr9y?_F?rx9BK(19H(q&nWUml0dY&n6?*%+D5(R-S@+m52G| zA|SWjr#BvJg;U1b2&yw|=RxAFRV&k_RV_&AQAMCGJ z5?ryMTrbC6&SH)V`##5QK$b6EyaZP);RRkcwpT=u=v=?9dy~~udPfqy_KMkICQch+ z&(93TY|4e$RT}IjF+VuVw^n>n(r#nu>>tRIm=;{)5GktRgJ0gh@Lr0m@m@KHT9>z%6Y*#&x26M2+Jozd5MSXZkv-mD-7yi|3++)$>F z&-LSa10a$?5WY#I9Iqrm{y^X7SrruG4!9xvM1uQU4IZDfk;$wr>b{c1-a3AD5Z6uP zR|mG6>0a&`Q|UsVk`d(*L9r}~)ToqLMOwx68QQ1!rBS3q*CxKb02wJ+7>@5`1TpQITQ z!Zn(@_-$nP>-Gx51N?bGEqZkj#mI%HRd809@k)a5m40tfHw?#c$BJ-1SkvLHGnaBntD0%%g|_ zk7g0XiTyi-tC%ra#M=deS{a2b?hgqrNz+k5nw#`#kwU<|LS-l_QTwQeWwCo^Sj}au z1((04_NjGD!R6npJYh_F@(=;6*6z4JD!5oRul4o!KB!~rvwT|>(#Vpd7Yi2-fNBNI z`5D5+sZ|J`wM(E6W^1I4wdgAUyrF5v{r$n^I41n=Cg9i7p1+@VNscL%`8R^B=I5%q z+PCN~)iHUnZ(kUzKZUzg$As0t5oEO>_b$O*nqzWaZx;wg#)$4iTE4_N3N2~TY2oVJ zmeGBoVf1p~xG;LVfN@SRsh01;U5e4kTXW0uHjrErBJanAHgPSkMz7=RQND`DKhj%<@3@)A=M5N5#gp)?Y`Hs*@E=osru_>jdo(&59`g2?f)=UHsHX*TFl*!8>(yyopip z-Y)L&(RJ|F2kaGmyV!j+)Z4`# zD`sEqIh^uh+u_*T?h*HeQSVts4TUV224OKosic zok#tkc*wC~2_8}fQ+Kr_S`^)3QTCA51d>`S64Q3k7BcCKWX0`b@ukA#1hsg1rJbj+ ztOowGUu9!u*@GsF*bcGMOIelR{jm6@gWyCb#~#>{Xm|9sB^JPIat5c8sz#NJ@Cyee5WES7;yvP#Lg+(>dpZ^LjOh`d}T zB_!eDzC5f>R=3&1{dj05A@s1=AJYf$xF%WCh`MlKvI^OoKUDgTC*yaC8OgY#r8sM; zHi?IME3ZMZSdMXRxm>i1*xTY9QEQ0D4Dq=8-xK624(Z3qR;;$I2!kjqRwoW&nV@^yiq#1vV_mY2Wn2Yft9gEMax#0#p%@>= z<0;80Nn=GRl*6JkSh(!HV0Em4)sMuuzHIeX ztdnh`UbDI(o;Jj94e>ieJQJlH-4mV_zjr(#2Q6_(uW3mf1ud;<9TrDJN3Dr9Kt1kY z9u{j6+m&U!DwsQ5NVl*TJ}3U*@V)@NC3v6Gl2`}cYukp!G2q>nIF>brh6X*(`nE(D zk3e-6Y6VPU;7=(J;mFFXa+Fua%0oc0@~{NDJB|ajjAb_K?kHg>-Tl!YC{BDlFaG2p zy9vnRKz43R;&}EQaJR7~E0tn6B`DviOq{^zzz66~#H@mjgaBFAW2msh^BOAvK8dh5 z_(Q>m`!Rgefp0SWnj{{uJ=Q4v@X0d%g^Yhd)Y!HM{(ua&i5*E^5Px zIEf{JR)@s~j)DpsD@0>8W2mq~FxE4M8y&&WW1N@-e1ks}a)`&srGs2D^6DfWK#ny) zelkZ}8TouheyXT;H1AhEU^|#!6n}9rUscBZ9uM;=HfCsDIfK%Eg&n!TtRlC1$zd17AR*sBbFET8avC__}5Y~wdRU2UpWt&RdHXIpjo65v#EEBwh{jqPn zk#Ra}qwHUc0+Hd?!oPdYO~7KCSsGuZSJEkq4U6n}E!ICqi~Tbs zU^$vz75@rbEazD)zmpal7_Y_77>mW82?^v_>^1T4urvivn&JecDf#?w|M5yQI2LK1 z7)hGf#eW=We4XZy=YMBT!2h=R{11&tVk?i~f81#<7_a}G74*O8PV)^diwE+>o8rH= zgtP+rVg~BZb1jMYv4p@hEcn=-tg-V2`Ye?%YV2H&K1=0`8arR0%~JWICh>lj2wj$4 zNo#Bg(Ph~Z)+Em6dG4~1bCV$c0Uo2jYBX2_HHi=M7`+sCVRJA(hsO=c2JQ+cWBef= zHzpgC=CEi;)^NSUhpKnelGC`}O>^qqG_H5klX#%sVGRVDj`8$zKI-Ir^pKeD@6rhR zdJBI$4Dp5`-VXVOtv~;#?fbZp;yWq6o$}@04|~3U?gV`QBP^?vd&lkjAKe+>rx;BN zOLLwl&BrDn%}!O4^T#61NR@;th&x)gjjw0mIa$-FT zRlyN$+`dc83xJz1Ek6a+fI8Bp<){6J=-{O#N$)20aKt@del@owKBMRc35HMT-JbU~&KOxp%ywx-bOUyP*Pg$e>Kfs&MYrE&_G;o)tzzMjG!u zEB?i81nP@-73z2t>d)^y>e?vOm+UIkwNa?Qu=A+vXtK|S&YkNQ9n_bO?#^Ed`G$7~ zPgA0_@#S5mjj5CfqyCCR{i~y+{@N(0>#4z^>$@%cx>xBg0SHeW~wFeO)%lim-rSJ82e=TZ458xVfmDH1rNu2N-O6Fbuv52K1~v8tbI81 zpIw~FiT{Tptl%phMSLf$2>(wr-}MV0$a0c)^Rir<%5g%>mp6;6HcU!I7C`TjeB-}B0~Jh)Ea4}AZlz@G&EEbteBzY1Kh;08v%0XGWV zByh8WTX=j6ZWXvt!EMOPxSj8J2wW_1CkMZa?e7-2N8nz8`xM;IF8AXB0Zqn(0)G?u zyTC&-9+vTlj7KGOq|-gy#lM^)02n0MoWo5E6W0}%KW-3qI z9+UC71i_x^oVHU!JmftxJjwv%ysSF_>@D?7%6NiUXR=wXOi2;z6w&QYG5IzsHa+E8)lx%6M&+U_?$UXH9*IX!M6Hy?D88RL#t^mK?T?OBRtO-$pn{PLmK#Pit11U%HB?@U)C)RGfh`sU1{2i|154&!+qEf{Yhcyo9QR75WW2`nuk(D_4a)N>-e8Y6@s@;nwujR^G7hMC z8}G!ja<#qnoQn6^`~y(y$+j8KeTWG!U#A_S z_LB3g+OD-GQ|+bNaG||gZ#)?vaVj56h&hD)eYVV=Y}#xxK4H&KWqc;#7=IfVltDT)yA~Klx7ZVI|okeUn}9Lu$kA!ImcpU*kWXS>(nkSYdHq1 z{28bHVN%xYl!Smysc2fPP)P@8q)^J!j`idCVI*||t<`1Fb=4C`metXtVrjl>#sEXE8CvLQHLA&7{khQZGw5JP^<^A=gE$#U)cOkbqaT zw3U^xHkh?*+@g&0-5216Q+0!r_l8j>Vt-voSWq){C+2&$?l_?JwQbQ*SX0N#B zMJcZISEqi?dWgxnAlBUoa;+cIi`MKw_JVAjOORGT{Ia;gSa|DgcETL=z}X~CvkbI_ z7vHqEd*G}fQEoWry}Z`VB`?40AXd@m_NkDtf&L1A70@Sn7d_KQ0$qn_w3zM^-8&L5 zLwcSbK*M2da+epm%aMI(d(K^@ZwPmFGujZL*}g=qy^6@_n*HdgqH|3ZGW|sr(Xrlx z5WNSWyhRi9_Cwv$$1oDkqU$_J-(t0l5gD6l>THaLap$|Z3tHnYY>7M8fZIWV6N%U& z!X4|aV)2$fVjZI=nf^?9AQF!pL^K{@)?5*X>;g#Np~oh>#o@aZ+g#jjXt(RIE)hG- z<-24bx~e$573(UNZdmbDEr4AOCjeJtE6xeCKBCTgc@^;=!g?I3FzaP?)`a^#td9)U zy3TqW6JgdX>a3{?R{jvy+ncdI>QJ%X-i-CpKc4kuGuEpP73;}ntdIHetk1=H4e!w1 z->Y5L$F}O|{Wvbv8}_fA{%dbczvUtePk6>Z-l;V55(;4enn4RRX=QAiWgiC8}cVKIs&t5`eG z5$_~=akaR2_afM98#X%eq7d9a!E)Jk~Aj-E!T{{kK z|D_imm2ruTjEpJ!HzI>n&iQSo(}CD!k#jjV$o|Q0A$}4rM5FBgv@!XB>}$2N=uEf3 zJ&D-QY+V0260U4ro$Z3Utrmg6&Kl@yTbY5Sop0dhJKAHXq;^DN1F0PyvBA^}XmgG{ F{0~75r&s_0 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/_WstringDefStub.class b/idl/orb/.class/org/omg/CORBA/_WstringDefStub.class new file mode 100644 index 0000000000000000000000000000000000000000..35c569918ccd2ca2c6acf36c6a391e80f71ee275 GIT binary patch literal 2121 zcma)7TUQ!a6#kBYGfc)riN+A4ZDKEgAg1=J*4C&^Nbpk8q&97*103lH%#dLq`cwKJ z`p~9p(X6i3+e;q$pOV#mh5;OKx%x2Yw)g(_clP{p8Ad4;0Y|GeD zuq!6J_)^BAggps48T&F0WIU4aSi)Bl4jDq4W)$lTSD$2$^`@S#=w>OMb8N#bEi(+S z7^dN@G6Z7rM-0JrtH`NqhfKuc=LUuHR>Lg1F&T!DoTC@YTY7C@&sVsFuO&Poh*&00 zG`^vcb6O+J8?kuSvP)^JT1v0)?A={U@6)=-M>OOjKhnyE0DW`7Z-XBRl7?kIBoFeI zioEXF)+xoU6e{ipRLtTn6}NDkLD5Rw(OixyzQuPEG!@@NmylOcKv4z95%E+}!VfA8 z5qONUgo=tPOonMc&)jL<;nmHP0IGwU7daxMPzX)E~>a`JDef6>B73zt`?e{vHgsJ#UC3ULW@5|V@)L&`&cfFXp)A(4n&A@r?e z3!~eqsTRg)6sAu=F9oB)mk39L0$uQD5TKXAUVEVPZCrZ&&fp5xsYE2=vA%i{-xnC) zPKnL8pg!_dMKqB68iu^%r(L`46H$y7i52 wyG8DmLB-H3cwB>Y^6z&+XI-kmmu zlsKt{3RNfzGqdyFycyo-*ZT*6BkWXRqftQ#%_6iMv>j{_#El*knu9y_sAQ~?NM4&< zC(+3ax+m-p(maysB$B<$tMjhR(%h)qIF$V)doWB6)r86AQ=MpYMmYACwN{bvhlElu z9ft%v3QeD{YJ2{&7NJ(ai{*p^=B;p~iz>EVl;OBoLxs@!XQ-QHu^uU-)8yi56lO(1 zXe})I)fJvU#2!0pv&|MimY-F;fwKVd)^(09|8^M{oa@0GDCkUK1&33J7jA(m8>r2R W4bH?pJ9vflJcsMp`~wz0FunoiFK@O0 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/BoxedValueHelper.class b/idl/orb/.class/org/omg/CORBA/portable/BoxedValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..29289234097680c1de9ac0ca53368661ef29fb67 GIT binary patch literal 302 zcmZ{gL2JT55QX2UO>DgM;D1n03tp8%YXXa684NBx5QqLRdU}RtdLS_aQptFDg0C~hFJ^{{i45e4oPvDhgI| zNJ+VxLmCyi_(cv6@KC;1v-nc3d?jD#v4(X8H3fBs%%ZBR&RvF)LUEfRT`}5%VZ0-p zrm8!_+T$&Hzgbu_tWL@3c1o4{=JHahzWYS9oN_U;TpgOMh`lmHZbg`uXmLlh8K#b5 zHrry4;l?R(eRm9F?VhQr5|Kf%geJI6|1KuM$cR+C$r zafczV8+ub5sJ0_?=Oy^0I!^fFho0K!nyXt%a&&S62_e1D?R|zz35L~Tm0_Y~2@1Mt zkt<;nr5_WtBL`A3=tK^jay-n4Vr_ekqAf>Pc~`Wzxz-c0qu%tG&?*1*e^ZH&Ts>$B z(@_omqzL>3xLeU`Jqm$J$XbNcf65%Y(9L;EPji#zCtUlK%o0fQG zjl^m=G!`lvx9wP$2X)l&+yu0z1HXpt3?1J~NLeH|381ntvX0@6VTQQ`uwsa`KeEYA z&QR~}O1uncjAp3Kxkj~eitAu_#mO1paCqzKIybjuZ{~3plQgf7cU-OBtgdgYt*)=u zwiqr%Q@z|%wYISG*hE9YRvzDAJCASi9Rs_a$0D{BJj!DSj~Ol>M-I}pLib(Az4|7P z;60iYQG(Hu>0OvKAA`1LC?;rciY~Y8eXfOcv(#;Fbx@}i!rAvqhT-fH8(&W$lN#L} z3^T_pg7eC7(-b;=6)Y6u#~JqFS@_wb(ho)6IHc>jOH0(Qx}!RW4}%&wA4VM>WHmjD zarz39zl$K+n55?vy-ks1BuD3-f&C`;(+tx%M~gG^jpTW}Mo+0cL*H2`lGztXJ$i`G zF&J_giD}HyN`^G%ahlNhc};J?;ijTu+f5JV*!h8m{_tghmM713tfUKr_+in0{L1TiCm~- zg3I9SD+0~_m(mMy}*EE6WPgt_6>=?N=jsp8v|Ge4h*l8=>;x%W8c zMNJ6Xv)9p6rFizs-e_TA^`}3~MqBH7t+rsGp|LaQQu76kH#7&EuP~nVPR}>T CyjgPq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/InputStream.class b/idl/orb/.class/org/omg/CORBA/portable/InputStream.class new file mode 100644 index 0000000000000000000000000000000000000000..3d5c9f711f6a11684872b3f7f1661ed97a42fa18 GIT binary patch literal 1715 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 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/RemarshalException.class b/idl/orb/.class/org/omg/CORBA/portable/RemarshalException.class new file mode 100644 index 0000000000000000000000000000000000000000..8e1a69d90cc1442d380a261e3cc52a642f5eab0b GIT binary patch literal 159 zcmX^0Z`VEs1_mPrE-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2F?7Ubp8C?bbV+4ASXxtg8ZVA#H5^5{h-v`#G>Mi#2nX(E`u{F!_4B zYr$U5&i(?^KX%5AcedfZwkN}ZFs}4PE2C|x(!AnA1_VOXodcqn&_fJ#?0*Qn0h-n_ A)c^nh literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/ServantObject.class b/idl/orb/.class/org/omg/CORBA/portable/ServantObject.class new file mode 100644 index 0000000000000000000000000000000000000000..84e177a21255b25dfb0b8488a4d62d75943a6056 GIT binary patch literal 190 zcmX^0Z`VEs1_mPr9xeuE22OScE_McPMh5oc)S|M)yb?wRA)l$c zYXXa684NBx5QqLRd< zoK$_!yn@n_;1Zy+Tx-oRMh3R{@}kU=R7M63oLc-#OHlQ&#+OtU0JTVIXrfsY0u*=7 zPf4|AWKhK60Epcnw=gmYWF?j*>gOcprR)1AWu+#UurV?)GB5%C#K6GJ!pOkPz{0=) Pq*)o*z%)Ap2S^G4md!zn literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/StreamableValue.class b/idl/orb/.class/org/omg/CORBA/portable/StreamableValue.class new file mode 100644 index 0000000000000000000000000000000000000000..1f1113bf6aafeaae20d027aa417778799aa8b9fb GIT binary patch literal 171 zcmX^0Z`VEs1_mPrPId-Xb_OYXXa684NBx5QqLRdt`v5;K2{@ zqr@$EXhC%5F!N^K8+h~i_5J~17t2*R7G^MOqk=gLQ>dAkH&G|pvfv39QR)o|4gW5B zj940pgmrp_97NY?+$L1^x!~%6u(JItquC`GuDp#2FtOlZ5e)|xmK+VMge_SlOlApl zgNvg>mdiqoF0)HndNCbl7=c$4}F5;2B+t~ z*YS?8&H}=Q|F=M!+Z*>3s)CE8ee$2I*~O-QV@1E0bZVDBodsLtX^mE4prmW9Rj2X` PN^dB)c3xpT>zR&kikxV^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/ValueBase.class b/idl/orb/.class/org/omg/CORBA/portable/ValueBase.class new file mode 100644 index 0000000000000000000000000000000000000000..5a31875c73d8e2afceb1d4ed9ef7c561e9875eda GIT binary patch literal 175 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9Bf%uZ5(!AuvlEkE()cDMlVnzm04b5nuti-ZJ z{hY+Sbp7CxqRhN>Yeoiz{GxRI{M>YXXa684NBx5QBCsa?u*96wRHww^RG?`HZT?AF nsmUd{b$Pn@xaO5)mQ=DaGB7eQ0WmYsaf~dC3@i++Ko$c4fWj{E literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA/portable/ValueFactory.class b/idl/orb/.class/org/omg/CORBA/portable/ValueFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..fba639a469f676bbae39a1f3ccc66baefba20dbc GIT binary patch literal 175 zcmX^0Z`VEs1_mPrc6J6nQcJdJ+oiy&o0b zMWa?XYGCFt_nx`u&Y5}tczy*?Mm~lx(h@Q;1YFEY$T37t4a*Q`48cON#}KO7L(Y)U zxlretIpgY(j~GgY##ozcvZ-0Rd?g&i(ksP=?dY<7ugkS|x2nkP{+JI$g&|gd81RWO zY-=jvkRju6-IxmQtSXMQfv}xNhFhPiYegrvBecHB<(}Kj#q#8av_Fd>H?w}zPWx!P z2Bb{ezMD{~Xa+B+tAa6a&E7OX-I3kc3@?K9{ZS}I*Y1Etb)-|2< zB-OHdER*vLNl$zk%X(u~J0hUxheT_Xc1c1;7%nZqp4>cbx8Qyj zH=QC35Jq1RxLF|h<`S??Geo>N%>;I6{o)2GMwTUBzPf8#n-0FOBDsM;V|@m{K+sG@q@06NDIm5vXDv`%I*BP{vCD~ l7L|RE1u6%Jwo9x{$OxUm73}iXiF&AiGIYVi$TVC{`a@uty_M5fZ#ahS1Y8>a?t^yE2Xv{Z~B+1@+z^ z70sB{S}xARe0-cAGv|CW?;p>v0CL#V5y!TM9UT!>(;9XORxTXR5tjr}Bhw;?mHaLv z&^e=BYfRmdYz~Y}wMWO)bbPbPxIn||LmOO2ai!5sKps7uYF|G>H}N1IEM8IGf$~*LJAE{b_329tuu7!g4&p z_&x2&5v0FIFb&#h_gF{B_$Q%>f?N_S&NANr(H5=v=Q6Y3&TnRCW}jd09{{wlVM52Ei2{}kESpeKGO%J`l|kPN<52E1sP)D< zgVsp~f}!XJLb^VkJ$^~LTyJ!T{E9mfj{~PKvoH?Yg!Lu&FHU%R#=S@wC|fWvXQ6^M zhOHzEoMaR@o!;r;f!lI-oixd0PC7>-5&@UOLKW)_+kc=vZzz0uJW3;m+6?zu?kltT z3p0IkI^1B=0yRp*{gXtqTC*Fm>)&!ddT9T!C#^<{*Xbhw1uWkX*?CeW@{D}Jz5~0- q<0MTiOu{>aD|A=2Z=rOXPf)L6H6Njp*2Zl7j$34@-U})QiohFNo_W&% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/CORBA_2_3/portable/OutputStream.class b/idl/orb/.class/org/omg/CORBA_2_3/portable/OutputStream.class new file mode 100644 index 0000000000000000000000000000000000000000..02da5a275f1c5ef0a657c2c490f3bc2bfe305152 GIT binary patch literal 633 zcmaixT}uK%6o%jNYfbILGN|sNi_9(t?6L@Q5en3e456!K)M*)6cV(Ql=wEdu6x4k` zDw-+5kKpBM$lGrkk&mb1YZ38<5sSDu=bx9B}p0o%Orr+fR z*(WI!w@1tkbhclt_1K6};nOCUg1O>_wOxK57Mw28CKWF89NJV;cuqu@R@0`-hQkQ1 zEQ5XNP`~d`)4Ho%(Sa{jXopt(XWngvman-x;4*5mH<^UBhf1=JvW2I(d}JLx*6y@_ zWYTK)ct`1y98xd{4(2~;SoTf*wpOiI8}|gqbD~|g&;DFkff@u#&&*k$;AoCqOeGGH z(5neg3VI_j^qtmOUPq#1vNQ&H4RxKaAv2W=dXF*vmVQUYny#o8q{0RgVw`>(UT#R_#pU2Nzl_WjpH)9&dRz-{j8pZf_m>q zMR&-DY#o@n+;h&o_sq=K_uB`6DvlgvP_S{}AZ6mAjUq$#T4@#68Pes-1B2BFhms+s zh784Wr9I{g?gm`@?tL67?bjGiBI&DnEF;fUDjs-|9LY#(L4_CPWJx=Wd^eo>Zlia1 zd*k+=#!|#JGtFr}3ptBbsOL6H496mpJeFP%3Tmq~4HI{kLD)9elyN^7K7^{!lUyaB)b#n0CC2J3S%;l6ZRdcgxV?DDC! zPGQl*n`MFC8#bLe$_f-2#mxBvL>4aj3 Q5Ho0(_8#{CbW3XS1D=h0F#rGn literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivator.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivator.class new file mode 100644 index 0000000000000000000000000000000000000000..4a30e62e81301cbd5f338ed2dabb04c097387fa3 GIT binary patch literal 224 zcma)%I}XAy7=s-i4UdHbFtBxu;0EO}RH{@2C-@se)v6>__*IFkF>nA5g~$K{8}?{@ zvi*GB9{^UEN<v6m;k-4TxN`O?F#j@}{IE_`<}@{_4OM5-Mqu$9x1Uui-DW$>72hHOfgbw7 J0}R8fpf@U;LTms4 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivatorHelper.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivatorHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..012fac58be670524dc8db6a3fee308bca99e6e50 GIT binary patch literal 2028 zcmb7ESyR(c6#j0vv>`|-Tfr4KN(uyUrw9gcLBX<#qc52dA{I;9i2?Md=&wMXsf^C3 zyvU3{%JJMbO&9Diyxiq1-#O==^W8sxzx@C(isvFaF)U&PqY-rAnn=razT61oCKuld z<2JwF5iy1oU&i_Mu80Xt^3y#5s(>jGQ49;17BPeS0v-r>DBux8P;=hrO@{bf&fZXR zTN}!BdTB~kR!BOXTQ^e-q4A8BaV8l2iT+iF02kAy{M3t!4AJ@yOL&4g24!|;Zj7dR zh)?w~eHgyqs@h@r2BBig8TP4PNi-4BMY8cStL zozWK5C3T*mw^mc}FTVZkRz53WMZz=CqVwCx6=PY8hC~5Z9W5$>z&?C?MQwx+v#TA1zbK1; zhW`+)``j!T3l$)IfuCgDgW&?Lez0~#IIUdQ78lqb3zu;(;j*jjAbTHqMdai@A_a)0 z#3HzYtFB3$b{<@k3uu}nGiiRH4Ah5&2jrs@2P&YMk~>v4>4)r^Oi&~qDgBbGcstV$#&3uxo1lxhmV*AkeRB(L+rLL#b&csmYUGzw~1G2d}I99RL6T literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivatorHolder.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivatorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..2dcdecff270d77c5017d37a4f710bb4c9bab7b0e GIT binary patch literal 862 zcmb7CT}uK%6g{J^o3@pfTG^)+5b-c^4-?Afdhq{&M6o;x b$z|W*>me{ySwYN$C^bfv0zGIi>Kec=Hci|a literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalBase.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..282be8f1914255efcffb8817a34e242e35776dc3 GIT binary patch literal 477 zcmah_T}uK%6g{J>>&Is1N2Nv3Q|g0jJ!%AMFM(hr1kr#(eBJ2DPJ|Ei!52#TKj zQPJH@hzJ~J?!9x*J(t7z_f5Op zdgB>G{<=5eb8h=QaP5IsUf{ME;>TX#=@W)%rFzL=bmdr3T2P9W>OUk47S>Y8schsTt E1w@*0+5i9m literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalTie.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivatorLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..409b7e0c04453f0eb35d640f5322ee0b392b06bf GIT binary patch literal 600 zcmbVJ%SyvQ6g`tPO&`%(AH}V^HWkt;x`_zYZJ>pU3pZtKhY*c3Wje;6a-pDzF8lyL zO1#m6E1`BX_j&G|d+x{Q+dF_gG%9egT1El2D%MbUvF>7np*)(1RK(l}hW$wCI8Zln zFi_g?%Tx@7&V&wn6FxOU_r@m4xKX-46`Gqw$yvxyJW6C@ju{S{OW<4Q424rQq3;ix zttAF9)NbXqRCjX3e`qpv|70@g_rmCkXFN!`jDw-kiHyV6g@+P0Jrv=(*z(|Eg&|l_ zjYy4odX~@zo&O+C_>3TSGgqLyAn;ds?9eG4IxT~h(0GAu0jsO4v literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/AdapterActivatorOperations.class b/idl/orb/.class/org/omg/PortableServer/AdapterActivatorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..f2b8866995b0b6b527b46b9aae3c029e9c3afc0a GIT binary patch literal 179 zcmZ{eI}XAy5CxwhkP?mol?838^pPAX9Szz9%gP5kT9$A(3J$=b5JnVKbkodep0E1@ zz#eIeMT(`u>gszRZvIFo8pX20Zc_wyI-H#@0}IuItt?NLb!qaf=x8E6kaxNgZoSL4 qhv@t<@^3V6q@73to6#~!8~jCK{VSQevyH?Xg<0GKRH86P^1(MWu{BHp literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/Current.class b/idl/orb/.class/org/omg/PortableServer/Current.class new file mode 100644 index 0000000000000000000000000000000000000000..09d76012ea95a7a88c1ec52d39142eceae2874ab GIT binary patch literal 235 zcmX^0Z`VEs1_mPrUUmj{b_Nc122OScE_McPb_O0s2D$vAbp8C?bp3$*qLRdYb4 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/CurrentHelper.class b/idl/orb/.class/org/omg/PortableServer/CurrentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..0d1863e554859850f1a057213955fe8f495d0143 GIT binary patch literal 1938 zcma)6*-{fx5Ir~BB*P#OSpq5wB7_MrEN&1)1E`=N2&knmQ^Rn@XqcqN!R1r*D^RNf zrBx~~QsqZk_Dv=`QC{xS-RE@o?e6>g&)4q&#_>c(J4R)UVLXI3Ovtoc7R!|&t_tzB zAg+u1q>L%V#WF3fH)PD1lhDp)ERCg(NtEe0kcg8g&_Q zhOwC6f&p_LFXjW>ptGOTTF-LaF_wg@6=z2>&Va5Y-xFJZlp7e%XS z+Yw~z+4C zJTJp(lN!(AdeU;Z{oF9Q?wAZS(b{pUm6YmOGyYW`Y1|kZ^V6soq8h8yAH`;?Viogv z%ALm|Nu=hlaC?@aw=(PE1xe+XaI_u;y_}JG&e`!1Y$qce+ zT{R+Hf9 z7hSI2UYwgfubX-0^!mKU1*}_=jBx#twYg|u_)@BUKFd++{HZ4>DI-4}YTV{dJ%>AIKEGby0UV;7fQqz&OdQ!baw_83NFa|*1)73_f}(;g2DKmD z-SECMnlNOpI%8{U8Ls8oh8YOQvzrXDBgb=sV}__+y=0Ku{)khUQF3~92}#2$k_@T8 zY7Dz)r=5m>ZP$Ha8|S_Vtbxl-E~Z=s)`wXSU!glwfb+U+SSP5UDY1l@I zVJ}o8)qfN_{?Kw;)`Z$F%qwS-KS*~l=EH!YJja&z#UKw|-y@N%UR^M1MsG?La##gJ zf>tE#kG>&7Iaxvb8l83^QwHQ~FJLwK4Ut|n9W{GWS~8y?KM({eNMZe#P^1_VlC?+3 O&xn0Mp?Oa?G`;~5`Eis0 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/CurrentLocalTie.class b/idl/orb/.class/org/omg/PortableServer/CurrentLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..76763879ecdc8017e77f9e058239cdc51d7f645a GIT binary patch literal 878 zcma))*-pYh6o&s{E0p5C;D+K_P}9U)jfoKNh!8d2ctJ`Tn<{op8I6yniN@%K58y)? z&j5)=E8(JNmh=6mXa1Rw&$o8~J6O|^#7qhrX49C%yb22{00>{-|579+wWRYDYsA)2c$7ys&-Au>1r3Wt8%Zm|X*DtQbf^*RX0}7$XM8F=1d5 zQwFAyWmxa;bwxOK>(ryZHU2kv9#9ta;4-Uu$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/CurrentOperations.class b/idl/orb/.class/org/omg/PortableServer/CurrentOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..45763b1cfc5422a82a3f8f56bf3c90a320339820 GIT binary patch literal 429 zcmZ`#Jx>Bb5PhR3s~`$iR+?BH)h4!9aG^8a1xpLEoZ|+>Te7T#-)7+t@JAWv@JKEf zEjF8Z^S&})-yfd@69vn4;W->}!RzazBA z+niTn?uxZSpU^F(Znoe&Oy|#pC>}hGD%kT2doFS&T-JP(bTS(1bf*!=PU*0g3{wQc zO^w(nQ1%dxNaBAgChuPILb_sab`=S|h1nRrG=;4a3DIS$SJyY1o#0vMQ)}5 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/CurrentPackage/NoContext.class b/idl/orb/.class/org/omg/PortableServer/CurrentPackage/NoContext.class new file mode 100644 index 0000000000000000000000000000000000000000..6d38b0d7b45839948bd0fd79d2ba2d17755fd360 GIT binary patch literal 487 zcma)3UrPc(9Gu^2-gTY*G0oDF9@U7YpeG~9Bj_PYl7t>FU5=~k_SjbOYxSa0&LSh>DG6tk_t@s);olDdZAZw~$ZHf{6_iMMCB{hyry& zNL6bcLfREQPAF6_?!AG>LND@JTgf2u8?}y!O$S>jIk1r>6n{&a{UGddnb1oP%Gf5* zu7e$v2uw(yiASHcgjC*L$lF{FxMXf$N*<|}*M0DO&Mt*3BE^S_P@Xy5tLx?|yLsaB zY}njC)v=v4k%r z+>anDV+hL<9>^FGSyr$r;VTJi455O(UE>TRS<|Yh=4M6BtgJ1h)pfFF%rZ|ggy(fb zw{J28;!_V9g2GHo!L*7DL-DDOND3E0x>4tr&2TT?;ZGaesYBDMY1vw_%5&V>;+C3e zSQaKTtx_=?C3~4~ z7DcXem{jm7E;2+9^`oGG9~fqqZfEC628xFHei3|Hz;=qmEA6rFRJx1wV<%cdj_E*0@DQ z_UpJ(e8NT73^Yl&Rii#7wTfG2xa@1`m<*kc>_DWeq%3aZ7hHvlwqm&8!@Id_&1Ud- zIe;;*#oMCKceUbC;WWzV0veQU_MIh9vMW(P+Pt8P<}B2m?i9TJ2JIl;+Qoi2Z%Vdc zml!tU-2yrmd03McW(>Vz8j17JaB33;72Yw0`7aHvS{H-7 zg_gj|p)F5nYyTb5R_ zEs=PG@N|lJ!R0r-~kRawqA*tjGTpf7&RTdC(AhH?}Or8#uC)oz@4P~Y6^#A|> literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/DynamicImplementation.class b/idl/orb/.class/org/omg/PortableServer/DynamicImplementation.class new file mode 100644 index 0000000000000000000000000000000000000000..a70801dfbd64a1361438be04a19e562508252994 GIT binary patch literal 225 zcmX^0Z`VEs1_mPr9xeuE22OScE_McPMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvJQ-W?or- zHjts9;gesKuAiTquJ7z0@11peZ c1M&ocG$W8^)!NR$xDh1J!pOkRzyV?b0LsucGynhq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ForwardRequest.class b/idl/orb/.class/org/omg/PortableServer/ForwardRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..5f4acd5748bee787bd8ca29d2876d17736fa02cc GIT binary patch literal 648 zcmaKpUrPc(6vfZ1=IXXqntw7YD+~NnEcI#xDMb&0VHETft2@ey?b^6nU#o{S3i<$j zsOTS7jt+tTBWd zws_EmaVvO(3vSgpL#%9zre@zYwNj;8Jkct(7Oy)62H%lsna(kTCzHKq@Rn?Y@I+=d z?;`n3xuy4Yt*u*4?a~pZ)hzr)%UD;jfs~3MHdV|+Wr+WtF80i}!G+5#sMx|b10y(% z6vOW1+84HP^je!=a?$5PI~!T7^7|g|ItK_Q&O452TXf~g>Ax!Hyxrk~ zK{5@7NG3aNlOa08yc>#7?{v6DbNjP^DW$Px%HQwUqYQCC53A5?lY2KP>O9m@CR7(` z6@f$@;Lp8)4Iw>I@6tgmjfn&i672=YL@xgf&kq(FV;Tv22utVQ;Jq1Qj`Rlbg=H#v N`Udcmd~WZ17+;q6m|*|_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ForwardRequestHelper.class b/idl/orb/.class/org/omg/PortableServer/ForwardRequestHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bfc992e25eaa328b14b5718e4d3acd42f1f9340b GIT binary patch literal 2559 zcmb7GTUQ%Z6#fngOfpQ`klp|(g(59UgiysBp(vMDB0(xal%mE-a)<*VlTIdFtXeO> zqW%G2vDUznrM6G5<&Sc?&&=csW#P-r9lR@HN=6%|y>v1oVOAX8k#QY&z4Ulb!kh;&FW$$zu#L;`VL^yL5RXLFz_N^wup;4O4?dC6g;fdnW%LNY39NbP>r)w@;dAjwO87#8%FvoL_X?b$Gp-xi zh`yDL%q%WVPeqpLbVkqcC_~$Xmew6O%t6vL&VV3Q@83nMLGb4rmsrhUqVH#RKOG&y7u99@2Ik1A0 zRV0=#luT0R>Q?mZk+$v_nn@Hdz7Th@WY&QH2brFUbj~WKf*ZIgA*CRV5JR|9{8LGs z({mYa2-A!Nu3#Nm20t%GOfBQI4HZ|xm(Ub!V3XlOjkG(vX*lc{9ntMdJIyJ}fTO*?qwiWDPOv0{$J$yx7-WcM-)KX$@D$Z~@mfu!$TBgt7 z1-+=5y0O=%Wkv)=4;cn4R;PMY@HM_s5W}|;9x3<^4;6fmAI@A9o+}8V{57fc4 zcx(z!GN+A2jF-sU%`^5rbzzzY(Bw%?Ok=WWjiZRRHjz!?){iX>ef&_AT zEg|4OM9aP<^&*T{9BCKaXrWVI=m@UW@B!RqwAvtE3}eJmi_=@Eg+kBK_87gPXJ{)! ziie-W^%(8pXK+1*Xa8roqLUxuF@pd)dJz#%RKE|P;wzd|8>kq(2vc7cr&EbVs( z_Phm3g23fU(sZ3T!b#E>*#rsd3SpMf`4fCc=vobQAK<0Gj?lAufUEH^$$NjpwQz%@ pE9B@+yyal^5R$<1hb*AJQ1~gXmC|GD_DijY7>_(_jpNEVaN?-$%*f|Tri|=ou*@ZPQ79m%D4PRGOTqQ z^qsDAFlF-4BHU{zkyyvL^MNk(825AR|L#-^-7O64+vDz#ecS7y?f^TqggO{T=w-@o zT2PI?$bE`q^p|c|C~LieJyQbh@_1ODMuZ+9smfOF6_GAx0;v#_4KWET*Fy9UB#p^_ bNX~jeq=i_w%M>ypM0I1N6l+0yQeyz$LnPPj literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.class b/idl/orb/.class/org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.class new file mode 100644 index 0000000000000000000000000000000000000000..59d9acd8ee15c659a4ec585648dd99b295668cdf GIT binary patch literal 147 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gn4Vp2|OaB5LmYLULDOT1%nu&2A9ud823e1N}?r*mYyrwb#4KvrT| pqJB+L zeo?x9er~#cKz>n4Vp2|OaB5LmYLULDOMIxGXJDwSpKEY%e1N}?r*mYyrwb#4KvrT| pqJBn4Vp2|OaB5LmYLULDZ-9@dvu8-WqjQL7m}7{izh8WSKTs$#-qVGV uK_Dx!EKxrvF)v-;KPf9Uxr7a92Llt(OhyJt24)5pAk7NoF)^?KNd^ELR3mx- literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicy.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..907dcdfb87c2e5369c4958ecf85420cc66d8d874 GIT binary patch literal 256 zcma)1OA5j;6rA{J{DKRYF5J2b=n3j)Q7E+N3DO!%OPZ846nZrm9>7D10d>)x1G9O< z%)EKN?hgQ4%qb|vh+<4Jp_o$42sYYeOqUspwXr;r;v!5V3=6J)UFVr9g|e}hdD;>z z3f^!gxyo3S6e6_*yT9#GB@DN@RyD!$=Q>2^z3-|&`K#_Z)G3#NvclYWDhSqHx%xiL Xf@646Hn*)uK+wYgea9g@x7y(i_ApB& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..0ddcae78b78ed1bf269df74ecc65a2ea6a984271 GIT binary patch literal 2048 zcmb7FSyK~15dJ3DCd(orf<`>?Og72_-UQJA9#Ie^sHHDk%QD8*ut_b8%1_Z>fm#(Q zt@3!$Du0w^PqMj9AuqEteSF7{_B7`!FhF4C4_D;=D}D1+iQVOs(UwU%Q(Wa~hR~#CTkaHtKaqUI5D;Se=tXCRVK9+w^CWk23RGc-I@C?T zy*bw~U(Oq)Wn-m4kUndbVSqed7_SViVAy#r=Q@_17fD$5I(J-#OrkAb#@x)}!#K_m>+H6IdzfPw%g)YC z&}@&08Q-y|6JsNz3Xb5Ygn0$`v7lfP4-}+uR>G2kT=g)*aHfSb`nY~xt9QM*GYtD% zEVb#(tiG68%FHtiw`v;xl^$f*N(Bka3Lb*yHd(XXu?7b1zisdELWw&J(FX0R1HjN< z1F1d=L~WXP(F%sWCJnU9b<1|S^UN^0?wSl!iB9r%N*e9&cx>7t61f?AtK8RXS&elW ztNQ%6p$f|H@hD#hiFdqA-qbT3Z>_rCk|rWE^a$G5(N1)6X`KS4!soivfi86<9|eZ# z<=#hs00vo%IqekM)AZANkWT&dW%LcIpTOSJ24qN7@YKIY&?A~jXUUXe<*rT~0>F)E7a>|wQac5@uVNq>LRIyE66&q@HedDM9wu zaT}V`YG`H0WqQq`73%h=s}+rWr(-tk7PVQ~vCMiuM-aR;ZIfLQ_|^0yL7?Cmoa0Pg zfJEd;RhQ}p!Rc>ep>%(p*V4C)d@ntD&yEZuHsrCO8L z89{1H@^8Y?a6<5f3Q?;q3I#?2-py2FO2EnZ^Xypil&;L=o>F=N?%~OZo#31wrwoE6 z{t_WSKU|4_@ojLs!vCVf2=`{*L0-56!|AS}X}>>GSz%o-vdChlQEnd|`m hKaeQa|3k8wSNH}9j9E4i^B{ta@JfLJq-W6v@B?yL;MD*C literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalBase.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..71bcad4004347a4ceee797f4da4a798ddb3192a4 GIT binary patch literal 522 zcmah`T}#4H7=Dg!&e<~aBhxI1ZZRln)Yt(xas>d^B;ed3s!=`T!Q?M>T3U|a6obi<+N*v7J1ubnegHaXqFb*D|t zH7sE#sz;Jg!7)Q4(k1=v+I`Q^osJ$*Eu}SSCH{j9CNt9r8I(1)HCYDUa6Fgv^0Kng z$dyuyJEaMTU`Wx4MOo9BV&qe+=-#8(8F=!5V)X^A%D*8tif7~6h|6-?6Zi*$Kp!&L X|0R^kMuc?r5&Sa}9}sBYQ-szxh~0iV literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalTie.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..fdaa58e327889bbc834635aff1d4d070a6ae10b0 GIT binary patch literal 803 zcmbVK%SyvQ6g`tZ(mZ_BN3CzWYwMy|5d}qPyDAh~RJtv(8A>3{gd`UFPc9S`(S;x2 zM~QbdQWsscZtlG^_ngDMXXfMc?HxcB1sxe|Xi$+iu!$`hwq@9nVOPbTihTyHXLFYi ztcWw5v_vqdh~c2p5kX|#y8N04BOX+mb}bB@fj8t{)Df=JAGduTSdk;V@SGui;doAT z$#7QumqMw_kZcH>MmQ~&{w2YX8d>fgDOBfC=t>T4VEEr#^`fy)5{Y7|NfY&jKW51P z(QCA?>NPS)IzTMd=3x{F0uiHY!a&Z123^I0i6tzX$YRCBD%MP_Bgb$wv%f9Tx7-^? z?lT{!ZiPfTo|!axNEGO=Wa#fOC~^y`(o`ETDK5|{NB0V4z5D`JK75AqNGFNcuoz>q zlo{Qn%1=-p;x<_kw{vk@m+e<17=AJ2)O1Xe;Xc+OBd23h6CLt-IwsBVGcLXWjS|20 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyOperations.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..12bc96529fd0b67e898a9b2a73fa44596a2d1e92 GIT binary patch literal 210 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B*0RK$(o{wUBMnWT{GxRI{M>Z?fc&D8#H5_m z;MAhB)FOS)6vyJ?%=En6)Vz{_{G80>$}o@~YeoiRqILKeq!uNXWaj4;GcpKdC6*=X z=OpH(>-#5Vr6!j!GRVOUa`q2$as)a6WD7zM8zTcF0}~K41KrQa!pOkFzzSqB003QJ BK7IfI literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValue.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValue.class new file mode 100644 index 0000000000000000000000000000000000000000..1eb0a30417f87758fb2f9839a202b4b7c93fab5f GIT binary patch literal 855 zcmb7CTTjzq7=FHWqub~dbb{j`$ON~k)aa#Xf@2p;Mj$IL;i@THS&Ch|bf1g-CcT(= zz-ZzR@JAV+uhzwQ$3@>`-{*M`-_Kv)egJra?HqKJmAI$GW*#|g@k=< zjlzNL1ybN?rCGf?dBKuS_w~LrJW{=qZpRBe`GN$5>j=z7uG4F~qtG8STdY)DXU^C$ zeJALf2PbE4SE>mbZ@cbLdfbeTN9<~+>nAYmwqu|O!@zaS8Mvv$GBym{!h(U@C<$y| zZDp!{MPTm#Mg-RX0@V-NFL%vhasjis*J=dPljj1fag`S)&0CW54W{kmE-#6ZqX0?3FU`z4vfRK%f>%cTy0Q2j`muJ2>_?=OnT}2E4>*1U6iuh`8S1(U+YE1TJ)m4un zyTUL|7Ei4mORrf@RX2RkcB;bP;}&U4y$Bm&o_fJ)Z2M%+t$OYqASZtIY@e$C@W=~R zxBcjbcd4^HU#2}q4ZX_o^rwVvHiMt8k5?KXeJ(r;Y!4U!GH&i)Dw_ifiCH^tJz_uXa|N% zQS{E$2PBTHf`F;8GY@%R>}#PnxzhmJ5gpDj`?g#q!j!3vd~VvJr_5&1R04L?S3S79 zn~&jm=+2$(y6Kl0?q&L0x?l3RU(|bH*RVKu`1KBI&;^BfE2f57bDe51WD5)d8O1an z>|Gh;C!SlUN(8JZM1ThKr^$8x2%z2bgh2`BPY5-hDNL8*Y5Lnt($9;OqDASHq%(~U zT0f$%G1?jJ3GD^guXF$zQg?>x(Lf2r+Zfslv`L)9`A~ZXaSV}kMEeV|&Fl-rTS#<* zByj;3L$f07!c5a%WB56yv{x8zK`LfnBlaA}vab;P1M=Q4h!?dMls1m-k%vSm(*fE` zdUf}Z>xD%pq> zh=a7oz%EcI8bM*G6G0$Sq{jCXrMVU=$7vV$$P{X#jraB~W}t@_6O^IIF{x!+IMu@G TP8np(9x63iAi)SsM~(jhQ$#pd literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValueHolder.class b/idl/orb/.class/org/omg/PortableServer/IdAssignmentPolicyValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..51c4ca63235dc34f5f78540d426bb1f7389b6c0a GIT binary patch literal 904 zcmb7CT}uK%6g{J^o3@pfTG^)+eL|!HMO3mnwr&6 zi?t@LGlImp(w}RNZYcbpUyYh=q2?P|S()j}l$8@B{ylfeHU43yz?AXx3JiBi%n7G_ zb!8AN@Rx{@@U@os7oQM6m-t_JnBmd%8^|*cV3=NZ(=mAX0|Z4noq2_4j9Ed*#YA09 mAe|Y&`wJ4r>R(7E{Q}PbzHyZ`L|lldM!1r10O?7z0ek~&)$HK_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicy.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..77bfb4ac5dfe59ff6c85b8fd02bdcb1a915c4b6d GIT binary patch literal 256 zcma)1I|{-;6rA;w^$Ql37PeLkdIEn%AdsMVfK7acgt!|wYamy%@Bki445)>j1Jk@= zX5KuWw>yA2h8&!u!_npFar8L`3^Q$Fq0g}hw6QYGXiugjBi!RbC6_BHDvCg7NmMb6 zQdvroNfiq}OewMqi@)uDPDa{9tAb(tb*=r~YFSsm^C!P&Pe(Fyl_hhM5iv}E<^1!o Ya5vso*~C^3149EXG;6lu)T?W}02C-oQvd(} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..eba6948ce75f7c7d497d2aedd685cbb9c4fc18ba GIT binary patch literal 2048 zcmb7FSyK~15dJ3DCd(orf<`>?Og72_-UN{V9#Ie^sHHDk%QE6>*u-T~`6>DtZ)4AtPZ*Mij#mre)0FhJ>3EZb`V!5Y*kxB4>!t7MxYB zu(qmA&o548v?Y>G7gl(hAvA8;mOH`VPb42Q1caDAdcj#{=uaeDJjtD$0u|VSHgyAV zcg{7;7js5&$ym-4q|aJm=p&Ek#w$b18}_P}a~;cG6-ik3I(J-#Orj-T#@%$G+{!2t|N$SSyl!wU8zuHcZ^4dOUMti9U`?qZf#Cq66O@#!@Pn8+*gpoSqX~@a+Sjn!9y{ zmwO-m0T^U4=Co62Pt#B9K|1x)m(e$8;~JU!Ba=eN+7Te-&R>05d-aM&%s}o z#XrFR3%%RIEEo%wAbo_NWWs~t7_EM=K12k)Jl7r%*dGg5aZli+r|c(tA9+R8)HWg| z$d$w*IEB-mNu0hSxT2QOHA`m7+}SG786;{zKH3SO61pk5Jynw=RL^9BB8gZD^#^+1 zq3a8xk3XUJTk0obsUL_nh}2XGdqpahnga0k#Hc8uvxgNUBoQv8`Ws@M`-i@si%kAQ rp8v3y%Yga|LAFI1^}R({{f@q^YFdraLtO|%YicE_$&+rsa%1=lAL9e| literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHolder.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..5a0c277edc2c7cf1e0fa4f63ee3eae13582799c1 GIT binary patch literal 874 zcmb7C?@Pj95Pn{DE^U>TTG>x4NGCMvs}Yo65&|u&uQJ_>Oy*{DGyJa#ilh(y0sT?Y z`|7k51ZC{l?w)(@?z#K^`TPQKhNCb<#6t)o5ym<;xY^_;DPl{+wul`9p`#iuCCJ`b zc3rWWb){t4j#@Qnnc5v{D+TSr)Sp~x(ssLK8G5aoBM6@BrtVx2_|ut3f8Sb4T}ht*0?O)0w0c#cqUx-FKH zOlL;@4a(dzKW{xJVG)vq5W*sMCG25eLJ9{G4iO_zW|rpKGBj!vL>g*GRSeavE5&Mq z)*OP=kYr-Q!Ejvgxe8IE#R~-n0^UwlV@$x&__OR-@RTl3IIr|RZ5VL}ahlzWbkeuzo h{|^$y>Les9zroi-V92tDmm% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyLocalBase.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..4e8e9d530fa6fe4589d98b505d150a1888057e55 GIT binary patch literal 522 zcmah`T}#4H7=Dg!&e<~aBhxI1Zk!h`z0?TOZURAR6i62`^)M!Dt8EGXtAaitD7x-P zMei~}BJgm|dEfIs=XrQPKEGby0o1XVfQ+<+OdQ!bax&uBN+6GI35tY*grbBU26+(7 zZur0&`wW?@&cv7+nr%3yrU#zom`#S*k>yyyF+;ShUNQ)6cg)GmDY>%x4@to~k_@T8 zY7Dir(@w*^Hmj~@YCYErjG@hS?oGL;osBOX>-LU2-1mE~ZH;D)TJ?~jw9ILD&s!(N zT)+y}!g>@1CG0ZPLtWBet=(})hTSrJs->_X&BcF^?r_3K0fV~0Rwm0Jj%?Qi{BoK)&(1 zql|a71{W-V&AoT#o^x{Vnfd&B{{T=yUPBsdDiq{0SjUD8n=)+4u&rQ6!7hW^vADx~ zX2=D8K-)eAC5IzTMN;z8&O0uiIFBLhQ+3QfVDjs-00$YM#yGFEh~!eBU<*x!cen$EQ? z_nD4UH3K3YPD~m-B=YoE()4#2VsZZ?fc&D8#H5_m z;MAhB)FOS)l+e7)!qU{d)Z*fR{G80>$}o@~YeoiRqILKeq!uNXWaj4;GcpKdC6*=X z=OpH(>-#5Vr6!j!GRVOUa`q2$as)a6WD7zM8zTcF0}~K41KrQa!pOkFzzSqB0048; BKCA!$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValue.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValue.class new file mode 100644 index 0000000000000000000000000000000000000000..da2625ff4c48ca7dbd453fc39074fa9807971013 GIT binary patch literal 863 zcmb7C%Wl&^6g?9sb>ceELTE`JP#P#nfEvM)f&^(6mQos;CK9X2O-$tC*uj}b^qXK& z%A*J*K7fxxoG}JP?7Hxs`|v&YoICUL*S8-49$+&E9VKOMDs#&~4jTr&+sc%6RMc73 zaYx5p0i)Y~Zog>PyY{w#um$q9Fc?cGkR8WAay4Q?AUE~X{YDrKtZ+E6nqefJ1K(}A z(Zr1`yWbAHH%D&Zj>pZ=_j<=M#3KQ-yVGv$+s%d=qacOA>{Lo%raMvN1Tx8~l`ABZ zu7!Ojv#+9X*!2P_@UU!G&QBoUl1}gSjx*X&C#)9A zmByhnaV*~n2G;Juq1%&GVbtID+>!LSA079|YOCibFl5^?QGjXUBIZn7R%RLNCaz$? z#8ngpHqW;<)xRPz_dgMVwZA~M-Mwc|tx<9dmc8Am2hx+r0;_SC7bfIelKO`K=;H=o zK#tdHAcG=iVbag@T2i>cm7ICy4iSzyXw< zlpiPMjiq;StwfuOJy524VZilMq)twuorse-vqYPLwxVfBt6d~e3v5)aM)eHo>hfoZ z4~!JVDz34j*c6g++3FW$zG6lJasa}r3& F@f!xgs?-1g literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValueHelper.class b/idl/orb/.class/org/omg/PortableServer/IdUniquenessPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..ab69218e51c13b8bc5ae019a4e95e73174dc71d6 GIT binary patch literal 2143 zcmbVNTXWk)6#h20BUw?}#7$@$AmH9`WQbE*3dCt4w^C83N$S|N6cCEN^{6$|* zl>P!X1D&wYtuW(C& zj<3aXTR{P967EP?XGj>{UV}57DL8H|=j_yS%jTwb}d)*T+6Nrf0vu2E%!2PgmLC{yV3H{4qqkX9|Pj&!CWMJfqK)<7xWiOwkXFl%h@P zl%z9_4_e=&uW{NL?FsEE*l%M>sl#5)+;_q9o!!}(Bq7I6%bbX5BrvHRJl zh_{glK$5tCi=kP8c44MzFERWC)7lFRw;>g>FA;l!k?ae^{)D{$E8+#M4W)yTee#fq zW!h(ZiF{?mrk5mqAoyo66Cz(H0)lGx@l+5nKOH4zP>*`0i56<00|L4e250HiZy<$^CKoJBA1 zx-qS~Vm9ka!L)3(qSGR^I@D5fwR=N*bf`hw?SiRm)ozJ1G6cSJ&Cu)%0&gN&A`r4> zjTJgg%vy<)#j-`!8o}W&JDb0~x>QlBaS^8`v?=9&1TZIsn@7Q5NxO&Rnb+W zuH-8XTD1w{!%7p^9NdumKf4;$TU<>TSXr9t%b1lTBmO;i(KY^Is=%1>vkLTgiO&hg zY;`3N%(0j7k+8KE*%zA-I~UkrsGnic)H}!v3!tA~bkk9I*aHN3I+cEdXNXxs(8WYt mj6ap`!TSdi!tx{}oqC0*2Vq!c1z{J$s}ZIo^dLU-Hh>>~`|WE0 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicy.class b/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..9b1bef990f85ea7a7e2f6de5d9989614996ff5f7 GIT binary patch literal 268 zcmb7=OA5j;6h&|RG=9N>LkI34;LKtD3<`x7T|pXRNlBX$L!n!9-~wEf82k)6^ue3l z%f0XL9?#nyzy@;)N-?4sQ%oqP6f**5Y|c!Xv(#9}GcC{3Hqx@FthEx#g~F+ZJ7ucW zc%da&6ujX~^D1XaR!HFpwtto+wY2ZfE5Y)Y-6yAA=rKN5R$VzZg6pVq(q6cb1naI{ af8kklh>w+1t_=tXdKjSZcZk4$z|RYucu+q8 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6febe42315b7b45d75c1796e241becea3efa3d01 GIT binary patch literal 2108 zcmbVNSyK~15dJ3DCd(orazs4w3>#$uZ-Qt5g(wIDO5w}avaGloHmP+$`6>D*iiFWEz9auf4ELexSso zTaNkMGGAKjdKvzH3;3r8xtQ>nnJu=df+OgYkWp|S#})J|4@Bp(6 z*E3VIqr`$i!G?Xl`{?lCkb)C9DPc~*L(D5!z#|1oT$He=V5xK%WVlerF?~e8tW`Rr z_T3nI>nyd2^pw7kUQEw1^w(>u{>8TuH4ZG&r?HuhBh%KDrjd~xYT!qQe=L`=}3z@ z2A%}^Y3ldT--AIG?N2*}_QVQWkJ71=zKp&>^%K~8+JFp+BAz;0R04rL_;!ohh-hw4 zdkOxcEdBxhU+CNuX2Dpf0O=$ABoiJCr)c$qbs-{X=ec%x!2VdcjC%%WJ!Lo9`^YPz zCif62KrST~!8x4wOycwv!4^3hHJ70^z}9V(j)K=n+8{s2(n$usOv4l>UVVQmeZ<@9%@4vTHRBUnmpik@WCi>$2fvRn=SRY8&T&=2TG zMRRqn6oiarhuxVob7s!W$LHHSfIVz$P?3xwij;;q%uBN%&7z7W70W7C7?h^vG&sZV zx$9Rw>vh(S}as$&i7IySJWV+*qk2P4XK<~n8WGsLS_(=r{a zUNH;zRbCPd8@*Bkb9P6REBFT;cRWcK>56$fRGB_8zoq#5?v+6MyP*ty+KKv9$+ggNEA&NMB0E8UiB5#PnOCqUa-b8Q48kdd=m9ht&SYN@>S3l34=~99 m6U$`V2>*g4Fg*y#W}XphBhsrfgV_Kgt1)7Vw4pr8Hh?dy_wXYC literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyLocalBase.class b/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..469a6d92d52c50330ab0a57affd5db35537c5a78 GIT binary patch literal 540 zcma)3T}uK%6g{K6u4`MFADL!B^rAkv)k~ofsJ#e+(n26T$ht1e%DN-#Ao#Be`hcM5 zxgQl>GeM#Uhncx|?wND$+_|4$ukQfPa2SJ%go0!gsVLGaqS%cggFOYBf~2=ME+e$-CCjoSM34`i^dh!1bLfL*&x+U2(+_E);JWqy`_@WEPZkq4*C;!zQ*E z;(yf`&YRb*3LiOT9yof32g2-owqXZTJJ6e>vFBQ@s9D0Dn!@FNhf`oyIW3wSvNzATc%exCsbENJt=RxRMb%WRiiN3@r)&G|pu%{|_OC#Mt%kNat*Eowj1qPF678vm++~3B_{xI!)IV!Gt06 zOSRU#s#eG})5cd35VfyLEjsq>-smI z+U+mQsyia;`GVBhVZ?fc&D8#H5_m z;MAhB)FOS)+=86UcbBzHjZdn^wc>_UnzV)vI@{*1mwS1aghQpGe!6J$v}t)rby(mATs=HiK|r z2BU%54nk=k4&9C$PTkP7M&qI9c(U$DZ)!^~@Y?|sClTahfntBZHIIRsCIkxes{#xC zsUjtiidU^tCFNuzIASvWG7Lt2&zAy^DpvKpNpJFoWaaaSqg&>heBqsih?!Ix{u~I(KahKe7oM8+@&OHNp7zQq4 z$-s&-YuGYy83hAZP!f1>o`Y2=>jF#v(-GMG1J`IBJgb}I__j>zd2`p7o;(rQh`PKW zme7$@Ir=LC*ZF!fdjP{JY%`Z?ZK0v8xl2mKP3|H)rsOli>`ishPO4<*tT87*@a zDqH&q@s18Sfa2rwleoOS`ZlVSX%mqL%2aO>xOR%f>=fEe%%aRHZ3^1DrXi`$B8Dok zQMG1kXGqr8K0&-^q#!nMl@-M%ACF7dJ|p!73kr|}_$67{M4BhC72}l={S_#FgZ@H0 QL;3>}%1uVD_8T0(08~M~(f|Me literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHelper.class b/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d82e61b12b220b75a9bc30f249a9fa7f7283bb14 GIT binary patch literal 2236 zcmbVNZFAE`5PmMUBUvbrn1n)FLd~lqw=uMomN-BiLyH=jbWNBo|)TbreWIkOv!UCyDt1)Zj$!#V4STW=ZtQ*wmdTDW;1)}z+*qVmPhaL z(2 zWxbLs>%}#O6Kh4|0ELPVkyN1}&2ajEn^DDM{J^lJ-!3c?YZgQiMk&DJm4(X^o~SVJ zqXbjM2C5=c`lzYkczW2v@G9Z|a=g|B`!^=nI7*F2;}1 zaO}E2xpjuCJ-1Qbm_dH(I!&sF-zRz))+i`64$t*&AE;mdcw$ieaTbIfP3iNMXp(+s zv-Ec)rC>Ro;&i4NMC%#)nxdW29@Ace{YnRrA@Mj+Px?wA+QHbauZ`m@&IQ_2h+>SS z6WS|89;RO++D5Dk632O52+Rt!3o}i7hw&Gf)81md4XKcRhsX;YNxwzp56HW}AX?Dc zP&zoWOCAzMne?N*NWL;6bITGgiTG2P50GzA03!O-Z&3e2GWHr1D_SIRw4_B7$4VVc zb}*Gl5a{vWp^}YAf%=iw2-taoqG1(49rJ-mk(ll!N~1AQPSY;#kqK(1gA+ZA1!Mw? f8Ol)P7}wHmyw}FbZW&};-dAd}K#Wl^T{Zp%xuRZV literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHolder.class b/idl/orb/.class/org/omg/PortableServer/ImplicitActivationPolicyValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f0cae2d5eb9739f77b4afb71b27f3577d733d289 GIT binary patch literal 940 zcmbVK$x6de6g{s^8e8K~Z5`@7fE^Y=7lKvmOQJ9Q^B?Ze0Rv2Vow^|0n z{)OW;G^g3nE*+2S_m**Oc)sCjrKW3{HItvzxasTMbnHuq9PNt8D>B56Oxxtg4AE?^ z!XTYFb)q}ShT{_ya@8~RI>XK{$65L6^h9%m%CwU0w)izCShFZHV%0~_iZ!gO*ubWWEu4j@OgvxcAo>TA#LO_Hkbgm>1F6q4i&Ov+Y>bqo4&*0M2Jj7M&ipR` literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/LIFESPAN_POLICY_ID.class b/idl/orb/.class/org/omg/PortableServer/LIFESPAN_POLICY_ID.class new file mode 100644 index 0000000000000000000000000000000000000000..99f1c0dc3c1cb35a5bd34a5ecfea226444bc39c5 GIT binary patch literal 142 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gn4Vp2|OaB5LmYLUK=r<-eVfTLf0fWMEYb7Z`y3nPO-R$^JAeokUu ky1su>R%&ty8_-||CZIu#43Z4Y3@kvJ706>^U;~m20701`5&!@I literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/LifespanPolicy.class b/idl/orb/.class/org/omg/PortableServer/LifespanPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..a0a1f8bc3e2da0c88a50a4e73341ce099bcd00fa GIT binary patch literal 248 zcma)1OA5j;6rA{rUvS~lg&WraZ{TlHD75Ga(vX&vn3OaWdNmgwz(a`vbHQ-U^ml=Xs{(Rk}tx7OPy=6*sBXO0)#ak~f@b zZVHxUr4*ik{bfxm>9|+c)C8-aNx01r)ZMKjXNYGC&bn6E zSl8xqOS5Thg`{(ZHJ)M!ORiI#Y2dn;8FEfySC zfGu<96?e3Z^_0IX8unr#Z<$*uL0{r;T*oj8Y3g4{^=x*Bq6{5w5Z`PoO3|aBE!f3P zmlEK{Mr!Y{!Pk!E(qrU0;^sEpI`DsF9kFZh~X z1-;$@^vT{+4^Nr-a;qsgh(QSp3hv;Df&+*vI4n*>IKj}^Ac7RJOK6P>8kCn{27vavb)XmMeZ;}>*G`@G(%q%pfc<< zveeJw=^6H!)UYnsE!*YJQ^VxCYcfnH+J~}TQZIGeC(;s;hL)kbGShmM)p&;%s`Ypa zsu<@UZ=7o&@wOkw>u!b<%~{t<(J-hCU1F?jXeT?kG*@3K&uq=x`|v*)npi|XEIHZM687R1HJFi^##$# zpV0R$`4h3^55yWoYO;iVf=VT)0DQeMN{YtV!-^4-2p3ZQ4Y5Z4p|5k1$$!-IAM>~j ls=p9q+r+5a-Lj89Qv}eBb%b{qFht{`drNilZ=O#6t)o5ym<;MA#G|DPv2>$uf;vFUJr(GunoG&frgH?im7kt4@41J!b>K zktzm>S1$`@}hFErcJ)~?%j$1S@AYvlwZSb1^`mvquIDaDRE$&o5<&n8MTof*$I zl)0n47(1t65sHEk!ZLOh>|tL)3I_@f5o5^CWyzIg*15wFY3f~FGxc^uD^{Dl<}##4 z4W>>vJeV+fZV_(ULL@LW?q;S76UL2?{okERp1Z}FeJ9+Vv+rO%#2w&-mQV)60=-Pw zO$#c~7r9SyiTbA2ousFTp@*5J(^7I@g%2P392%R|UO5Q1rPU z6`g5fBorm=Fvz`N zIx>6qV9b!Y)rNe+RfoHlst3O9S`CKSneE!aIYYEuxnU4m-oPX?r{v0&e@F_}kz`2y zRbx21y4334y;bvkOYL}m!26D=oBqV~Rn5LL$0P1`JjXVs^^@8$Luom`)xK_C5NiP| zSPOem6qK;bFw-RM)w-HzaHq+~)I%XGA|%X(XGpt0G>w4aaDlBXl0h^a&n2yFxw168 zxk^LWr>VMK}Pd`F}kO-J>vkQVf3h>rw;5>nXw WB^1eqgk<#z;tOJ*kZ3b8LU0c!Muu}xvl~8C=>9)l7S^}{*B(acpa-pDzE_?tV zN<3F1blMHy`PruNIi9J_&<|$qu3`rQ>k81Cq3cE45fdy8m-Iv zIhi4+CQ9w|FbV{Ti0GIwV42XMtJpCyhj|l4ESOltl8I$l411~kY>J-aUAuCQ^!mCJ z5@4qS#y<>YdJhG99}J4@oOXHI8!#!((8;2Eg;u@x3Rc^Ff$~Hrsn;-@Xo|Ely35s` tp*$vO8b3)}Nm`fbH)I(8G~~`?O_t#ysYB*X*5t-@$lJ-9Ji~9h_y)l&w9Nnj literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/LifespanPolicyOperations.class b/idl/orb/.class/org/omg/PortableServer/LifespanPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..b7d1d8c8f3450a6b13742447a046519e6e60b8db GIT binary patch literal 202 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B*0RK$(o{wUJq=Bt{GxRI{M>Z?fc&D8#H5_m z;MAhB)FOSK%(T?vg2cRl{G80>$}o_6YeoirqE!1Aq!uNXWaj4;GcpKdC6*=X=OpH( w>-#5Vr6!j!GRVOUarO^#as*lovH_uojgf(ofeDD2f$nBxVPs%oUceELTE`Jv@}o>Q?SIAf>c5lkwP2AQ6yH8o4S#UV@J*q(Qkr9 zD32nL_y9f%amE;^Si!<~?!)(-bMMTz@1MT{c!2u_=%^@jOPSjS3fMO2-BG5hqoz(v z$6Xye0!F{v+1q!Tjs32GXbKeTQ83`Zbz|n4+GEf z;;9$gE&te?jNPyu1^(bPX@4j%-)}cMPSfdcc;^{0wRAeWw6wMH4)dUV8O z{y2_CeLs`}cC}giKkA|*-NB1z?zpQ|l4{ovefgN+gz8aR?72rBZxRJlR!h}d>%^V9 zcHo9X`{3}z8%XLm8m|W4So++Gj(b$JI|x!3D(#sl!8CCh3ns2Avx+Sf*RW*bI?4jp zzb{Mmt_dvsEka=P7fAh}^JLE+r+c@XPg{*p`tnp@J?ZkJRJbEK+vvA++~l1Xc##Hj zC}SQb{UUE8gG-F5o_-mN7xGsabD-oOj>t2|9u7vk%xICPP+99e#2Y#w0Y^^DkJ9q? z%Il<7q0J;7IHr12z{VLevomNjF-tNlv^i*Nnue^}MGCdVM%8Lq=g3;CA0XZ`QV{F7 z!HQB-O6l^}N8~hXpWyfbW?H2o literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHelper.class b/idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c5632a67cf1824948d394cf061f145546df0fdb7 GIT binary patch literal 2094 zcmb7FTXWM!6#h20BUvbrn1n*wrkGnD8KOY%aiDcV02h-4%Y;&Bjbd*+qK@QIl$87w zenDT;%NS2PW#EY!eiXx5Nk)#Hj+>X=)wz6o&e`)Fy?Oih3jkM8S1^go3Y|Wa@VSB* zzEJQbzLM~@f?<4R>pTS@J8Jb>xSoAc3t?p+$3$OH@aq+pI)$=+a8&7b2E3ya1+0}mPZvY|0np$wilrv zwzl$owc$UoijOfRVO7Olq#0&A4KcW;x12_eyTZRD!BA1gJ%&-frF&K_>?eA46>GS! z;s-onI3Cq->1mZWJrc37>ak9#1MU%nsH4Q2FzC^v4-VMpN)H$no-PR3SP2?XbUnj`2sya6 z+3D5D$_Gq^+J4Eyeo^m*UGw0~{#SdSe^)5fuwpP&8jfA}=VyUI>$nYmPX>9z zbvCIAekT;7U4^3ZVh^&<5pN+8fFyAa z=R>n1?ZQmcUSaqdrnHwBZb2$$Um^AkN3t&w`wQ~kZ-^JQ7L+!Q?2(5=QKtQ9FOaW{ z*wliAPeuG0OozxF+mxM9FtnMg%4Ud8I(cB P?7mWy1rm&c3DkH86^$kb literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHolder.class b/idl/orb/.class/org/omg/PortableServer/LifespanPolicyValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..de9c4bc3acdf3750a941645abba1e206f624944b GIT binary patch literal 880 zcmb7C?@Pi^6g^Kjm$phvt?Z{2q%&Cc)d65LQMa$6Zy$6oY5(KVvQ+KZk{HgQQs}so9I@*5Y(`0> z(&Gk)WhyMrd(X;PhAbn9kc5312RM|G#F30+L2}PB~LuyH;Qi~yp%Yg7He1Wfc zDM)FR1y5G_QI_fgEv^q>#Phz zD!`K*x?ww2EkHLuN0@`h{AEEa4b4>1<<#T`L#Zf?cOBz&K3OHj@FwIPWe zQH^n`3rwbS<;H2~LbrlB4X@G5&~vfTiL~G%$v@2(av5$*>>CC18W!-Dp^0xB!pgWa zq0VVoL|nrX-Z8XPYn$6k^P;c{c?}6HYX~Evp#z-?-fOsr0S!Iq)i8)5hCpItlc&W( zM#Bn{3_}aE@d+CIu;jJu_8`gaU2Yo{=)~yohz1=|hJgzGYoPNySL8NPud;KpFf>;} z9f^@pXc)3ZB*U=Nv>FIiOks|cQqDx=gct^|okSHClNt-T8oLlZa7j96vp*M3tai=Z z4xLsfmDrLdK?t6*q&iaDWqC*|?1q#4%2m&JR9U%R1hs_vLyAy{M1Ps>9f}RW(?`$PUCEy$?q(h%0+N02H)wy*UP8lS2{%e; z3^h@v=I_wRA$c>%Bp$FXil>X=#y6Iu$q@=ws-w%~I$LO$v=zOCmUy%RpnKs0LgbbJ XzaA~2)u}sx`xkmkZul4xaoqS15R6$N literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POA.class b/idl/orb/.class/org/omg/PortableServer/POA.class new file mode 100644 index 0000000000000000000000000000000000000000..582e3fb4a2293114b60807b1a6a25a7370e0eb9d GIT binary patch literal 198 zcmX^0Z`VEs1_mPrZgvJXb_RBK1`c)xPId+^Mh2<;qICWI+;shb{GyV?q@2{?)S|M~ zBK-h=M@9yLti-ZJ{hY+SbbbG%tkmQZMg|q!>ir8+ixNvR^Ye-s8DwC}oc)8G9QA$j zlM{11^GZ^S(h`$X85tB%r3;{T>wCKRxaO5)mQ=DaGB7eQF)#xm3j-_A?LYtk9@95A literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAHelper.class b/idl/orb/.class/org/omg/PortableServer/POAHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..58e7a49bf5e7187db62bc3ae82b9b3cc0ee4f61e GIT binary patch literal 1898 zcmah}Yg5xu5IwiAv>`|-uYylNrKCW3`k;swP(i^WAdY^?gb=Y%(oPH@KSh59>P%sD zM&*ml_@f;6w&|M=UvBQ*-E(&L-n04p@B2>xqj)W%9m6607Vt#CQvve~Ue!L#7!2XXw6&$A zcej+;#L7%uStILgdeew8_@kOU`?Cr{f|<1Qm^ zT(vcQXGzPfX&Wh`bR{<#S_!eO?Q2R(Gq;pg+e(^SyojXv!LV$G(MVOkxOo^WnwHa+ z&B;~`Yu~Vxliw8@qtZ zdtfDP>UFLzSz^yFv0c=d&(tg{eZVkY&6n8NHgx-fv|)teAkU05)r+Lgy&df=vkOsoFvH&ap~3G{N%{cu!L*4 zE?`N*3nU~g+q|v?m4A zdYMkm^kww*%Ew?|Xafo)IXmuP&Ix!<;5y2A16;C>cM$HJE&LVkGc=#@FmK40h42k- zvT+0{hE_LND*}8(9B7k6><;-0yuG;TINK=RMW}!rJwYG~F<)2!w{Y7D3DcJ+m*gxO z7AZ_x8YmF;AyOoA(T)>k(MZKzDunbyc0#5p6VDZqPto)l4L=ZkbByL+(LV@9PZ26J z$a$rA9iZ#lF#5}M^sVkC-~*x ZXgw;FRi53~06&z9rzAHa>GtzChW~y{!w&!e literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAHolder.class b/idl/orb/.class/org/omg/PortableServer/POAHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8c9e16172e48ff5076aa6ffba8332787c361f00e GIT binary patch literal 784 zcmaJk89Qv}eBXD@`R@Jt{`drNhGQ8Ll2JsElCg~)9(H+1OW2c;k+4r74oz!72{Jdf z+t%$~Td&!!XErTbr|yutdd(=82qNd5e#g5Y2&;vA0-A6yb&tV%CC-R69^H<|#MMBGG4SR&V#9lK7$vP1W&=&y+_5~LwWMGb zih?L)2?q+Y$SKILuE28zv@w@hq&&fHg=vMVHkV1>PeTga}L$iA4PEUvM? z__)Hd+B?V#OJH1H_sc1S*aOJCtQFr7nqoE(^D#*u6V-|%g#SR|*j$7ZwO52j5T+_y SNca%0Mp!3d1o4@V0sH_o9lCb_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAListHelper.class b/idl/orb/.class/org/omg/PortableServer/POAListHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..0d0f456574fb31c4dc48c5d3446e33047d7acd75 GIT binary patch literal 2183 zcma)7TUQ%Z6#h;oFv)Nb2(7l5Ahfh56D2KGYY9-fDY2=+2GLqI4&fLF(^pkWFN8m{0C z6>n-#@Ro+Fcw5Ca4Z~RU(@k8(lDu5ja26|mdR&*McQmYGO`5LD&kY|o<;S}|yr*Fc z2^H^4jT;)0xG7H`s7R^UW*ExY_e+A|OtNU@V#T|;*m~;L+G=cvZr6+ZBF-?pWEM<& zg+U2Nb{V|#nqHZrwa0Ke9O@p|E1x zsnxi2qKbRAWn{^Ip_hGRAOOQ?+BUM^+%!r%5}P=qcA1UY6ftKxHxFd`gZAj6>}N@b<`O0OJW z!eF?V*hnr?&&|sid&jqUdH#}$J&r7h{i*)RNbgkXuQ+n}nj;4DzjGJ)lCUV~tGiAEsxX`!B{4w3XT%!CKp%35_;6Tx&>ADB$NgJjzhKYe?nrR9uEz#W$p z))%^3z1gd6=G2LYM!rJcCbQJLw#b;WkuzndlVuE@1Kvbw?|90)K}mNZw_KtFu7|St zwjv5yk+HLKK_r^npkw!RdTtxlF&E0nn?~8e*$sD(ZI7Eql>gt=xsxWn(r3`*ddO7r z#X`u9 zlPUT?QHpZ3>Ex#~tr&W~LSGZ~X7nD?pMX8414xm^-xZHLLcm*t=g5)zaSrEQ=~;N; zq1#dY7bv%*PvEU$s1D-C94@$ONqS2)U4Mq*hnUu%Vz>%58GQ!jAx5H4q5K5j(Ia@1 zdKFp?BS&PRQk1h!v=_es?_j86=OH(Si^W= zf&c?Qf|Fc^PxC-e1#E_3Xr;L@V-5%j0+Wp-X&1V}>!j}`s~LhiwH*8vr<2M`DEK|b zqanS97t;?E_UNBKqb>YVc%Fl+m}l%SBG^yc?2-$1mB17N3+mD1Dqd2SgVAF`(xbtJ k8qPfM5Yiu#zacuKmwHir(f+FEPCcdRq~+2ns?(#Tze5YC}m$n-HfJ-%3HT2>Jj% zlz661#THU8axyb~|5^T-ukZIy0Q=ZZVFWV@W|L4bm%=<2L|7DINkLA*vVs)`xn;Rc zn<005?gdrDt5=N+FW^?$wXf`;We3KEc~oFX95@Y!A2LYV?hQk{=v7FystuJ1QZ5Cy zRbklCehU=M%i|-%56c*54Zq2+IAQgIP$WtZfx{`g7AY~Cyk8@i_@hsf1#Ner%r%{h zW(z7*q=|?gQ$-4+3RYFDVO_-rHdSmP%di=(Id|^)spnSgfFV<}T9)BjjjCamYxW&y zSnDYVX6}wFT>d}1?fN2nyz65z(v&_Qhu#a_N@(#(WVSwwhi2=%2Vp<<=&g-_AxR$- zX3|rXX+_3U9HZSlVzdI%`Wu)oeIWJ<>6s4D!Nx;uhOii&r8-#t50k+}$Yet%sps2> h|3M}(HHhT(7f5Z$y-L%_hDe6~qM>*ji6_wp@B=*<%K-oY literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POALocalBase.class b/idl/orb/.class/org/omg/PortableServer/POALocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..2626c1e2a8dc352f3a0f424b3b1581b1e547c51d GIT binary patch literal 438 zcmZutT}uK%6g{)9j;@=TAC(qC^|JclR*xEi+DovYBm~iejO((jY&)?oLjS6u4+x5$ z`%%%|Oo(!rnS1A+bMD-GKR#dH032akLmF!wg*1v8aFjHZvCfg@*x=aYs4!%P(d~^h z^u|+$;*~WKGhzB7aLqv!dV$+wNF95D7o9L9jM@c*+LdF6%v@47YD+{qbgVGs|7K&@ zJ3F5V3i9WhiF*#G|+lD01cN>DOtznY&*Tk0-NEe)Cy9VM=d=BkiS?a`g1 w*A9~80fqWASY3UEa+xS329HqhDGI_?k^kXV$;RAV{Q>F|lJ7{-zM}}OFQK+!2><{9 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POALocalTie.class b/idl/orb/.class/org/omg/PortableServer/POALocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..ce69b29924294931b0b7790404396c179d7aa508 GIT binary patch literal 4917 zcma)9X?Igq6y3Kiq_npTQp+e~fpmZf0-{AUK~%J~rA*q2;gP(iucYsVm)Am_aGvLR zp8c+C>2lQ%{s4cJ%X41t8?HkuwSnXchkj$IxSSb5yCE$@UtU$Qw$-$jA8lTMyQlF7d2I079x*Cb=kmu?t$UVFhhUt{O~&Ta=)c&(7J_^*Pfv z%jHn@vR3tU{z3?EN_i=vTHPp@t%5yk+Fn!Y=@8zedM$y}cLr;pEm5~wUe?HY*1Ugw zLJyX{0*aLmNzFOY(8$kr<)=)?*`PYOrbp$V!yLLXwQhI>5NAA~H07l}iJa_EPF#~Z zqD(vDIyveKI?SP!g4W7-g)|m&n)0Gyk(qXH+RWO#`<|>bV?Zi{NAJ|Rc8%k2Hm!x0oq$UUZ=#2Rg*ws*f zD1mQ@6%!WN-AHhVmDZ@znpx-SjG3do?`_PR%p~xgz=j%b_J-w6XRSPM?qnvsjcWQq zEtk|2_+DUL-mFQ(m&Rm`{l!oNY^>!+CI{JM z^O?GWzVIAcV*)?YQHs6gnxVmCjVl-yr^aq~m?ldyD!o7~V-+D1298XA0;z^08kd-iSRU(JHgvlQiFfCzWMxuyW2^)??3D+fD zl<73;zc~&&Iiq;qq8{Dd0F*JxggUB6jTyOX^sO!xjHx1jZCW^W(<*!9A=Q|8+MYLx zR=#p?2pn$AP*Nj~?aTNV!T!dyORi%V0-1rv_z_1x6h{!26p^g54F8+96 zaQ`A&+fae+r?*!U>;O`ffexyoY(y*l0n(>zT|`@JjL}BeL-e3CO_3$4@LLGKq7{Kp zI`j&)fwJ>jI{mDRSlObI3LXj?P$B}+(9nR|BM=Q04QN#aqM@S!bwnTIg$4u|8%^grSL9AG0>X&_Jz^Sr^BgQJC6o zyR9YMTbjqJV`>(*K1jqJ#{Duz4;tJGU7NByNEwIIh_9dg_IPq`-wS?vx(zhxd+Md9 zdqV@?5bRuVJSP17bjK({Rl5%iE@ETQ?#yVXqcefaK8LO(jmW0BCtk!ApFr1_hOjyA zDkv#kbZVEDc-j&iS;04Yo`5|dLI85B^Z3!pC1_jK`b%`3?)sbphhU}RuoU$`Uyiwh-uTS_Bz98D&6Br?&K6|!jAQ+ zJAemQ9m9NGFluYYdW9eZBeJI}?8x%FN~l@yz!k)ZEZo-l}am zM4TI&*}XxA-`Qn{9^ip5W^v1DgYGfgh-KJz^&LaD7q+h|@SuGRW=fDR_V-hID>$X@+`qLiDO{ zjb^4MCKVjRaR~(l4^dRGj7JJGI4@yE!D{m|!Emmt=k;m*qUKex^Tinsc3EokxkY_B zw~{L`jCX6={*5=zZ`LXj))YJj^`B?!%e{k>ugyJPsd1Yj-X4=?K^ca-$*C)myBleA>n9;~rEos{7ng z^+1w+KZ)DL3@5v@_Daw(hztW_Y(2D7J}%u=R~mEaIUVxJBmE>aPCxAd`mw2NMH|ye zp)++it%vD0Ogp1JtbPLfNC%K1wYsa0HaIXa)E=1XbblgPP@ucvJa3~OwH^dR)^dq7Q-2wbxo4A zi{Oe{$G{SqDTVVbpmRuhKmj@lpgIPL+`g7c8menDN0CIVl)8(de=+a{@n@ef{4MhX ziOen%9U?VT$9_SjnNtXXp#&vG?WcL?iLw5Aa7B zXQ7~wprq+$JM-SWnb-OJdj9}$jC}<%Vj%<(SFnmTajc6YA!9?vri?8HscTpr&XBsa z9aFcPre3xk*Qi?jhC5yE=;c!W%4iuTcXABDlX|P}o-+8g^c_Q>VAqIypv^!Qc&XxW zqsDOfLnxH4&+>ZP)6|QtcE`PO3D(RBMzHeW)Lqihrcz2Bcbp?t+{ZRi5?XrH*Fff$ z;-cl8ig~CiLQrIEtJuM=iX`?_q!6X{{AU}ponxP`wHI>vxKmRiFue%CfkGm7bJq^Nk}&H Z0$&e-VU-m`J&35rNGZ^R^d#B}$v+MDrSI*kP~|00CEndf}M+ z9X=y+)n#+Hf8J@^-kDK% BX-@zE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerLocalTie.class b/idl/orb/.class/org/omg/PortableServer/POAManagerLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..85742ec1972c07f9a21d2c6a7aa991e71d19d819 GIT binary patch literal 934 zcmb7?OHbQC5Xb-PBp5qR%c~HY^g&yw6I2;-szikpP!C8!iA2={muPFRT&pHd*9+of zwNk4pJ@5heP^hzxt8fTPBFnQoJHL7C%--Jpy#cU~w>B))EG(j4#xp$E;)ND3wb;_) zm5J9T-Y{6bK*S>CN-(@@Co=Ssi_q&PQt>abI1}fyS zho~Q^Lxw$fF3-kihT?G&P)g5j%;n0k$bA)EW%U+Z9m)Q9?TbNHlZkDH%GV?gdQyD9 z6sbxnlY6eQr65XuF7I3HK#YTx-1CgHLZN!8$`b6)QeBt(->5a-nf5tw;9%K-jk1Xy z2TNL6!xIPVT5O=|U=vRn8dF={PJAAJil|A=+1MkV68wHD{J-EJp1A+ku0tMpTEb9y6BSk`oHh@vq8rzt#umnPvfuN<$UKp)^_ W(d$Dj6efhH(NawlYBw21_rpJ~OwHi{ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerOperations.class b/idl/orb/.class/org/omg/PortableServer/POAManagerOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..2f2e4ee4836a09dc33b0218575f0393faabc20ee GIT binary patch literal 395 zcmah_O-sW-6r9zhX`|KpFH$@#^dxxd!GoYAQ1H-8dEGqL)R>LCYw)*u@CW###7#hy zdgy7GdGqFde15%u09fE6!C8WHfiWpxb>vy#IGaBRq&IJhTVI*RC720JA5C3uEWf<6 z^G+bj*1c_3R!))qTS-g)4U4n&;G1an8|Q}si)?;ptd{0k%feVs+nQHwJGQdOm-p0= zW?PVY3Mf~7&$Yni!H&FTOT)rptsQkFYihL2w>wr|;Obz&&&Xv-t!I1N3}^62K;S66 g3y7oe9z=o1f%P~FN`mp8GWn;ZIN9@@V%kT31Mcl%*8l(j literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/AdapterInactive.class b/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/AdapterInactive.class new file mode 100644 index 0000000000000000000000000000000000000000..edbec29a8f6a7cb1e2aa392675ec4e6f02415243 GIT binary patch literal 505 zcmb7B-AV#M7(KI^yKQSfrde9jrEA1cSAij@1O5s!!ot)F4H8vRyP_2JwOi? z&6;+R-83-gu%q~rh_e%9N5Sb6n{%vk0S86Oz0&CWo#3W zT?acT5gbL*r_sGnyOC7vCg43Thg{Nbr+L9b=5yI)gF9Vm(_^vX@+@QnC5HMj<(akJ zxokD*)dQC&PXit+5rqVe8T;RhPk9h?Nni+%AYXOof2`ACam+)_@BbCZoMRe5oxoDj zcWgL-rH7C#10+dCqoce0qzA0p3&--R@P&*!Sd)>$T?zL> zNXr;UM#7geCWV(QauV)KSZ4?n>|K*HOr~pAMXhaD)Ya_zN>be*>1wUa6AZy6-O%l2 z248gk0fS$N=_u5!BExuezRQx#g^_O5xn(otqFwr=v70y+u#<=$#?^I`9^u6QeT>q_b!1)F%NU<=aaI@8ZC*|zScNa7jo!q(mq~MN;m`#QYEk7;^ zvpG?%TMl5vTNoYI=X>V)b>_4osWuJrw)p1bLY-Qo>9%=67o%RNJF_kVXpMVU1noPa zWzL&jUa(6HThZQi(<|9J=G{90ZR^HWwym^todrHlP8&0ZL9yFJJhbXM+Jq|Lh=Tm* zhE}bM4@Da_w}}$-54+^9l~c31KJME$7=z+$Jdc2XmOg`L>3hl`i`l1NVfszmiJr6c zHcBU>GY~rf`<;G(F479{)FX}(@E>Ae&(VhQ0nU5cGw@@8q(iYI_%`DQ@b4qwf`oAa z7rkp~I>ohE>=lAfF&%q};69{u{1tppF&KXd-=7HW{RV$Jwh#FbgL`Bl5#L#dZIo<7 z@J+8sm>2wGhaB$|y zs_orZ?Sdy2FFE2;$cB)1A)h(tF0Tq%;N?4d+L;RXm5@1?msPDH(hQNqnp;!H3`2?C zYld*vs}SW;VsK7PV-%&}6^5N(o^1Z&BxCzQhIY>N>*`Vw>^`j{BE<(;QzV_}8FW(*auUvA{it5M4k_yOXI`ggTgU rOaz$O02587ni%>6nZ#5tB$a$YsEKfgWg0U9M6)qc3O8Xq=`?_E1RDT$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/State.class b/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/State.class new file mode 100644 index 0000000000000000000000000000000000000000..ca9659aec129ba7b7bc73ac8dbc8132dd95a8061 GIT binary patch literal 1013 zcmb7CYflqV5IwisvTbP*6w!ic5g%<47QtsECbcxWvCyU^P5jg>Wo-&&mn>_ef64d( z@qy9AAK;HNo>>-X{6>>|X6{Vq%$eEy=kL$o0G9A1fdu9R?g`8bEC?7$3}Z1#@4mp2 zj%BeAbUf7YNFm;ORjsU=>n|0QsgN$Y&c1Ise$(o`vo&%dwtt8YSrSJ)k?b;(ok(Pg=-i|VGI{jxGZp0U`k*Xg%qZ7J%uc06c*06a;d+iF#5kFh3pAY zsak(gH1@(TXqc;&vg3FC4+_&kRo4y2X!x9T_jC}<@Z}8iL8NFiNMnTl1^IRu<(;$8 z&*0KPe4KZV7sMw9;#U~w#6dhW5T9h6O9(i*Alevva2doKyp7Q+i59*>eWC+O;hMtq z>oC1E`7y{D0Rr;Cq@+gFSPXkH7{4XTlXh%qXK}6hW S;A-N=0yiq|P~gUnTjC$uY`cX3 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHelper.class b/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d14a7a8bab7386121675750daa03d95b4fac7009 GIT binary patch literal 2151 zcmbVOZBrXn6n-w*WH;NTg%q@{6-%)-Y?P%hz7ed3Kw)hllwfSF8kgiYE`&{HS+M;n z{RMtS?W7qUJMAZD{85hQ?k;Rd$_(w7y_@s;oO7RZHvj(j=W_tpv8Cc7Zm774k7azK zB8E>@e1^|u%&15pn$edf-**Ab3|HZXE>i)fB z6BKv7D8rldS(&Xi{0rCc9xlmP*YFJ{7;YXA;UeQ0L83KDQP~6>}w!Yq*RF4Ikno;=NBS4L`wRFwFVF3~_%-lz41;0T*YkO-;+# z&`?E92G{Tqbx{EQ_*sLE&DZY~Z?w33q_pD3CKpT}KInNclr&mIF>yHzHzEcci@1M? zdIHi7P?BI&D*-FTC@@@&q6euD2^?AZQ<(~<@`(49zVUgLJ6*z_)!3zM)33`@B1@G< z$m11T%u{8@A1DDknyDV#-Gj$)I&|mG?smniGTcq~k8{7|LBFUsVb`L#eDwAXd(Z`i zAt^RSrO|Zi{(?0bd=`pLe6o9GP#(I?ZR&*23Nr$9GJo1y6UPAU-X%0t{_Y8(N@;Vl zEREBb<|2K*NGZmX-jeiAYlEKS^lO+-MrT}q2KF1hfDCB}L-mla1f&iI_I+&<@8e3S zJr4;3BpuZMLhOF#8KgGiL69V_;)BqvK&LR%^_NII!I=I6i8kay<|SfJa4Pcxv8Pb> ze}z=g+fX|=wND;0;T`wUrpZ@9Y-~=(q`-=Y13jQlqS@944A>5?v` z&Xn|cYN(_qQp2SVQXQO4jZpZ}KcJDdD272qj)6^4P}(_R&@+BWQl#EGD4Difs2rhF tWK<~B+Z~)cu$acR&|;Ko71bv7OdIFhxDYf%p??tFO(zS)8G#AZ_#Z|@EuH`X literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHolder.class b/idl/orb/.class/org/omg/PortableServer/POAManagerPackage/StateHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..bf61f3366b2d84d26688335e6693457714509262 GIT binary patch literal 904 zcmb7CT}uK{5IxsiH*G8J`@5_lTOYQsHzTlK3JN7ddXuYOMBChDxf=bef+FdmAJC7A z=IUx02+6W@cW2JbnR{kFzurFp9AG;F9kXGCFc-l*7L-|3W=Y4gjujoN3|f=h4Z*N? z>39{(xvyAR$CJEhi=6P9!n3lO^cAo3itw_$bVsL^lU#}vL+H3#ugVjKk;HDEA$aDL zsnB6!*h(r{D|mvJ8FqfM&obAiY0LGyu`cRvL*^vG?o%owRCw^Jk_Zz6Q!)+NpQ9Dz zqf04EiQQh49hw{RtNv34#$Xr-Bcfx?z&bVz#Ib2$3o{Hy!-;h6*k$1{L~FdsEt}UX zR;E}JCCL!)R{C?z&JC6R!?Ow7RcyhIl=*?W^hwzh;@@-EeBo~g67&f_EJ1sh)SR$S ztE+=ylwPJrLTjzj7fp!lIQ_-i5%QXEV9(@0J3Qfs=MbO=h^Vlcd_|y(nMBmb%=(zH lnQUR?7bJ$MzmTN)ftp5G)?|%TS;5P#s2A(sVwnJ{k-0XH*3*9jBH0swxL2R(TxWa z;dMpmIp(47{dvfJ9z_}J?^@P%XD17<#5@TYXSbrrbNvDL<4WwUEW9Fn5kTy>(%J_@ znl>*sEj#v(EHO`+22bAsg=%G>YDzRP(sNVkiRgM*)Q6DA)Q-Fwu2mzh6k)bfNF^;N zgGkA|QWA2Sh=@)k3~ZVUy3AQ)T&#BN#~Nb!xO<`OI>n#Y^I|#NcJj2T~Db_Kb33X1tp12N^(!Dq>w}CIFr-C zaJ!VhX<&;`Ibw!8WrR(^bY8WVo57m{ZqwN>l;e7B1KSK&3Rv?mFWxsjM;vaits5X! zF0mVU$#Bu(g*4*P=(WY)I}8`HTeQb%)NC4H>g2@pI2zaF?d!;5XaKGj@gtE-LS*$! zv*}#K0o7t$TNYf-!iemU%Q z82D~VvsfO#8K~o}RKJRCCH2eYNSEkQIZe{z0&ck~ZZn8eu9b3(5}5-%CDsh&?W z&`i-sH84NL@II#K_bK`{P2Oo3vUjEZ44>x|)QGu`dj-!TmXt>*zYh`h z0F6S_7g)|kt;nb^@lg3@sQwi^lHSMoDi^sbeP837LcS)xl?uNb%lo~I{sBMcG9GFZfj)-v6fo1xf$_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExists.class new file mode 100644 index 0000000000000000000000000000000000000000..25bc4236932b9ca03771d858241dc4835ea72aea GIT binary patch literal 501 zcmb7BO;5r=6r5L()>`~P5CtV3DaJH<@B%R@gv5ghL?VgDm2R49ZJVVM{8?VWXyOm> zM;W&W9>j~A?7Y04nN8ljkI&b40H>(vSjUErRcxx*(vdq!v`{s3;OL4KMKG zb3&?W_6g}$=x{=zdU?l2%<@^_TD@3!fm=8GDs~O*p=3ZumQegHX+CUQid8{9LOTeicZmRdH#>w3sVdpzJ#?1cfLv0(rA?FIKEE(nU}5b{-Xd0Lqaiy|IK{`jvjmK^ip>jW(h zzazs5G`WD}D4--2iH7X*vmVfDFQ6%u=b0u^Wao;S+>s(*E44SIZl*{};RGwWjD#b3 JCs2QU_yS^jc}4&L literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..e1f92d97bf6e8a3fee25614190c8f7576514f0f8 GIT binary patch literal 2294 zcmbtWYf~Fl7=8}9Y_cpCQYaKFLa{X@mTj%lO0YIiEVN031gjKny2&2n){v~54Z=^U zf55L;JHW`awx68wM>)P{cf;mFouU1*XY*d3_c`xv^UuG3z5wts3>oKeRmLayRKkpm z0Itcnj?W~_$_OJBCCQwG&xP=YjCb)xlpZ%Fq{WYU@mPr9mH=3c;7b{|u_R*|cO=}6 zAR}W4Sqb-KjEE>XtVsAu!YV_kVDFfmVI)(t%4%)1tS;nM=hNyMNf&B5Pcek&jH+SZ zUR_1D2*G!vR>59cQeP?mosN40Fh%fPN+tNw|ojnfPr*lGVhQ7Q_!LypVCMZ$1 z>6UJGM!Rm=lAj(!XBZ@l$J&;rRb}&m9Xfku`mzK~K@pcEloaTo zstmQ0$);EHOX&>5ndR!1Rx$K(i<`B&Vb`pkaYLUL$@qa`rs>rk`~QYSLRrC&0^m(6 z!Yd}Xs0edt@*`u>b}@NZoN zzB_L=c)>0)Y{a{FOt)m?h;?`Gx9k{K*|NvZw-@&)H7(2-dc{H$_o4mP)*_UDM-=8i zH?&G!d>LA(xeb(>de9+vy_||oz9xL@;$l#oMduL+PSAJn9DP6;WHI*i7NvJuOZ1$e zUjuY9Izx$lu;1wgWJuHRsrwxz5IjK7uA`0O16=U5XAwjXN&6Cq2&^af5!^$_1&QJ! zKJ?5obPBUX;uXSAFqU|U@E)X0@)ZJ4(3^aTz%xX4e?u^n*n@n4-d*yLi0_2MHcq|~ z1jgniObPx8Bt7J-L_n|~dkW=m34-Z>tVE_OC literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..36351124a454b2c2ffcfd776667469bb5e70c813 GIT binary patch literal 952 zcmbVL*-FDe6g^X$#@4u0ZQXalE)PMUgchL|K|x4S@zFY(A+*LOq|>T@rJz`R@B{oP zai&eHE%d<q&d(PeF>-*yqz#g_^P?3ltf@BPHn3uAKS3xi;ULr>(u7M)H#014TF8<>EN| t%p|6KOv1-RGuakK{y^fG9)x5wuL!je?y}5a)`v(oB9y`{D9S$8dddh?gdQR#N$7EMhh=NqUB*fLTfJx$^aJ`) z(X43?*-HcW40p~s1NYpI&)0VV$0(Ut#hQs_tn1h?kw7MfO#|8Z>0Fktd|iyug#^ zghaX0BP5%l!wI?a7mcct(Gw^r%t*tW2Pf&~+4LjJd;@#Ogq7csqJp@>}q z?OWJGfp8KE*A5?DyAuk@?tI?mV#tNvY1ccf|G->s*Bur~F0R6$HSz|M2a-^n+nVj` zM%}&{aM2p|c_h6sAe_$G|9pDE{fG;K<~f9Hxw1H^N`*xc4-|j+R}c%1+2A#TA;a&u za0EkzA0G`AC!)|&U3S_7M)d_Wf%ZJr#ESGxQC0iV)N85whQ#dzNhKU(DU(ugplS^L G$A>TKW_P>* literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..11a5f97c420f043a64707d7e9f1b64aae21253db GIT binary patch literal 2272 zcmbVOT~`}b6y2A6Ofn1>QYaKFLa{X@mT7H^mS8nd6eJWRSf$j)Npg)-!%UpqApDg2 z2Ykiq0+y`S_Q|#UQ7+G&nUF7dfS0+GbMDz^-*eAClYjsF>lJ_xVXC--+bZthu7W8Q z0eqz5W870Pts;z6lq@p}K9R=zD&EGYQF?r)AT58)%Ew#;456Ym{q|ok&@XJz9Sr?K)_2U0XN8;37MfMD=6`@QCXLCsM2&o zuQJ0OCv2)smsw=!ryb9XZ9^{`R!Pqa$FxdRf}q0<@;+(jS@F-TFIttFpzYk)N}Zc{ z=oiNnbRSPoO|w!HjXdYCd}O9jb{j#%yBJlF)v%6nhUt3aoTcImcDcwMiS)ICM;gAt zw+y|!stdE|cOdnNh7CN{u!$!O7aJ9x-zo5lFl|f2cX+B{61s+WFv2ig=i)Un)wWg; z%X}*@b6v%_h7WLqA=cSk8glra;qKyt%rvQBQUY}z=!CAEzBPGMfuSLf8wv^TF2xqvZ$CbUFf>yYh9;WPm0K5CS0>U_$e#w?J41<#pM&AF;8XGy-H=r;DvvTua* zdQ;~_fnhV=IZ-+-o5!3x`@LzRc+RG&b+z?kj|_=We`v-%8m*`nK#9N2B5bGtVzCWOmM-pd{C;_lx0-#~$16**! z$q|dyk4IC{cTUlM$$N~TE)wQG`hP{w5e7D5mku!a_YsCR4sbb>Y)LRk32x$+kI_#E a5+jmu0fxQmMCh+e^9|4jgcz~)-1r|9GhgZe literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8ed9a5fb8d944bd3c52b855daa229bd6bcf4d370 GIT binary patch literal 940 zcmbVKT}uK%6g{J^o3@pfTG^)+WcskwLr_Lw5)?#AMNg58I*7LIF577JuL_E!hkigm zDw@&NGVmc;_Og5Lx#!%k&#(6n09#lKLPazHKVm^lV@8@;Y2qs8RLrYbAW)jrXfT59 z6U(XU)@@ZUSPrKpgPk*{$sE0q&lYI;hE|!Ltx%gY=hQL}A8L1;nLI<_->aE5zE9vy zZd?-ha#lsq?IefelN3tPVYEW9{=<>WpB-d%+pSDLHthyK=K^+{ks1Ety;I{tHaRdQ z-{Ac@N|8U>A|;;O=#|=$xe$KYMMlFYGz|d+RV->)!m@@0Ry3?4La;l`z>X}V!W@E7 zoi?d%P_wG%OLbP}1c@%+pJqFK%8d-G$qZX+`Z{C18aSiAvG#`Y&wEhZRa_60>08Bc zGVM!~`@^Ow8P_WI0lb+fS?Sg(y#Dz tF%t;6n5c^hq|z;Te?h{S{0m8^Uf^lL*JYVP#Dz#UB9weBC{MBs;2S0E_q6~3 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicy.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..15b2b57b7d603b1555411196d68bb31be1f2ba2c GIT binary patch literal 593 zcma)(T}uK%6o%jNYjs=uFh4RaE4x^Y7z(;F0+pa3P?CZ!H+NX3wq4mav7gmN8U_7; zepGapv>?6cV$Pg1^PG1$?|gi|z603Dwu%&%Rj5cOkU&O3Rz(E4AgsiZ5B60B1qDTh zsB}y*U|=1F*r9Z!f5Z^hE0+wBrfUk?^iEJ^^|KqJZ*bdiEZ*@w=~y+oP_U+99VHD( zY-pH+#*q69HXfvH3NK*hHEd#w-Xpk-5(9TVi@SFgZ@ZpvT-%}}yuR>wyH#%+-CM&F z{M6|iwlv$WExV5lg-J)Vb>67+i+kZ654xh~OV?pInB4wT??l)=;W31y$&l77(^E2J zX3QRV5;J-|;ZWc1EMQ7$Y(tG9?z`U>Vvl}ErEeog0`n*fQ${{fT%anA5M@BT`T{mW z=!x=xPGWIP@@a`g?7s}Z84H$*I@P}re0M4aTS#h+$; E0dOsZX#fBK literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..18a762d0b63dadc99478406fa21dfee246a81e2a GIT binary patch literal 2576 zcmbVOTUQ%Z6#fngOfpPtNUtEJP;AY`5>V=eU^PHnkRV8qnxe)bIi>?4lTIcStXeO> zqW%G2vDUznrM6G5<&Sc?&s@j_x)$<~Gn2FT`S!Q3Xa4#3_dfx=jvr+VVoXK?;}YJL z;lT|V@8Nw3Nf{lO@YBwugekFkQ^sZ7^3!r#!n6-FetdvgaW*9*fH@)lP%QI4EQsxo zd{~r`#*&PWu`J<^51+{BMn=M28NI@88Y_N!`&7nf_*^Vm313K18QQbvc9}C=Na;o) zu5T3Llk7I=K7w5b-g{DNN8a@z@ESmIlzq2>tl z)=`*s9>)b`2&7FiH>Z}D1PMw2`DMqW=a63w5oy!%3};AVP2E)EMYU9jr%gjE707X~ z!BvvpX{A_pJSE4Nw&FSIaUHR~o$6l&jiu4pA)!BxB}VO2p6 zQHJYoksLF`(|R$_4FQsuz!iLn0z;5j;-;2&3XRG^!98dS*09cSx*pP-TRC1fHNB*u zhz$kT@uq@TaD}1ArD4}91+$tn=lI4dH>jeuQl4)~pkq493hu)qP*D&;RKXh;?s2;~NDt_*TLr1>fPJg75Le3DU!hWf8JqJ?QhR zYh1Kgm&?fxF*P-nwkQdP(R$$>ld#pkEr^tNvSLq(tlbWx2N|x`;ceSxw{z-R7GTJk z2TiB19O~Pnj#HJ;bg7cHk^kKvRHHd+UXy1v(aG70)yjf*y_;KzH?}+tj^@xVP0muq zGWgB)Y_)QaoTYj>U}YoOIy7B^1#V``hPI)Z+9uDMIV#)Mcsa_gY#Qd*RQT}ZYPIOj z|CW8~5dmZ+z>NcU8`a{oauj&Iz$l4gP_DG#()K|QH;hHceU}Ww<>ufWB)1{N44q;I zi^Pznrs}qh)9u9XSJh%gTwe{5uxmdNx!bbuP!@NPjqIk0F2pngqu<~QXf=*v2E`iP z2gIDeE}A!-jx2iz=w=_Jj|K)=3_E)B(>qOJTEq0Oi=K?0?a^JZU+4v-NR!PG2Q4As z-9y`sCG{hQ*Bog#ylA7{Ky)9TOl%k48rp3TKdxcOQA^QNs70gC(eW64(P!wWK}yA* z!}A!Ov1jl+g>UC)cvI0Df!U~MAAwBhC1U&pr)mhYU38`Q5Zc4(&>1pt_E#vRFWjMFNvj8Jm|$s?JFurL zP!fdBxlYq<;RtV#zVIeOQ0ED=h6_I-u#fIcsAm^1|Fw_a%q}jbVkGbT4VPj~hR&0r nxA3-u)k{bMD;Twa`lGR@xKzV{9YY`9Y048RqMZ?YTa5nzrBbfA literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/InvalidPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..130d964098c89a0dde607d569a9bad9d937d5df1 GIT binary patch literal 910 zcmbVKT}uK{5It92H*G5|wX#nu$d8A`s3#*ZUkU;xqv%Oiy~x_?%CZ{%tAZlwp&!tX zistHSDF_+M4!bjF=FFU#&#(6n07p3RLq^yKFCu=dVojKJVWKiNWNgaVVvstT(dG>4 zE7Pi}W}~JSOv~2F1}}1}!!5Ot&la@GgI43}Ws|^qwO|^0rJG^!p6X5AK4Wml6SoYW zoLQwx$MKm-Q?U!P~ymeUW>x7v2mCRigQGQ6cnOSg$JJ~buZw#Rd% zlHF}lN;IArbvdB9A-@C=|OrDZ2;dj0_$M_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServant.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServant.class new file mode 100644 index 0000000000000000000000000000000000000000..80cfd0bfe50e38c03f85fb8013f9b5290a25e567 GIT binary patch literal 479 zcma)3T}uK%6g_t}ciYxJOtZA4M?Z+cUX4H{=pj;)gdQgymbGnnnKtQf^`cSG59mil zGp0Rc4-L$@+7qhw<5g&8r^T1`jSbBlmsPs+jI@m+OfsHgF|69^}^!%ZanqG5I#6E!z z9UP!QsD;vH;l0bcp^W*hFM2|bg=F1Mv&#o}+!gFH)H5E$gyKTo?p(E+?D|2-v!{WG zVlNB`^#%Knx6Xwh2}v-#At76?Ec;R!@F)_2;*b8ay|gj6*&tYP_#F=FuvFCg7$EIm wp`*I&tOu;>3up@Cd8W~d^juL@zhS6psrrV*%@j!`oM0uBQczQO0`q4NU$^LRY5)KL literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..d79282a12b4cc4b4075261bfc531e64a8b7e311d GIT binary patch literal 2173 zcmb7GZC4vb6n=)hY_cpCQYaKFLa{X@g$1is304EGf(;E4TBWFQlZ*NGI6pjDfmDdZ>x9}AI9nNk%FxJu`C}eG2D>=cVqZi#V1%*v4&3- z+>0TnVg&07?yDG+S@PIW@R@>5hDcHD*Ez#j&UUK0y<62+@|(+9eT%Fsc7X*IYb7*>*9{;aj1IW=wAjxb6!Uf|9icl3>X zcEc!tZ&bN{-Z~9;h0vH4jgv4LEb_)y}Exwea)&j1#RcXZsxpvBR@K(prSu` zDSEys0{C;6H?~x+xtFZrbxbNKXxPFu!$M0GXDI8cU8`_M0z6RgP{Zf=f?<$1bYWI} zQPI_F*v2CbJNS~}Vo=7rPs+S5Oxx1%6~5Lm2VKK!m|z%hQSfw01#FhZI^QkHTvsuz z;Ra?I;-`AiP{cP3H`eat7D>-@GQO97ps&S+xp@VKh7x8Klr>a9l^*F#yPn-FtY&iz zm)5L3qh?kn9bUH^rm&s;NwYF1kNqt}x)s%%ut(Plsv5qNQRk{MuhqFjg$-(#FFoe6 zGlp8py-HCZk}Bn`GRz0MIRi7dL`QP)J0FlvUM1)2hd*LdQ0%ZE*CK2w{S=F zwVrl+Q82|T_6P17$)-#%a%GIm!?dI4>u z-u2yst`i6!qwm1=#_aUE~^+j6wZZK>3AM4w_J z^$gKND7o}=gr1^5{S2Ys5j*%9;autv>M{BcC_*8=Q!d*i#l{etSXMA2`KOTfk#7TA%=g#zzIgS6PJ!K`u7ROwvTW*m+nX~N(tt%;A0FEg2afWT!3+}Ix+fR P(S8H80TD)QJvaUbo8vd9 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/NoServantHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8fed18b4e450f8ae8cba5820de49c6bb5ccade10 GIT binary patch literal 886 zcmb7CT}uK%6g{K6ZrWB_YGt2RkgmjLuSQ_L6hul^uQKW&+Um+O8vUz+BI%(Y(2t5{ zbhQ+OWZ7Z&-gC~qbMF26{`drNf`b4wMEvj}8o(;nj=fYqs4!%*$50!;4(Nni-XJM^)bI^QtvO1oDI@qQ8f_E ziI>PRh$U9Vmzat;7sOwvpAk{x9pps>&`&SA=_own0Rl2@q~72eVwMneF%cKzH&Q)# h|3E@mo`j@~S9p3*hAJxvyAY{HL?xvM^;xz7`~ZQF;lBU? literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActive.class new file mode 100644 index 0000000000000000000000000000000000000000..9c903b148d3d47cae9f3492a2b54e066a611ec55 GIT binary patch literal 499 zcmb7B%}T>S7@SRN6JzR6ZLPLiJhl~C6g*Xgv-| z8G&A__X#rX$m0aX+U1aq7!6qH(_SJ)=r`+q1KT!sP_|(qM^O4LX+4O*<1(dJY*esI zK=y6yp-gZRNuNe{KJ7*_VS|A8xEygwyB(*?+*{^z+8GSFn>c~w%zJX&M2yr+Dsx}E zbJcR_^*xv8k1mfB5rqWJIs30$FL)4hNuUXjpirwX&Z=@@am+)-AO01^f@3y%lfX=( z@4#>bQ^lVy4J6G(p{=^Yv6VV JV;Da^d;!gZcqjk> literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..4ff3ecdb0d6db2eb48cb54589b82a7752f30f6d9 GIT binary patch literal 2283 zcmbtWYf~Fl7=8}9Y_cpCQYaKFLa}W~EZbU3m0&f{D%eef1gjKl+-#0c;nag{%3}V{SOvs?GKCPS$YDZJrU~CH};*b%T(#Bn*9Wv+oR_64~ zBR|@vLnSG`FiyVd1c6>5`LP9~>NbOdH!&%ppkN)-44GE*oG9tbR<+D+0rk0r2MWHx zmkfivp*m*SZ$oMp1siy%U=v?4oDGtE_ld#lj%n2tJi^xsW}zy00}~A6EizswQ+k_* zljB<@5$htR6}*kBgmp}ZDJbF_hPjnH+C0s|tU&6$(s8{xe|`3v1YJQ1S0xw<%Aksj zbW+J>*9yy7jp5u%ZCkIJd0t2gvZrb9wS!FR&{l-1zX zI=86+L5{r)F$}c`c^Rb%r`{HQz%U>5+=Q$eW_=Bk8`J0NF`}fv|Fbf5NaudCfVUdQ;c=7;m);SAB=Vv{r33}+psRXAqb3E X$^{trvJ<0!G3^x~14J0H_0;$uZCPSG literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7cd101fbf7b6a12738e84d8494abd4161d7a161b GIT binary patch literal 946 zcmbVLT}#4H7=DgAm$phvt?bhZ(s?oJCddeuHwD3@qPrMV528&c<7oJ=3W}tQen3Ae zI!C9a;6-EXu)Xi|KF|AgzP>*`0UYBX3K_`=!bnB2iZyYpiz6*#L&m0zEdr@)*&Rx7 za_zV^&1u%OlH)R~Y|~rncB!kC483Gk9<3VHjBt9NOEAbeJD)!8{g zFq^w42o;?w=R3{%BorKyDI^FEe@TkQ&4sSDz1*~`R=dM)8HY6sA|h-)xpl^Mvok}C z4x5aTOxA1jkaRXT&UGkr$L*qwf`WM{3L=Qg*jBKET?HBJDcDDXpx~=zmyTVfE!2jX{54WoCATQj2fqT(&rx4%|5EX7U|AxQ_vxJz3 oNqU%wn(rg{2NK8fG$gOSBG5-@#Ik~f2N7(9D~0-yo<$nK54Gs{`2YX_ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActive.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActive.class new file mode 100644 index 0000000000000000000000000000000000000000..c45a11e4c53b09c65406c7cd1b1fc60961a5ff42 GIT binary patch literal 491 zcma)3%}xR_7@RK1uIu6tf+#5A2pH4g#RJ9!h=~UyL?VgDWob6Wb-SsR_*!1TXyOC- zP{uBT2k~H&&X=z<)AXBue7?Q|I7Z3FIyP*qV$;NyjRZ0=Y+K02HD_YSM4ljZ%0sTs z2ojZQpCH*5Lq?FRT#nqaO9MCbX-`QW`i*Me#IA!q6dc${6XbtOT8}&!G8xlr4vN?( zAY}&!C=k?z^r^V_X;(<)4g%I=a?B*{cA8z+yK{X;JA)DP)Rj<8Pw}ySMRDP2cdlDa zdh@{K`IE;Y#YISPvS9yx;{^*MCJ78aB*<2(%QNac+$dt9=8yi0V97Bbxj|ql@f{TE zuypM4GC<-iG&;J=&U(PAy?{(%JkK<-B0X2s^v@Xjv{ZXT;&zIp7EZ8|NohFLdjj*v FhcDEJbp8MU literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..952dfe8b60b51122f23a2eff64a94c52841aab61 GIT binary patch literal 2239 zcmbVOZBrXn6n-vA*koA*QYaKFLa`MR%a)>4304EG5*rEiO;6<4vK;%&U6U{OT~ zcT~KK_Y^Ft=tU|H_>#G}ED`|b3ZddIRPcif^TUATk zWeCm8K4J*VYdQ+HQ)C#KneDJ7b7^E%>)a6xnVAlGy1Jh_z1p-LVH7Jo$DKXy=$jkq zO~d@&D06+I_=KC{p)Jy;u=aRLx>op8;TR^NuDuL3U~+y~hW?x&m+MAtTN0rhQ*2&N z#=Bx`$x4q^Vi+ckC&r$kSBz>|&k4t>mMQqK!wr(=J4x33X!T6B))1u5josA6SVw+z zEJ0=1In&2RLj+DPnDFSbS#gW6;dM+Z$Z6QdG{c={vz$B8Yj&l?9SQT9f=3!Y#}^EP zysitY8;#aI?Hf5Q{6KvR%z1VHM?#J+u5JAN^>#=-!jZMt-9TwF#!t78oraZ7sx)Z)VMa074pYFRp^ zS|afRz0WX_c#hsfDB0u-gr1=<`5d9&5k2@B;cVg%>M{Bb$U-5$Q!d*XvW+4%v7%sB z@=qY?BQFpE$$sKjX#Zd|^e6fs9OIQ^48#WsYUnp;B$31!BuWTuoB(Kb`2Yj1ISJzN zW_Yv%ec>YMOWsoib%`(!G5izyPcV{?Up~U<-zON$AK^+i+2&xB9NfaZk1MqOG=wB5SNe}&i zepGa?u9kui%Cf`m%$YeebLRW!^9#Ts_7up71mH(h!7^5aSrsNGV@<}oj12;*ZI~@e zaCBukRo!Y-^}OXUqh!(ob=uU?^SMmkC_fris^>~|T4vW4%amEIP16Ma(^|8}&Ir7T zw#+iwuA9$*D2UnHZar zYq8-RsmPvfo)SwW2YvQvZng zXodrR%rXdO_)CO5{Lm%-#ns|=j{k+a5$@GKKwh~6-SE5{j>5wqKoMar^$t%Tvw)zB oiMW`6mg>O!4-&%SC?uu5!P9}SUu6kl7b2<=&gAPrdJ$~^zxvbfdjJ3c literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActive.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActive.class new file mode 100644 index 0000000000000000000000000000000000000000..e0577ca6c6c96676408c19ea15c16756cbb6f40a GIT binary patch literal 501 zcmb7BT}uK%6g{(=yKQS9rde9jqZ%>PLoZ6OO3*`~BndrE?y!t)yUVmm{j6Rz3i<*4 zsA$HthwP<+xtDv-Im6s@KR#dI0UV=ZV-;&Qma%SP!$t}@9X2iGbuO6LGEpSRG({+q zQ-V~r)+b1}Baaglsux2xVl-f(PkV_Jq2H+WO>8^ZLCJxQEJ5)%rS%{Jk4p`&I4EP6 zfb2WiLy6!dl0J>@eAAoiXZaM~3QF>TgJ0Pmor`F_v-}6%N!L I!~D_V3u2~uLI3~& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..fe58d7f936b00a4f9189660e23030aa84ac51f3d GIT binary patch literal 2294 zcmbtWZCBf57``6*k~Rbf9SnvOVYpdZM>eNyQk)hx1=p@famvtjY5G_*OH$Jm$4{Am zz^^zxz>%}LeexWCl*ju?QqmXZIc#6@r1#5pU(fxP{`2pj&j7p+L&iB=mGJ>SlrSeF zgljUc<0A?4GNQ=DNwOf}Vlo?(bC7^dOe zUGo5VB=2~SZt2@Rv&xrUEf8^MjPSE+|paVK5#AX;MIutyw)z<|j$~N87 z%g%VuE!*O25t*JH5tg1!FHq0ueAuQN4-0x;u_wTK)nDwSZ=3Lv#yax5i z&$i)ERUW)FP@(ArkzObNu?4;6HiUw=F)5*_U>(y83#|q^S>BheT7}yJ>njO&6?~0v z7zTMmb&QJNi_|d+HgHeDCcb4j9pw4eBc0bB!!i|ohx-apZ3vyoXCvw&U7NK?x5SuC3h6&C^883aH*o9owPvS7t9u&=iz$NrJAR0;_$X;QT7uR15xq&khX!%K#k?^44Za6vzq@h<-Diy(04 ztp+bSI>TnNcgOTfHjh~M_I}%r@sw?Q?0jc&k5bddjG${ zHN=;pjhfd$nVEZCa?i`H*z`-nw=XUR#a(nhf$$W4_s-D=ltC6_Pj7L0r?o`SDf%@; zC!;fx+6ViMUOOQl{Q`WO?b=ZNk>%B5c*^cel==Lr3Q*zT_g=Tdu+5756$9uo1La@i)yH-^x} zqJ$a2KZUf9e3b|Y_7hK_{EgAjQw-cbz#9iRl^7(bq2Hm9Mi6HZC?T+M0-(j_1DtZ* zNs&mju16cvSI&{W;5|i9rwMZp!@pqQ5F;CjGy53*>kwlb`#76RcLW%v0GDya#~3CA afe}l&0OMYEV)Tcmy#i!_2qU(h8vg;TMQBR^ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d8fd70518cac5fe9c1796b9d83ab4b03b21e1609 GIT binary patch literal 952 zcmbVLT}uK%6g{K6ZrWB_YGt2RkRK0AJq1c&z7zyXMvvL3gJ`QO%edjcDkzd3`T_l@ zXhv5{!G~noVfWs1&$(ao_5JY);1ovzXo&dXLo|SOY{+9%9x)AD8n!j;5U36{yNuxM z+Oq40)v6ms%jUFVvJ$f$W*fyqu1Kqow9X7^p>3WsZANRoT$MK*mLc$E8|?-^C-5ec zcLYk_stLkOVqQi`qL!rw!SOFkzHoDqGdgZ|##Ou1wyh4MW zlXJw0Sal5q3*semWa1jA;!8|WoJ-;_H1G&(>K)`o7%*@zyY47F;sFBEol3vKGs3JO q=wc!+#-B>};r#;%VRagkPQAj@hcaSWL)e8#HX@XiKGbKK2Ji!OQv62% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActive.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActive.class new file mode 100644 index 0000000000000000000000000000000000000000..1473720ce32f352408db2fff3c57a2d9b2ce513c GIT binary patch literal 493 zcma)3-AV#M7(KI^yKQSfrde9zr5ds1RbT`vK^KvdBy>6HuuN?`%QQ)^)s03$570wJ zGp1c+7Y)oAzVDnf%y;JF^YtA-9VHj5SaY$AbsHNl637_XbdWV?&c>FFJVEN1M_io{ zBr4TDL9#7|j38GzzojGUhcpWOo{~HY8r8myZ4WyrcyN&>$p4nK9(g!q($Fg&ir6I} zWe*=qV% z4@{mu4OpzWhzO46?EkMkV`0oBfyIXe*-CYBN}ULeV-{)t;I9xC9J8St1dbBlQQ;7d z4&E#a#H69o(^Ym_15WJ)WCH7XsxgZ6Oi|N+W9e?G_J+ju1W7F%V=0r;u&?(R_Ky!= DVRCjD literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..99932f9a99f9b4df973d33d3fd725aa23a1948ef GIT binary patch literal 2250 zcmbVOYf~Fl7=8}9Y_cpCQYaKFLa{X@mTgOIE5T}@RnmqA308q>+$6`iHDu%F1j|pU zf55L;9bjbC_LDRID988gZrEJPOy$d-&3k#?=e)PgKmY#zCxGiPRb0TFiW_)e!A%tb z+){BHA1Iht5k@LXk_81HO5q(9Z{njUJw8^DmOmEdV=02W65w70pQ!j0%PKOsui!xh zSrsE#QSea3n2eIcs)ElHtTBWNVzwppvt^@BDyNW0n1vhLki&(!KoLFU}pPMwl==ttWW zREftY2FW#rALX<;k1Uj`P6KFo8t6Ju^#Q9voBMo2RONK$- z(1ls{`i{Co!v;1rY~eA(SwFY;o|brBm{v{0SNK}PEOZTTVS-`2#l&r0%4)MDR`_;N z#=3}U4e#L!1?p}o4F!C|FqgTTou|&9l`y@R>FLDzYqM7s7#fPWqM)Rq464FNCyABx zT7Eg5WjL3q?HEMBLp^*2MF#X#SvsXz zBJmR8XP8L5KzJWYHu(~PXXsD9K;Sn-_I^e%o7jhXi2gnDP>Ao8!!}O75dN;Edx=idd|5 zJ=%nx@+R3!-ctm1mN54*{1XO_FtQOlcYx8qjxe@yfb-d8M}ScZa23})jA25M7?Fen VFz#k2LVr@)D?kPaF=Feg@gLMxR^$Kx literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/ServantNotActiveHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..62ae661ddb23f5efbc7ac6a8479f08d035552637 GIT binary patch literal 928 zcmbVK+e!ja6kSIhC#R{j)XJ__ke7#{2nvkAd?|>Oj2Be^pQYptq!ngJ4{h*ki>FJx+GZ&N?`gGB^L?Jn$1K3_ pU_uVYmq>Qt{s#$QaTJnFyusChr_Zv4paYR?L@0SWP+nviz%Ozp^2q=I literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapter.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..f3f3161c756ff3b652d837934e4b8b3e85da7df5 GIT binary patch literal 485 zcma)3T}uK%6g_t}ciYxJOtZA2M>T3GdNTr*poc(7GJ2fcVcFVtmT8mzRxcU_{eXT{ zG-KLB_Rzqb%bk19g>&ZP^YtCTA+~KSV#&rlmQAeKNFk?T)k0p^f{8T~MMCB{h=SyV zkg8OBgmg=IoKUEo-?9O7Ll*gNH<3Z)*Q-4f>kc+ha$qA%DE_82AA`{2QjZrLl(9*m z9S2(|5%z`jU2*Tb9U&8T6Y?&X11{Z8yU}6&JLYruN{YyDcq~r1B$TIuR{Nsaa4#RY zJbmi(I0-~VIGRrXx9*IGv0iEf9wA?;&bm`cusG(Cn(zH(env4dTPIkF_>Kq%uvFms z7$BX3LPvG^aSvFv7tjdC^O&O<*$Jbj{=`tP+qE~Ou182K;t+GWjDlTthcJJ1_ySka Ba?Ah# literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..64e0fff1ebf552344c4858ced8c40c3c4036f49c GIT binary patch literal 2206 zcmbVOZBrXn6n-vw*<@KPq);eUgkoz*EK8+UC0GrV3N{!dNJ~-UCb`C~VK;6zSbj?V z1AfKo03*}desabi<#_JyhTSA|hW5+e%{lix=eg&e=WPD{@2_V7-iI#Z5@u!Gzy}g; z$_U{@86V+e33D={$i&GqFX0nmyd~pJd>W_6XA-jF$AWk)#&BBzEX8m~#^+d;v4Sro z+>Ie8V+gAfzLYT{vgENQ;VTL243VO}SLX~PIn%1D=1x^z%&#wG)eW*PniZa5h|cSV zZr@@EC8stS!oo~T(X>hoL&>R*ND3E0y3yd4&2T5#;m;a-nG@5RY1vw-#tYoq<(9gZ z&#r0ZpR_7h?^&i%%~rI!&8>{cEAdCRrIiVC=`={6#u+gg`U*BBTh;0tf&x{SPUTi( zwChxXdi3ZOhC$l#P}|kinr2khf^F$Wm5v>@xJKU1PKI^woa%~EZ`!n-Yde|Opd9(d z(rv2#{g)=lH*G(|>(n_mU#>Y9uHbEqODHJVz$C+sR)d_azRPBVc-?I1wrTB+>y>G7_#YUYd_q~>IZtbL2~`C@iojQ`IIq>Y zMMd`Om@hr#LNNpF#7Uyms^XFvX8le&8$U;k9e{L`l*E;M(d}*_DTb>)x_e>umJs}1 z4q(DlcU$z8E*YK{PD6~U-=u6auiEd_bY+sF&5OFwWwGH1Q_%Lc*}*#~U_YF<8n$Sc z8Mc$%v!UCveZsc8mjkoGbq40o<@U=wDM^4CL$4S_;yg5$+FF9@?wF$d=cZO`hzTB` z<~B@b>OqIyjdE^k@+IkmgNFp@3@VR6c!Iu9m*_*sAPX7OTb$l$ywG!kehtvdXpN)} z!G5O~&_+_T=k9l$K==qf`;Iq`cW}k?UPKr@WbI2GBea!1MEC#^7bK3Wc-PyOqg8B6 zrCuQV7-OmDh#o-7rC%WQ7`^G|2>prJ{%;89QU{Qa(7R6&67ijI*d{49hS1o8gek#4 zg|vq}O9TY_u_sXe!Eop)`tBa#jU${(^b^#;A5h36h%*S35ZEXI(4g`F&N<=aNF-Xv zqlxD^Z_<9jdxD_O6XpR1e?{LhhPDzH4l(@qF-EoyaWR)}OE63cW^moZ7$gLN5lcA$ Vqi%I#^v5H31GE7VMr>U-{s##WM8W_7 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHolder.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongAdapterHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..af9a60b6b0bdbc1f379b29eb88053c399f825373 GIT binary patch literal 904 zcmb7CT}uK%6g{J^o3?$cm3>-4emrbnZ$@Cg6a-2}^(LbZi?zASFdF@-w?f z$wG(8aVsgZR_2V>2zGzj`NHLC&UC$Q%=3oZ6eS^H4_U9A~VJIl05eXL$I3i<$j zsA$%-hwPz&Im4a%y94LU$LH%ifCH2*EMvvOB32EoSZIU?};PlVEpZ+FgHO?Gk5 z<;i28N3kzL!r`p@uh&j_5OGP+`~e|Xsm^;-Ik-{8L)EYUWqod9YPCTyWAPmj_F<~H zlcj-@43yfc%1vs(ti6E7(4HquLS&{yP5p?bZp*bd=vQN;6ga{{Hmzh&?GcQhIeY;} C<8mkf literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/POAPackage/WrongPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..c58cef5e067860d8c6cf87d87e49faba4e41ec3c GIT binary patch literal 2195 zcmbVOZBrXn6n-vw*<@KPq);eUgkoz*B-<9PO0XJU6l^e&&>}^Ro8%g|hHTtyu>6$z z2mFfF0Y*k`KRM%%ay)l;!)_8f1Af`NIp?0|Jont^oXtP~{{AO`JJ4lZ!<>w_@s5PM zG6Hy4#(Q{Q!n}+y(owQ3Nccb)@5y)-A4ci%k%Wx+u_zu(5iARUl?XnT@d;LCtl?7$ z_an&47{R)P&t!~=EIH&Qd@f;wAyl;X8=PS*YnWBl*sZEdxsAn)x=Ge0qr%e+;RU^} zTlW|O@tKDVL1Ct)XqY92k@!qkB!!D0z24-e#jq0Z@@MM%=~GkQFfFZA;{|T+aZ}Cb zGI_21y;kMwmTACi!wYvg^wFepkN!16zt$jhRa?tSDuu4!_tkqg0Jwkf)rE*uVI2=yiLMUD3!5Qw$}M> zN#weYX$5a#mZ9IL90f&u!;o5A&d!szQv#v)2!5^2-%j04y#r-ne@icTUc6JYT;n5{h4yVzJj;ci~G2HaPoy?7P19-b^ zz?j?A9nm*>+V8Az8eLTS7G+Z}D0GrrnL5zoMP0OGv1#|CVC}VJ7j1vvdf~h+)uL5q z*opU!gkHzL-DaJT#6v1VLrDO=12+ORF`-*!EF# z zU+4w2k^0zm586&3c#OUS+Z)9jxZ!%QB8Wb+4kS(x*iIfHc!-b#62(ot>2Ax?Dz+sO zFA#o;iNte+4QGYFIb*f;^uh;jig+2Q1f#oEWC zS?4*`0pxHLf`V8O0mMUC$A&mI#gS03rC?jZ4uRa$%q}CK z*OskQtEJPjWjk8UWEE!jm`%&2LRqUnYC5A2w$;|lmTA=cd4j;1(KeiO0)HxfPaqYo z2G_}@JPHY}T(z0jAUOUd7fUx61=?|Yp;zrr*Qq!h*2)V;p!#GR4zHJ*ODT1oX^vcV z`W;S5q|%cfM`dn#T(qB8u?ST~5FrJ-D)z9iB8dYPhlmoKda~%!G8@b$2sgE!Moq1) z(^9R;>JCA2EHrb=(FKM1o{KTFBZ^5QBk$(AGG*k%hX2l7c3pp%t3TzsNB!X%i5cO9 zFRcQC1^yB-4!+Pb|Kii(=Mw*m3^P2Mc?Wsn0Swd2ZaNMhe}IrkXR>ebjWH_-yO@}Z m31+eb`2Rp6Se=DrGq3OsAdOYl5OpC!jqpm+0P?eF1NZ?7>gM?X literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.class b/idl/orb/.class/org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.class new file mode 100644 index 0000000000000000000000000000000000000000..05c056a9cee7096f88604980dd381fcbf1c391c4 GIT binary patch literal 152 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gn4Vp2|OaB5LmYLR}BYhb8ra7cVWkiWBQaImMJdwhVukEe5Fyr&Bz ugFsedS)zVUVqUtwe^ORzatRyI3I-;ik&FzI49pBHK$;cEV`5+fk_-U)%Og|( literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicy.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..9dc0829e80e53844c443e37068d90fdcf5b92b7a GIT binary patch literal 266 zcmb79I|{-;6rA;w^$Ql37M{QbD_ehs5J-q8*euVG5O?Ed4R|#R58$E1fLf&V!89|> z=RIHd2Y@BU9Gs)a(dQU&3^_&&3u6;u&WQ+(bu!NBNVXy?BD!3ubfGnh$}-hSX!2Cu z7$%vlq{yXCL=b1B9K-6rjG!PZU21g6F#TD#L9|)dBR(awChZ#~^MiI|Pf`)XyeSvo Z>Ef{S_u8fI<}om|&_TOK7he5;eQyLyPp<#~ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..9154bc77bbda1dfafdee9052f0b797418f86091f GIT binary patch literal 2098 zcmbVNSyK~15dJ3DCd(orf<`>?3>#&+ya=M0ev1AI)T&5n zmCB1$`J*g*lFep|QQ=bJJ{kr2z6INp*mj@x2)M?zAlG+kUCv&Sj!4MeBSQ%%W!5iyaX7C9yee|5Y!q6S-Yd{j5K)w=fPm{Wa zxP8$v%-3^9e#uzL5~U}z%FsoKSH@dI%No|2w&>UyYfS`^u{OBvFx-tb_)A(_iHazl zvmHUU$nCe>))x4iO}^oz?VQOsHi#*m%Vx~2gvdkU?;YDPiE{dXl-0EM$w@ie+@K7W z8|m_HP+H2$Z#t9`H`Wse;P=0?GY;L;)0PhAH=U}7gIr3$GHg5dj$x+J$Nb7GZaN1E zJG^O`FS+@euj*y?R15a!2e_5sn3*jWsDfkYk&sewA14(YMO48FvFpWIhNCTNLBRve zGF(ed&5ly}_lq{z-;0k9_75mHh0_w|6g%6Uiw(om@!HG4$4Js`%o&q}KCU2}=qdgG#%Ygy`k{CBiULCf^@mhG+BK zW(ZdswNxGqon@xd7@=W6eIcHQ;jl@C?{Gb1Ioy6>m|S;EhVfW)yEjX!b zc2OG=rR{33z+03>Kf}9+&K+Uqj|2*kzQ9W|fnYd8s~4;bA<=R!w8JI#MuKJDb2#rR zyUE@|sE``pL8t(^6j%rsaM3l1(pNZF)B@UO$xNBMTqe4NScS+#J3&-HI|X;BY|;nS zH5n&Q!dFb)MaM_9eMk7&S9Jc2|3)Ofi%5+~jTdlOgi^}M2TwJ(N|-U3E%JH2i#bC)IIpwHbvC+0YUW_y0*(<)p`%KAqcJRDM?L8y8Y6P;UCaA B8NvVn literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHolder.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..689d8f11072ee8b625f2d458b2a94f111dca092f GIT binary patch literal 904 zcmb7CT}uK%6g{J^o3@pfTG^)+r0c`>^=1U+OF^J$NN=+0AS#X6wDkzd3`T_l@ zXhv7dKuDGycJDpso;&B>&#(6n04F#ILPj(IKVm_wVoeNSGHA9glZxVqHZZa3OZtL?BNpyw$)U_0kBj~@3g)3G2p}k9Tfq)?6(q2yU>^~Jv)N3#w#*u}2|^9Mt81p- zs%yDQgH{wKUHAD_*n%8yCmj> zW4^jF2yD{vfoC~pogsE=IaYAS5G|Fj7=)%f+M5S~d5^th%15c3dye2R7HZH|Cz&<#+eo4?3P}aNj5Kj%!=Sq;^<6U??sE zo9%AnoZ$1Yf|W2SML`ie3@0Hui7YA5at+;X=ssnYpCe}q(@1+T;zqzQ{qpjx45DGX z4v}U`<%PP==<32AHADtOf>tE_KXolaK2?tPbvo@sBoD|{UcoBjJ0iVkDysE_l%PFB ee54TQK@uCkfCAYNuvU43_=4CcB$^L&L*oaIhlL3M literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyLocalTie.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..011858cabec0d9dae71e540160f457630a541e9f GIT binary patch literal 838 zcmbVK%TB^T6g^WOr4JwYsQ8v0;DW@38buRfWkLc$!`9R?X_{1~wuOX$a-oUF=)w>1 zql|a71{Z8#bMKwG=bYSoWQ-*BK z>wEDz!&zx|nR1sQ-4Hz*rdBG?uEUTS+WvrKj;5CBN+K;}1V2mO#G`<8Ql;`G&E|+; z#8CJr+Gus^7i5?;gji~ij0y#Th|x7+z%rphSFvYe0gEQ`STeDU6%(tl7!IfNyeS;p zzxL#2GZ5=`M9kyqnB!+gk-k%oz88Zcm!c|5wE>gj9Gxt>S19Y1SFp4F=>W}M2CExjLD33$o9#YEW_`(_y(N^ B&)5I} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyOperations.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..9a003e29eee809c7e1a219210778c9db5f91d520 GIT binary patch literal 220 zcmb7#w$aTeaMmf{qTr;iLQ4hrv|K_zM6v%;6sV&AkGd4&hnj~ z*Zc7Vu)s8V4iEYnT=6vhe`OKP#uBcYQtDFd+S!#w{*v)x z;s-_(e}F&Ac-~qJ*##F|^f~7}r_VX(IdA*>&yQaKHnEjP3hNvS9Eu!D5+pp3$a~1) zQ4$;6DoH#};t4}u-)n2STIp1~n%*eC)+!x+S8eKzdTpP9RT(lB&m9Ja8*~ll*b=A{ z7;=}fp4L3Sr+EFI()9emIB=}C<&P|1X<6@%tzppgJ<}QvZMWC-9NRnz3qNPbhO_Kw zFV($TM{jGbu3GQ#hKymBH=IbFGom+X?z;L)YjH*_VoanM68ebCV2DRnC=^MgSn&=i zn0n)Tecg5ghG&Ip@rpV!?Z7bK?izy**G@gRZPyN7P#3D%Wtj3U5pXkIHD_ErrA1NF4OqISN@f}HCk-E?$Qsy45=04V6xZaj3we|_*5JK57d literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyValueHelper.class b/idl/orb/.class/org/omg/PortableServer/RequestProcessingPolicyValueHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..42f933606ca4135e92de6b375473c191f11774b0 GIT binary patch literal 2258 zcmbVNZF3q`6n<`i?6Tdo2~D(3Yc#2iu-MQSt8Iu?LTF1u0u2O>v924q#jS+JWfPm9 z(qG`$XdTMv=(L}l@kcqHyDWh~b%uP|yL(=qbIxCi2EmtiU#>GLFa;bhht+;$k&!hQNg?J#~U%2~E!>{fZ6+Xvi^ZSo)XdBe%s zR*5$nX04L5s%Gi1XjJ!kTm+Z+GsiYcguD7C+-@$z05go`9i#O9x=}BPWQby_ug%N! zKz%*TjF@GHNwRoq92l{xQLDuAj!kJ30e+hsq}}OHv+h+KOV{fA4w-XfFMis*13%iP zLznURKci&#oo<*@(=IQSs%{ggn8CXeHdW*?$8fjPG(*t+(5jZXEr1FVwp0}H1;aRR z#2mBiH6OKziZ8LP;w$VhobS?`dRF3f$FyoHzQ$t}*RY`CGTtGCu2K6A7^b)KDLs)a zq>Cv%yS$o87WDN*PS0*+wh2@yS5o&ATbY8MPi+?duF)P?WiG2aA&j+l`fMawby~(?sqX{4D;O(?fA!|(Y0~` zL*CGz@V+`Qm~V2Y1$Q8p2gB`CH9vJki6+$Hx+%t0Z@BX+a_^38U-G?k&2ZLp=e7Mk z-6=6V3J-3JLCMabs6SxO9-2FOkH7&kG z8PHyW{Y)<)LmFUDJ?<(2e+wf=t~Q7(c;C}rgdZa$9n*e?Z#()D{w4x#kRYyN-ZRV4 zDaR=F{ zKClSk(W>(B&ber$2u*dWrIqO^C+QTyWP*CDg||BvF#zMId!FvrP$3 zZY^6^t-7w}ESqU%lNPAmp|+Z*k8RpwIoqnxR?BGUIm~46ob5C|6P;j?N;cK11c$#AnQZ>*Qf)eQsW**gn-v&`)zc!wTY9n$##Q4}Q?hL~ zo+Fi5x5-nY@x-Xofy^EEizdg!pYPdTtmzf r0uCnZV0_6`5AHvZAeJW~spKnMJ$QyJD+oCd!A7`}rw8d-lmYwz37GnS literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.class b/idl/orb/.class/org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.class new file mode 100644 index 0000000000000000000000000000000000000000..d1d1ef9837fe886591a0a975efa53a0d447fc7b8 GIT binary patch literal 151 zcmX^0Z`VEs1_mPrPId-%b_Nbc2G+8~oYGWA21ZXt243gn4Vp2|OaB5LmYLR}hYfzY@Ur2nAYly2~h^N0_e1N}?r*mYyrwb#4 tKvrT|qJBCt)DvTwq?6|v&(n5eV^NE&wo{GK6Zs+a@8;mca0&Q zFYGZSs#cp^$eMd(IGWYG%UdqPe7-RBS*uOgwJL-;W8)j#vaEBqInU<;X2ZrNvld>j7Xm?uca91--m)nPWi?n%> zN?(kP!C{Rb3Mw_;vw4eZK~!>KbHRw=oThiXflr5FDUk7m^bRV8gK^G+vEUX|{#vw3 zC)GZqIU)1wktD{g3wtsaa8bs~ctys$xG7;<#+PW2zJu%MsiWP{mQ=bkGIp@ba50d+ z+SMJWsypubgBI_(hGjC$g>2PIxu$KG8|5vAWvZbfF0yXAip_t%XV~0PbW<@*$JNai zw+bxevqM~DWfG)SQw|V zaeGgzH)`v2dTaNH52+mKj$&G_(&XG!C?Tt5h{`L!819jvM+^oG>Fx~tjuhF?i{X4A zPrt<&@)0&;HDO4Hx^_9ToPN0IK9$24Bh)c|>x*d-+8=Zh?Z>^AzIpceUdzY5j$b>2 z^@y7Ni7?flUfw{sdb%?)Fw&uUk?4<$)6*DlO))s+@HDw{It4L#OuOix@otsp2tMkv&4}4|)T#qKACUoR3Kt|3bX@ z7>O7j4nc|!T1A|Gz(VO6CI~qB8>Y9OAi1BLI!5X#?W7-ik&;M5qNmFQmJp*4-0LX{ zcLi4?!pT9nH}GZzC=-C*LOudC9e@gvp3ViJB1*oedCDzDgk?{H(qo*D<9A@q4=npxk0?QeShyn3jdN1O)&byu|)8!7{-3^5>XVDoGt!|*mGo_;KF`x h<`}b2#fB(YUvolb$?!eg@(puDOyo9MEDg(#{{i1UG2Q?G literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantActivator.class b/idl/orb/.class/org/omg/PortableServer/ServantActivator.class new file mode 100644 index 0000000000000000000000000000000000000000..f91f30ef8fb08a3f7191375c31e2247b9a5ad346 GIT binary patch literal 269 zcma)2I|{-;6rA;w^$Q-r!bU6?y+QmGfk;G8@DkRL5O>4+2zWIM58$E12wK>P4~8jb zh8f=dalHXpU??FaIuc!poE(3y?LPO<-!I<)4CA?s6Bv{+gy9G}F(T7)O)S^LxFN(h z!?-2xw`GhXC6+O9y(42B6XJANLR!M4j3@>rOv#wWJqh3L^`p)=9f;7RV}6ez=XA5hl- zw=QwR+?X>8%f?EMAbr_Yh7R&rH?|EeXV`1n5_hupnn)sRzp)(7Fp+48m$r9Oo@hSr zZ~?YtIop<_iOsNi+T_`7gXf);C_u8_amO$TYy5v$)p`yCqbeQCpqw*}I0ZKiZN@Ha zaVo+xHd99d4!(7=oStN%DRO3uSD}wof5_2? z0z26R_T^C?AUtN~N@J(sB)TQcD0qZ33c3(ia9W&taDgG(*kJ{aG0ULMOwW$eG!KZW zKBSMMLj!{f&f=VeIR#IUQ814M1xZ|$u&7|Ed>LTqt>cJ3tdD43r)&Gc&{b!tO{S;y z`SfCXj-jVsQ}r*s{mf<|Ct+E^Q_!S(@eZkgp}&H9h~+~oSFjvnXam)6QrQs(WA`=>Re$3b^WMNeKk@;oB`~BVw3cZ9n`aS^N|H zztO%g%!08{5z=S)NhUlP&eQ4#>p(=%%5`mXf&H;?1@|H@xynwm_mNjbP3|L7gj`N6 zg3Gw#n#5@r!4ts)SqbkfR?X_ zzSu+i_vA0cl0Olv5vj={j*C>vH3i^ni&0TTWfv<(NFrQF_1DDe|Bt?!i%k9luK%E$ nOSk$PLAFa7b-YJd{eh0%N?NtiLoEnHt7|2x$&+5c{9^bAj3E4R literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantActivatorHolder.class b/idl/orb/.class/org/omg/PortableServer/ServantActivatorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ad26a71df1b5e125ddb00ef50c278bd3c0b0eb7e GIT binary patch literal 862 zcmb7CZA-#X6n?I5E^U>TTG^`=q_Y_H)dckWTW9;1Roaa2}p68tJpU*D}%u+q_icwr_IRD>6jR?6%F%8N#{zBZE|S>%?%Bo0&pn z$raBs>kNmZw6bw`QPMj>ef_H4>GFF{uvSrIL@H07&8bpuYKqb2<2iDLKX)i4lN&WS zDDyymaq*&xd8jI)h$+}sv4dR|S?sCUN0Q-qMp-Uhr*3%+@uumUx?{E*x>0RfHO`P7 zQcUzWXiZ4{k203i5oM%-c*ayE#>AU>Ff^7x%?9;6}53X%aturaD6^&r29YXHBxaNOkp literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantActivatorLocalBase.class b/idl/orb/.class/org/omg/PortableServer/ServantActivatorLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..8cea8e573bd03e1046eb9231cc4a878a1da1bebb GIT binary patch literal 533 zcmah`TT22#6#hncUDq}_O@`R9<2mAlAzH3nF-RSMWRaLta^=cDBn_)bGNk@` zW6;k|yAA)wuK9tjU-*IGL)S8_U}^<=D7YtDrf{ZQ_(9{aR%bX^&N$~Dx2>7IhLx~9 zO~W>J80ujd3b!m&*EhM_<`XKcu%L8$m+h85LwdupWeSG<1-2w}2HA9dkGy5em0vxb z`)Nug8iopn1f58jF-3ODRAAOrs+&O{bs(I>3n^Ed;-`-I*KqBA_!qIh6IvYESX4|SZ0V^wS^-(TnUD~ zswX=I@3vE@ds6XhN1O}U7qXxgcU7sS>^@hXtaXLt%J$q|ks*9&yS6%FILQ3NKigmk zR=hUR?`N|A2tXy+Zi`EISi*7Uvg{Y6UMm$RF;G3xlgF0m4y!Ystg=x%Kh-03i@XP*Jy%u*aY)WVQFCJyyBbN;yms3wZ zaM?Z+clV;F7>tbmn;jpt|43k+CM`^p#}Lpp(kV#i2%;oobW4&wKsuUx2g~K(5O|@R z#+$Ilm^f)hwovXBf#>lvHHsW{h!hN3fTf@Fn*$gIMyOe`YPvbv)KiigpQeO#O7RhX OD-leD1_*{RV#W`!gxeqh literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantActivatorOperations.class b/idl/orb/.class/org/omg/PortableServer/ServantActivatorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..6cb257d00d70d3f6f499bd742edba3cef1fc87e1 GIT binary patch literal 401 zcmah_F-`+P3>=3eOABXwwi7RG^DMq6n39SjR=jZg9*IkRQgF&<5?}YqK&AZ zZTP*z!A6As#j22nRWU3b_6P&9M^WLrS|@|^4F;R^r_Da(&w|e6h`p>%UpBdQvQe>wp?6BePw;Pk>?j#T9-iRq}oc)?qq}v+X;0O N%2IcU*+DNMd;#!Zd*=WE literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantHelper.class b/idl/orb/.class/org/omg/PortableServer/ServantHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1d75f3e2a97eaf53ffd36c89b528f39d2cc1c5b2 GIT binary patch literal 1169 zcmah|T~8B16g|@qcDru1)D{sHEg){Ib_LW2N=Pcklvq+j2?D%&rNUr{IQtA4dU3!z+-`BVY1gIixJ}A5<_k`@Z-&G1 zf+Xy9*E^B~7yPi)_jyT<4DpY?BgtpwQo`Di>@!}Kuo6vQX|#IfFp}9XB)-P1ty5VhVRi?m&AJ3s_`G4d>4=zy7+qOf67UoTHOkUMLb@3QG)g=blF+ zE28BIf51;|??9+>kDtFhD;D(|Nw1QkbV8-1TdGW|L7Gdk>vHLIM6Y94t#Ap$mVT8& zosk_ukl#j*<|RoJ#b78E>7>({#HKY(e`;s6#|vGsFLVG+(@kW8>kLg_glzgLB0F6~ ze+7svCN3Zp!7$<$CIiG0qCFSWUlIEajn>a6h`%kIU@WbDhyD#QWg`xT+q4o|jWm@x wAebPN`ixT~cG5-{*A!R6Yy#-Jb;H1C!h;gTF~^O z=zdj?=j{$)fw6>?=t=Y?1`2R8 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantLocatorHelper.class b/idl/orb/.class/org/omg/PortableServer/ServantLocatorHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3d6c332ff13eaa93a59b38ac6f747c0d54adf50b GIT binary patch literal 2008 zcmb7E*-{fx5Ir~BB*Oq9fJR&akuVVka3=@`P(c%e1hw>KY8XZggh^@~Ts}p=0<|hq zTBY)$ReqFZ-(<2A3SREg%jxdheeU0X-+lm?#4`~mFfL*OlL7SNib%^wul+b^3xpwaRGB8f*2PtFJb|A1>6&GU%(=RSGC{g4Tf+cXKg6C z?G0r;>ez0s7cW^O2H+sc?5Jc*3?+OTYf+mVKNar1qwB3jN_ zHU~=^)*Hi8_@>D0f` z1sK|P?C7xGw^qic$4IrrP3_oK;A2$oGd0V~y=9nfgift(8oGUqB!fGq{>sp|jCHjP zdZz{Gi=&tBpVqU*QIl{AeFBywJiu8AClQu#hM)Q|z|c|ORS6G~U>IFmNKDcEj`2A@ zw0BbzW8)Ie;ks6WSyll7hh19 z<16tbLw~)d>R){GrR{uHz^a5NpxGQM+a8)fL-a^?i$*qYSPa1`ol1>n=qdx0$WD}{ zdFD^g(5=(J+J>4jZNqx0>4s|S3^S2tQZ`Gft#0~68X^*D8QM#nR?AsUv>2hvj5nZi zI(Im9u7HG_ejI1I83yXBuC$_ts0?kK))lnD7B2POmx`RNIGt)y$H-GpKmEuj=x1jT z`B>9QqBBi9t*7bMMLVP2D}M$1L7hl!ZUT{Rdrp z+{_#D6(D?pn`GRB;R3C0upR_BogCLr2iP6*mvIMi(NXr2y^Fj8a&!-Y0>n~c0Sw`i zV-lvF2bbgm+7e_YB`=qOh7qX%x#+}!3TUU~I?5&^kR6j5io|0@68D! j%XTTFo)7TLztFQ=POCP$uMK`Eb*&^ddD82bUJU;M_vG{A literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantLocatorHolder.class b/idl/orb/.class/org/omg/PortableServer/ServantLocatorHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..8a2b47f8e73183aca03aaf394c334894fee1c5fb GIT binary patch literal 850 zcma)4-%G+!6#lMmF4rn8wX&a9(3}sWUX7r9DKLzTUS;YKWx6r0M*meok@V0X&>t0@ ztJ6}DWbEASobNl|J>R`w-yfd1< z*Ke3^yJ6nCKDVllUAFz6?VDn;I=txCEbjVwhR9j7)8yw2VLki6AQjv?@eO^>27)73 zeA}v%=r5^Iy1TqEy+GT%?s#2Z<^*f!1tU^<^qZV?^qG`Wmrru!3V-s5lGd~1y$xmV zDKEC2*RTjpLlmllT@8EK*O0-1hC?J6a&uX7JsT{aln%Q^4-8uUXu7@}SoX{myz_36s6L!-D zmFbJzr?^Ca@j->M#yi*xB`_#22jvt(^Z=?T8@V@xMwk`E0!%W%M2%b@;XjZ#R;M93 a;}xMkq*0eOBm#)&#z;x(Lw*+90Db`XPuIf$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantLocatorLocalBase.class b/idl/orb/.class/org/omg/PortableServer/ServantLocatorLocalBase.class new file mode 100644 index 0000000000000000000000000000000000000000..680f75a1842396f7076573edb06e6ebbe48246f8 GIT binary patch literal 527 zcma)3TT22#6#hncUDq}QN&|dkGAqg+O|cQI}<9+l_S)`d0;AASin7 zM@46}AR?q;X3m*8=R4oIynj5u0@%l90y@$fGI3<%$mxh)Van;!Qa(-NWUI}L`|f$O{CkRe*GTreoDU}%$=L2~8FA0PvZNHU~; zM`PGIId0d3E2kEOj(HY@g7-b!vcriTno@9Iw1WW`L0I3b?f%REl>6MVr~U>OWO0Up zb!;$9Nr-Gdk>vB5d`v|ZWL6T;>YO)^%&Dc*AK3%Ju>EbDn>B+v@B*J=Wy_Tx-JC^f zC?y($4u%Ash|HE|6(ODaMfVcDwxE&*;-)aziMt0~s|vhQwwN1$v8NBiA!Jf6Nfy zku@s4p3CM#LVyL7N>g>DUt(ZW#~OdI#qZAD=a=Dc2Aaxx8Z!pq)9V+vkDK0-F>^M zMFcb{W~hWkdf2!ZmzJ~fXY^V43LGYfsW?K18cNbY=7^JFmHvfft!Km&_$rPMz>@%6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantLocatorOperations.class b/idl/orb/.class/org/omg/PortableServer/ServantLocatorOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..c968d968c42314dfe937d194186da4a22ca22d2f GIT binary patch literal 509 zcmb7>%}T^T497ET-Er3se2E43G~jhkDvF0niwj=%lPO6g(X*Pg53W_|}=6CE%*21xZI@ z^6bQ>8|={3=$%;vDZR6O*&jvdL&^mPmK=);9ho!cs-#P<*Ccj6P-_)T&mRkFLdm|> zupf29ZTNzv|HFRcXR8erVF=&OZxooGgZy4GYe?{uRKeljIfG5E(8v48&nB~;u@@{4 kDC=vwyQemc6(|@*+lr4JB?=PQj%plL61|R*9hgJ~?^g|^{Qv*} literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.class b/idl/orb/.class/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..cfda3ef64104aab9b60c22840a7c80e9de4e0705 GIT binary patch literal 1145 zcmah|TTc@~7(LSqyImJ8wM7KH;EgS6*CG$v5|UCMASo%KgoGzDER$xT>^AFAflpkf$b&@h+ zn6~mm*F-WLZ%FPOZSeLs-)|8(<{mI)iE)`lLk6zbq-qj@;B@+CIDxhwNX53-z4nPD zxZua-s6to=L-Ir5O1h==Pl@`8ywr#!5wSvFc3M4KO{6iwkQ=mrqq5altJF-~#4Qa4 z6El7yMvg|Vc^|ne1oAs%ph;f_U@(-=w9;u!?VvG3J2f+!lM7w2&$Iyj zo7>2S$65MkF^cKui0yU}{~023n2aElz%b$trb0v!@g8gT3lhJe(fH{M$uo>)v~SSA zBB3ILV7NlNbP2fE^a8WN^=(X{*%OgJcuAh3(@g#zzLwqS_o zYP`c8mp3a;zE~3_m0<{?miQSbyWGaT4C=~W!rs5sgD z-PNVjlAhv4S2#D#R$JXGf;BQaBV2g$s){J>i7ENE8qP5a>bXTJtM=hYnFsRg4l@>} zVOfYEYGTvE7Pc+yVAsMP78yIDiXuafNo^g{+N2~f0h((OP37wMLn6Q(2%I(o1wkdXt@@zgRCq-qZ)!D>={$&-&pc0`ve;9Zsd+5g1_RFz;g$J|>b% jcM<#pi6K4;NvGZr=pr;=S-_$X(QJ$=g}N|abQ{1gcFw=u literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantManager.class b/idl/orb/.class/org/omg/PortableServer/ServantManager.class new file mode 100644 index 0000000000000000000000000000000000000000..f760d37751fadcfe4b56d8660e6fbd0c3ec3de76 GIT binary patch literal 220 zcma)%I|{-;7=&kiWPLOqz{1A*2XEl32t*=!f@Us!UK3HF@hF$&Jy9Z#u|}^));6EHAV_^=MA~Dp}q5gvr3NQ8}alGwqeJXjd+Dg$qiG*)=-+2 zk_QF)3r%bB913SI3ezvKP7kXkB`)VGwn6-fb5WT6*7au*#hYYnLlLf#f}v5~te|k`kt6gfS{%M#e1eNVqHEo`g9DzwW#%aE9nY-p*+G z&5SmaUYbs7Dw!libP4SBC9xQP%-? zE<1*~kunM^#%hirJ=ryeUh-HsUK?7@urk`RV`r_5NFr;!;dc z5n#*Qe$8!7Y=-5e49m!HJ0a4S_*=&|OhTI64XIYm-cVGb%?-*o)r?YbQ_$wE!j?k? zaAPyEe^~z;JL}M6q}$@Ax11XA0V)qzhHdBHFx+Z}POq+W(>Xwr;VsL2$;}PErdL33 zw*h^=|I&k#X09}93XY;*!n}g}IHBMOq6&_S(*VvebTxKW!2>KX4A0LlOwjy}h&kS~ zcN1eHqY6&ql!TOmhe#_}#3Kc9T$He+V7Yu5VYtx134L6@q*c3H-vx#v4VKz;a#mkV zE+tb81C5%Rf9cKVHw!rlD+(TiW^=G&yJ!9k@qO9N@mzu14B;A`%8h2|sQ{G8PL!p2 z7EjM`$fSXFxSq8fZoe>0t~(~fRIHVht&&=+TRxGdh(ub3&N8R*cSMyNXDO{jv- zT`rxgAkmf|$DMA5GmTYOTTw?;h7LjND%#mLE{)w+N}R1a9c@#`&=cPP{m6&uXJ?Sb zSkpu_zprv$mPUB7{qzk zBucvouBb(HERdO!x>y0afLImCLni@LL?Y7YZBoQm7{zCT$bbLej*%$Qu zi2p_;{tJ;hks2@JkVvImlMkNm2o*&%cCjLaB*Fz$Z(Xe6UG%kFWbz+z{YTwg`qe-1 ivu(<#_dSB@PxNkA(yEUh=s*x!Ln}#5p7i?V7sG!5xbo=$ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantManagerHolder.class b/idl/orb/.class/org/omg/PortableServer/ServantManagerHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f1f8a313a91f6cc0633e172a6263d6a7ff5d6b59 GIT binary patch literal 850 zcma)4T}uK%6g{J^o3@pfTG^)+r0c^{uSQV56eLDPuQKK!%DOAdX!NfNilm2rKtC$F zqpPJL$+CBL?>*<9xo76<`{NV9F%F{8k&GaWR1~XNQ(;|&w2loOn>w}_v@W+hg5mJW z_3D<}s$18tCwbKtx5DcR&r%C_WQjYxF1!Lm_@v=9qj4MrbVa&ME*#DiW=DS;-+IP&|8TBqM> zqVJ6+45h2?m`}Ow^T4&8IPwCw#gIPm0xv#fNEzk@gWL&6g4`TZG0cBJI&>^C6#hQQ4D5zO z?zj1bNLG_q5jCl;ly{_Q-%*Cv E7nX5vWB>pF literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantManagerLocalTie.class b/idl/orb/.class/org/omg/PortableServer/ServantManagerLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..6e2a6a8823c828435f5f60aa2901d421bfbc1fc5 GIT binary patch literal 417 zcmb7A!D_-l5Ph>I#-y>e7w_JZ6dP)LQ+m*=rG<)DS#=44G+Wli@2a2(9{K@(RBA{gtI3+E_U+)Tc6Q zWzq^{Y2RciGiBbtm60~r<*HAp5Arg%uY{NAYIi&(I3vB}=;tWD+8)BgT?iL-LieJ} z$9f@)NzQqXm+Oae#fDlGPtoDeIs8e2sA9Pj+DNG&_u>yaV{*tqQuYLoZY?d;{;G6FOinW3@E6j uuvqGXMjmGAMR!s9U>_UyY(?8ul;afqW>7ianP&Eu+QG>f3j>4X-TplYs~lSZ literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicy.class b/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicy.class new file mode 100644 index 0000000000000000000000000000000000000000..eb91319ec3f0bd29126c2f81b729f1d8a4d15ae7 GIT binary patch literal 264 zcmb7^DsEaJA z8RogHq$s3HMG)tdScdIi7C}iyHjX!j#qaVEMEjjX_+%{GV_zq-@RTKUkqI%Z+UxQQ YF1(|Ea;&xjnD|o12l_6}3 zivnjzuIIgDBY$#iENyNtW{q8vF6EDSh9NTVxQ!3%CWuHfEpmd#CJGc2T9o4i$0D~Xn&)Z~$d z07GYaMwpeTrrMNRwKtkrKdJ)Lym#%jHgFT@G$dFpYSI0|AAasSm zWl0;8h3#v{5iH4)PZ4~B?ki~)PDF}Oo*_swiD3Ac)*x6fVzS+QXqQhMOhhZZ_wk9Z z>?8XCp<;Ua3b7*8a$qrhiqCwLB<<3IuM1?@RXz`B;9`b#_&H9 Cb`^>M literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyHolder.class b/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ad69ec38fa59d01fc3f7ec2b583ad71279e98f95 GIT binary patch literal 898 zcmb7C+fKqj5IqYm6|4#hsCY$9MH3SU-X2MT4Jj#Y(<~VNN)wI52S31% zGVVe_AtAA8I@`{iIWv1^zP>*`0Tgf)fr3OBAtWPM$A&PQ!lV>zDcDx9Lm>Bbvr7rI z8{2JZcBiFPY?tYElipIdM_o-Ey2YxLQHvS2Rk2N@(JvB&&J4?7=LEq__JKeu*-g$< z$oM1@xpK{=dXwPzH@Q@(g58%C;NpAo#Be`hcM5 zxgQnX%>;=a9A@U;nKS3yx%Ym4y}koD#%=;CQVP;>Wa7xGh+{K>9JUl_3i1jH3bq;4 zzL?(ezB3#%q;Fayb7JbQ>Djs=0>`uK46!rEbHq7Av{b%kkedFGlbKPnrSd-{4XapV zNd8r0IJvrP)%;t#>Ib&o@dIHFTyF4S!UH`trYE{wa8EeC*YRD)n%0i0hYZCYgh?$(livY!*CjEQ;g;GTfSww4RcI6<>$m%fFGni7;#H59L%w$KFuIouJ4g% zrc_=i>P)RJ?NK*WFeGS2!rxQNBIHxqXkVw(K4kKMT;&C9JRPfAI~6XXYi bKo64G_$3s`hJ>}sBjjhqKA_ONryCmIX^(@& literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyLocalTie.class b/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..b3cf591c845f1f96d015ce5e69942096ac18e6cd GIT binary patch literal 831 zcmbVK$w~u35PdyaCbPK2WsJMICGijtR3t$#ISGM;D7l6)X~MubJxtm_{>g)aB6{!x z{3x+nN8%xu@lw^*_1>fEb$@)my#qKx(L@d#26PlGY+_4=Z54J@*wwM8W1qq354q1r zuH+17EfI~X;&xQ+h)B9OKELA8ghy4C+(34@o| zz4ULDa*rY16hj)NRx1Bnh9NU?{X0@QNvhIQJle(zzc=j5X-G1uQu&f58;EeqQ23+S zYqfK?8kp*>Qi@CFuROrA2M wyG-Q?+C$tXTjI78w@uZ4MT+4UL$1xoq#5pG9Wr%3CNt9^&*x*Z3_s)I3lCh(Z?fc&D8#H5_m z;MAhB)FOQlm6%r&lvl|Pzy!q1Kz}f@Ffy<(umV{O01lx- AFaQ7m literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValue.class b/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValue.class new file mode 100644 index 0000000000000000000000000000000000000000..caffd3f024b5863c3822fc91e0a1a5d5901ecb7d GIT binary patch literal 867 zcmbVK%Wl&^6g?B$b>ceELTE`JP#P#ncvz~CSWu8k$Rbims-%jkRHFi}$Gx-vH`*eSf#n5)ci6d@Twm(hX(L4PJU00U4mCR-$T4%04|{PwEZw`Z>_ve zdL`OS5`i++Lj$g!ATv9GHWRa?vO;S>Thlb?>MT;IB@U`lt9lB(y7~d)Ei(nNjw|da xHidLuw)zpqC(J28F5suLvwSqn|p{AJyr5b~kKD(20CG=j?mGJ@5Ye-(Rl*TtZdB7%nRG`a;5G1u=Z7 z;455_a8*G+zD^QlMnX;yXBC{lwIm(aCESqljf^=#nit1{jGMyDqKt19+`?@IdE61l zT?GZ)ldvSA$dE9+ojPYYUU1y1?rc=`h2qNmoW4rb1*gJu4E?i~ZF$!jVwuS`hPWWp zWjO9S!)Ru*LzC2nl4Wml*JHSo>EO@VJGnj5vg3N@dX1O3yUkr)T&C@+;hz`nav+$HVWkf>@p0LJhS}sJ+rkaUXR?Sr7Bo^LBm9BXMqS7=;j zMP3eDb9uI0^9Ml1rx=&8tl~b>3|CtN(|fINJGBaTg`E`%B^9f9z%a-+bjS7z!1S@L0upTu^ZmpOA$}C};qU-^$|ZTz-i`St>3W!H0^^ zkyfE0%W(2NlcwSceqfl%-z>}!Af`l~z2`V{acWw^k17oOB*9d%j6Yh?+O_W-f}g*m!jR*c{N!3ZO@F5``q>dvz?WW0deds5^E3Jy zqMOm3&|ZT5Mh}o6Ava_X`b;3+MBlE@P2v=i8DAG ziWTSX6L#84_lMu-1^N-`n^nngNe zU}wk_t*6k`G2aj|QX{QIY3GH^5xRvRnM{o~@li`+3VJ9pN*RhAlUlZcj~h51ltISy OzEYC}5{!Zg*!Umt$xc@Q literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValueHolder.class b/idl/orb/.class/org/omg/PortableServer/ServantRetentionPolicyValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..f96547705a77c7ef42d79643402f5a5621c44ec5 GIT binary patch literal 928 zcmbVKT}#4H7=DgAm$phvt?bhZ^5bF@L4gsJHwA&B;Y9>8^&peEjd3*mR|Q4VML(b) z6`iBgQt(0>=Y5{{>-*>P3&1Ikf{+mnz>ioE>(~%xQ<%7nEg9P~b_k@7X0$26 z*}dg7RIAlc3zoyQszFQC=}<=%hi0-OWz=N4Wfm+$uXW2JDofzM)J>gT5qOiSGJ!8= z)j8RDavnB8AXOZy)d`OO7;^dI&9!Q~S*drX-DV}mVXdr)@K>H4opI6R)R26ejmJn8 z*0p&^Jee9LI*@tb_o9ZZf<-6_0tm|3Rj`MB1qmD|I7EctV)ka;T1K5Z1fizZ(Nse- z8*0AVq%}s67_v>2I;c|2Vm?J`*h0}aXzAnB{*1MB)R39>KyruhG*x752=j>a_e;zT zCw!%45G?SQh!OF1m-rW-7`IFOFWmR=+w=#>E5AVBz3jSU@bCu+3U@m54$ly?f{=@e nx|l#Z(}VXPB#hNbNGAOTPY=E!%NimsM6eOAn4Vp2|OaB5LmYLR}3N06(dOMHO8kEe5Fyr&BzgFsedS)zVUVqUtw ie^ORzatRyISOzAbF^mk749pBHK$;cEV`5+fk_-Uw4HWfbIDj@tmCPYduc0a+2L#@KPE=yq9zy>yy8r8 zov}DAq;LfDKZJ29EqA%mSAy~PejV>tOCR@kp8V305nP4ZNqgc#5=?*B<)aAK?5x`J=zHTr+!|qXhuB% literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ThreadPolicyHelper.class b/idl/orb/.class/org/omg/PortableServer/ThreadPolicyHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..40196e436afd96f4de20816ca8c2482f69f63904 GIT binary patch literal 1988 zcma)6X;af+5PsfXX+w}wISQVDN}B@V@T7P%&H z#^a05_@f;6ZPN5Wn0|SW-F=?jeRuc$^Y_a)0ONQnq6?!U#xNd1CniK%F7xF|7+1OY zS{T>){f3B1r1>(%uQx?Z;}$>N7LXAzBO;1X0kb0Ja7Vyh0rv#lX9%kHUeREPFBYs# zrLeuJ%r33WWRx|M&K5R|G(%`AXXfl_27e;?gdxDiw5bJaouM<4Y(Ns6Kmmug_mH}V zxOLUm^sTH`T+`O`MCr?IFmw>&mA0!XdClBZR&6V1Zt@^<=4->U8PbUce;IQx?TMBP zmd(jl4Qto1l(msqprUQ)bnEFdY-!eAT z3gz?>l+T+@Iy|N4%k3qh2fYI3B|N|x3EhZGIL%Le=x2~>D=A?Ciwvpxxy4E9*b&~j z$JA?bY-CizS)3D)mGBTt5|;5uLJC6yRwS%Cml1}+x*1T%)d|I`XzklGbk|ubGnqMc zIkS?AOZnr^7J&OkM-vbY0ySW+$Up%0_MBMm4+t24i9C91I_8prGE z239`2C*0xnNaBZn7q_Ds`s=gy%1|?y3@v<&JvOfzj%yE6UwNrKr5>o~h&+-{0)6!R zcF`}+Ao6ymlSF6ga#~N(t(|s8drQW84gW`9jYTBIU} nW9gNDBgpnCqK! literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ThreadPolicyHolder.class b/idl/orb/.class/org/omg/PortableServer/ThreadPolicyHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..d26285da8521ff326cd3c58e3a396d45e53b0bf6 GIT binary patch literal 838 zcma)4+fKqj5IqYmm0A@PQ1ObFSjt1AuNV{MMWY5H#8*e zmG>h!`k@qxcNgcn>+9-Q9k)x%l)>70&WKbWJ&R7O%utG5I?WNQwC^%XTFp)-8*wTu z&xg({n1`Yu3R%Lof*tHC$Y4*wJ`x1k0CrqDcEj`tVlAU*=(f>m>cv{itW$!_m_9S; z=vv&~fD)$datUE%+I29~CRhIdUy8o3w|{n>@-K=63AdRorN~aq zbru)cSA1AuS?vwvnI$kRFZ$&aLhJ!#UeC&eBorlVG01~p zddCO0IcCUQcSia|R~_B8R4wpr*J?7vj&0WtP8gz<>J@{~_DoJ;M#)vG|Bw`{BFT{Y ztH!W*e%5Jtw^rTrEw$(Qfj)G&#{CKR)yo^7>t@e$Y-8FutRFCx7OUIci`FS|=CFd5 z@Fj|Z61ExkLq$?vrrPlg-D&A#>c22ApUM6p-QkEE0YiC?EoqQJG#t+*rEI0TVB1Wi zDeRKpG8huHB4MZWDG|!a7~0q9RE9_ykgvUf)xkDZ?dxH2t5U3!9^_5q3JJ>Agw2AOkq-T(jq literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ThreadPolicyLocalTie.class b/idl/orb/.class/org/omg/PortableServer/ThreadPolicyLocalTie.class new file mode 100644 index 0000000000000000000000000000000000000000..6882e144a492d6de432ec87c84dfebeaa1400a84 GIT binary patch literal 761 zcmb7?$xgyh6o&s>hSI?Shl;c87&MJ+H73H!gao35EvfVdnpAF6Dhco8LKBVAg%99E z8PC-kT(BscbBFW&r|0~=pI`4E0BR`e$YD!^ih_Y{?8vYy!=4QLDh^Z}GH5-Q`+VR; zoWX92aA1qOf!!8ii8?MHdXU(t_G@ zmm%E{E`9d2R9;ZbkeN9CJ!y}VX}gl9evRN~hF&xcNSrE_uc(W@2&N2$f0Y`o>-r^` zAm=5O>hf_E3W7+{HDSOqp+Q%1WMT!YCh}M_v5pNBo3I$F34CmdzTSdN)It&Hw6m1iiA qahe8?(^j0;W%>;%hChaUna`vd9^yJ=+k7T7t3$5NXR-{x?cy5+%&y4* literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ThreadPolicyOperations.class b/idl/orb/.class/org/omg/PortableServer/ThreadPolicyOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..e25ce32e2992586217e89398c99390975c87f02a GIT binary patch literal 198 zcmX^0Z`VEs1_mPrPId-1b_RBK1`b9B*0RK$(o{wU9Su#N{GxRI{M>Z?fc&D8#H5_m z;MAhB)FSG4k6;hf+5Xot(B#Ok7<)$XMICkWki2f4d zA(TrINPGYvg_v;-s#+f4!Lze7J7>!2<;k1t!gAYuBuFT87zZR%?cUs0(B(zIPm2Uf8wV*S19H5V&^vWXbS@zU~kD z`o158)`4rc?O-0_{gvSDTvt8eNYShfmvsSHKJ@3ZILSW`EDS>IT zQLgV@IiC>7T}cR}%n@@HNXDyFD3TJn;vZ5l{UY!OrsIVIn}vGue~4$>q1AiUu!bF0 zNR4(J&k3IpGy!!5CRl6BKK9)aW%Griab%4w-L<^F-aI(6dm*V;Yj1k?Fm!0F3bu*Q zPS1^Dh-X*BO=LApA*UhF<_4Q(tZSIVyoN2lLn6#j0!NEQmjCTUsPvE^%?ZNHJA!6;+lew@UetX6a?_8 zg3s`|gfA3?u@oUmTEemreyQLBu1Dx`L&8lN85t`wR)us;JhC#r5=ggXtSiXjYX!HF z7mp1En$m8TiP%VxuLt}_JUiEW0U z5YwSs_71~TJTc%&?!w7z>~Y&+xEUYNXBvm;W6_pnJH}3(m$-ev?Ns@p&5i1oRW~b# z+eUq#r^SsDf9%*sg}`pS39L(CBpSnb$uTNFZy3$8xR#Phk$4%nFce8o4#vzX!z5We zG7gMX-DuQOCC4@!H3~H-I5TVwa%=jrrE-ntzC-5R*iD~^Z0Hx;bST%w|Aa2=J6-IP zWmR6T)ZN0Wn8te&iYiK&WmxDm!l-PnTlFfpg?CxPT@~B-hGBy5r5v;BcM;WE#kaVp z;yc`DINQx$_Hl(b9n)&4_#Qu~n8$*OcknJDbd9_eGn}TL(pSsHyuMLb%jOBFl-s!uha zeb1dFLAX0i1B`noj@rj}=Z*bc-Kj9#i4V{5u;l)*Xz;?G4KdqavE%4_s4zsts?h6J zqvmeY97DY0Hma5k@&nu2r5w0Dkn2(zWMkzZ=meumAu6 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/ThreadPolicyValueHolder.class b/idl/orb/.class/org/omg/PortableServer/ThreadPolicyValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..1d36cbe1107a5cd30bb32f225e17d4155aaecea9 GIT binary patch literal 868 zcmb7C?@Pj95Pn|WT&`7GYGpsIpgE~gUyY#rQV=LAewC@iCew}aYWQCj6iFZY1Nx() z_tj}B2*%j4-97i*-E;T#{qYIl5+^bw#KQ<7A!8F;+-!4`l&~XVSHd2F*fZ>|NuWJA zUQ>74O}*fF)Tr5J$@F@rrbcI03ISoc}rY_FG z)5I!gCOG}g%jJu=H@fS0px<}gE-g_8YiD^zsQTntl$BEFrsTVHI!CP1zROaQYI@S% zs7#spdFNRL%TN@AAxqd-aDYPvDI6&{MvUNmQDN>JyJ30+k(SXjbld1O^?a>m)+s@1 z%rP_IXg03)f9jaF%j*au`3iHjn38WY`~v$GeVL1Msi$OKoO*aId>^=AXDNYTiM@nN z&rVikUu+Z1uCTx8Fv7grJID)jU>IKY!wCe~1IRqAW!?}NW7ZJyF>xOg)-nSG|3IQx dpM_+!R|EzS#w;6%`4G-VSS4Wq@tL;)`~blS-YEb8 literal 0 HcmV?d00001 diff --git a/idl/orb/.class/org/omg/PortableServer/portable/Delegate.class b/idl/orb/.class/org/omg/PortableServer/portable/Delegate.class new file mode 100644 index 0000000000000000000000000000000000000000..72073bdc0e6903dabdae73b677a9c9fcc90572b7 GIT binary patch literal 652 zcmb7C-AV#M7(J7wnOfS<6V!!X4Fo~35NO^6!b;xN#WJg(+sZa0<0L&>7d=1^6@89Y z6vVPObNFDsGv{aCKVIJeT;Q~d<0?)BO2)*;FS%_g gjJv3KtYXh&4f`JJ+qr?JpAT^8v4ytBqxBx}3H67*dH?_b literal 0 HcmV?d00001 diff --git a/idl/orb/.cvsignore b/idl/orb/.cvsignore new file mode 100644 index 0000000..9890ac7 --- /dev/null +++ b/idl/orb/.cvsignore @@ -0,0 +1,2 @@ +.class +.java diff --git a/idl/orb/.java/es/tid/CORBA/Any.java b/idl/orb/.java/es/tid/CORBA/Any.java new file mode 100644 index 0000000..2b08b44 --- /dev/null +++ b/idl/orb/.java/es/tid/CORBA/Any.java @@ -0,0 +1,10 @@ +package es.tid.CORBA; + +public abstract class Any extends org.omg.CORBA.Any { + + public org.omg.CORBA.portable.Streamable extract_Streamable() { + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/idl/orb/.java/org/omg/CORBA/ARG_IN.java b/idl/orb/.java/org/omg/CORBA/ARG_IN.java new file mode 100644 index 0000000..28d4744 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/ARG_IN.java @@ -0,0 +1,12 @@ +// +// ARG_IN.java (const) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public interface ARG_IN { + int value = (int)1; +} diff --git a/idl/orb/.java/org/omg/CORBA/ARG_INOUT.java b/idl/orb/.java/org/omg/CORBA/ARG_INOUT.java new file mode 100644 index 0000000..fd182b6 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/ARG_INOUT.java @@ -0,0 +1,12 @@ +// +// ARG_INOUT.java (const) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public interface ARG_INOUT { + int value = (int)3; +} diff --git a/idl/orb/.java/org/omg/CORBA/ARG_OUT.java b/idl/orb/.java/org/omg/CORBA/ARG_OUT.java new file mode 100644 index 0000000..8277c4a --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/ARG_OUT.java @@ -0,0 +1,12 @@ +// +// ARG_OUT.java (const) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public interface ARG_OUT { + int value = (int)2; +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDef.java b/idl/orb/.java/org/omg/CORBA/AliasDef.java new file mode 100644 index 0000000..4792373 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDef.java @@ -0,0 +1,16 @@ +// +// AliasDef.java (interface) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public interface AliasDef + extends AliasDefOperations, + org.omg.CORBA.TypedefDef, + org.omg.CORBA.Object, + org.omg.CORBA.portable.IDLEntity { + +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDefHelper.java b/idl/orb/.java/org/omg/CORBA/AliasDefHelper.java new file mode 100644 index 0000000..4857a3e --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDefHelper.java @@ -0,0 +1,76 @@ +// +// AliasDefHelper.java (helper) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +abstract public class AliasDefHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().create_interface_tc(id(), "AliasDef"); + } + return _type; + } + + public static String id() { + return "IDL:omg.org/CORBA/AliasDef:1.0"; + }; + + public static void insert(org.omg.CORBA.Any any, AliasDef value) { + any.insert_Object((org.omg.CORBA.Object)value, type()); + }; + + public static AliasDef extract(org.omg.CORBA.Any any) { + org.omg.CORBA.Object obj = any.extract_Object(); + AliasDef value = narrow(obj); + return value; + }; + + public static AliasDef read(org.omg.CORBA.portable.InputStream is) { + return narrow(is.read_Object(), true); + } + + public static void write(org.omg.CORBA.portable.OutputStream os, AliasDef val) { + if (!(os instanceof org.omg.CORBA_2_3.portable.OutputStream)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + if (val != null && !(val instanceof org.omg.CORBA.portable.ObjectImpl)) {; + throw new org.omg.CORBA.BAD_PARAM(); + }; + os.write_Object((org.omg.CORBA.Object)val); + } + + public static AliasDef narrow(org.omg.CORBA.Object obj) { + return narrow(obj, false); + } + + public static AliasDef unchecked_narrow(org.omg.CORBA.Object obj) { + return narrow(obj, true); + } + + private static AliasDef narrow(org.omg.CORBA.Object obj, boolean is_a) { + if (obj == null) { + return null; + } + if (obj instanceof AliasDef) { + return (AliasDef)obj; + } + if (is_a || obj._is_a(id())) { + _AliasDefStub result = (_AliasDefStub)new _AliasDefStub(); + ((org.omg.CORBA.portable.ObjectImpl) result)._set_delegate + (((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate()); + return (AliasDef)result; + } + throw new org.omg.CORBA.BAD_PARAM(); + } + +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDefHolder.java b/idl/orb/.java/org/omg/CORBA/AliasDefHolder.java new file mode 100644 index 0000000..b8a23d1 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDefHolder.java @@ -0,0 +1,33 @@ +// +// AliasDefHolder.java (holder) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +final public class AliasDefHolder + implements org.omg.CORBA.portable.Streamable { + + public AliasDef value; + public AliasDefHolder() { + } + + public AliasDefHolder(AliasDef initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = org.omg.CORBA.AliasDefHelper.read(is); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + org.omg.CORBA.AliasDefHelper.write(os, value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.AliasDefHelper.type(); + }; + +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDefOperations.java b/idl/orb/.java/org/omg/CORBA/AliasDefOperations.java new file mode 100644 index 0000000..6bdbff6 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDefOperations.java @@ -0,0 +1,18 @@ +// +// AliasDef.java (interfaceOperations) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public interface AliasDefOperations + extends org.omg.CORBA.TypedefDefOperations { + + org.omg.CORBA.IDLType original_type_def(); + void original_type_def(org.omg.CORBA.IDLType value); + + + +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDefPOA.java b/idl/orb/.java/org/omg/CORBA/AliasDefPOA.java new file mode 100644 index 0000000..3e10afd --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDefPOA.java @@ -0,0 +1,224 @@ +// +// AliasDefPOA.java (skeleton) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +abstract public class AliasDefPOA + extends org.omg.PortableServer.DynamicImplementation + implements AliasDefOperations { + + public AliasDef _this() { + return AliasDefHelper.narrow(super._this_object()); + }; + + public AliasDef _this(org.omg.CORBA.ORB orb) { + return AliasDefHelper.narrow(super._this_object(orb)); + }; + + public java.lang.String[] _all_interfaces(org.omg.PortableServer.POA poa, byte[] objectID) { + return __ids; + }; + + private static java.lang.String[] __ids = { + "IDL:omg.org/CORBA/AliasDef:1.0", + "IDL:omg.org/CORBA/TypedefDef:1.0", + "IDL:omg.org/CORBA/Contained:1.0", + "IDL:omg.org/CORBA/IRObject:1.0", + "IDL:omg.org/CORBA/IDLType:1.0" + }; + + private static java.util.Dictionary _methods = new java.util.Hashtable(); + static { + _methods.put("_get_original_type_def", new Integer(0)); + _methods.put("_set_original_type_def", new Integer(1)); + _methods.put("_get_id", new Integer(2)); + _methods.put("_set_id", new Integer(3)); + _methods.put("_get_name", new Integer(4)); + _methods.put("_set_name", new Integer(5)); + _methods.put("_get_version", new Integer(6)); + _methods.put("_set_version", new Integer(7)); + _methods.put("_get_defined_in", new Integer(8)); + _methods.put("_get_absolute_name", new Integer(9)); + _methods.put("_get_containing_repository", new Integer(10)); + _methods.put("describe", new Integer(11)); + _methods.put("move", new Integer(12)); + _methods.put("_get_def_kind", new Integer(13)); + _methods.put("destroy", new Integer(14)); + _methods.put("_get_type", new Integer(15)); + } + + public void invoke(org.omg.CORBA.ServerRequest _request) { + java.lang.Object _method = _methods.get(_request.operation()); + if (_method == null) { + throw new org.omg.CORBA.BAD_OPERATION(_request.operation()); + } + int _method_id = ((java.lang.Integer)_method).intValue(); + switch(_method_id) { + case 0: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.IDLType _result = this.original_type_def(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.IDLTypeHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + case 1: { + org.omg.CORBA.NVList _params = _orb().create_list(1); + org.omg.CORBA.Any $value = _orb().create_any(); + $value.type(org.omg.CORBA.IDLTypeHelper.type()); + _params.add_value("value", $value, org.omg.CORBA.ARG_IN.value); + _request.arguments(_params); + org.omg.CORBA.IDLType value; + value = org.omg.CORBA.IDLTypeHelper.extract($value); + this.original_type_def(value); + return; + } + case 2: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + java.lang.String _result = this.id(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_string(_result); + _request.set_result(_resultAny); + return; + } + case 3: { + org.omg.CORBA.NVList _params = _orb().create_list(1); + org.omg.CORBA.Any $value = _orb().create_any(); + $value.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + _params.add_value("value", $value, org.omg.CORBA.ARG_IN.value); + _request.arguments(_params); + java.lang.String value; + value = $value.extract_string(); + this.id(value); + return; + } + case 4: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + java.lang.String _result = this.name(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_string(_result); + _request.set_result(_resultAny); + return; + } + case 5: { + org.omg.CORBA.NVList _params = _orb().create_list(1); + org.omg.CORBA.Any $value = _orb().create_any(); + $value.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + _params.add_value("value", $value, org.omg.CORBA.ARG_IN.value); + _request.arguments(_params); + java.lang.String value; + value = $value.extract_string(); + this.name(value); + return; + } + case 6: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + java.lang.String _result = this.version(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_string(_result); + _request.set_result(_resultAny); + return; + } + case 7: { + org.omg.CORBA.NVList _params = _orb().create_list(1); + org.omg.CORBA.Any $value = _orb().create_any(); + $value.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + _params.add_value("value", $value, org.omg.CORBA.ARG_IN.value); + _request.arguments(_params); + java.lang.String value; + value = $value.extract_string(); + this.version(value); + return; + } + case 8: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.Container _result = this.defined_in(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.ContainerHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + case 9: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + java.lang.String _result = this.absolute_name(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + _resultAny.insert_string(_result); + _request.set_result(_resultAny); + return; + } + case 10: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.Repository _result = this.containing_repository(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.RepositoryHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + case 11: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.ContainedPackage.Description _result = this.describe(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.ContainedPackage.DescriptionHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + case 12: { + org.omg.CORBA.NVList _params = _orb().create_list(3); + org.omg.CORBA.Any $new_container = _orb().create_any(); + $new_container.type(org.omg.CORBA.ContainerHelper.type()); + _params.add_value("new_container", $new_container, org.omg.CORBA.ARG_IN.value); + org.omg.CORBA.Any $new_name = _orb().create_any(); + $new_name.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + _params.add_value("new_name", $new_name, org.omg.CORBA.ARG_IN.value); + org.omg.CORBA.Any $new_version = _orb().create_any(); + $new_version.type(org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + _params.add_value("new_version", $new_version, org.omg.CORBA.ARG_IN.value); + _request.arguments(_params); + org.omg.CORBA.Container new_container; + new_container = org.omg.CORBA.ContainerHelper.extract($new_container); + java.lang.String new_name; + new_name = $new_name.extract_string(); + java.lang.String new_version; + new_version = $new_version.extract_string(); + this.move(new_container, new_name, new_version); + return; + } + case 13: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.DefinitionKind _result = this.def_kind(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.DefinitionKindHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + case 14: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + this.destroy(); + return; + } + case 15: { + org.omg.CORBA.NVList _params = _orb().create_list(0); + _request.arguments(_params); + org.omg.CORBA.TypeCode _result = this.type(); + org.omg.CORBA.Any _resultAny = _orb().create_any(); + org.omg.CORBA.TypeCodeHelper.insert(_resultAny, _result); + _request.set_result(_resultAny); + return; + } + } + } +} diff --git a/idl/orb/.java/org/omg/CORBA/AliasDefPOATie.java b/idl/orb/.java/org/omg/CORBA/AliasDefPOATie.java new file mode 100644 index 0000000..0087802 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AliasDefPOATie.java @@ -0,0 +1,109 @@ +// +// AliasDefPOATie.java (tie) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +public class AliasDefPOATie + extends AliasDefPOA + implements AliasDefOperations { + + private AliasDefOperations _delegate; + public AliasDefPOATie(AliasDefOperations delegate) { + this._delegate = delegate; + }; + + public AliasDefOperations _delegate() { + return this._delegate; + }; + + public java.lang.String[] _all_interfaces(org.omg.PortableServer.POA poa, byte[] objectID) { + return __ids; + }; + + private static java.lang.String[] __ids = { + "IDL:omg.org/CORBA/AliasDef:1.0", + "IDL:omg.org/CORBA/TypedefDef:1.0", + "IDL:omg.org/CORBA/Contained:1.0", + "IDL:omg.org/CORBA/IRObject:1.0", + "IDL:omg.org/CORBA/IDLType:1.0" }; + + public org.omg.CORBA.IDLType original_type_def() { + return this._delegate.original_type_def(); + } + + public void original_type_def(org.omg.CORBA.IDLType value) { + this._delegate.original_type_def(value); + } + + public java.lang.String id() { + return this._delegate.id(); + } + + public void id(java.lang.String value) { + this._delegate.id(value); + } + + public java.lang.String name() { + return this._delegate.name(); + } + + public void name(java.lang.String value) { + this._delegate.name(value); + } + + public java.lang.String version() { + return this._delegate.version(); + } + + public void version(java.lang.String value) { + this._delegate.version(value); + } + + public org.omg.CORBA.Container defined_in() { + return this._delegate.defined_in(); + } + + public java.lang.String absolute_name() { + return this._delegate.absolute_name(); + } + + public org.omg.CORBA.Repository containing_repository() { + return this._delegate.containing_repository(); + } + + public org.omg.CORBA.ContainedPackage.Description describe() { + return this._delegate.describe( + ); + }; + + public void move(org.omg.CORBA.Container new_container, java.lang.String new_name, java.lang.String new_version) { + this._delegate.move( + new_container, + new_name, + new_version + ); + }; + + public org.omg.CORBA.DefinitionKind def_kind() { + return this._delegate.def_kind(); + } + + public void destroy() { + this._delegate.destroy( + ); + }; + + + + public org.omg.CORBA.TypeCode type() { + return this._delegate.type(); + } + + + + +} diff --git a/idl/orb/.java/org/omg/CORBA/Any.java b/idl/orb/.java/org/omg/CORBA/Any.java new file mode 100644 index 0000000..32eba80 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/Any.java @@ -0,0 +1,116 @@ +package org.omg.CORBA; + +public abstract class Any implements org.omg.CORBA.portable.IDLEntity { + + abstract public boolean equal(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.TypeCode type(); + abstract public void type(org.omg.CORBA.TypeCode type); + + abstract public void read_value(org.omg.CORBA.portable.InputStream is, + org.omg.CORBA.TypeCode type) throws org.omg.CORBA.MARSHAL; + abstract public void write_value(org.omg.CORBA.portable.OutputStream os); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + abstract public org.omg.CORBA.portable.InputStream create_input_stream(); + + abstract public short extract_short() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_short(short s); + + abstract public int extract_long() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_long(int i); + + abstract public long extract_longlong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_longlong(long l); + + abstract public short extract_ushort() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ushort(short s); + + abstract public int extract_ulong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulong(int i); + + abstract public long extract_ulonglong() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulonglong(long l); + + abstract public float extract_float() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_float(float f); + + abstract public double extract_double() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_double(double d); + + abstract public boolean extract_boolean() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_boolean(boolean b); + + abstract public char extract_char() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_char(char c); + + abstract public char extract_wchar() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wchar(char c); + + abstract public byte extract_octet() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_octet(byte b); + + abstract public org.omg.CORBA.Any extract_any() + throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_any(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.Object extract_Object() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Object(org.omg.CORBA.Object obj); + + abstract public java.io.Serializable extract_Value() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Value(java.io.Serializable v); + abstract public void insert_Value(java.io.Serializable v, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.MARSHAL; + + abstract public void insert_Object(org.omg.CORBA.Object obj, + org.omg.CORBA.TypeCode type) throws + org.omg.CORBA.BAD_PARAM; + + abstract public String extract_string() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_string(String s) throws + org.omg.CORBA.DATA_CONVERSION, org.omg.CORBA.MARSHAL; + + abstract public String extract_wstring() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wstring(String value) throws + org.omg.CORBA.MARSHAL; + + abstract public TypeCode extract_TypeCode() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_TypeCode(TypeCode value); + + /** + *@ deprecated + */ + public Principal extract_Principal() throws org.omg.CORBA.BAD_OPERATION { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + /** + *@ deprecated + */ + public void insert_Principal(Principal p) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.Streamable extract_Streamable() throws + org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_Streamable(org.omg.CORBA.portable.Streamable s) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.math.BigDecimal extract_fixed() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_fixed(java.math.BigDecimal f, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} + diff --git a/idl/orb/.java/org/omg/CORBA/AnyHolder.java b/idl/orb/.java/org/omg/CORBA/AnyHolder.java new file mode 100644 index 0000000..3faeb1e --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AnyHolder.java @@ -0,0 +1,39 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class AnyHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Any value; + protected org.omg.CORBA.TypeCode type; + + public AnyHolder() { + value = null; + type = null; + } + + public AnyHolder(org.omg.CORBA.Any initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_any(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_any(value); + } + + public synchronized org.omg.CORBA.TypeCode _type() + { + if(type == null) + type = org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_any); + return type; + } + +} diff --git a/idl/orb/.java/org/omg/CORBA/AnySeqHelper.java b/idl/orb/.java/org/omg/CORBA/AnySeqHelper.java new file mode 100644 index 0000000..512e7dc --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/AnySeqHelper.java @@ -0,0 +1,64 @@ +// +// AnySeqHelper.java (helper) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +abstract public class AnySeqHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, org.omg.CORBA.Any[] value) { + any.insert_Streamable(new AnySeqHolder(value)); + }; + + public static org.omg.CORBA.Any[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof AnySeqHolder){ + return ((AnySeqHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = _orb().create_sequence_tc(0 , org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_any)); + _type = _orb().create_alias_tc(id(), "AnySeq", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CORBA/AnySeq:1.0"; + }; + + public static org.omg.CORBA.Any[] read(org.omg.CORBA.portable.InputStream is) { + org.omg.CORBA.Any[] result; + int length0 = is.read_ulong(); + result = new org.omg.CORBA.Any[length0]; + for (int i0=0; i0org.omg.CORBA.ORBClass + */ + private final static String orb_key = "org.omg.CORBA.ORBClass"; + /** + * ORB Singleton Class name property name: org.omg.CORBA.ORBSingletonClass + */ + private final static String singleton_key = + "org.omg.CORBA.ORBSingletonClass"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.TIDORB + */ + private final static String TIDorb_class_name = "es.tid.TIDorbj.core.TIDORB"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.SingletonORB + */ + private final static String TIDorb_singleton_class_name = + "es.tid.TIDorbj.core.SingletonORB"; + + private static ORB singleton_orb = null; + + private static ORB create_orb(String class_name) + { + try { + return (ORB) Class.forName(class_name).newInstance(); + + } catch (Exception e) { + throw new INITIALIZE("Cannot create a " + class_name + " instance"); + } + } + + + public static ORB init() + { + if (singleton_orb == null) { + String class_name = null; + + try { + class_name = SystemProperties.findProperty(singleton_key); + } catch (SecurityException ex) { + //Applet Security violation + } + + if(class_name != null) + singleton_orb = create_orb(class_name); + else + singleton_orb = create_orb(TIDorb_singleton_class_name); + } + + return singleton_orb; + + } + + public static ORB init(String[] args, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(args != null) { + int size = args.length - 1; + for(int i = 0; i < size; i++) { + if (args[i].equals(orb_key)) { + str_class = args[i+1]; + break; + } + } + } + if (str_class == null) { + if(props != null) + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + str_class = SystemProperties.findProperty(orb_key); + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(args, props); + + return new_orb; + } + + public static ORB init(java.applet.Applet app, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(app != null) + str_class = app.getParameter(orb_key); + + if ((str_class == null) && (props != null)) { + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + try { + str_class = SystemProperties.findProperty(orb_key); + } catch (SecurityException se) {} + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(app, props); + + return new_orb; + } + + abstract protected void set_parameters(String[] args, + java.util.Properties props); + + abstract protected void set_parameters(java.applet.Applet app, + java.util.Properties props); + + public void connect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void disconnect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public String[] list_initial_services(); + + abstract public + org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName; + + abstract public String object_to_string(org.omg.CORBA.Object obj); + + abstract public org.omg.CORBA.Object string_to_object(String str); + + abstract public NVList create_list(int count); + + public NVList create_operation_list(org.omg.CORBA.Object oper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public NamedValue create_named_value(String s, Any any, int flags); + + abstract public ExceptionList create_exception_list(); + + abstract public ContextList create_context_list(); + + abstract public Context get_default_context(); + + abstract public Environment create_environment(); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + + abstract public void send_multiple_requests_oneway(Request[] req); + + abstract public void send_multiple_requests_deferred(Request[] req); + + abstract public boolean poll_next_response(); + + abstract public Request get_next_response() throws WrongTransaction; + + abstract public TypeCode get_primitive_tc(TCKind tcKind); + + abstract public TypeCode create_struct_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_union_tc(String id, String name, + TypeCode discriminator_type, + UnionMember[] members); + + abstract public TypeCode create_enum_tc(String id, String name, + String[] members); + + abstract public TypeCode create_alias_tc(String id, String name, + TypeCode original_type); + + abstract public TypeCode create_exception_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_interface_tc(String id, String name); + + abstract public TypeCode create_string_tc(int bound); + + abstract public TypeCode create_wstring_tc(int bound); + + abstract public TypeCode create_sequence_tc(int bound, + TypeCode element_type); + + abstract public TypeCode create_recursive_sequence_tc(int bound, int offset); + + abstract public TypeCode create_array_tc(int length, TypeCode element_type); + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_abstract_interface_tc( + String id, + String name) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_value_tc(String id, + String name, + short type_modifier, + TypeCode concrete_base, + ValueMember[] members) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_value_box_tc(String id, + String name, + TypeCode boxed_type) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public Any create_any(); + + public org.omg.CORBA.Current get_current() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void run() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void shutdown(boolean wait_for_completion) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void destroy() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean work_pending() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void perform_work() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean get_service_information(short service_type, + ServiceInformationHolder service_info) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/.java/org/omg/CORBA/ORBPackage/InvalidName.java b/idl/orb/.java/org/omg/CORBA/ORBPackage/InvalidName.java new file mode 100644 index 0000000..a3563bb --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/ORBPackage/InvalidName.java @@ -0,0 +1,15 @@ +package org.omg.CORBA.ORBPackage; + +final public class InvalidName + extends org.omg.CORBA.UserException { + + public InvalidName() { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0"); + } + + public InvalidName(String reason) { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/.java/org/omg/CORBA/Object.java b/idl/orb/.java/org/omg/CORBA/Object.java new file mode 100644 index 0000000..f32d0a6 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/Object.java @@ -0,0 +1,52 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface Object { + + boolean _is_a(String repositoryIdentifier); + + boolean _is_equivalent(org.omg.CORBA.Object other); + + boolean _non_existent(); + + int _hash(int maximum); + + org.omg.CORBA.Object _duplicate(); + + void _release(); + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + org.omg.CORBA.InterfaceDef _get_interface(); + + org.omg.CORBA.Object _get_interface_def(); + + Request _request(String operation); + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result); + + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result, + ExceptionList exclist, + ContextList ctxlist); + + Policy _get_policy(int policy_type); + + DomainManager[] _get_domain_managers(); + + + org.omg.CORBA.Object _set_policy_override(Policy[] policies, + SetOverrideType set_add); + +} diff --git a/idl/orb/.java/org/omg/CORBA/ObjectHolder.java b/idl/orb/.java/org/omg/CORBA/ObjectHolder.java new file mode 100644 index 0000000..72f12cb --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/ObjectHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ObjectHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Object value; + + public ObjectHolder() { + } + + public ObjectHolder(org.omg.CORBA.Object initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_Object(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_Object(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_objref); + } + +} diff --git a/idl/orb/.java/org/omg/CORBA/OctetSeqHelper.java b/idl/orb/.java/org/omg/CORBA/OctetSeqHelper.java new file mode 100644 index 0000000..7bdf920 --- /dev/null +++ b/idl/orb/.java/org/omg/CORBA/OctetSeqHelper.java @@ -0,0 +1,64 @@ +// +// OctetSeqHelper.java (helper) +// +// File generated: Thu May 19 07:31:32 CEST 2011 +// by TIDorb idl2java 1.3.12 +// + +package org.omg.CORBA; + +abstract public class OctetSeqHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, byte[] value) { + any.insert_Streamable(new OctetSeqHolder(value)); + }; + + public static byte[] extract(org.omg.CORBA.Any any) { + if(any instanceof es.tid.CORBA.Any) { + try { + org.omg.CORBA.portable.Streamable holder = + ((es.tid.CORBA.Any)any).extract_Streamable(); + if(holder instanceof OctetSeqHolder){ + return ((OctetSeqHolder) holder).value; + } + } catch (Exception e) {} + } + + return read(any.create_input_stream()); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + org.omg.CORBA.TypeCode original_type = _orb().create_sequence_tc(0 , org.omg.CORBA.ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.tk_octet)); + _type = _orb().create_alias_tc(id(), "OctetSeq", original_type); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CORBA/OctetSeq:1.0"; + }; + + public static byte[] read(org.omg.CORBA.portable.InputStream is) { + byte[] result; + int length0 = is.read_ulong(); + result = new byte[length0]; + for (int i0=0; i0 InterfaceDefSeq; + interface ValueDef; + typedef sequence ValueDefSeq; + interface ValueBoxDef; + typedef sequence ContainedSeq; + + typedef sequence AnySeq; + typedef sequence BooleanSeq; + typedef sequence CharSeq; + typedef sequence WCharSeq; + typedef sequence OctetSeq; + typedef sequence ShortSeq; + typedef sequence UShortSeq; + typedef sequence LongSeq; + typedef sequence ULongSeq; + typedef sequence LongLongSeq; + typedef sequence ULongLongSeq; + typedef sequence FloatSeq; + typedef sequence DoubleSeq; + typedef sequence StringSeq; + typedef sequence WStringSeq; + + + + typedef string RepositoryId; + typedef string ScopedName; + typedef string Identifier; + + + const unsigned long OMGVMCID = 1330446336; + + enum SetOverrideType {SET_OVERRIDE, ADD_OVERRIDE}; + + native AbstractBase; + native ValueFactory; + + + local interface ORB { // PIDL + typedef string ObjectId; + typedef sequence ObjectIdList; + exception InvalidName {}; + }; + + + + ////////////////////// + // Java Mapping // + ////////////////////// + + typedef unsigned long Flags; + + const Flags ARG_IN = 1; + const Flags ARG_OUT = 2; + const Flags ARG_INOUT = 3; + + const Flags CTX_RESTRICT_SCOPE = 15; + + + //////////////////////// + // ServiceInformation // + //////////////////////// + + typedef unsigned short ServiceType; + typedef unsigned long ServiceOption; + typedef unsigned long ServiceDetailType; + + const ServiceType Security = 1; + + struct ServiceDetail { + ServiceDetailType service_detail_type; + sequence service_detail; + }; + + + struct ServiceInformation { + sequence service_options; + sequence service_details; + }; + + ///////////////////////////////// + // Policy Basic IDL definition // + ///////////////////////////////// + + typedef unsigned long PolicyType; + + interface Policy { + readonly attribute PolicyType policy_type; + Policy copy(); + void destroy(); + }; + + typedef sequence PolicyList; + typedef sequence PolicyTypeSeq; + + exception InvalidPolicies { sequence indices; }; + + typedef short PolicyErrorCode; + + const PolicyErrorCode BAD_POLICY = 0; + const PolicyErrorCode UNSUPPORTED_POLICY = 1; + const PolicyErrorCode BAD_POLICY_TYPE = 2; + const PolicyErrorCode BAD_POLICY_VALUE = 3; + const PolicyErrorCode UNSUPPORTED_POLICY_VALUE = 4; + + exception PolicyError {PolicyErrorCode reason;}; + + + //////////////////////// + // DomainManager // + //////////////////////// + + + interface DomainManager { + Policy get_domain_policy (in PolicyType policy_type); + }; + + const PolicyType SecConstruction = 11; + + interface ConstructionPolicy: Policy{ + void make_domain_manager(in InterfaceDef object_type, + in boolean constr_policy); + + }; + + + typedef sequence DomainManagerList; + + + ///////////// + // Current // + ///////////// + + interface Current { + }; + + + valuetype StringValue string; + valuetype WStringValue wstring; + + + + /////////////////////////// + // Interface Repository // + /////////////////////////// + + enum DefinitionKind { + dk_none, dk_all, dk_Attribute, dk_Constant, dk_Exception, dk_Interface, + dk_Module, dk_Operation, dk_Typedef, dk_Alias, dk_Struct, dk_Union, dk_Enum, + dk_Primitive, dk_String, dk_Sequence, dk_Array, dk_Repository, dk_Wstring, + dk_Fixed, dk_Value, dk_ValueBox, dk_ValueMember, dk_Native + }; + + interface IRObject { + // read interface + readonly attribute DefinitionKind def_kind; + // write interface + void destroy (); + }; + + typedef string VersionSpec; + + interface Contained : IRObject { + // read/write interface + attribute RepositoryId id; + attribute Identifier name; + attribute VersionSpec version; + + // read interface + readonly attribute Container defined_in; + readonly attribute ScopedName absolute_name; + readonly attribute Repository containing_repository; + + struct Description { + DefinitionKind kind; + any value; + }; + + Description describe (); + + // write interface + void move ( + in Container new_container, + in Identifier new_name, + in VersionSpec new_version + ); + }; + + + struct StructMember { + Identifier name; + TypeCode type; + IDLType type_def; + }; + + typedef sequence StructMemberSeq; + + struct Initializer { + StructMemberSeq members; + Identifier name; + }; + + typedef sequence InitializerSeq; + + struct UnionMember { + Identifier name; + any label; + TypeCode type; + IDLType type_def; + }; + + typedef sequence UnionMemberSeq; + typedef sequence EnumMemberSeq; + + interface Container : IRObject { + // read interface + Contained lookup (in ScopedName search_name); + + ContainedSeq contents ( + in DefinitionKind limit_type, + in boolean exclude_inherited + ); + + ContainedSeq lookup_name ( + in Identifier search_name, + in long levels_to_search, + in DefinitionKind limit_type, + in boolean exclude_inherited + ); + + struct Description { + Contained contained_object; + DefinitionKind kind; + any value; + }; + + typedef sequence DescriptionSeq; + + DescriptionSeq describe_contents ( + in DefinitionKind limit_type, + in boolean exclude_inherited, + in long max_returned_objs + ); + + // write interface + ModuleDef create_module ( + in RepositoryId id, + in Identifier name, + in VersionSpec version + ); + + ConstantDef create_constant ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in any value + ); + + StructDef create_struct ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in StructMemberSeq members + ); + + UnionDef create_union ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType discriminator_type, + in UnionMemberSeq members + ); + + EnumDef create_enum ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in EnumMemberSeq members + ); + + AliasDef create_alias ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType original_type + ); + + InterfaceDef create_interface ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in InterfaceDefSeq base_interfaces, + in boolean is_abstract + ); + + ValueDef create_value( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in boolean is_custom, + in boolean is_abstract, + in ValueDef base_value, + in boolean is_truncatable, + in ValueDefSeq abstract_base_values, + in InterfaceDefSeq supported_interfaces, + in InitializerSeq initializers + ); + + ValueBoxDef create_value_box( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType original_type_def + ); + + ExceptionDef create_exception( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in StructMemberSeq members + ); + + NativeDef create_native( + in RepositoryId id, + in Identifier name, + in VersionSpec version + ); + }; + + interface IDLType : IRObject { + readonly attribute TypeCode type; + }; + + interface PrimitiveDef; + interface StringDef; + interface SequenceDef; + interface ArrayDef; + interface WstringDef; + interface FixedDef; + + enum PrimitiveKind { + pk_null, pk_void, pk_short, pk_long, pk_ushort, pk_ulong, + pk_float, pk_double, pk_boolean, pk_char, pk_octet, + pk_any, pk_TypeCode, pk_Principal, pk_string, pk_objref, + pk_longlong, pk_ulonglong, pk_longdouble, + pk_wchar, pk_wstring, pk_value_base + }; + + interface Repository : Container { + // read interface + Contained lookup_id (in RepositoryId search_id); + + TypeCode get_canonical_typecode(in TypeCode tc); + + PrimitiveDef get_primitive (in PrimitiveKind kind); + + // write interface + StringDef create_string (in unsigned long bound); + + WstringDef create_wstring (in unsigned long bound); + + SequenceDef create_sequence ( + in unsigned long bound, + in IDLType element_type + ); + + ArrayDef create_array ( + in unsigned long length, + in IDLType element_type + ); + + FixedDef create_fixed ( + in unsigned short digits, + in short scale + ); + }; + + interface ModuleDef : Container, Contained { + }; + + struct ModuleDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + }; + + interface ConstantDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute any value; + }; + + struct ConstantDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + any value; + }; + + interface TypedefDef : Contained, IDLType { + }; + + struct TypeDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + }; + + interface StructDef : TypedefDef, Container { + attribute StructMemberSeq members; + }; + + interface UnionDef : TypedefDef, Container { + readonly attribute TypeCode discriminator_type; + attribute IDLType discriminator_type_def; + attribute UnionMemberSeq members; + }; + + interface EnumDef : TypedefDef { + attribute EnumMemberSeq members; + }; + + interface AliasDef : TypedefDef { + attribute IDLType original_type_def; + }; + + interface NativeDef : TypedefDef { + }; + + interface PrimitiveDef: IDLType { + readonly attribute PrimitiveKind kind; + }; + + interface StringDef : IDLType { + attribute unsigned long bound; + }; + + interface WstringDef : IDLType { + attribute unsigned long bound; + }; + + interface FixedDef : IDLType { + attribute unsigned short digits; + attribute short scale; + }; + + interface SequenceDef : IDLType { + attribute unsigned long bound; + readonly attribute TypeCode element_type; + attribute IDLType element_type_def; + }; + + interface ArrayDef : IDLType { + attribute unsigned long length; + readonly attribute TypeCode element_type; + attribute IDLType element_type_def; + }; + + interface ExceptionDef : Contained, Container { + readonly attribute TypeCode type; + attribute StructMemberSeq members; + }; + + struct ExceptionDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + }; + + enum AttributeMode {ATTR_NORMAL, ATTR_READONLY}; + + interface AttributeDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute AttributeMode mode; + }; + + struct AttributeDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + AttributeMode mode; + }; + + enum OperationMode {OP_NORMAL, OP_ONEWAY}; + + enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT}; + + struct ParameterDescription { + Identifier name; + TypeCode type; + IDLType type_def; + ParameterMode mode; + }; + + typedef sequence ParDescriptionSeq; + typedef Identifier ContextIdentifier; + typedef sequence ContextIdSeq; + typedef sequence ExceptionDefSeq; + typedef sequence ExcDescriptionSeq; + + interface OperationDef : Contained { + readonly attribute TypeCode result; + attribute IDLType result_def; + attribute ParDescriptionSeq params; + attribute OperationMode mode; + attribute ContextIdSeq contexts; + attribute ExceptionDefSeq exceptions; + }; + + struct OperationDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode result; + OperationMode mode; + ContextIdSeq contexts; + ParDescriptionSeq parameters; + ExcDescriptionSeq exceptions; + }; + + typedef sequence RepositoryIdSeq; + typedef sequence OpDescriptionSeq; + typedef sequence AttrDescriptionSeq; + + interface InterfaceDef : Container, Contained, IDLType { + // read/write interface + attribute InterfaceDefSeq base_interfaces; + attribute boolean is_abstract; + + // read interface + boolean is_a (in RepositoryId interface_id); + + struct FullInterfaceDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + OpDescriptionSeq operations; + AttrDescriptionSeq attributes; + RepositoryIdSeq base_interfaces; + TypeCode type; + boolean is_abstract; + }; + + FullInterfaceDescription describe_interface(); + + // write interface + AttributeDef create_attribute ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in AttributeMode mode + ); + + OperationDef create_operation ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType result, + in OperationMode mode, + in ParDescriptionSeq params, + in ExceptionDefSeq exceptions, + in ContextIdSeq contexts + ); + }; + + struct InterfaceDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + RepositoryIdSeq base_interfaces; + boolean is_abstract; + }; + + typedef short Visibility; + + const Visibility PRIVATE_MEMBER = 0; + const Visibility PUBLIC_MEMBER = 1; + + struct ValueMember { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + IDLType type_def; + Visibility access; + }; + + typedef sequence ValueMemberSeq; + + interface ValueMemberDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute Visibility access; + }; + + interface ValueDef : Container, Contained, IDLType { + // read/write interface + attribute InterfaceDefSeq supported_interfaces; + attribute InitializerSeq initializers; + attribute ValueDef base_value; + attribute ValueDefSeq abstract_base_values; + attribute boolean is_abstract; + attribute boolean is_custom; + attribute boolean is_truncatable; + + // read interface + boolean is_a(in RepositoryId id); + + struct FullValueDescription { + Identifier name; + RepositoryId id; + boolean is_abstract; + boolean is_custom; + RepositoryId defined_in; + VersionSpec version; + OpDescriptionSeq operations; + AttrDescriptionSeq attributes; + ValueMemberSeq members; + InitializerSeq initializers; + RepositoryIdSeq supported_interfaces; + RepositoryIdSeq abstract_base_values; + boolean is_truncatable; + RepositoryId base_value; + TypeCode type; + }; + + FullValueDescription describe_value(); + + ValueMemberDef create_value_member( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in Visibility access + ); + + AttributeDef create_attribute( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in AttributeMode mode + ); + + OperationDef create_operation ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType result, + in OperationMode mode, + in ParDescriptionSeq params, + in ExceptionDefSeq exceptions, + in ContextIdSeq contexts + ); + }; + + struct ValueDescription { + Identifier name; + RepositoryId id; + boolean is_abstract; + boolean is_custom; + RepositoryId defined_in; + VersionSpec version; + RepositoryIdSeq supported_interfaces; + RepositoryIdSeq abstract_base_values; + boolean is_truncatable; + RepositoryId base_value; + }; + + interface ValueBoxDef : TypedefDef { + attribute IDLType original_type_def; + }; + + enum TCKind { //JAVA MAPPING PIDL + tk_null, tk_void, + tk_short, tk_long, tk_ushort, tk_ulong, + tk_float, tk_double, tk_boolean, tk_char, + tk_octet, tk_any, tk_TypeCode, tk_Principal, tk_objref, + tk_struct, tk_union, tk_enum, tk_string, + tk_sequence, tk_array, tk_alias, tk_except, + tk_longlong, tk_ulonglong, tk_longdouble, + tk_wchar, tk_wstring, tk_fixed, + tk_value, tk_value_box, + tk_native, + tk_abstract_interface, + tk_local_interface + }; + + + typedef short ValueModifier; // JAVA MAPPING PIDL + + const ValueModifier VM_NONE = 0; + const ValueModifier VM_CUSTOM = 1; + const ValueModifier VM_ABSTRACT = 2; + const ValueModifier VM_TRUNCATABLE = 3; + + local interface TypeCode { // JAVA MAPPING PIDL + exception Bounds {}; + exception BadKind {}; + + // for all TypeCode kinds + boolean equal (in TypeCode tc); + boolean equivalent(in TypeCode tc); + TypeCode get_compact_typecode(); + TCKind kind (); + + // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, + // tk_value, tk_value_box, tk_native, tk_abstract_interface + // and tk_except + RepositoryId id () raises (BadKind); + + // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, + // tk_value, tk_value_box, tk_native, tk_abstract_interface + // and tk_except + Identifier name () raises (BadKind); + + // for tk_struct, tk_union, tk_enum, tk_value, + // and tk_except + unsigned long member_count () raises (BadKind); + Identifier member_name (in unsigned long index) + raises (BadKind, Bounds); + + // for tk_struct, tk_union, tk_value, and tk_except + TypeCode member_type (in unsigned long index) + raises (BadKind, Bounds); + + // for tk_union + any member_label (in unsigned long index) + raises (BadKind, Bounds); + TypeCode discriminator_type () raises (BadKind); + long default_index () raises (BadKind); + + // for tk_string, tk_sequence, and tk_array + unsigned long length () raises (BadKind); + + // for tk_sequence, tk_array, tk_value_box, and tk_alias + TypeCode content_type () raises (BadKind); + + // for tk_fixed + unsigned short fixed_digits() raises (BadKind); + short fixed_scale() raises (BadKind); + + // for tk_value + Visibility member_visibility(in unsigned long index) + raises(BadKind, Bounds); + ValueModifier type_modifier() raises(BadKind); + TypeCode concrete_base_type() raises(BadKind); + }; + + exception BadFixedValue { + unsigned long offset; + }; + + abstract valuetype DataOutputStream { + void write_any(in any value); + void write_boolean(in boolean value); + void write_char(in char value); + void write_wchar(in wchar value); + void write_octet(in octet value); + void write_short(in short value); + void write_ushort(in unsigned short value); + void write_long(in long value); + void write_ulong(in unsigned long value); + void write_longlong(in long long value); + void write_ulonglong(in unsigned long long value); + void write_float(in float value); + void write_double(in double value); +// void write_longdouble(in long double value); + void write_string(in string value); + void write_wstring(in wstring value); + void write_Object(in Object value); + void write_Abstract(in AbstractBase value); + void write_Value(in ValueBase value); + void write_TypeCode(in TypeCode value); + void write_any_array(in AnySeq seq, in unsigned long offset, in unsigned long length); + void write_boolean_array( in BooleanSeq seq, in unsigned long offset, in unsigned long length); + void write_char_array(in CharSeq seq, in unsigned long offset, in unsigned long length); + void write_wchar_array(in WCharSeq seq, in unsigned long offset, in unsigned long length); + void write_octet_array( in OctetSeq seq, in unsigned long offset, in unsigned long length); + void write_short_array( in ShortSeq seq, in unsigned long offset, in unsigned long length); + void write_ushort_array( in UShortSeq seq, in unsigned long offset, in unsigned long length); + void write_long_array(in LongSeq seq, in unsigned long offset, in unsigned long length); + void write_ulong_array(in ULongSeq seq, in unsigned long offset,in unsigned long length); + void write_ulonglong_array(in ULongLongSeq seq,in unsigned long offset,in unsigned long length); + void write_longlong_array(in LongLongSeq seq,in unsigned long offset, in unsigned long length); + void write_float_array(in FloatSeq seq, in unsigned long offset, in unsigned long length); + void write_double_array(in DoubleSeq seq,in unsigned long offset,in unsigned long length); + // void write_long_double_array(in LongDoubleSeq seq, in unsigned long offset, in unsigned long length); + void write_fixed(in any fixed_value) raises (BadFixedValue); + void write_fixed_array(in AnySeq seq,in unsigned long offset,in unsigned long length) raises (BadFixedValue); + }; + + abstract valuetype DataInputStream { + any read_any(); + boolean read_boolean(); + char read_char(); + wchar read_wchar(); + octet read_octet(); + short read_short(); + unsigned short read_ushort(); + long read_long(); + unsigned long read_ulong(); + long long read_longlong(); + unsigned long long read_ulonglong(); + float read_float(); + double read_double(); + // long double read_longdouble(); + string read_string(); + wstring read_wstring(); + Object read_Object(); + AbstractBase read_Abstract(); + ValueBase read_Value(); + TypeCode read_TypeCode(); + void read_any_array(inout AnySeq seq, in unsigned long offset, in unsigned long length); + void read_boolean_array(inout BooleanSeq seq, in unsigned long offset, in unsigned long length); + void read_char_array(inout CharSeq seq, in unsigned long offset, in unsigned long length); + void read_wchar_array(inout WCharSeq seq, in unsigned long offset, in unsigned long length); + void read_octet_array( inout OctetSeq seq, in unsigned long offset, in unsigned long length); + void read_short_array( inout ShortSeq seq, in unsigned long offset, in unsigned long length); + void read_ushort_array(inout UShortSeq seq, in unsigned long offset, in unsigned long length); + void read_long_array(inout LongSeq seq, in unsigned long offset, in unsigned long length); + void read_ulong_array( inout ULongSeq seq, in unsigned long offset, in unsigned long length); + void read_ulonglong_array(inout ULongLongSeq seq, in unsigned long offset, in unsigned long length); + void read_longlong_array( inout LongLongSeq seq, in unsigned long offset, in unsigned long length); + void read_float_array(inout FloatSeq seq, in unsigned long offset, in unsigned long length); + void read_double_array( inout DoubleSeq seq, in unsigned long offset,in unsigned long length); +// void read_long_double_array( inout LongDoubleSeq seq, in unsigned long offset, in unsigned long length); + any read_fixed( in unsigned short digits, in short scale) raises (BadFixedValue); + void read_fixed_array(inout AnySeq seq, in unsigned long offset,in unsigned long length, in unsigned short digits,in short scale) raises (BadFixedValue); + }; + + abstract valuetype CustomMarshal { + void marshal(in DataOutputStream os); + void unmarshal(in DataInputStream is); + }; + + /////////////////////////////// + // CORBA 2.6: PolicyManager // + /////////////////////////////// + + local interface PolicyManager { + PolicyList get_policy_overrides(in PolicyTypeSeq ts); + + void set_policy_overrides(in PolicyList policies, + in SetOverrideType set_add) + raises (InvalidPolicies); + }; + + local interface PolicyCurrent : PolicyManager, Current { + + }; + +}; + + +#pragma prefix "omg.org" + +module PortableServer { + + local interface POA; // forward declaration + + typedef sequence POAList; + + native Servant; + + typedef CORBA::OctetSeq ObjectId; + + exception ForwardRequest { + Object forward_reference; + }; + + // Policy interfaces + + const CORBA::PolicyType THREAD_POLICY_ID = 16; + const CORBA::PolicyType LIFESPAN_POLICY_ID = 17; + const CORBA::PolicyType ID_UNIQUENESS_POLICY_ID = 18; + const CORBA::PolicyType ID_ASSIGNMENT_POLICY_ID = 19; + const CORBA::PolicyType IMPLICIT_ACTIVATION_POLICY_ID = 20; + const CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21; + const CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22; + + enum ThreadPolicyValue {ORB_CTRL_MODEL,SINGLE_THREAD_MODEL, MAIN_THREAD_MODEL}; + + + local interface ThreadPolicy : CORBA::Policy { + readonly attribute ThreadPolicyValue value; + }; + + enum LifespanPolicyValue {TRANSIENT,PERSISTENT}; + + local interface LifespanPolicy : CORBA::Policy { + readonly attribute LifespanPolicyValue value; + }; + + enum IdUniquenessPolicyValue {UNIQUE_ID,MULTIPLE_ID}; + + local interface IdUniquenessPolicy : CORBA::Policy { + readonly attribute IdUniquenessPolicyValue value; + }; + + enum IdAssignmentPolicyValue {USER_ID,SYSTEM_ID}; + + local interface IdAssignmentPolicy : CORBA::Policy { + readonly attribute IdAssignmentPolicyValue value; + }; + + enum ImplicitActivationPolicyValue {IMPLICIT_ACTIVATION,NO_IMPLICIT_ACTIVATION}; + + local interface ImplicitActivationPolicy : CORBA::Policy { + readonly attribute ImplicitActivationPolicyValue value; + }; + + enum ServantRetentionPolicyValue {RETAIN,NON_RETAIN}; + + local interface ServantRetentionPolicy : CORBA::Policy { + readonly attribute ServantRetentionPolicyValue value; + }; + + enum RequestProcessingPolicyValue { + USE_ACTIVE_OBJECT_MAP_ONLY, + USE_DEFAULT_SERVANT, + USE_SERVANT_MANAGER + }; + + local interface RequestProcessingPolicy : CORBA::Policy { + readonly attribute RequestProcessingPolicyValue value; + }; + + + // POAManager interface + + local interface POAManager { + + exception AdapterInactive{}; + + enum State {HOLDING, ACTIVE, DISCARDING, INACTIVE}; + + void activate() raises(AdapterInactive); + + void hold_requests(in boolean wait_for_completion) raises(AdapterInactive); + + void discard_requests(in boolean wait_for_completion) raises(AdapterInactive); + + void deactivate(in boolean etherealize_objects, in boolean wait_for_completion) + raises(AdapterInactive); + + State get_state(); + }; + + + // AdapterActivator interface + + local interface AdapterActivator { + + boolean unknown_adapter(in POA parent, in string name); + + }; + + // ServantManager interface + + local interface ServantManager{ }; + + local interface ServantActivator : ServantManager { + + Servant incarnate (in ObjectId oid,in POA adapter) raises (ForwardRequest); + + void etherealize (in ObjectId oid,in POA adapter, + in Servant serv, in boolean cleanup_in_progress, + in boolean remaining_activations); + }; + + local interface ServantLocator : ServantManager { + + native Cookie; + + Servant preinvoke(in ObjectId oid,in POA adapter, + in CORBA::Identifier operation, out Cookie the_cookie) + raises (ForwardRequest); + + void postinvoke(in ObjectId oid,in POA adapter, in CORBA::Identifier operation, + in Cookie the_cookie, in Servant the_servant); + }; + + // POA interface + + local interface POA { + + exception AdapterAlreadyExists {}; + exception AdapterNonExistent {}; + exception InvalidPolicy {unsigned short index;}; + exception NoServant {}; + exception ObjectAlreadyActive {}; + exception ObjectNotActive {}; + exception ServantAlreadyActive {}; + exception ServantNotActive {}; + exception WrongAdapter {}; + exception WrongPolicy {}; + + // POA creation and destruction + + POA create_POA(in string adapter_name, in POAManager a_POAManager, + in CORBA::PolicyList policies) + raises (AdapterAlreadyExists, InvalidPolicy); + + POA find_POA(in string adapter_name, in boolean activate_it) raises (AdapterNonExistent); + + void destroy(in boolean etherealize_objects,in boolean wait_for_completion); + + // Factories for Policy objects + + ThreadPolicy create_thread_policy(in ThreadPolicyValue value); + + LifespanPolicy create_lifespan_policy(in LifespanPolicyValue value); + + IdUniquenessPolicy create_id_uniqueness_policy(in IdUniquenessPolicyValue value); + + IdAssignmentPolicy create_id_assignment_policy(in IdAssignmentPolicyValue value); + + ImplicitActivationPolicy create_implicit_activation_policy(in ImplicitActivationPolicyValue value); + + ServantRetentionPolicy create_servant_retention_policy(in ServantRetentionPolicyValue value); + + RequestProcessingPolicy create_request_processing_policy(in RequestProcessingPolicyValue value); + + // POA attributes + + readonly attribute string the_name; + readonly attribute POA the_parent; + readonly attribute POAList the_children; + readonly attribute POAManager the_POAManager; + attribute AdapterActivator the_activator; + + // Servant Manager registration: + ServantManager get_servant_manager() raises (WrongPolicy); + + void set_servant_manager(in ServantManager imgr) raises (WrongPolicy); + + // operations for the USE_DEFAULT_SERVANT policy + Servant get_servant() raises (NoServant, WrongPolicy); + + void set_servant(in Servant p_servant) raises (WrongPolicy); + + // object activation and deactivation + ObjectId activate_object(in Servant p_servant) + raises (ServantAlreadyActive, WrongPolicy); + + void activate_object_with_id(in ObjectId id, in Servant p_servant) + raises (ServantAlreadyActive, ObjectAlreadyActive, WrongPolicy); + + void deactivate_object(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + // reference creation operations + Object create_reference (in CORBA::RepositoryId intf) raises (WrongPolicy); + + Object create_reference_with_id (in ObjectId oid, + in CORBA::RepositoryId intf); + + // Identity mapping operations: + + ObjectId servant_to_id(in Servant p_servant) raises (ServantNotActive, WrongPolicy); + + Object servant_to_reference(in Servant p_servant) raises (ServantNotActive, WrongPolicy); + + Servant reference_to_servant(in Object reference) raises(ObjectNotActive, WrongAdapter, WrongPolicy); + + ObjectId reference_to_id(in Object reference) raises (WrongAdapter, WrongPolicy); + + Servant id_to_servant(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + Object id_to_reference(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + readonly attribute CORBA::OctetSeq id; + }; + + // Current interface + + local interface Current : CORBA::Current { + + exception NoContext { }; + + POA get_POA() raises (NoContext); + + ObjectId get_object_id() raises (NoContext); + + Object get_reference() raises(NoContext); + + Servant get_servant() raises (NoContext); + + }; + +}; + diff --git a/idl/orb/.svn/text-base/build.xml.svn-base b/idl/orb/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..b4d73a0 --- /dev/null +++ b/idl/orb/.svn/text-base/build.xml.svn-base @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/orb/CORBA.idl b/idl/orb/CORBA.idl new file mode 100644 index 0000000..5a265fe --- /dev/null +++ b/idl/orb/CORBA.idl @@ -0,0 +1,1127 @@ +/* CORBA 2.6 MODULE */ + +#pragma prefix "omg.org" + +module CORBA { + + local interface TypeCode; + interface Contained; + interface Repository; + interface Container; + interface ModuleDef; + interface ConstantDef; + interface IDLType; + interface StructDef; + interface UnionDef; + interface EnumDef; + interface AliasDef; + interface InterfaceDef; + interface ExceptionDef; + interface NativeDef; + typedef sequence InterfaceDefSeq; + interface ValueDef; + typedef sequence ValueDefSeq; + interface ValueBoxDef; + typedef sequence ContainedSeq; + + typedef sequence AnySeq; + typedef sequence BooleanSeq; + typedef sequence CharSeq; + typedef sequence WCharSeq; + typedef sequence OctetSeq; + typedef sequence ShortSeq; + typedef sequence UShortSeq; + typedef sequence LongSeq; + typedef sequence ULongSeq; + typedef sequence LongLongSeq; + typedef sequence ULongLongSeq; + typedef sequence FloatSeq; + typedef sequence DoubleSeq; + typedef sequence StringSeq; + typedef sequence WStringSeq; + + + + typedef string RepositoryId; + typedef string ScopedName; + typedef string Identifier; + + + const unsigned long OMGVMCID = 1330446336; + + enum SetOverrideType {SET_OVERRIDE, ADD_OVERRIDE}; + + native AbstractBase; + native ValueFactory; + + + local interface ORB { // PIDL + typedef string ObjectId; + typedef sequence ObjectIdList; + exception InvalidName {}; + }; + + + + ////////////////////// + // Java Mapping // + ////////////////////// + + typedef unsigned long Flags; + + const Flags ARG_IN = 1; + const Flags ARG_OUT = 2; + const Flags ARG_INOUT = 3; + + const Flags CTX_RESTRICT_SCOPE = 15; + + + //////////////////////// + // ServiceInformation // + //////////////////////// + + typedef unsigned short ServiceType; + typedef unsigned long ServiceOption; + typedef unsigned long ServiceDetailType; + + const ServiceType Security = 1; + + struct ServiceDetail { + ServiceDetailType service_detail_type; + sequence service_detail; + }; + + + struct ServiceInformation { + sequence service_options; + sequence service_details; + }; + + ///////////////////////////////// + // Policy Basic IDL definition // + ///////////////////////////////// + + typedef unsigned long PolicyType; + + interface Policy { + readonly attribute PolicyType policy_type; + Policy copy(); + void destroy(); + }; + + typedef sequence PolicyList; + typedef sequence PolicyTypeSeq; + + exception InvalidPolicies { sequence indices; }; + + typedef short PolicyErrorCode; + + const PolicyErrorCode BAD_POLICY = 0; + const PolicyErrorCode UNSUPPORTED_POLICY = 1; + const PolicyErrorCode BAD_POLICY_TYPE = 2; + const PolicyErrorCode BAD_POLICY_VALUE = 3; + const PolicyErrorCode UNSUPPORTED_POLICY_VALUE = 4; + + exception PolicyError {PolicyErrorCode reason;}; + + + //////////////////////// + // DomainManager // + //////////////////////// + + + interface DomainManager { + Policy get_domain_policy (in PolicyType policy_type); + }; + + const PolicyType SecConstruction = 11; + + interface ConstructionPolicy: Policy{ + void make_domain_manager(in InterfaceDef object_type, + in boolean constr_policy); + + }; + + + typedef sequence DomainManagerList; + + + ///////////// + // Current // + ///////////// + + interface Current { + }; + + + valuetype StringValue string; + valuetype WStringValue wstring; + + + + /////////////////////////// + // Interface Repository // + /////////////////////////// + + enum DefinitionKind { + dk_none, dk_all, dk_Attribute, dk_Constant, dk_Exception, dk_Interface, + dk_Module, dk_Operation, dk_Typedef, dk_Alias, dk_Struct, dk_Union, dk_Enum, + dk_Primitive, dk_String, dk_Sequence, dk_Array, dk_Repository, dk_Wstring, + dk_Fixed, dk_Value, dk_ValueBox, dk_ValueMember, dk_Native + }; + + interface IRObject { + // read interface + readonly attribute DefinitionKind def_kind; + // write interface + void destroy (); + }; + + typedef string VersionSpec; + + interface Contained : IRObject { + // read/write interface + attribute RepositoryId id; + attribute Identifier name; + attribute VersionSpec version; + + // read interface + readonly attribute Container defined_in; + readonly attribute ScopedName absolute_name; + readonly attribute Repository containing_repository; + + struct Description { + DefinitionKind kind; + any value; + }; + + Description describe (); + + // write interface + void move ( + in Container new_container, + in Identifier new_name, + in VersionSpec new_version + ); + }; + + + struct StructMember { + Identifier name; + TypeCode type; + IDLType type_def; + }; + + typedef sequence StructMemberSeq; + + struct Initializer { + StructMemberSeq members; + Identifier name; + }; + + typedef sequence InitializerSeq; + + struct UnionMember { + Identifier name; + any label; + TypeCode type; + IDLType type_def; + }; + + typedef sequence UnionMemberSeq; + typedef sequence EnumMemberSeq; + + interface Container : IRObject { + // read interface + Contained lookup (in ScopedName search_name); + + ContainedSeq contents ( + in DefinitionKind limit_type, + in boolean exclude_inherited + ); + + ContainedSeq lookup_name ( + in Identifier search_name, + in long levels_to_search, + in DefinitionKind limit_type, + in boolean exclude_inherited + ); + + struct Description { + Contained contained_object; + DefinitionKind kind; + any value; + }; + + typedef sequence DescriptionSeq; + + DescriptionSeq describe_contents ( + in DefinitionKind limit_type, + in boolean exclude_inherited, + in long max_returned_objs + ); + + // write interface + ModuleDef create_module ( + in RepositoryId id, + in Identifier name, + in VersionSpec version + ); + + ConstantDef create_constant ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in any value + ); + + StructDef create_struct ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in StructMemberSeq members + ); + + UnionDef create_union ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType discriminator_type, + in UnionMemberSeq members + ); + + EnumDef create_enum ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in EnumMemberSeq members + ); + + AliasDef create_alias ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType original_type + ); + + InterfaceDef create_interface ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in InterfaceDefSeq base_interfaces, + in boolean is_abstract + ); + + ValueDef create_value( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in boolean is_custom, + in boolean is_abstract, + in ValueDef base_value, + in boolean is_truncatable, + in ValueDefSeq abstract_base_values, + in InterfaceDefSeq supported_interfaces, + in InitializerSeq initializers + ); + + ValueBoxDef create_value_box( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType original_type_def + ); + + ExceptionDef create_exception( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in StructMemberSeq members + ); + + NativeDef create_native( + in RepositoryId id, + in Identifier name, + in VersionSpec version + ); + }; + + interface IDLType : IRObject { + readonly attribute TypeCode type; + }; + + interface PrimitiveDef; + interface StringDef; + interface SequenceDef; + interface ArrayDef; + interface WstringDef; + interface FixedDef; + + enum PrimitiveKind { + pk_null, pk_void, pk_short, pk_long, pk_ushort, pk_ulong, + pk_float, pk_double, pk_boolean, pk_char, pk_octet, + pk_any, pk_TypeCode, pk_Principal, pk_string, pk_objref, + pk_longlong, pk_ulonglong, pk_longdouble, + pk_wchar, pk_wstring, pk_value_base + }; + + interface Repository : Container { + // read interface + Contained lookup_id (in RepositoryId search_id); + + TypeCode get_canonical_typecode(in TypeCode tc); + + PrimitiveDef get_primitive (in PrimitiveKind kind); + + // write interface + StringDef create_string (in unsigned long bound); + + WstringDef create_wstring (in unsigned long bound); + + SequenceDef create_sequence ( + in unsigned long bound, + in IDLType element_type + ); + + ArrayDef create_array ( + in unsigned long length, + in IDLType element_type + ); + + FixedDef create_fixed ( + in unsigned short digits, + in short scale + ); + }; + + interface ModuleDef : Container, Contained { + }; + + struct ModuleDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + }; + + interface ConstantDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute any value; + }; + + struct ConstantDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + any value; + }; + + interface TypedefDef : Contained, IDLType { + }; + + struct TypeDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + }; + + interface StructDef : TypedefDef, Container { + attribute StructMemberSeq members; + }; + + interface UnionDef : TypedefDef, Container { + readonly attribute TypeCode discriminator_type; + attribute IDLType discriminator_type_def; + attribute UnionMemberSeq members; + }; + + interface EnumDef : TypedefDef { + attribute EnumMemberSeq members; + }; + + interface AliasDef : TypedefDef { + attribute IDLType original_type_def; + }; + + interface NativeDef : TypedefDef { + }; + + interface PrimitiveDef: IDLType { + readonly attribute PrimitiveKind kind; + }; + + interface StringDef : IDLType { + attribute unsigned long bound; + }; + + interface WstringDef : IDLType { + attribute unsigned long bound; + }; + + interface FixedDef : IDLType { + attribute unsigned short digits; + attribute short scale; + }; + + interface SequenceDef : IDLType { + attribute unsigned long bound; + readonly attribute TypeCode element_type; + attribute IDLType element_type_def; + }; + + interface ArrayDef : IDLType { + attribute unsigned long length; + readonly attribute TypeCode element_type; + attribute IDLType element_type_def; + }; + + interface ExceptionDef : Contained, Container { + readonly attribute TypeCode type; + attribute StructMemberSeq members; + }; + + struct ExceptionDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + }; + + enum AttributeMode {ATTR_NORMAL, ATTR_READONLY}; + + interface AttributeDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute AttributeMode mode; + }; + + struct AttributeDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + AttributeMode mode; + }; + + enum OperationMode {OP_NORMAL, OP_ONEWAY}; + + enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT}; + + struct ParameterDescription { + Identifier name; + TypeCode type; + IDLType type_def; + ParameterMode mode; + }; + + typedef sequence ParDescriptionSeq; + typedef Identifier ContextIdentifier; + typedef sequence ContextIdSeq; + typedef sequence ExceptionDefSeq; + typedef sequence ExcDescriptionSeq; + + interface OperationDef : Contained { + readonly attribute TypeCode result; + attribute IDLType result_def; + attribute ParDescriptionSeq params; + attribute OperationMode mode; + attribute ContextIdSeq contexts; + attribute ExceptionDefSeq exceptions; + }; + + struct OperationDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode result; + OperationMode mode; + ContextIdSeq contexts; + ParDescriptionSeq parameters; + ExcDescriptionSeq exceptions; + }; + + typedef sequence RepositoryIdSeq; + typedef sequence OpDescriptionSeq; + typedef sequence AttrDescriptionSeq; + + interface InterfaceDef : Container, Contained, IDLType { + // read/write interface + attribute InterfaceDefSeq base_interfaces; + attribute boolean is_abstract; + + // read interface + boolean is_a (in RepositoryId interface_id); + + struct FullInterfaceDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + OpDescriptionSeq operations; + AttrDescriptionSeq attributes; + RepositoryIdSeq base_interfaces; + TypeCode type; + boolean is_abstract; + }; + + FullInterfaceDescription describe_interface(); + + // write interface + AttributeDef create_attribute ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in AttributeMode mode + ); + + OperationDef create_operation ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType result, + in OperationMode mode, + in ParDescriptionSeq params, + in ExceptionDefSeq exceptions, + in ContextIdSeq contexts + ); + }; + + struct InterfaceDescription { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + RepositoryIdSeq base_interfaces; + boolean is_abstract; + }; + + typedef short Visibility; + + const Visibility PRIVATE_MEMBER = 0; + const Visibility PUBLIC_MEMBER = 1; + + struct ValueMember { + Identifier name; + RepositoryId id; + RepositoryId defined_in; + VersionSpec version; + TypeCode type; + IDLType type_def; + Visibility access; + }; + + typedef sequence ValueMemberSeq; + + interface ValueMemberDef : Contained { + readonly attribute TypeCode type; + attribute IDLType type_def; + attribute Visibility access; + }; + + interface ValueDef : Container, Contained, IDLType { + // read/write interface + attribute InterfaceDefSeq supported_interfaces; + attribute InitializerSeq initializers; + attribute ValueDef base_value; + attribute ValueDefSeq abstract_base_values; + attribute boolean is_abstract; + attribute boolean is_custom; + attribute boolean is_truncatable; + + // read interface + boolean is_a(in RepositoryId id); + + struct FullValueDescription { + Identifier name; + RepositoryId id; + boolean is_abstract; + boolean is_custom; + RepositoryId defined_in; + VersionSpec version; + OpDescriptionSeq operations; + AttrDescriptionSeq attributes; + ValueMemberSeq members; + InitializerSeq initializers; + RepositoryIdSeq supported_interfaces; + RepositoryIdSeq abstract_base_values; + boolean is_truncatable; + RepositoryId base_value; + TypeCode type; + }; + + FullValueDescription describe_value(); + + ValueMemberDef create_value_member( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in Visibility access + ); + + AttributeDef create_attribute( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType type, + in AttributeMode mode + ); + + OperationDef create_operation ( + in RepositoryId id, + in Identifier name, + in VersionSpec version, + in IDLType result, + in OperationMode mode, + in ParDescriptionSeq params, + in ExceptionDefSeq exceptions, + in ContextIdSeq contexts + ); + }; + + struct ValueDescription { + Identifier name; + RepositoryId id; + boolean is_abstract; + boolean is_custom; + RepositoryId defined_in; + VersionSpec version; + RepositoryIdSeq supported_interfaces; + RepositoryIdSeq abstract_base_values; + boolean is_truncatable; + RepositoryId base_value; + }; + + interface ValueBoxDef : TypedefDef { + attribute IDLType original_type_def; + }; + + enum TCKind { //JAVA MAPPING PIDL + tk_null, tk_void, + tk_short, tk_long, tk_ushort, tk_ulong, + tk_float, tk_double, tk_boolean, tk_char, + tk_octet, tk_any, tk_TypeCode, tk_Principal, tk_objref, + tk_struct, tk_union, tk_enum, tk_string, + tk_sequence, tk_array, tk_alias, tk_except, + tk_longlong, tk_ulonglong, tk_longdouble, + tk_wchar, tk_wstring, tk_fixed, + tk_value, tk_value_box, + tk_native, + tk_abstract_interface, + tk_local_interface + }; + + + typedef short ValueModifier; // JAVA MAPPING PIDL + + const ValueModifier VM_NONE = 0; + const ValueModifier VM_CUSTOM = 1; + const ValueModifier VM_ABSTRACT = 2; + const ValueModifier VM_TRUNCATABLE = 3; + + local interface TypeCode { // JAVA MAPPING PIDL + exception Bounds {}; + exception BadKind {}; + + // for all TypeCode kinds + boolean equal (in TypeCode tc); + boolean equivalent(in TypeCode tc); + TypeCode get_compact_typecode(); + TCKind kind (); + + // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, + // tk_value, tk_value_box, tk_native, tk_abstract_interface + // and tk_except + RepositoryId id () raises (BadKind); + + // for tk_objref, tk_struct, tk_union, tk_enum, tk_alias, + // tk_value, tk_value_box, tk_native, tk_abstract_interface + // and tk_except + Identifier name () raises (BadKind); + + // for tk_struct, tk_union, tk_enum, tk_value, + // and tk_except + unsigned long member_count () raises (BadKind); + Identifier member_name (in unsigned long index) + raises (BadKind, Bounds); + + // for tk_struct, tk_union, tk_value, and tk_except + TypeCode member_type (in unsigned long index) + raises (BadKind, Bounds); + + // for tk_union + any member_label (in unsigned long index) + raises (BadKind, Bounds); + TypeCode discriminator_type () raises (BadKind); + long default_index () raises (BadKind); + + // for tk_string, tk_sequence, and tk_array + unsigned long length () raises (BadKind); + + // for tk_sequence, tk_array, tk_value_box, and tk_alias + TypeCode content_type () raises (BadKind); + + // for tk_fixed + unsigned short fixed_digits() raises (BadKind); + short fixed_scale() raises (BadKind); + + // for tk_value + Visibility member_visibility(in unsigned long index) + raises(BadKind, Bounds); + ValueModifier type_modifier() raises(BadKind); + TypeCode concrete_base_type() raises(BadKind); + }; + + exception BadFixedValue { + unsigned long offset; + }; + + abstract valuetype DataOutputStream { + void write_any(in any value); + void write_boolean(in boolean value); + void write_char(in char value); + void write_wchar(in wchar value); + void write_octet(in octet value); + void write_short(in short value); + void write_ushort(in unsigned short value); + void write_long(in long value); + void write_ulong(in unsigned long value); + void write_longlong(in long long value); + void write_ulonglong(in unsigned long long value); + void write_float(in float value); + void write_double(in double value); +// void write_longdouble(in long double value); + void write_string(in string value); + void write_wstring(in wstring value); + void write_Object(in Object value); + void write_Abstract(in AbstractBase value); + void write_Value(in ValueBase value); + void write_TypeCode(in TypeCode value); + void write_any_array(in AnySeq seq, in unsigned long offset, in unsigned long length); + void write_boolean_array( in BooleanSeq seq, in unsigned long offset, in unsigned long length); + void write_char_array(in CharSeq seq, in unsigned long offset, in unsigned long length); + void write_wchar_array(in WCharSeq seq, in unsigned long offset, in unsigned long length); + void write_octet_array( in OctetSeq seq, in unsigned long offset, in unsigned long length); + void write_short_array( in ShortSeq seq, in unsigned long offset, in unsigned long length); + void write_ushort_array( in UShortSeq seq, in unsigned long offset, in unsigned long length); + void write_long_array(in LongSeq seq, in unsigned long offset, in unsigned long length); + void write_ulong_array(in ULongSeq seq, in unsigned long offset,in unsigned long length); + void write_ulonglong_array(in ULongLongSeq seq,in unsigned long offset,in unsigned long length); + void write_longlong_array(in LongLongSeq seq,in unsigned long offset, in unsigned long length); + void write_float_array(in FloatSeq seq, in unsigned long offset, in unsigned long length); + void write_double_array(in DoubleSeq seq,in unsigned long offset,in unsigned long length); + // void write_long_double_array(in LongDoubleSeq seq, in unsigned long offset, in unsigned long length); + void write_fixed(in any fixed_value) raises (BadFixedValue); + void write_fixed_array(in AnySeq seq,in unsigned long offset,in unsigned long length) raises (BadFixedValue); + }; + + abstract valuetype DataInputStream { + any read_any(); + boolean read_boolean(); + char read_char(); + wchar read_wchar(); + octet read_octet(); + short read_short(); + unsigned short read_ushort(); + long read_long(); + unsigned long read_ulong(); + long long read_longlong(); + unsigned long long read_ulonglong(); + float read_float(); + double read_double(); + // long double read_longdouble(); + string read_string(); + wstring read_wstring(); + Object read_Object(); + AbstractBase read_Abstract(); + ValueBase read_Value(); + TypeCode read_TypeCode(); + void read_any_array(inout AnySeq seq, in unsigned long offset, in unsigned long length); + void read_boolean_array(inout BooleanSeq seq, in unsigned long offset, in unsigned long length); + void read_char_array(inout CharSeq seq, in unsigned long offset, in unsigned long length); + void read_wchar_array(inout WCharSeq seq, in unsigned long offset, in unsigned long length); + void read_octet_array( inout OctetSeq seq, in unsigned long offset, in unsigned long length); + void read_short_array( inout ShortSeq seq, in unsigned long offset, in unsigned long length); + void read_ushort_array(inout UShortSeq seq, in unsigned long offset, in unsigned long length); + void read_long_array(inout LongSeq seq, in unsigned long offset, in unsigned long length); + void read_ulong_array( inout ULongSeq seq, in unsigned long offset, in unsigned long length); + void read_ulonglong_array(inout ULongLongSeq seq, in unsigned long offset, in unsigned long length); + void read_longlong_array( inout LongLongSeq seq, in unsigned long offset, in unsigned long length); + void read_float_array(inout FloatSeq seq, in unsigned long offset, in unsigned long length); + void read_double_array( inout DoubleSeq seq, in unsigned long offset,in unsigned long length); +// void read_long_double_array( inout LongDoubleSeq seq, in unsigned long offset, in unsigned long length); + any read_fixed( in unsigned short digits, in short scale) raises (BadFixedValue); + void read_fixed_array(inout AnySeq seq, in unsigned long offset,in unsigned long length, in unsigned short digits,in short scale) raises (BadFixedValue); + }; + + abstract valuetype CustomMarshal { + void marshal(in DataOutputStream os); + void unmarshal(in DataInputStream is); + }; + + /////////////////////////////// + // CORBA 2.6: PolicyManager // + /////////////////////////////// + + local interface PolicyManager { + PolicyList get_policy_overrides(in PolicyTypeSeq ts); + + void set_policy_overrides(in PolicyList policies, + in SetOverrideType set_add) + raises (InvalidPolicies); + }; + + local interface PolicyCurrent : PolicyManager, Current { + + }; + +}; + + +#pragma prefix "omg.org" + +module PortableServer { + + local interface POA; // forward declaration + + typedef sequence POAList; + + native Servant; + + typedef CORBA::OctetSeq ObjectId; + + exception ForwardRequest { + Object forward_reference; + }; + + // Policy interfaces + + const CORBA::PolicyType THREAD_POLICY_ID = 16; + const CORBA::PolicyType LIFESPAN_POLICY_ID = 17; + const CORBA::PolicyType ID_UNIQUENESS_POLICY_ID = 18; + const CORBA::PolicyType ID_ASSIGNMENT_POLICY_ID = 19; + const CORBA::PolicyType IMPLICIT_ACTIVATION_POLICY_ID = 20; + const CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21; + const CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22; + + enum ThreadPolicyValue {ORB_CTRL_MODEL,SINGLE_THREAD_MODEL, MAIN_THREAD_MODEL}; + + + local interface ThreadPolicy : CORBA::Policy { + readonly attribute ThreadPolicyValue value; + }; + + enum LifespanPolicyValue {TRANSIENT,PERSISTENT}; + + local interface LifespanPolicy : CORBA::Policy { + readonly attribute LifespanPolicyValue value; + }; + + enum IdUniquenessPolicyValue {UNIQUE_ID,MULTIPLE_ID}; + + local interface IdUniquenessPolicy : CORBA::Policy { + readonly attribute IdUniquenessPolicyValue value; + }; + + enum IdAssignmentPolicyValue {USER_ID,SYSTEM_ID}; + + local interface IdAssignmentPolicy : CORBA::Policy { + readonly attribute IdAssignmentPolicyValue value; + }; + + enum ImplicitActivationPolicyValue {IMPLICIT_ACTIVATION,NO_IMPLICIT_ACTIVATION}; + + local interface ImplicitActivationPolicy : CORBA::Policy { + readonly attribute ImplicitActivationPolicyValue value; + }; + + enum ServantRetentionPolicyValue {RETAIN,NON_RETAIN}; + + local interface ServantRetentionPolicy : CORBA::Policy { + readonly attribute ServantRetentionPolicyValue value; + }; + + enum RequestProcessingPolicyValue { + USE_ACTIVE_OBJECT_MAP_ONLY, + USE_DEFAULT_SERVANT, + USE_SERVANT_MANAGER + }; + + local interface RequestProcessingPolicy : CORBA::Policy { + readonly attribute RequestProcessingPolicyValue value; + }; + + + // POAManager interface + + local interface POAManager { + + exception AdapterInactive{}; + + enum State {HOLDING, ACTIVE, DISCARDING, INACTIVE}; + + void activate() raises(AdapterInactive); + + void hold_requests(in boolean wait_for_completion) raises(AdapterInactive); + + void discard_requests(in boolean wait_for_completion) raises(AdapterInactive); + + void deactivate(in boolean etherealize_objects, in boolean wait_for_completion) + raises(AdapterInactive); + + State get_state(); + }; + + + // AdapterActivator interface + + local interface AdapterActivator { + + boolean unknown_adapter(in POA parent, in string name); + + }; + + // ServantManager interface + + local interface ServantManager{ }; + + local interface ServantActivator : ServantManager { + + Servant incarnate (in ObjectId oid,in POA adapter) raises (ForwardRequest); + + void etherealize (in ObjectId oid,in POA adapter, + in Servant serv, in boolean cleanup_in_progress, + in boolean remaining_activations); + }; + + local interface ServantLocator : ServantManager { + + native Cookie; + + Servant preinvoke(in ObjectId oid,in POA adapter, + in CORBA::Identifier operation, out Cookie the_cookie) + raises (ForwardRequest); + + void postinvoke(in ObjectId oid,in POA adapter, in CORBA::Identifier operation, + in Cookie the_cookie, in Servant the_servant); + }; + + // POA interface + + local interface POA { + + exception AdapterAlreadyExists {}; + exception AdapterNonExistent {}; + exception InvalidPolicy {unsigned short index;}; + exception NoServant {}; + exception ObjectAlreadyActive {}; + exception ObjectNotActive {}; + exception ServantAlreadyActive {}; + exception ServantNotActive {}; + exception WrongAdapter {}; + exception WrongPolicy {}; + + // POA creation and destruction + + POA create_POA(in string adapter_name, in POAManager a_POAManager, + in CORBA::PolicyList policies) + raises (AdapterAlreadyExists, InvalidPolicy); + + POA find_POA(in string adapter_name, in boolean activate_it) raises (AdapterNonExistent); + + void destroy(in boolean etherealize_objects,in boolean wait_for_completion); + + // Factories for Policy objects + + ThreadPolicy create_thread_policy(in ThreadPolicyValue value); + + LifespanPolicy create_lifespan_policy(in LifespanPolicyValue value); + + IdUniquenessPolicy create_id_uniqueness_policy(in IdUniquenessPolicyValue value); + + IdAssignmentPolicy create_id_assignment_policy(in IdAssignmentPolicyValue value); + + ImplicitActivationPolicy create_implicit_activation_policy(in ImplicitActivationPolicyValue value); + + ServantRetentionPolicy create_servant_retention_policy(in ServantRetentionPolicyValue value); + + RequestProcessingPolicy create_request_processing_policy(in RequestProcessingPolicyValue value); + + // POA attributes + + readonly attribute string the_name; + readonly attribute POA the_parent; + readonly attribute POAList the_children; + readonly attribute POAManager the_POAManager; + attribute AdapterActivator the_activator; + + // Servant Manager registration: + ServantManager get_servant_manager() raises (WrongPolicy); + + void set_servant_manager(in ServantManager imgr) raises (WrongPolicy); + + // operations for the USE_DEFAULT_SERVANT policy + Servant get_servant() raises (NoServant, WrongPolicy); + + void set_servant(in Servant p_servant) raises (WrongPolicy); + + // object activation and deactivation + ObjectId activate_object(in Servant p_servant) + raises (ServantAlreadyActive, WrongPolicy); + + void activate_object_with_id(in ObjectId id, in Servant p_servant) + raises (ServantAlreadyActive, ObjectAlreadyActive, WrongPolicy); + + void deactivate_object(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + // reference creation operations + Object create_reference (in CORBA::RepositoryId intf) raises (WrongPolicy); + + Object create_reference_with_id (in ObjectId oid, + in CORBA::RepositoryId intf); + + // Identity mapping operations: + + ObjectId servant_to_id(in Servant p_servant) raises (ServantNotActive, WrongPolicy); + + Object servant_to_reference(in Servant p_servant) raises (ServantNotActive, WrongPolicy); + + Servant reference_to_servant(in Object reference) raises(ObjectNotActive, WrongAdapter, WrongPolicy); + + ObjectId reference_to_id(in Object reference) raises (WrongAdapter, WrongPolicy); + + Servant id_to_servant(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + Object id_to_reference(in ObjectId oid) raises (ObjectNotActive, WrongPolicy); + + readonly attribute CORBA::OctetSeq id; + }; + + // Current interface + + local interface Current : CORBA::Current { + + exception NoContext { }; + + POA get_POA() raises (NoContext); + + ObjectId get_object_id() raises (NoContext); + + Object get_reference() raises(NoContext); + + Servant get_servant() raises (NoContext); + + }; + +}; + diff --git a/idl/orb/build.xml b/idl/orb/build.xml new file mode 100644 index 0000000..863c603 --- /dev/null +++ b/idl/orb/build.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idl/orb/extra/.svn/all-wcprops b/idl/orb/extra/.svn/all-wcprops new file mode 100644 index 0000000..cc9cc5f --- /dev/null +++ b/idl/orb/extra/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 61 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/orb/extra +END diff --git a/idl/orb/extra/.svn/entries b/idl/orb/extra/.svn/entries new file mode 100644 index 0000000..2afbb07 --- /dev/null +++ b/idl/orb/extra/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +es +dir + +org +dir + diff --git a/idl/orb/extra/es/.svn/all-wcprops b/idl/orb/extra/es/.svn/all-wcprops new file mode 100644 index 0000000..64fbf50 --- /dev/null +++ b/idl/orb/extra/es/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/es +END diff --git a/idl/orb/extra/es/.svn/entries b/idl/orb/extra/es/.svn/entries new file mode 100644 index 0000000..3f73b2f --- /dev/null +++ b/idl/orb/extra/es/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/es +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +tid +dir + diff --git a/idl/orb/extra/es/tid/.svn/all-wcprops b/idl/orb/extra/es/tid/.svn/all-wcprops new file mode 100644 index 0000000..3dfaa8a --- /dev/null +++ b/idl/orb/extra/es/tid/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/es/tid +END diff --git a/idl/orb/extra/es/tid/.svn/entries b/idl/orb/extra/es/tid/.svn/entries new file mode 100644 index 0000000..3e3423f --- /dev/null +++ b/idl/orb/extra/es/tid/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/es/tid +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +CORBA +dir + diff --git a/idl/orb/extra/es/tid/CORBA/.svn/all-wcprops b/idl/orb/extra/es/tid/CORBA/.svn/all-wcprops new file mode 100644 index 0000000..62e088e --- /dev/null +++ b/idl/orb/extra/es/tid/CORBA/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 74 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/es/tid/CORBA +END +Any.java +K 25 +svn:wc:ra_dav:version-url +V 83 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/es/tid/CORBA/Any.java +END diff --git a/idl/orb/extra/es/tid/CORBA/.svn/entries b/idl/orb/extra/es/tid/CORBA/.svn/entries new file mode 100644 index 0000000..b5743f3 --- /dev/null +++ b/idl/orb/extra/es/tid/CORBA/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/es/tid/CORBA +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Any.java +file + + + + +2009-02-16T09:48:55.000000Z +7c3176874483d68755f140b8539bca7e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +203 + diff --git a/idl/orb/extra/es/tid/CORBA/.svn/prop-base/Any.java.svn-base b/idl/orb/extra/es/tid/CORBA/.svn/prop-base/Any.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/es/tid/CORBA/.svn/prop-base/Any.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/es/tid/CORBA/.svn/text-base/Any.java.svn-base b/idl/orb/extra/es/tid/CORBA/.svn/text-base/Any.java.svn-base new file mode 100644 index 0000000..2b08b44 --- /dev/null +++ b/idl/orb/extra/es/tid/CORBA/.svn/text-base/Any.java.svn-base @@ -0,0 +1,10 @@ +package es.tid.CORBA; + +public abstract class Any extends org.omg.CORBA.Any { + + public org.omg.CORBA.portable.Streamable extract_Streamable() { + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/idl/orb/extra/es/tid/CORBA/Any.java b/idl/orb/extra/es/tid/CORBA/Any.java new file mode 100644 index 0000000..2b08b44 --- /dev/null +++ b/idl/orb/extra/es/tid/CORBA/Any.java @@ -0,0 +1,10 @@ +package es.tid.CORBA; + +public abstract class Any extends org.omg.CORBA.Any { + + public org.omg.CORBA.portable.Streamable extract_Streamable() { + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/.svn/all-wcprops b/idl/orb/extra/org/.svn/all-wcprops new file mode 100644 index 0000000..5e73bdc --- /dev/null +++ b/idl/orb/extra/org/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 65 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/orb/extra/org +END diff --git a/idl/orb/extra/org/.svn/entries b/idl/orb/extra/org/.svn/entries new file mode 100644 index 0000000..8aa22ae --- /dev/null +++ b/idl/orb/extra/org/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +omg +dir + diff --git a/idl/orb/extra/org/omg/.svn/all-wcprops b/idl/orb/extra/org/omg/.svn/all-wcprops new file mode 100644 index 0000000..958bd1e --- /dev/null +++ b/idl/orb/extra/org/omg/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 69 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg +END diff --git a/idl/orb/extra/org/omg/.svn/entries b/idl/orb/extra/org/omg/.svn/entries new file mode 100644 index 0000000..f8b9405 --- /dev/null +++ b/idl/orb/extra/org/omg/.svn/entries @@ -0,0 +1,40 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +PortableServer +dir + +CORBA +dir + +CORBA_2_3 +dir + +CORBA_2_5 +dir + diff --git a/idl/orb/extra/org/omg/CORBA/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA/.svn/all-wcprops new file mode 100644 index 0000000..7a31cfe --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/all-wcprops @@ -0,0 +1,449 @@ +K 25 +svn:wc:ra_dav:version-url +V 75 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA +END +SystemException.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/SystemException.java +END +ObjectHolder.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ObjectHolder.java +END +StringHolder.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/StringHolder.java +END +Object.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Object.java +END +INTF_REPOS.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INTF_REPOS.java +END +PolicyError.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/PolicyError.java +END +UnknownUserException.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/UnknownUserException.java +END +LocalObject.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/LocalObject.java +END +NamedValue.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NamedValue.java +END +BAD_TYPECODE.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java +END +IntHolder.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/IntHolder.java +END +NO_RESPONSE.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NO_RESPONSE.java +END +UNKNOWN.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/UNKNOWN.java +END +BAD_POLICY_VALUE.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_POLICY_VALUE.java +END +WrongTransaction.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/WrongTransaction.java +END +PERSIST_STORE.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/PERSIST_STORE.java +END +ValueBaseHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ValueBaseHolder.java +END +BAD_OPERATION.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_OPERATION.java +END +BAD_POLICY_TYPE.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_POLICY_TYPE.java +END +NO_RESOURCES.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NO_RESOURCES.java +END +DoubleHolder.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/DoubleHolder.java +END +OBJ_ADAPTER.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/OBJ_ADAPTER.java +END +LocalInterface.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/LocalInterface.java +END +TypeCodeHelper.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodeHelper.java +END +CompletionStatus.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/CompletionStatus.java +END +DATA_CONVERSION.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/DATA_CONVERSION.java +END +NVList.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NVList.java +END +ContextList.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ContextList.java +END +Principal.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Principal.java +END +TRANSACTION_REQUIRED.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TRANSACTION_REQUIRED.java +END +INV_FLAG.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INV_FLAG.java +END +NO_IMPLEMENT.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NO_IMPLEMENT.java +END +MARSHAL.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/MARSHAL.java +END +Any.java +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Any.java +END +Request.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Request.java +END +UserException.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/UserException.java +END +COMM_FAILURE.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java +END +BAD_PARAM.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_PARAM.java +END +TRANSACTION_ROLLEDBACK.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java +END +CharHolder.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/CharHolder.java +END +INTERNAL.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INTERNAL.java +END +BooleanHolder.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BooleanHolder.java +END +FREE_MEM.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/FREE_MEM.java +END +ORB.java +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ORB.java +END +IMP_LIMIT.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java +END +DynamicImplementation.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/DynamicImplementation.java +END +BAD_CONTEXT.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java +END +ExceptionList.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ExceptionList.java +END +INVALID_TRANSACTION.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INVALID_TRANSACTION.java +END +LongHolder.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/LongHolder.java +END +ShortHolder.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ShortHolder.java +END +ByteHolder.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ByteHolder.java +END +INITIALIZE.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INITIALIZE.java +END +OBJECT_NOT_EXIST.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/OBJECT_NOT_EXIST.java +END +FloatHolder.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/FloatHolder.java +END +Environment.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Environment.java +END +NO_MEMORY.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NO_MEMORY.java +END +BAD_POLICY.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_POLICY.java +END +ValueBaseHelper.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ValueBaseHelper.java +END +TRANSIENT.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TRANSIENT.java +END +TypeCodeHolder.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodeHolder.java +END +INV_POLICY.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INV_POLICY.java +END +TypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCode.java +END +CODESET_INCOMPATIBLE.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/CODESET_INCOMPATIBLE.java +END +PrincipalHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/PrincipalHolder.java +END +ServerRequest.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ServerRequest.java +END +INV_IDENT.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INV_IDENT.java +END +INV_OBJREF.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/INV_OBJREF.java +END +NO_PERMISSION.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/NO_PERMISSION.java +END +Context.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Context.java +END +AnyHolder.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/AnyHolder.java +END +TIMEOUT.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TIMEOUT.java +END +Bounds.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/Bounds.java +END +BAD_INV_ORDER.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/BAD_INV_ORDER.java +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/entries b/idl/orb/extra/org/omg/CORBA/.svn/entries new file mode 100644 index 0000000..b4a2159 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/entries @@ -0,0 +1,2553 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +SystemException.java +file + + + + +2009-02-16T09:48:55.000000Z +3edf3f309dbb80df255b6d41dcb728af +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1164 + +StringHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +f5a139c3d19e8f4c2f2801b34d1e49f7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +767 + +ObjectHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +64b52bddab21dc6ea9cba3d581b4c600 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +795 + +Object.java +file + + + + +2009-02-16T09:48:55.000000Z +63ccf40dbc4cc14ab6923f70299de790 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1363 + +INTF_REPOS.java +file + + + + +2009-02-16T09:48:55.000000Z +d58b6b7a0311beda25004575809e2699 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +708 + +PolicyError.java +file + + + + +2009-02-16T09:48:55.000000Z +cb0fd4b8241c4116a9bf67b9b8a49c8c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +555 + +UnknownUserException.java +file + + + + +2009-02-16T09:48:55.000000Z +909f0220b992610b63cd1fcaf25de888 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +492 + +ORBPackage +dir + +NamedValue.java +file + + + + +2009-02-16T09:48:55.000000Z +5f4021ad35ad7395ba4d76fb9791012d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +368 + +LocalObject.java +file + + + + +2009-02-16T09:48:55.000000Z +95a5d14a92d0905b9466822041b5977c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3330 + +BAD_TYPECODE.java +file + + + + +2009-02-16T09:48:55.000000Z +bb56172e1407ea77b7345dd9cd2e0ae8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +686 + +IntHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +6fa758e370392da07f6082057a426e1c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +746 + +NO_RESPONSE.java +file + + + + +2009-02-16T09:48:55.000000Z +c4f066ab5a474c252e83a7b0f9e7ac09 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +713 + +UNKNOWN.java +file + + + + +2009-02-16T09:48:55.000000Z +c37d55b6df90e7a66af8bd4b840b4c3d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +693 + +BAD_POLICY_VALUE.java +file + + + + +2009-02-16T09:48:55.000000Z +dc06f0c9c0607a8b46d7f546dea7f654 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +282 + +WrongTransaction.java +file + + + + +2009-02-16T09:48:55.000000Z +a01e97d9c9716260c1665e681ad238dd +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +524 + +PERSIST_STORE.java +file + + + + +2009-02-16T09:48:55.000000Z +c66d5ccb5f47e3087babcd5c1f2f2905 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +723 + +ValueBaseHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +6d0cd26244fb43e43ec8cbcc2143e7f4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +845 + +NO_RESOURCES.java +file + + + + +2009-02-16T09:48:55.000000Z +06e584b5d182f49871c876641ac79f7c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +718 + +BAD_POLICY_TYPE.java +file + + + + +2009-02-16T09:48:55.000000Z +5c99bb20f5d0891e4b0b9882aa3c86ff +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +281 + +BAD_OPERATION.java +file + + + + +2009-02-16T09:48:55.000000Z +230c8ab2dbb47460edda00774d2597c4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +691 + +DoubleHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +db46babaa0061091f3e94b7c862de81e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +767 + +TypeCodePackage +dir + +OBJ_ADAPTER.java +file + + + + +2009-02-16T09:48:55.000000Z +bf9c67c5dfb2dfcd261ca8d17ab1bd67 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +713 + +LocalInterface.java +file + + + + +2009-02-16T09:48:55.000000Z +c43fe2d78d88c559b91b8cf1476975ed +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +87 + +TypeCodeHelper.java +file + + + + +2009-02-16T09:48:55.000000Z +5d12c91b3a3e29ae1ff507ee7fd0648e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +999 + +CompletionStatus.java +file + + + + +2009-02-16T09:48:55.000000Z +f8db87e07305482114f1b6067589692a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1077 + +DATA_CONVERSION.java +file + + + + +2009-02-16T09:48:55.000000Z +ead5b8da753fceea2da2a688ce3c962f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +701 + +NVList.java +file + + + + +2009-02-16T09:48:55.000000Z +0bd7d07beb77e06af4306a40d11fd49e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +766 + +ContextList.java +file + + + + +2009-02-16T09:48:55.000000Z +25d5c46cff94a4c99e9dbf960e860aec +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +475 + +Principal.java +file + + + + +2009-02-16T09:48:55.000000Z +14328129ee831772e3c6fe276af4a88b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +559 + +INV_FLAG.java +file + + + + +2009-02-16T09:48:55.000000Z +807e9640e172f7314739dd27b6110b79 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +698 + +TRANSACTION_REQUIRED.java +file + + + + +2009-02-16T09:48:55.000000Z +7cefa288c1f8d06e1e1ee801d8a892c6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +778 + +NO_IMPLEMENT.java +file + + + + +2009-02-16T09:48:55.000000Z +7b72ed7e4412e13a084503a108dcab35 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +718 + +MARSHAL.java +file + + + + +2009-02-16T09:48:55.000000Z +9051d9bff56bc8e3dd0e58fcf3f12e02 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +693 + +Any.java +file + + + + +2009-02-16T09:48:55.000000Z +09915d3dea77992efe9879ef553030c7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4586 + +Request.java +file + + + + +2010-04-28T10:47:59.000000Z +26266cb7604fe0e19222f08ef6c9da7a +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +1831 + +portable +dir + +UserException.java +file + + + + +2009-02-16T09:48:55.000000Z +e4b47eb59c934ee914aa930db2cadd50 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +453 + +COMM_FAILURE.java +file + + + + +2009-02-16T09:48:55.000000Z +b349c38d52f2994465d23aa77e20632f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +686 + +BAD_PARAM.java +file + + + + +2009-02-16T09:48:55.000000Z +0107670b90c427a0b4ffdfe1d7a22f4f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +671 + +TRANSACTION_ROLLEDBACK.java +file + + + + +2009-02-16T09:48:55.000000Z +4093dde1e69fcb789f91d7e92b58a2f1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +788 + +CharHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +8a356db4de5acfc8a9a64e82dcdfc6c0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +751 + +INTERNAL.java +file + + + + +2009-02-16T09:48:55.000000Z +45de4fdfc692fbe8e9a99a5dd007e44f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +698 + +BooleanHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +abf3afd57d86c02c6f572647bcbcaf30 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +775 + +FREE_MEM.java +file + + + + +2009-02-16T09:48:55.000000Z +1fa1a1e7ec32049efadb3b12a4726e1d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +698 + +ORB.java +file + + + + +2009-02-16T09:48:55.000000Z +f35fd1782bf32436087f3ed9242eeac5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8038 + +IMP_LIMIT.java +file + + + + +2009-02-16T09:48:55.000000Z +a6f5c54d9bff7166e544507121b96301 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +703 + +BAD_CONTEXT.java +file + + + + +2009-02-16T09:48:55.000000Z +16f410047d0c761ac58ce174d250de0b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +681 + +DynamicImplementation.java +file + + + + +2009-02-16T09:48:55.000000Z +2bc0f77f7c9b27d349939271d3709e57 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +578 + +ExceptionList.java +file + + + + +2009-02-16T09:48:55.000000Z +cbbd2d08b4431f8d09f83e7dd1e3523d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +534 + +INVALID_TRANSACTION.java +file + + + + +2009-02-16T09:48:55.000000Z +4acc48d39aea15a62c5c6a3b54fa53f6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +769 + +ShortHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +6415cd7cb941b7f01b132ae1b6e01c1d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +759 + +LongHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +0b537367a0b80c96ab5a3168a4f8ad00 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +763 + +ByteHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +a94b255f90ac7f4bc739179f8c2620bc +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +754 + +INITIALIZE.java +file + + + + +2009-02-16T09:48:55.000000Z +5d9121dbafcbebc746c65ced4ff0452a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +708 + +OBJECT_NOT_EXIST.java +file + + + + +2009-02-16T09:48:55.000000Z +2d83ba4a824b9350a1b378585e392044 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +756 + +FloatHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +0d142ce963e6537bbea81c0bf8a556a6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +759 + +NO_MEMORY.java +file + + + + +2009-02-16T09:48:55.000000Z +d6fd254f49600b3b75a4525c2cbcc58c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +703 + +Environment.java +file + + + + +2009-02-16T09:48:55.000000Z +7a35c14586cac497c9c6b5d0c2d0900b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +408 + +BAD_POLICY.java +file + + + + +2009-02-16T09:48:55.000000Z +936fc441236e3915bebad37d0e839720 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +276 + +TRANSIENT.java +file + + + + +2009-02-16T09:48:55.000000Z +2e5d8b0f100f7c8bd6f231466a424f6c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +703 + +ValueBaseHelper.java +file + + + + +2009-02-16T09:48:55.000000Z +42f2f4851bd0e630e8fa669df6e94704 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1482 + +TypeCodeHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +820d8b18930408d50dbc7b193dee15f7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +691 + +INV_POLICY.java +file + + + + +2009-02-16T09:48:55.000000Z +9d859cb970521fa24cc34e25c4ca8b13 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +708 + +CODESET_INCOMPATIBLE.java +file + + + + +2009-02-16T09:48:55.000000Z +2abf4cb6b8bce46fade5d20322fa1f80 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +726 + +TypeCode.java +file + + + + +2009-02-16T09:48:55.000000Z +5ed518716675ab17f2da8ef1234a94e8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2589 + +ServerRequest.java +file + + + + +2009-02-16T09:48:55.000000Z +791c3be1a3954b265b07933c38e2c91f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1262 + +PrincipalHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +17f5efd98fa7a6718642be75e27cf8a9 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +843 + +INV_IDENT.java +file + + + + +2009-02-16T09:48:55.000000Z +00884a1105a2f72381b38c0e8a3d5390 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +703 + +INV_OBJREF.java +file + + + + +2009-02-16T09:48:55.000000Z +57005d3240328101f1ab0e95c509522f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +708 + +NO_PERMISSION.java +file + + + + +2009-02-16T09:48:55.000000Z +1849f31262ffc7bcfce67fca8270768f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +723 + +Context.java +file + + + + +2009-02-16T09:48:55.000000Z +78f653efb21ac1d35b675604b4adcced +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +787 + +AnyHolder.java +file + + + + +2009-02-16T09:48:55.000000Z +77eb20c5a0e7724f33ade08e21ffda7e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +914 + +TIMEOUT.java +file + + + + +2009-02-16T09:48:55.000000Z +95736b453c44012032d5675e233119c1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +693 + +Bounds.java +file + + + + +2009-02-16T09:48:55.000000Z +6e2136e78f52c936870592d98c336093 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +372 + +BAD_INV_ORDER.java +file + + + + +2009-02-16T09:48:55.000000Z +19e02a4ea08e4d869b3cba9533e23a71 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +691 + diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Any.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Any.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Any.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/AnyHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/AnyHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/AnyHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_CONTEXT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_CONTEXT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_CONTEXT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_INV_ORDER.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_INV_ORDER.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_INV_ORDER.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_OPERATION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_OPERATION.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_OPERATION.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_PARAM.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_PARAM.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_PARAM.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_TYPE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_TYPE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_TYPE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_VALUE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_VALUE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_POLICY_VALUE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_TYPECODE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_TYPECODE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BAD_TYPECODE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BooleanHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BooleanHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/BooleanHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Bounds.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Bounds.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Bounds.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ByteHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ByteHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ByteHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CODESET_INCOMPATIBLE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CODESET_INCOMPATIBLE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CODESET_INCOMPATIBLE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/COMM_FAILURE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/COMM_FAILURE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/COMM_FAILURE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CharHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CharHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CharHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CompletionStatus.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CompletionStatus.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/CompletionStatus.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Context.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Context.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Context.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ContextList.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ContextList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ContextList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DATA_CONVERSION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DATA_CONVERSION.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DATA_CONVERSION.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DoubleHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DoubleHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DoubleHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DynamicImplementation.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DynamicImplementation.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/DynamicImplementation.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Environment.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Environment.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Environment.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ExceptionList.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ExceptionList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ExceptionList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FREE_MEM.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FREE_MEM.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FREE_MEM.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FloatHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FloatHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/FloatHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IMP_LIMIT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IMP_LIMIT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IMP_LIMIT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INITIALIZE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INITIALIZE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INITIALIZE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTERNAL.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTERNAL.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTERNAL.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTF_REPOS.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTF_REPOS.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INTF_REPOS.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INVALID_TRANSACTION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INVALID_TRANSACTION.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INVALID_TRANSACTION.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_FLAG.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_FLAG.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_FLAG.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_IDENT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_IDENT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_IDENT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_OBJREF.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_OBJREF.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_OBJREF.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_POLICY.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_POLICY.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/INV_POLICY.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IntHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IntHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/IntHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalInterface.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalInterface.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalInterface.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalObject.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalObject.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LocalObject.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LongHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LongHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/LongHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/MARSHAL.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/MARSHAL.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/MARSHAL.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_IMPLEMENT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_IMPLEMENT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_IMPLEMENT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_MEMORY.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_MEMORY.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_MEMORY.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_PERMISSION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_PERMISSION.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_PERMISSION.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESOURCES.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESOURCES.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESOURCES.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESPONSE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESPONSE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NO_RESPONSE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NVList.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NVList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NVList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NamedValue.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NamedValue.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/NamedValue.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJECT_NOT_EXIST.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJECT_NOT_EXIST.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJECT_NOT_EXIST.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJ_ADAPTER.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJ_ADAPTER.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/OBJ_ADAPTER.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ORB.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Object.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Object.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Object.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ObjectHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ObjectHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ObjectHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PERSIST_STORE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PERSIST_STORE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PERSIST_STORE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PolicyError.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PolicyError.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PolicyError.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Principal.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Principal.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Principal.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PrincipalHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PrincipalHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/PrincipalHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Request.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Request.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/Request.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ServerRequest.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ServerRequest.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ServerRequest.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ShortHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ShortHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ShortHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/StringHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/StringHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/StringHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/SystemException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/SystemException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/SystemException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TIMEOUT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TIMEOUT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TIMEOUT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_REQUIRED.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_REQUIRED.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_REQUIRED.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_ROLLEDBACK.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_ROLLEDBACK.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSACTION_ROLLEDBACK.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSIENT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSIENT.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TRANSIENT.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCode.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHelper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHelper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/TypeCodeHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UNKNOWN.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UNKNOWN.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UNKNOWN.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UnknownUserException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UnknownUserException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UnknownUserException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UserException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UserException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/UserException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHelper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHelper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/ValueBaseHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/prop-base/WrongTransaction.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/WrongTransaction.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/prop-base/WrongTransaction.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Any.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Any.java.svn-base new file mode 100644 index 0000000..32eba80 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Any.java.svn-base @@ -0,0 +1,116 @@ +package org.omg.CORBA; + +public abstract class Any implements org.omg.CORBA.portable.IDLEntity { + + abstract public boolean equal(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.TypeCode type(); + abstract public void type(org.omg.CORBA.TypeCode type); + + abstract public void read_value(org.omg.CORBA.portable.InputStream is, + org.omg.CORBA.TypeCode type) throws org.omg.CORBA.MARSHAL; + abstract public void write_value(org.omg.CORBA.portable.OutputStream os); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + abstract public org.omg.CORBA.portable.InputStream create_input_stream(); + + abstract public short extract_short() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_short(short s); + + abstract public int extract_long() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_long(int i); + + abstract public long extract_longlong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_longlong(long l); + + abstract public short extract_ushort() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ushort(short s); + + abstract public int extract_ulong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulong(int i); + + abstract public long extract_ulonglong() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulonglong(long l); + + abstract public float extract_float() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_float(float f); + + abstract public double extract_double() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_double(double d); + + abstract public boolean extract_boolean() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_boolean(boolean b); + + abstract public char extract_char() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_char(char c); + + abstract public char extract_wchar() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wchar(char c); + + abstract public byte extract_octet() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_octet(byte b); + + abstract public org.omg.CORBA.Any extract_any() + throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_any(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.Object extract_Object() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Object(org.omg.CORBA.Object obj); + + abstract public java.io.Serializable extract_Value() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Value(java.io.Serializable v); + abstract public void insert_Value(java.io.Serializable v, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.MARSHAL; + + abstract public void insert_Object(org.omg.CORBA.Object obj, + org.omg.CORBA.TypeCode type) throws + org.omg.CORBA.BAD_PARAM; + + abstract public String extract_string() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_string(String s) throws + org.omg.CORBA.DATA_CONVERSION, org.omg.CORBA.MARSHAL; + + abstract public String extract_wstring() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wstring(String value) throws + org.omg.CORBA.MARSHAL; + + abstract public TypeCode extract_TypeCode() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_TypeCode(TypeCode value); + + /** + *@ deprecated + */ + public Principal extract_Principal() throws org.omg.CORBA.BAD_OPERATION { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + /** + *@ deprecated + */ + public void insert_Principal(Principal p) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.Streamable extract_Streamable() throws + org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_Streamable(org.omg.CORBA.portable.Streamable s) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.math.BigDecimal extract_fixed() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_fixed(java.math.BigDecimal f, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} + diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/AnyHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/AnyHolder.java.svn-base new file mode 100644 index 0000000..3faeb1e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/AnyHolder.java.svn-base @@ -0,0 +1,39 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class AnyHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Any value; + protected org.omg.CORBA.TypeCode type; + + public AnyHolder() { + value = null; + type = null; + } + + public AnyHolder(org.omg.CORBA.Any initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_any(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_any(value); + } + + public synchronized org.omg.CORBA.TypeCode _type() + { + if(type == null) + type = org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_any); + return type; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_CONTEXT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_CONTEXT.java.svn-base new file mode 100644 index 0000000..b8063c6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_CONTEXT.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_CONTEXT extends org.omg.CORBA.SystemException { + + public BAD_CONTEXT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_CONTEXT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_CONTEXT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_CONTEXT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_INV_ORDER.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_INV_ORDER.java.svn-base new file mode 100644 index 0000000..9f16b1f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_INV_ORDER.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_INV_ORDER extends org.omg.CORBA.SystemException { + + public BAD_INV_ORDER() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_INV_ORDER(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_INV_ORDER(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_INV_ORDER(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_OPERATION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_OPERATION.java.svn-base new file mode 100644 index 0000000..7bc62d0 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_OPERATION.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_OPERATION extends org.omg.CORBA.SystemException { + + public BAD_OPERATION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_OPERATION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_OPERATION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_OPERATION(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_PARAM.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_PARAM.java.svn-base new file mode 100644 index 0000000..ce96fce --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_PARAM.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_PARAM extends org.omg.CORBA.SystemException { + + public BAD_PARAM() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_PARAM(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_PARAM(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_PARAM(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY.java.svn-base new file mode 100644 index 0000000..1f2440e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY { + short value = (short) 0; +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_TYPE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_TYPE.java.svn-base new file mode 100644 index 0000000..66fd021 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_TYPE.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY_TYPE { + short value = (short) 2; +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_VALUE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_VALUE.java.svn-base new file mode 100644 index 0000000..7514fc6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_POLICY_VALUE.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY_VALUE { + short value = (short) 3; +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_TYPECODE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_TYPECODE.java.svn-base new file mode 100644 index 0000000..0c336b3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BAD_TYPECODE.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_TYPECODE extends org.omg.CORBA.SystemException { + + public BAD_TYPECODE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_TYPECODE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_TYPECODE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_TYPECODE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/BooleanHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BooleanHolder.java.svn-base new file mode 100644 index 0000000..824bb17 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/BooleanHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class BooleanHolder implements org.omg.CORBA.portable.Streamable { + + public boolean value; + + public BooleanHolder() { + } + + public BooleanHolder(boolean initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_boolean(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_boolean(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_boolean); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Bounds.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Bounds.java.svn-base new file mode 100644 index 0000000..75fa0ac --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Bounds.java.svn-base @@ -0,0 +1,23 @@ +// +// Bounds.java (exception) +// +// File generated: Mon Sep 25 18:46:50 GMT+02:00 2000 +// by TidORB Idl2Java 1.0 +// + +package org.omg.CORBA; + +final public class Bounds + extends org.omg.CORBA.UserException { + + + public Bounds() { + super("IDL:omg.org/CORBA/Bounds:1.0"); + } + + public Bounds(String reason) { + super("IDL:omg.org/CORBA/Bounds:1.0 "+reason); + + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ByteHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ByteHolder.java.svn-base new file mode 100644 index 0000000..6b7db45 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ByteHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ByteHolder implements org.omg.CORBA.portable.Streamable { + + public byte value; + + public ByteHolder() { + } + + public ByteHolder(byte initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_octet(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_octet(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_octet); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/CODESET_INCOMPATIBLE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CODESET_INCOMPATIBLE.java.svn-base new file mode 100644 index 0000000..5f9c15e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CODESET_INCOMPATIBLE.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class CODESET_INCOMPATIBLE extends org.omg.CORBA.SystemException { + + public CODESET_INCOMPATIBLE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public CODESET_INCOMPATIBLE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public CODESET_INCOMPATIBLE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public CODESET_INCOMPATIBLE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/COMM_FAILURE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/COMM_FAILURE.java.svn-base new file mode 100644 index 0000000..7170db9 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/COMM_FAILURE.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class COMM_FAILURE extends org.omg.CORBA.SystemException { + + public COMM_FAILURE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public COMM_FAILURE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public COMM_FAILURE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public COMM_FAILURE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/CharHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CharHolder.java.svn-base new file mode 100644 index 0000000..8e06bdb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CharHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class CharHolder implements org.omg.CORBA.portable.Streamable { + + public char value; + + public CharHolder() { + } + + public CharHolder(char initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_char(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_char(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_char); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/CompletionStatus.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CompletionStatus.java.svn-base new file mode 100644 index 0000000..b3e6b3b --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/CompletionStatus.java.svn-base @@ -0,0 +1,43 @@ +package org.omg.CORBA; + +public class CompletionStatus implements org.omg.CORBA.portable.IDLEntity { + + protected int completion_value; + + protected CompletionStatus(int _value) { + completion_value = _value; + } + + public int value() + { + return completion_value; + } + + public static CompletionStatus from_int(int val) + throws org.omg.CORBA.BAD_PARAM + { + switch (val) { + case _COMPLETED_YES: + return COMPLETED_YES; + case _COMPLETED_NO: + return COMPLETED_NO; + case _COMPLETED_MAYBE: + return COMPLETED_MAYBE; + default: + throw new org.omg.CORBA.BAD_PARAM(); + } + } + + public static final int _COMPLETED_YES = 0; + public static final CompletionStatus COMPLETED_YES = + new CompletionStatus(_COMPLETED_YES); + + public static final int _COMPLETED_NO = 1; + public static final CompletionStatus COMPLETED_NO = + new CompletionStatus(_COMPLETED_NO); + + public static final int _COMPLETED_MAYBE = 2; + public static final CompletionStatus COMPLETED_MAYBE = + new CompletionStatus(_COMPLETED_MAYBE); + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Context.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Context.java.svn-base new file mode 100644 index 0000000..5c9cccd --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Context.java.svn-base @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class Context { + + abstract public String context_name(); + abstract public org.omg.CORBA.Context parent(); + abstract public org.omg.CORBA.Context create_child( + String child_context_name); + abstract public void set_one_value(String prop_name, + org.omg.CORBA.Any value); + abstract public void set_values(org.omg.CORBA.NVList values); + abstract public void delete_values(String prop_name); + abstract public org.omg.CORBA.NVList get_values(String start_scope, + int op_flags, String pattern); +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ContextList.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ContextList.java.svn-base new file mode 100644 index 0000000..48ff706 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ContextList.java.svn-base @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ContextList { + + abstract public int count(); + abstract public void add(String ctx); + abstract public String item( int index) throws org.omg.CORBA.Bounds; + abstract public void remove( int index) throws org.omg.CORBA.Bounds; +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/DATA_CONVERSION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DATA_CONVERSION.java.svn-base new file mode 100644 index 0000000..816e20e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DATA_CONVERSION.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class DATA_CONVERSION extends org.omg.CORBA.SystemException { + + public DATA_CONVERSION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public DATA_CONVERSION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public DATA_CONVERSION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public DATA_CONVERSION(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/DoubleHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DoubleHolder.java.svn-base new file mode 100644 index 0000000..51db57c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DoubleHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class DoubleHolder implements org.omg.CORBA.portable.Streamable { + + public double value; + + public DoubleHolder() { + } + + public DoubleHolder(double initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_double(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_double(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_double); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/DynamicImplementation.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DynamicImplementation.java.svn-base new file mode 100644 index 0000000..4d0f219 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/DynamicImplementation.java.svn-base @@ -0,0 +1,22 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +/** +* @deprecated org.omg.CORBA.DynamicImplementation +*/ +abstract public class DynamicImplementation + extends org.omg.CORBA.portable.ObjectImpl { + + /** + * @deprecated Deprecated by the Portable Object Adapter (POA). + */ + public void invoke(org.omg.CORBA.ServerRequest request) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Environment.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Environment.java.svn-base new file mode 100644 index 0000000..4b3a7cc --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Environment.java.svn-base @@ -0,0 +1,12 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public abstract class Environment { + abstract public void exception(java.lang.Exception exception); + abstract public java.lang.Exception exception(); + abstract public void clear(); +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ExceptionList.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ExceptionList.java.svn-base new file mode 100644 index 0000000..620fc11 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ExceptionList.java.svn-base @@ -0,0 +1,18 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ExceptionList { + + abstract public int count(); + + abstract public void add(org.omg.CORBA.TypeCode exc); + + abstract public org.omg.CORBA.TypeCode item(int index) throws + org.omg.CORBA.Bounds; + + abstract public void remove(int index) throws org.omg.CORBA.Bounds; +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/FREE_MEM.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/FREE_MEM.java.svn-base new file mode 100644 index 0000000..e5fa173 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/FREE_MEM.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class FREE_MEM extends org.omg.CORBA.SystemException { + + public FREE_MEM() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public FREE_MEM(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public FREE_MEM(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public FREE_MEM(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/FloatHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/FloatHolder.java.svn-base new file mode 100644 index 0000000..4b665a8 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/FloatHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class FloatHolder implements org.omg.CORBA.portable.Streamable { + + public float value; + + public FloatHolder() { + } + + public FloatHolder(float initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_float(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_float(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_float); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/IMP_LIMIT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/IMP_LIMIT.java.svn-base new file mode 100644 index 0000000..62db106 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/IMP_LIMIT.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class IMP_LIMIT extends org.omg.CORBA.SystemException { + + public IMP_LIMIT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public IMP_LIMIT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public IMP_LIMIT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public IMP_LIMIT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INITIALIZE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INITIALIZE.java.svn-base new file mode 100644 index 0000000..5781227 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INITIALIZE.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INITIALIZE extends org.omg.CORBA.SystemException { + + public INITIALIZE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INITIALIZE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INITIALIZE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INITIALIZE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTERNAL.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTERNAL.java.svn-base new file mode 100644 index 0000000..d2adce5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTERNAL.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INTERNAL extends org.omg.CORBA.SystemException { + + public INTERNAL() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INTERNAL(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INTERNAL(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INTERNAL(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTF_REPOS.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTF_REPOS.java.svn-base new file mode 100644 index 0000000..0c5f7e2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INTF_REPOS.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INTF_REPOS extends org.omg.CORBA.SystemException { + + public INTF_REPOS() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INTF_REPOS(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INTF_REPOS(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INTF_REPOS(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INVALID_TRANSACTION.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INVALID_TRANSACTION.java.svn-base new file mode 100644 index 0000000..8c9f922 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INVALID_TRANSACTION.java.svn-base @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INVALID_TRANSACTION extends org.omg.CORBA.SystemException { + + public INVALID_TRANSACTION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INVALID_TRANSACTION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INVALID_TRANSACTION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INVALID_TRANSACTION(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_FLAG.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_FLAG.java.svn-base new file mode 100644 index 0000000..928eb88 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_FLAG.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_FLAG extends org.omg.CORBA.SystemException { + + public INV_FLAG() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_FLAG(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_FLAG(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_FLAG(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_IDENT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_IDENT.java.svn-base new file mode 100644 index 0000000..c276e88 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_IDENT.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_IDENT extends org.omg.CORBA.SystemException { + + public INV_IDENT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_IDENT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_IDENT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_IDENT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_OBJREF.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_OBJREF.java.svn-base new file mode 100644 index 0000000..f5dc7e5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_OBJREF.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_OBJREF extends org.omg.CORBA.SystemException { + + public INV_OBJREF() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_OBJREF(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_OBJREF(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_OBJREF(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_POLICY.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_POLICY.java.svn-base new file mode 100644 index 0000000..432a76f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/INV_POLICY.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_POLICY extends org.omg.CORBA.SystemException { + + public INV_POLICY() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_POLICY(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_POLICY(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_POLICY(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/IntHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/IntHolder.java.svn-base new file mode 100644 index 0000000..7bbbda7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/IntHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class IntHolder implements org.omg.CORBA.portable.Streamable { + + public int value; + + public IntHolder() { + } + + public IntHolder(int initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_long(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_long(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_long); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalInterface.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalInterface.java.svn-base new file mode 100644 index 0000000..48141e1 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalInterface.java.svn-base @@ -0,0 +1,3 @@ +package org.omg.CORBA; +public interface LocalInterface extends org.omg.CORBA.Object{} + diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalObject.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalObject.java.svn-base new file mode 100644 index 0000000..db98dc8 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/LocalObject.java.svn-base @@ -0,0 +1,143 @@ +package org.omg.CORBA; + +import org.omg.CORBA.portable.*; + +public abstract class LocalObject implements org.omg.CORBA.Object +{ + public LocalObject() + {} + + public boolean _is_equivalent(org.omg.CORBA.Object that) + { + return equals(that); + } + + public boolean _non_existent() + { + return false; + } + + public int _hash(int maximum) + { + return hashCode(); + } + + public String [] _ids()// new CORBA3.0 + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean _is_a(String repositoryId) + { + // throw new org.omg.CORBA.NO_IMPLEMENT(); // new CORBA 3.0 + String ids[]=_ids(); // new CORBA 3.0 + for(int i=0; iorg.omg.CORBA.ORBClass + */ + private final static String orb_key = "org.omg.CORBA.ORBClass"; + /** + * ORB Singleton Class name property name: org.omg.CORBA.ORBSingletonClass + */ + private final static String singleton_key = + "org.omg.CORBA.ORBSingletonClass"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.TIDORB + */ + private final static String TIDorb_class_name = "es.tid.TIDorbj.core.TIDORB"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.SingletonORB + */ + private final static String TIDorb_singleton_class_name = + "es.tid.TIDorbj.core.SingletonORB"; + + private static ORB singleton_orb = null; + + private static ORB create_orb(String class_name) + { + try { + return (ORB) Class.forName(class_name).newInstance(); + + } catch (Exception e) { + throw new INITIALIZE("Cannot create a " + class_name + " instance"); + } + } + + + public static ORB init() + { + if (singleton_orb == null) { + String class_name = null; + + try { + class_name = SystemProperties.findProperty(singleton_key); + } catch (SecurityException ex) { + //Applet Security violation + } + + if(class_name != null) + singleton_orb = create_orb(class_name); + else + singleton_orb = create_orb(TIDorb_singleton_class_name); + } + + return singleton_orb; + + } + + public static ORB init(String[] args, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(args != null) { + int size = args.length - 1; + for(int i = 0; i < size; i++) { + if (args[i].equals(orb_key)) { + str_class = args[i+1]; + break; + } + } + } + if (str_class == null) { + if(props != null) + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + str_class = SystemProperties.findProperty(orb_key); + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(args, props); + + return new_orb; + } + + public static ORB init(java.applet.Applet app, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(app != null) + str_class = app.getParameter(orb_key); + + if ((str_class == null) && (props != null)) { + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + try { + str_class = SystemProperties.findProperty(orb_key); + } catch (SecurityException se) {} + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(app, props); + + return new_orb; + } + + abstract protected void set_parameters(String[] args, + java.util.Properties props); + + abstract protected void set_parameters(java.applet.Applet app, + java.util.Properties props); + + public void connect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void disconnect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public String[] list_initial_services(); + + abstract public + org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName; + + abstract public String object_to_string(org.omg.CORBA.Object obj); + + abstract public org.omg.CORBA.Object string_to_object(String str); + + abstract public NVList create_list(int count); + + public NVList create_operation_list(org.omg.CORBA.Object oper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public NamedValue create_named_value(String s, Any any, int flags); + + abstract public ExceptionList create_exception_list(); + + abstract public ContextList create_context_list(); + + abstract public Context get_default_context(); + + abstract public Environment create_environment(); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + + abstract public void send_multiple_requests_oneway(Request[] req); + + abstract public void send_multiple_requests_deferred(Request[] req); + + abstract public boolean poll_next_response(); + + abstract public Request get_next_response() throws WrongTransaction; + + abstract public TypeCode get_primitive_tc(TCKind tcKind); + + abstract public TypeCode create_struct_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_union_tc(String id, String name, + TypeCode discriminator_type, + UnionMember[] members); + + abstract public TypeCode create_enum_tc(String id, String name, + String[] members); + + abstract public TypeCode create_alias_tc(String id, String name, + TypeCode original_type); + + abstract public TypeCode create_exception_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_interface_tc(String id, String name); + + abstract public TypeCode create_string_tc(int bound); + + abstract public TypeCode create_wstring_tc(int bound); + + abstract public TypeCode create_sequence_tc(int bound, + TypeCode element_type); + + abstract public TypeCode create_recursive_sequence_tc(int bound, int offset); + + abstract public TypeCode create_array_tc(int length, TypeCode element_type); + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_abstract_interface_tc( + String id, + String name) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_value_tc(String id, + String name, + short type_modifier, + TypeCode concrete_base, + ValueMember[] members) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_value_box_tc(String id, + String name, + TypeCode boxed_type) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public Any create_any(); + + public org.omg.CORBA.Current get_current() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void run() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void shutdown(boolean wait_for_completion) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void destroy() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean work_pending() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void perform_work() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean get_service_information(short service_type, + ServiceInformationHolder service_info) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Object.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Object.java.svn-base new file mode 100644 index 0000000..f32d0a6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Object.java.svn-base @@ -0,0 +1,52 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface Object { + + boolean _is_a(String repositoryIdentifier); + + boolean _is_equivalent(org.omg.CORBA.Object other); + + boolean _non_existent(); + + int _hash(int maximum); + + org.omg.CORBA.Object _duplicate(); + + void _release(); + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + org.omg.CORBA.InterfaceDef _get_interface(); + + org.omg.CORBA.Object _get_interface_def(); + + Request _request(String operation); + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result); + + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result, + ExceptionList exclist, + ContextList ctxlist); + + Policy _get_policy(int policy_type); + + DomainManager[] _get_domain_managers(); + + + org.omg.CORBA.Object _set_policy_override(Policy[] policies, + SetOverrideType set_add); + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ObjectHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ObjectHolder.java.svn-base new file mode 100644 index 0000000..72f12cb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ObjectHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ObjectHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Object value; + + public ObjectHolder() { + } + + public ObjectHolder(org.omg.CORBA.Object initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_Object(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_Object(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_objref); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/PERSIST_STORE.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PERSIST_STORE.java.svn-base new file mode 100644 index 0000000..ebcc735 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PERSIST_STORE.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class PERSIST_STORE extends org.omg.CORBA.SystemException { + + public PERSIST_STORE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public PERSIST_STORE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public PERSIST_STORE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public PERSIST_STORE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/PolicyError.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PolicyError.java.svn-base new file mode 100644 index 0000000..37c9a9d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PolicyError.java.svn-base @@ -0,0 +1,31 @@ +// +// PolicyError.java (exception) +// +// File generated: Wed Feb 21 17:45:49 CET 2001 +// by TIDorbJ idl2Java 1.0 +// + +package org.omg.CORBA; + +final public class PolicyError + extends org.omg.CORBA.UserException { + + public short reason; + + public PolicyError() { + super(PolicyErrorHelper.id()); + } + + public PolicyError(short reason) { + super(PolicyErrorHelper.id()); + + this.reason = reason; + } + + public PolicyError(String reason_string, short reason) { + super(PolicyErrorHelper.id()+" "+reason_string); + + this.reason = reason; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Principal.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Principal.java.svn-base new file mode 100644 index 0000000..272c39f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Principal.java.svn-base @@ -0,0 +1,25 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +/** +* @deprecated Principal +*/ +public class Principal { + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public byte[] name() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public void name(byte[] name) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/PrincipalHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PrincipalHolder.java.svn-base new file mode 100644 index 0000000..010f0ba --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/PrincipalHolder.java.svn-base @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class PrincipalHolder + implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Principal value; + + public PrincipalHolder() { + } + + public PrincipalHolder(org.omg.CORBA.Principal initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_Principal(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_Principal(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_Principal); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/Request.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Request.java.svn-base new file mode 100644 index 0000000..06d776c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/Request.java.svn-base @@ -0,0 +1,46 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +import org.omg.CORBA.Object; + +abstract public class Request { + + abstract public org.omg.CORBA.Object target(); + abstract public String operation(); + abstract public org.omg.CORBA.NVList arguments(); + abstract public org.omg.CORBA.NamedValue result(); + abstract public org.omg.CORBA.Environment env(); + abstract public org.omg.CORBA.ExceptionList exceptions(); + abstract public org.omg.CORBA.ContextList contexts(); + + abstract public void ctx( org.omg.CORBA.Context ctx); + abstract public org.omg.CORBA.Context ctx(); + + abstract public org.omg.CORBA.Any add_in_arg(); + abstract public org.omg.CORBA.Any add_named_in_arg(String name); + abstract public org.omg.CORBA.Any add_inout_arg(); + abstract public org.omg.CORBA.Any add_named_inout_arg(String name); + abstract public org.omg.CORBA.Any add_out_arg(); + abstract public org.omg.CORBA.Any add_named_out_arg(String name); + abstract public void set_return_type( org.omg.CORBA.TypeCode tc); + abstract public org.omg.CORBA.Any return_value(); + + abstract public void invoke(); + abstract public void send_oneway(); + abstract public void send_deferred(); + abstract public void get_response() throws + org.omg.CORBA.WrongTransaction; + abstract public boolean poll_response(); + + //BUG [#956] Invalid call to org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI + //additional Messaging functions + //abstract public void sendc(org.omg.CORBA.Object handler); + //abstract public void sendc(); + abstract public Object sendp(); + abstract public void prepare(Object p); + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ServerRequest.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ServerRequest.java.svn-base new file mode 100644 index 0000000..d3d2fa3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ServerRequest.java.svn-base @@ -0,0 +1,52 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ServerRequest { + + /** + * @deprecated use operation() + */ + public String op_name() { + return operation(); + } + public String operation() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public org.omg.CORBA.Context ctx(); + + /** + * @deprecated use arguments() + */ + public void params(org.omg.CORBA.NVList params) { + arguments(params); + } + public void arguments(org.omg.CORBA.NVList nv) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated use set_result() + */ + public void result(org.omg.CORBA.Any result) { + set_result(result); + } + public void set_result(org.omg.CORBA.Any result) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated use set_exception() + */ + public void except(org.omg.CORBA.Any except) { + set_exception(except); + } + public void set_exception(org.omg.CORBA.Any except) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ShortHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ShortHolder.java.svn-base new file mode 100644 index 0000000..03eb1c7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ShortHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ShortHolder implements org.omg.CORBA.portable.Streamable { + + public short value; + + public ShortHolder() { + } + + public ShortHolder(short initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_short(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_short(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_short); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/StringHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/StringHolder.java.svn-base new file mode 100644 index 0000000..8f75986 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/StringHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class StringHolder implements org.omg.CORBA.portable.Streamable { + + public String value; + + public StringHolder() { + } + + public StringHolder(String initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_string(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_string(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_string); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/SystemException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/SystemException.java.svn-base new file mode 100644 index 0000000..f98fda9 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/SystemException.java.svn-base @@ -0,0 +1,42 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class SystemException extends java.lang.RuntimeException { + + public int minor; + public CompletionStatus completed; + + protected SystemException(String reason, int minor, + CompletionStatus completed) { + super(reason); + this.minor = minor; + this.completed = completed; + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append(super.toString()); + buffer.append(" Minor: "); + buffer.append(minor); + buffer.append(" CompletionStatus: "); + switch(completed.value()) { + case CompletionStatus._COMPLETED_NO: + buffer.append("COMPLETED_NO."); + break; + case CompletionStatus._COMPLETED_YES: + buffer.append("COMPLETED_YES."); + break; + case CompletionStatus._COMPLETED_MAYBE: + buffer.append("COMPLETED_MAYBE."); + break; + } + + return buffer.toString(); + } +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TIMEOUT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TIMEOUT.java.svn-base new file mode 100644 index 0000000..0749add --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TIMEOUT.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 2001 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TIMEOUT extends org.omg.CORBA.SystemException { + + public TIMEOUT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TIMEOUT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TIMEOUT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TIMEOUT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_REQUIRED.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_REQUIRED.java.svn-base new file mode 100644 index 0000000..af7198a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_REQUIRED.java.svn-base @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSACTION_REQUIRED extends org.omg.CORBA.SystemException { + + public TRANSACTION_REQUIRED() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_REQUIRED(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSACTION_REQUIRED(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_REQUIRED(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_ROLLEDBACK.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_ROLLEDBACK.java.svn-base new file mode 100644 index 0000000..c0193eb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSACTION_ROLLEDBACK.java.svn-base @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSACTION_ROLLEDBACK extends org.omg.CORBA.SystemException { + + public TRANSACTION_ROLLEDBACK() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_ROLLEDBACK(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSACTION_ROLLEDBACK(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_ROLLEDBACK(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSIENT.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSIENT.java.svn-base new file mode 100644 index 0000000..8d8b568 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TRANSIENT.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSIENT extends org.omg.CORBA.SystemException { + + public TRANSIENT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSIENT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSIENT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSIENT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCode.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCode.java.svn-base new file mode 100644 index 0000000..0597061 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCode.java.svn-base @@ -0,0 +1,66 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class TypeCode implements org.omg.CORBA.portable.IDLEntity { + + abstract public boolean equal(org.omg.CORBA.TypeCode tc); + abstract public boolean equivalent(org.omg.CORBA.TypeCode tc); + abstract public org.omg.CORBA.TypeCode get_compact_typecode(); + abstract public org.omg.CORBA.TCKind kind(); + + abstract public java.lang.String id() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public java.lang.String name() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public int member_count() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public java.lang.String member_name(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + + abstract public org.omg.CORBA.TypeCode member_type(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + + abstract public org.omg.CORBA.Any member_label(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + abstract public org.omg.CORBA.TypeCode discriminator_type() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public int default_index() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public int length() throws org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public org.omg.CORBA.TypeCode content_type() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + public short fixed_digits() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public short fixed_scale() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public short member_visibility(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public org.omg.CORBA.TypeCode concrete_base_type() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHelper.java.svn-base new file mode 100644 index 0000000..df1fd39 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHelper.java.svn-base @@ -0,0 +1,44 @@ +// +// TypeCodeHelper.java (helper) +// +// File generated: Wed Feb 21 16:59:33 CET 2001 +// by TIDorbJ idl2Java 1.0 +// + +package org.omg.CORBA; + +abstract public class TypeCodeHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, TypeCode value) { + any.insert_TypeCode(value); + }; + + public static TypeCode extract(org.omg.CORBA.Any any) { + return any.extract_TypeCode(); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().get_primitive_tc(TCKind.tk_TypeCode); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CORBA/TypeCode:1.0"; + }; + + public static TypeCode read(org.omg.CORBA.portable.InputStream is) { + return is.read_TypeCode(); + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, TypeCode val) { + os.write_TypeCode(val); + }; + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHolder.java.svn-base new file mode 100644 index 0000000..edefd9d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/TypeCodeHolder.java.svn-base @@ -0,0 +1,31 @@ +// +// TypeCodeHolder.java (holder) +// +// File generated: Mon Sep 25 11:22:55 GMT+02:00 2000 +// by TidORB Idl2Java 1.0 +// + +package org.omg.CORBA; + +public class TypeCodeHolder + implements org.omg.CORBA.portable.Streamable { + + public TypeCode value; + public TypeCodeHolder() {} + public TypeCodeHolder(TypeCode initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_TypeCode(); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_TypeCode(value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc((org.omg.CORBA.TCKind.tk_TypeCode)); + }; + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/UNKNOWN.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UNKNOWN.java.svn-base new file mode 100644 index 0000000..3a01b0e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UNKNOWN.java.svn-base @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class UNKNOWN extends org.omg.CORBA.SystemException { + + public UNKNOWN() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public UNKNOWN(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public UNKNOWN(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public UNKNOWN(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/UnknownUserException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UnknownUserException.java.svn-base new file mode 100644 index 0000000..0cbd4a2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UnknownUserException.java.svn-base @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class UnknownUserException extends org.omg.CORBA.UserException { + public org.omg.CORBA.Any except; + + public UnknownUserException() { + super(); + } + + public UnknownUserException(org.omg.CORBA.Any a) { + super(); + except = a; + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/UserException.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UserException.java.svn-base new file mode 100644 index 0000000..750e8e1 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/UserException.java.svn-base @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class UserException extends java.lang.Exception + implements org.omg.CORBA.portable.IDLEntity { + + public UserException () { + super(); +} + +public UserException (java.lang.String value) { + + super(value); +} + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHelper.java.svn-base new file mode 100644 index 0000000..b56f011 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHelper.java.svn-base @@ -0,0 +1,61 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public final class ValueBaseHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static String id() { + return "IDL:omg.org/CORBA/ValueBase:1.0"; + }; + + private static org.omg.CORBA.TypeCode _type = null; + + + public static org.omg.CORBA.TypeCode type() + { + if (_type == null){ + + org.omg.CORBA.ValueMember[] _members = new org.omg.CORBA.ValueMember[0]; + + _type = _orb().create_value_tc(id(), + "CustomMarshal", + org.omg.CORBA.VM_NONE.value, + null, + _members); + } + + return _type; + } + + public static void insert(org.omg.CORBA.Any any, + java.io.Serializable _value) + { + any.insert_Value(_value); + } + + public static java.io.Serializable extract(org.omg.CORBA.Any any) + { + return any.extract_Value(); + } + + public static java.io.Serializable read( + org.omg.CORBA.portable.InputStream _input) + { + return ((org.omg.CORBA_2_3.portable.InputStream)_input).read_value(); + + } + + public static void write(org.omg.CORBA.portable.OutputStream _output, + java.io.Serializable _value) + { + ((org.omg.CORBA_2_3.portable.OutputStream) _output).write_value(_value); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHolder.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHolder.java.svn-base new file mode 100644 index 0000000..d71f82e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/ValueBaseHolder.java.svn-base @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ValueBaseHolder + implements org.omg.CORBA.portable.Streamable { + + public java.io.Serializable value; + + public ValueBaseHolder() { + } + + public ValueBaseHolder(java.io.Serializable initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = ValueBaseHelper.read(is); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + ValueBaseHelper.write(os, value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_value); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/.svn/text-base/WrongTransaction.java.svn-base b/idl/orb/extra/org/omg/CORBA/.svn/text-base/WrongTransaction.java.svn-base new file mode 100644 index 0000000..014e802 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/.svn/text-base/WrongTransaction.java.svn-base @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public final class WrongTransaction extends org.omg.CORBA.UserException { + + public WrongTransaction() { + super("IDL:omg.org/CORBA/WrongTransaction:1.0"); + } + + public WrongTransaction(String reason) { // full constructor + super("IDL:omg.org/CORBA/WrongTransaction:1.0 "+reason); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/Any.java b/idl/orb/extra/org/omg/CORBA/Any.java new file mode 100644 index 0000000..32eba80 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Any.java @@ -0,0 +1,116 @@ +package org.omg.CORBA; + +public abstract class Any implements org.omg.CORBA.portable.IDLEntity { + + abstract public boolean equal(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.TypeCode type(); + abstract public void type(org.omg.CORBA.TypeCode type); + + abstract public void read_value(org.omg.CORBA.portable.InputStream is, + org.omg.CORBA.TypeCode type) throws org.omg.CORBA.MARSHAL; + abstract public void write_value(org.omg.CORBA.portable.OutputStream os); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + abstract public org.omg.CORBA.portable.InputStream create_input_stream(); + + abstract public short extract_short() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_short(short s); + + abstract public int extract_long() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_long(int i); + + abstract public long extract_longlong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_longlong(long l); + + abstract public short extract_ushort() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ushort(short s); + + abstract public int extract_ulong() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulong(int i); + + abstract public long extract_ulonglong() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_ulonglong(long l); + + abstract public float extract_float() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_float(float f); + + abstract public double extract_double() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_double(double d); + + abstract public boolean extract_boolean() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_boolean(boolean b); + + abstract public char extract_char() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_char(char c); + + abstract public char extract_wchar() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wchar(char c); + + abstract public byte extract_octet() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_octet(byte b); + + abstract public org.omg.CORBA.Any extract_any() + throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_any(org.omg.CORBA.Any a); + + abstract public org.omg.CORBA.Object extract_Object() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Object(org.omg.CORBA.Object obj); + + abstract public java.io.Serializable extract_Value() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_Value(java.io.Serializable v); + abstract public void insert_Value(java.io.Serializable v, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.MARSHAL; + + abstract public void insert_Object(org.omg.CORBA.Object obj, + org.omg.CORBA.TypeCode type) throws + org.omg.CORBA.BAD_PARAM; + + abstract public String extract_string() throws org.omg.CORBA.BAD_OPERATION; + abstract public void insert_string(String s) throws + org.omg.CORBA.DATA_CONVERSION, org.omg.CORBA.MARSHAL; + + abstract public String extract_wstring() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_wstring(String value) throws + org.omg.CORBA.MARSHAL; + + abstract public TypeCode extract_TypeCode() throws + org.omg.CORBA.BAD_OPERATION; + abstract public void insert_TypeCode(TypeCode value); + + /** + *@ deprecated + */ + public Principal extract_Principal() throws org.omg.CORBA.BAD_OPERATION { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + /** + *@ deprecated + */ + public void insert_Principal(Principal p) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.Streamable extract_Streamable() throws + org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_Streamable(org.omg.CORBA.portable.Streamable s) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.math.BigDecimal extract_fixed() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public void insert_fixed(java.math.BigDecimal f, + org.omg.CORBA.TypeCode t) throws org.omg.CORBA.BAD_INV_ORDER { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} + diff --git a/idl/orb/extra/org/omg/CORBA/AnyHolder.java b/idl/orb/extra/org/omg/CORBA/AnyHolder.java new file mode 100644 index 0000000..3faeb1e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/AnyHolder.java @@ -0,0 +1,39 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class AnyHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Any value; + protected org.omg.CORBA.TypeCode type; + + public AnyHolder() { + value = null; + type = null; + } + + public AnyHolder(org.omg.CORBA.Any initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_any(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_any(value); + } + + public synchronized org.omg.CORBA.TypeCode _type() + { + if(type == null) + type = org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_any); + return type; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java b/idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java new file mode 100644 index 0000000..b8063c6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_CONTEXT.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_CONTEXT extends org.omg.CORBA.SystemException { + + public BAD_CONTEXT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_CONTEXT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_CONTEXT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_CONTEXT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_INV_ORDER.java b/idl/orb/extra/org/omg/CORBA/BAD_INV_ORDER.java new file mode 100644 index 0000000..9f16b1f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_INV_ORDER.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_INV_ORDER extends org.omg.CORBA.SystemException { + + public BAD_INV_ORDER() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_INV_ORDER(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_INV_ORDER(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_INV_ORDER(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_OPERATION.java b/idl/orb/extra/org/omg/CORBA/BAD_OPERATION.java new file mode 100644 index 0000000..7bc62d0 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_OPERATION.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_OPERATION extends org.omg.CORBA.SystemException { + + public BAD_OPERATION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_OPERATION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_OPERATION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_OPERATION(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_PARAM.java b/idl/orb/extra/org/omg/CORBA/BAD_PARAM.java new file mode 100644 index 0000000..ce96fce --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_PARAM.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_PARAM extends org.omg.CORBA.SystemException { + + public BAD_PARAM() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_PARAM(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_PARAM(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_PARAM(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_POLICY.java b/idl/orb/extra/org/omg/CORBA/BAD_POLICY.java new file mode 100644 index 0000000..1f2440e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_POLICY.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY { + short value = (short) 0; +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_POLICY_TYPE.java b/idl/orb/extra/org/omg/CORBA/BAD_POLICY_TYPE.java new file mode 100644 index 0000000..66fd021 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_POLICY_TYPE.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY_TYPE { + short value = (short) 2; +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_POLICY_VALUE.java b/idl/orb/extra/org/omg/CORBA/BAD_POLICY_VALUE.java new file mode 100644 index 0000000..7514fc6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_POLICY_VALUE.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface BAD_POLICY_VALUE { + short value = (short) 3; +} diff --git a/idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java b/idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java new file mode 100644 index 0000000..0c336b3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BAD_TYPECODE.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class BAD_TYPECODE extends org.omg.CORBA.SystemException { + + public BAD_TYPECODE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_TYPECODE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public BAD_TYPECODE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public BAD_TYPECODE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/BooleanHolder.java b/idl/orb/extra/org/omg/CORBA/BooleanHolder.java new file mode 100644 index 0000000..824bb17 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/BooleanHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class BooleanHolder implements org.omg.CORBA.portable.Streamable { + + public boolean value; + + public BooleanHolder() { + } + + public BooleanHolder(boolean initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_boolean(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_boolean(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_boolean); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/Bounds.java b/idl/orb/extra/org/omg/CORBA/Bounds.java new file mode 100644 index 0000000..75fa0ac --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Bounds.java @@ -0,0 +1,23 @@ +// +// Bounds.java (exception) +// +// File generated: Mon Sep 25 18:46:50 GMT+02:00 2000 +// by TidORB Idl2Java 1.0 +// + +package org.omg.CORBA; + +final public class Bounds + extends org.omg.CORBA.UserException { + + + public Bounds() { + super("IDL:omg.org/CORBA/Bounds:1.0"); + } + + public Bounds(String reason) { + super("IDL:omg.org/CORBA/Bounds:1.0 "+reason); + + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/ByteHolder.java b/idl/orb/extra/org/omg/CORBA/ByteHolder.java new file mode 100644 index 0000000..6b7db45 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ByteHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ByteHolder implements org.omg.CORBA.portable.Streamable { + + public byte value; + + public ByteHolder() { + } + + public ByteHolder(byte initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_octet(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_octet(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_octet); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/CODESET_INCOMPATIBLE.java b/idl/orb/extra/org/omg/CORBA/CODESET_INCOMPATIBLE.java new file mode 100644 index 0000000..5f9c15e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/CODESET_INCOMPATIBLE.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class CODESET_INCOMPATIBLE extends org.omg.CORBA.SystemException { + + public CODESET_INCOMPATIBLE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public CODESET_INCOMPATIBLE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public CODESET_INCOMPATIBLE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public CODESET_INCOMPATIBLE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java b/idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java new file mode 100644 index 0000000..7170db9 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/COMM_FAILURE.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class COMM_FAILURE extends org.omg.CORBA.SystemException { + + public COMM_FAILURE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public COMM_FAILURE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public COMM_FAILURE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public COMM_FAILURE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/CharHolder.java b/idl/orb/extra/org/omg/CORBA/CharHolder.java new file mode 100644 index 0000000..8e06bdb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/CharHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class CharHolder implements org.omg.CORBA.portable.Streamable { + + public char value; + + public CharHolder() { + } + + public CharHolder(char initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_char(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_char(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_char); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/CompletionStatus.java b/idl/orb/extra/org/omg/CORBA/CompletionStatus.java new file mode 100644 index 0000000..b3e6b3b --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/CompletionStatus.java @@ -0,0 +1,43 @@ +package org.omg.CORBA; + +public class CompletionStatus implements org.omg.CORBA.portable.IDLEntity { + + protected int completion_value; + + protected CompletionStatus(int _value) { + completion_value = _value; + } + + public int value() + { + return completion_value; + } + + public static CompletionStatus from_int(int val) + throws org.omg.CORBA.BAD_PARAM + { + switch (val) { + case _COMPLETED_YES: + return COMPLETED_YES; + case _COMPLETED_NO: + return COMPLETED_NO; + case _COMPLETED_MAYBE: + return COMPLETED_MAYBE; + default: + throw new org.omg.CORBA.BAD_PARAM(); + } + } + + public static final int _COMPLETED_YES = 0; + public static final CompletionStatus COMPLETED_YES = + new CompletionStatus(_COMPLETED_YES); + + public static final int _COMPLETED_NO = 1; + public static final CompletionStatus COMPLETED_NO = + new CompletionStatus(_COMPLETED_NO); + + public static final int _COMPLETED_MAYBE = 2; + public static final CompletionStatus COMPLETED_MAYBE = + new CompletionStatus(_COMPLETED_MAYBE); + +} diff --git a/idl/orb/extra/org/omg/CORBA/Context.java b/idl/orb/extra/org/omg/CORBA/Context.java new file mode 100644 index 0000000..5c9cccd --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Context.java @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class Context { + + abstract public String context_name(); + abstract public org.omg.CORBA.Context parent(); + abstract public org.omg.CORBA.Context create_child( + String child_context_name); + abstract public void set_one_value(String prop_name, + org.omg.CORBA.Any value); + abstract public void set_values(org.omg.CORBA.NVList values); + abstract public void delete_values(String prop_name); + abstract public org.omg.CORBA.NVList get_values(String start_scope, + int op_flags, String pattern); +} diff --git a/idl/orb/extra/org/omg/CORBA/ContextList.java b/idl/orb/extra/org/omg/CORBA/ContextList.java new file mode 100644 index 0000000..48ff706 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ContextList.java @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ContextList { + + abstract public int count(); + abstract public void add(String ctx); + abstract public String item( int index) throws org.omg.CORBA.Bounds; + abstract public void remove( int index) throws org.omg.CORBA.Bounds; +} diff --git a/idl/orb/extra/org/omg/CORBA/DATA_CONVERSION.java b/idl/orb/extra/org/omg/CORBA/DATA_CONVERSION.java new file mode 100644 index 0000000..816e20e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/DATA_CONVERSION.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class DATA_CONVERSION extends org.omg.CORBA.SystemException { + + public DATA_CONVERSION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public DATA_CONVERSION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public DATA_CONVERSION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public DATA_CONVERSION(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/DoubleHolder.java b/idl/orb/extra/org/omg/CORBA/DoubleHolder.java new file mode 100644 index 0000000..51db57c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/DoubleHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class DoubleHolder implements org.omg.CORBA.portable.Streamable { + + public double value; + + public DoubleHolder() { + } + + public DoubleHolder(double initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_double(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_double(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_double); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/DynamicImplementation.java b/idl/orb/extra/org/omg/CORBA/DynamicImplementation.java new file mode 100644 index 0000000..4d0f219 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/DynamicImplementation.java @@ -0,0 +1,22 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +/** +* @deprecated org.omg.CORBA.DynamicImplementation +*/ +abstract public class DynamicImplementation + extends org.omg.CORBA.portable.ObjectImpl { + + /** + * @deprecated Deprecated by the Portable Object Adapter (POA). + */ + public void invoke(org.omg.CORBA.ServerRequest request) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + +} diff --git a/idl/orb/extra/org/omg/CORBA/Environment.java b/idl/orb/extra/org/omg/CORBA/Environment.java new file mode 100644 index 0000000..4b3a7cc --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Environment.java @@ -0,0 +1,12 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public abstract class Environment { + abstract public void exception(java.lang.Exception exception); + abstract public java.lang.Exception exception(); + abstract public void clear(); +} diff --git a/idl/orb/extra/org/omg/CORBA/ExceptionList.java b/idl/orb/extra/org/omg/CORBA/ExceptionList.java new file mode 100644 index 0000000..620fc11 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ExceptionList.java @@ -0,0 +1,18 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ExceptionList { + + abstract public int count(); + + abstract public void add(org.omg.CORBA.TypeCode exc); + + abstract public org.omg.CORBA.TypeCode item(int index) throws + org.omg.CORBA.Bounds; + + abstract public void remove(int index) throws org.omg.CORBA.Bounds; +} diff --git a/idl/orb/extra/org/omg/CORBA/FREE_MEM.java b/idl/orb/extra/org/omg/CORBA/FREE_MEM.java new file mode 100644 index 0000000..e5fa173 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/FREE_MEM.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class FREE_MEM extends org.omg.CORBA.SystemException { + + public FREE_MEM() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public FREE_MEM(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public FREE_MEM(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public FREE_MEM(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/FloatHolder.java b/idl/orb/extra/org/omg/CORBA/FloatHolder.java new file mode 100644 index 0000000..4b665a8 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/FloatHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class FloatHolder implements org.omg.CORBA.portable.Streamable { + + public float value; + + public FloatHolder() { + } + + public FloatHolder(float initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_float(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_float(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_float); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java b/idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java new file mode 100644 index 0000000..62db106 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/IMP_LIMIT.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class IMP_LIMIT extends org.omg.CORBA.SystemException { + + public IMP_LIMIT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public IMP_LIMIT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public IMP_LIMIT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public IMP_LIMIT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INITIALIZE.java b/idl/orb/extra/org/omg/CORBA/INITIALIZE.java new file mode 100644 index 0000000..5781227 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INITIALIZE.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INITIALIZE extends org.omg.CORBA.SystemException { + + public INITIALIZE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INITIALIZE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INITIALIZE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INITIALIZE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INTERNAL.java b/idl/orb/extra/org/omg/CORBA/INTERNAL.java new file mode 100644 index 0000000..d2adce5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INTERNAL.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INTERNAL extends org.omg.CORBA.SystemException { + + public INTERNAL() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INTERNAL(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INTERNAL(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INTERNAL(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INTF_REPOS.java b/idl/orb/extra/org/omg/CORBA/INTF_REPOS.java new file mode 100644 index 0000000..0c5f7e2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INTF_REPOS.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INTF_REPOS extends org.omg.CORBA.SystemException { + + public INTF_REPOS() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INTF_REPOS(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INTF_REPOS(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INTF_REPOS(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INVALID_TRANSACTION.java b/idl/orb/extra/org/omg/CORBA/INVALID_TRANSACTION.java new file mode 100644 index 0000000..8c9f922 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INVALID_TRANSACTION.java @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INVALID_TRANSACTION extends org.omg.CORBA.SystemException { + + public INVALID_TRANSACTION() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INVALID_TRANSACTION(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INVALID_TRANSACTION(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INVALID_TRANSACTION(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INV_FLAG.java b/idl/orb/extra/org/omg/CORBA/INV_FLAG.java new file mode 100644 index 0000000..928eb88 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INV_FLAG.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_FLAG extends org.omg.CORBA.SystemException { + + public INV_FLAG() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_FLAG(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_FLAG(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_FLAG(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INV_IDENT.java b/idl/orb/extra/org/omg/CORBA/INV_IDENT.java new file mode 100644 index 0000000..c276e88 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INV_IDENT.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_IDENT extends org.omg.CORBA.SystemException { + + public INV_IDENT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_IDENT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_IDENT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_IDENT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INV_OBJREF.java b/idl/orb/extra/org/omg/CORBA/INV_OBJREF.java new file mode 100644 index 0000000..f5dc7e5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INV_OBJREF.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_OBJREF extends org.omg.CORBA.SystemException { + + public INV_OBJREF() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_OBJREF(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_OBJREF(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_OBJREF(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/INV_POLICY.java b/idl/orb/extra/org/omg/CORBA/INV_POLICY.java new file mode 100644 index 0000000..432a76f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/INV_POLICY.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class INV_POLICY extends org.omg.CORBA.SystemException { + + public INV_POLICY() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_POLICY(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public INV_POLICY(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public INV_POLICY(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/IntHolder.java b/idl/orb/extra/org/omg/CORBA/IntHolder.java new file mode 100644 index 0000000..7bbbda7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/IntHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class IntHolder implements org.omg.CORBA.portable.Streamable { + + public int value; + + public IntHolder() { + } + + public IntHolder(int initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_long(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_long(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_long); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/LocalInterface.java b/idl/orb/extra/org/omg/CORBA/LocalInterface.java new file mode 100644 index 0000000..48141e1 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/LocalInterface.java @@ -0,0 +1,3 @@ +package org.omg.CORBA; +public interface LocalInterface extends org.omg.CORBA.Object{} + diff --git a/idl/orb/extra/org/omg/CORBA/LocalObject.java b/idl/orb/extra/org/omg/CORBA/LocalObject.java new file mode 100644 index 0000000..db98dc8 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/LocalObject.java @@ -0,0 +1,143 @@ +package org.omg.CORBA; + +import org.omg.CORBA.portable.*; + +public abstract class LocalObject implements org.omg.CORBA.Object +{ + public LocalObject() + {} + + public boolean _is_equivalent(org.omg.CORBA.Object that) + { + return equals(that); + } + + public boolean _non_existent() + { + return false; + } + + public int _hash(int maximum) + { + return hashCode(); + } + + public String [] _ids()// new CORBA3.0 + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean _is_a(String repositoryId) + { + // throw new org.omg.CORBA.NO_IMPLEMENT(); // new CORBA 3.0 + String ids[]=_ids(); // new CORBA 3.0 + for(int i=0; iorg.omg.CORBA.ORBClass + */ + private final static String orb_key = "org.omg.CORBA.ORBClass"; + /** + * ORB Singleton Class name property name: org.omg.CORBA.ORBSingletonClass + */ + private final static String singleton_key = + "org.omg.CORBA.ORBSingletonClass"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.TIDORB + */ + private final static String TIDorb_class_name = "es.tid.TIDorbj.core.TIDORB"; + + /** + * TIDorb ORB Class name: es.tid.TIDorbj.core.SingletonORB + */ + private final static String TIDorb_singleton_class_name = + "es.tid.TIDorbj.core.SingletonORB"; + + private static ORB singleton_orb = null; + + private static ORB create_orb(String class_name) + { + try { + return (ORB) Class.forName(class_name).newInstance(); + + } catch (Exception e) { + throw new INITIALIZE("Cannot create a " + class_name + " instance"); + } + } + + + public static ORB init() + { + if (singleton_orb == null) { + String class_name = null; + + try { + class_name = SystemProperties.findProperty(singleton_key); + } catch (SecurityException ex) { + //Applet Security violation + } + + if(class_name != null) + singleton_orb = create_orb(class_name); + else + singleton_orb = create_orb(TIDorb_singleton_class_name); + } + + return singleton_orb; + + } + + public static ORB init(String[] args, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(args != null) { + int size = args.length - 1; + for(int i = 0; i < size; i++) { + if (args[i].equals(orb_key)) { + str_class = args[i+1]; + break; + } + } + } + if (str_class == null) { + if(props != null) + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + str_class = SystemProperties.findProperty(orb_key); + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(args, props); + + return new_orb; + } + + public static ORB init(java.applet.Applet app, java.util.Properties props) + { + // search ORB class + + String str_class = null; + + if(app != null) + str_class = app.getParameter(orb_key); + + if ((str_class == null) && (props != null)) { + str_class = props.getProperty(orb_key); + } + + if (str_class == null) { + try { + str_class = SystemProperties.findProperty(orb_key); + } catch (SecurityException se) {} + } + + if(str_class == null) + str_class = TIDorb_class_name; + + ORB new_orb = create_orb(str_class); + + new_orb.set_parameters(app, props); + + return new_orb; + } + + abstract protected void set_parameters(String[] args, + java.util.Properties props); + + abstract protected void set_parameters(java.applet.Applet app, + java.util.Properties props); + + public void connect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void disconnect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public String[] list_initial_services(); + + abstract public + org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName; + + abstract public String object_to_string(org.omg.CORBA.Object obj); + + abstract public org.omg.CORBA.Object string_to_object(String str); + + abstract public NVList create_list(int count); + + public NVList create_operation_list(org.omg.CORBA.Object oper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public NamedValue create_named_value(String s, Any any, int flags); + + abstract public ExceptionList create_exception_list(); + + abstract public ContextList create_context_list(); + + abstract public Context get_default_context(); + + abstract public Environment create_environment(); + + abstract public org.omg.CORBA.portable.OutputStream create_output_stream(); + + abstract public void send_multiple_requests_oneway(Request[] req); + + abstract public void send_multiple_requests_deferred(Request[] req); + + abstract public boolean poll_next_response(); + + abstract public Request get_next_response() throws WrongTransaction; + + abstract public TypeCode get_primitive_tc(TCKind tcKind); + + abstract public TypeCode create_struct_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_union_tc(String id, String name, + TypeCode discriminator_type, + UnionMember[] members); + + abstract public TypeCode create_enum_tc(String id, String name, + String[] members); + + abstract public TypeCode create_alias_tc(String id, String name, + TypeCode original_type); + + abstract public TypeCode create_exception_tc(String id, String name, + StructMember[] members); + + abstract public TypeCode create_interface_tc(String id, String name); + + abstract public TypeCode create_string_tc(int bound); + + abstract public TypeCode create_wstring_tc(int bound); + + abstract public TypeCode create_sequence_tc(int bound, + TypeCode element_type); + + abstract public TypeCode create_recursive_sequence_tc(int bound, int offset); + + abstract public TypeCode create_array_tc(int length, TypeCode element_type); + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_abstract_interface_tc( + String id, + String name) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.TypeCode create_value_tc(String id, + String name, + short type_modifier, + TypeCode concrete_base, + ValueMember[] members) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_value_box_tc(String id, + String name, + TypeCode boxed_type) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public Any create_any(); + + public org.omg.CORBA.Current get_current() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void run() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void shutdown(boolean wait_for_completion) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void destroy() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean work_pending() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void perform_work() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean get_service_information(short service_type, + ServiceInformationHolder service_info) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/all-wcprops new file mode 100644 index 0000000..4ceedc3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ORBPackage +END +InvalidName.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ORBPackage/InvalidName.java +END diff --git a/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/entries b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/entries new file mode 100644 index 0000000..e4ecace --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/ORBPackage +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +InvalidName.java +file + + + + +2009-02-16T09:48:55.000000Z +3e4773994b84a47ef762930d66b44e3c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +295 + diff --git a/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/prop-base/InvalidName.java.svn-base b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/prop-base/InvalidName.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/prop-base/InvalidName.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/text-base/InvalidName.java.svn-base b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/text-base/InvalidName.java.svn-base new file mode 100644 index 0000000..a3563bb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ORBPackage/.svn/text-base/InvalidName.java.svn-base @@ -0,0 +1,15 @@ +package org.omg.CORBA.ORBPackage; + +final public class InvalidName + extends org.omg.CORBA.UserException { + + public InvalidName() { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0"); + } + + public InvalidName(String reason) { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/ORBPackage/InvalidName.java b/idl/orb/extra/org/omg/CORBA/ORBPackage/InvalidName.java new file mode 100644 index 0000000..a3563bb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ORBPackage/InvalidName.java @@ -0,0 +1,15 @@ +package org.omg.CORBA.ORBPackage; + +final public class InvalidName + extends org.omg.CORBA.UserException { + + public InvalidName() { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0"); + } + + public InvalidName(String reason) { + super("IDL:omg.org/CORBA/ORB/InvalidName:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/Object.java b/idl/orb/extra/org/omg/CORBA/Object.java new file mode 100644 index 0000000..f32d0a6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Object.java @@ -0,0 +1,52 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public interface Object { + + boolean _is_a(String repositoryIdentifier); + + boolean _is_equivalent(org.omg.CORBA.Object other); + + boolean _non_existent(); + + int _hash(int maximum); + + org.omg.CORBA.Object _duplicate(); + + void _release(); + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + org.omg.CORBA.InterfaceDef _get_interface(); + + org.omg.CORBA.Object _get_interface_def(); + + Request _request(String operation); + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result); + + + Request _create_request(Context ctx, + String operation, + NVList arg_list, + NamedValue result, + ExceptionList exclist, + ContextList ctxlist); + + Policy _get_policy(int policy_type); + + DomainManager[] _get_domain_managers(); + + + org.omg.CORBA.Object _set_policy_override(Policy[] policies, + SetOverrideType set_add); + +} diff --git a/idl/orb/extra/org/omg/CORBA/ObjectHolder.java b/idl/orb/extra/org/omg/CORBA/ObjectHolder.java new file mode 100644 index 0000000..72f12cb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ObjectHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ObjectHolder implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Object value; + + public ObjectHolder() { + } + + public ObjectHolder(org.omg.CORBA.Object initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_Object(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_Object(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_objref); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/PERSIST_STORE.java b/idl/orb/extra/org/omg/CORBA/PERSIST_STORE.java new file mode 100644 index 0000000..ebcc735 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/PERSIST_STORE.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class PERSIST_STORE extends org.omg.CORBA.SystemException { + + public PERSIST_STORE() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public PERSIST_STORE(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public PERSIST_STORE(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public PERSIST_STORE(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/PolicyError.java b/idl/orb/extra/org/omg/CORBA/PolicyError.java new file mode 100644 index 0000000..37c9a9d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/PolicyError.java @@ -0,0 +1,31 @@ +// +// PolicyError.java (exception) +// +// File generated: Wed Feb 21 17:45:49 CET 2001 +// by TIDorbJ idl2Java 1.0 +// + +package org.omg.CORBA; + +final public class PolicyError + extends org.omg.CORBA.UserException { + + public short reason; + + public PolicyError() { + super(PolicyErrorHelper.id()); + } + + public PolicyError(short reason) { + super(PolicyErrorHelper.id()); + + this.reason = reason; + } + + public PolicyError(String reason_string, short reason) { + super(PolicyErrorHelper.id()+" "+reason_string); + + this.reason = reason; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/Principal.java b/idl/orb/extra/org/omg/CORBA/Principal.java new file mode 100644 index 0000000..272c39f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Principal.java @@ -0,0 +1,25 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +/** +* @deprecated Principal +*/ +public class Principal { + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public byte[] name() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public void name(byte[] name) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/PrincipalHolder.java b/idl/orb/extra/org/omg/CORBA/PrincipalHolder.java new file mode 100644 index 0000000..010f0ba --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/PrincipalHolder.java @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class PrincipalHolder + implements org.omg.CORBA.portable.Streamable { + + public org.omg.CORBA.Principal value; + + public PrincipalHolder() { + } + + public PrincipalHolder(org.omg.CORBA.Principal initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_Principal(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_Principal(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_Principal); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/Request.java b/idl/orb/extra/org/omg/CORBA/Request.java new file mode 100644 index 0000000..06d776c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/Request.java @@ -0,0 +1,46 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +import org.omg.CORBA.Object; + +abstract public class Request { + + abstract public org.omg.CORBA.Object target(); + abstract public String operation(); + abstract public org.omg.CORBA.NVList arguments(); + abstract public org.omg.CORBA.NamedValue result(); + abstract public org.omg.CORBA.Environment env(); + abstract public org.omg.CORBA.ExceptionList exceptions(); + abstract public org.omg.CORBA.ContextList contexts(); + + abstract public void ctx( org.omg.CORBA.Context ctx); + abstract public org.omg.CORBA.Context ctx(); + + abstract public org.omg.CORBA.Any add_in_arg(); + abstract public org.omg.CORBA.Any add_named_in_arg(String name); + abstract public org.omg.CORBA.Any add_inout_arg(); + abstract public org.omg.CORBA.Any add_named_inout_arg(String name); + abstract public org.omg.CORBA.Any add_out_arg(); + abstract public org.omg.CORBA.Any add_named_out_arg(String name); + abstract public void set_return_type( org.omg.CORBA.TypeCode tc); + abstract public org.omg.CORBA.Any return_value(); + + abstract public void invoke(); + abstract public void send_oneway(); + abstract public void send_deferred(); + abstract public void get_response() throws + org.omg.CORBA.WrongTransaction; + abstract public boolean poll_response(); + + //BUG [#956] Invalid call to org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI + //additional Messaging functions + //abstract public void sendc(org.omg.CORBA.Object handler); + //abstract public void sendc(); + abstract public Object sendp(); + abstract public void prepare(Object p); + +} diff --git a/idl/orb/extra/org/omg/CORBA/ServerRequest.java b/idl/orb/extra/org/omg/CORBA/ServerRequest.java new file mode 100644 index 0000000..d3d2fa3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ServerRequest.java @@ -0,0 +1,52 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class ServerRequest { + + /** + * @deprecated use operation() + */ + public String op_name() { + return operation(); + } + public String operation() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + abstract public org.omg.CORBA.Context ctx(); + + /** + * @deprecated use arguments() + */ + public void params(org.omg.CORBA.NVList params) { + arguments(params); + } + public void arguments(org.omg.CORBA.NVList nv) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated use set_result() + */ + public void result(org.omg.CORBA.Any result) { + set_result(result); + } + public void set_result(org.omg.CORBA.Any result) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated use set_exception() + */ + public void except(org.omg.CORBA.Any except) { + set_exception(except); + } + public void set_exception(org.omg.CORBA.Any except) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/ShortHolder.java b/idl/orb/extra/org/omg/CORBA/ShortHolder.java new file mode 100644 index 0000000..03eb1c7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ShortHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ShortHolder implements org.omg.CORBA.portable.Streamable { + + public short value; + + public ShortHolder() { + } + + public ShortHolder(short initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_short(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_short(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_short); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/StringHolder.java b/idl/orb/extra/org/omg/CORBA/StringHolder.java new file mode 100644 index 0000000..8f75986 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/StringHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class StringHolder implements org.omg.CORBA.portable.Streamable { + + public String value; + + public StringHolder() { + } + + public StringHolder(String initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_string(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_string(value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_string); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/SystemException.java b/idl/orb/extra/org/omg/CORBA/SystemException.java new file mode 100644 index 0000000..f98fda9 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/SystemException.java @@ -0,0 +1,42 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class SystemException extends java.lang.RuntimeException { + + public int minor; + public CompletionStatus completed; + + protected SystemException(String reason, int minor, + CompletionStatus completed) { + super(reason); + this.minor = minor; + this.completed = completed; + } + + public String toString() + { + StringBuffer buffer = new StringBuffer(); + + buffer.append(super.toString()); + buffer.append(" Minor: "); + buffer.append(minor); + buffer.append(" CompletionStatus: "); + switch(completed.value()) { + case CompletionStatus._COMPLETED_NO: + buffer.append("COMPLETED_NO."); + break; + case CompletionStatus._COMPLETED_YES: + buffer.append("COMPLETED_YES."); + break; + case CompletionStatus._COMPLETED_MAYBE: + buffer.append("COMPLETED_MAYBE."); + break; + } + + return buffer.toString(); + } +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/TIMEOUT.java b/idl/orb/extra/org/omg/CORBA/TIMEOUT.java new file mode 100644 index 0000000..0749add --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TIMEOUT.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 2001 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TIMEOUT extends org.omg.CORBA.SystemException { + + public TIMEOUT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TIMEOUT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TIMEOUT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TIMEOUT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/TRANSACTION_REQUIRED.java b/idl/orb/extra/org/omg/CORBA/TRANSACTION_REQUIRED.java new file mode 100644 index 0000000..af7198a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TRANSACTION_REQUIRED.java @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSACTION_REQUIRED extends org.omg.CORBA.SystemException { + + public TRANSACTION_REQUIRED() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_REQUIRED(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSACTION_REQUIRED(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_REQUIRED(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java b/idl/orb/extra/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java new file mode 100644 index 0000000..c0193eb --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TRANSACTION_ROLLEDBACK.java @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSACTION_ROLLEDBACK extends org.omg.CORBA.SystemException { + + public TRANSACTION_ROLLEDBACK() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_ROLLEDBACK(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSACTION_ROLLEDBACK(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSACTION_ROLLEDBACK(String reason, + int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/TRANSIENT.java b/idl/orb/extra/org/omg/CORBA/TRANSIENT.java new file mode 100644 index 0000000..8d8b568 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TRANSIENT.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class TRANSIENT extends org.omg.CORBA.SystemException { + + public TRANSIENT() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSIENT(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public TRANSIENT(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public TRANSIENT(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/TypeCode.java b/idl/orb/extra/org/omg/CORBA/TypeCode.java new file mode 100644 index 0000000..0597061 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCode.java @@ -0,0 +1,66 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class TypeCode implements org.omg.CORBA.portable.IDLEntity { + + abstract public boolean equal(org.omg.CORBA.TypeCode tc); + abstract public boolean equivalent(org.omg.CORBA.TypeCode tc); + abstract public org.omg.CORBA.TypeCode get_compact_typecode(); + abstract public org.omg.CORBA.TCKind kind(); + + abstract public java.lang.String id() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public java.lang.String name() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public int member_count() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public java.lang.String member_name(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + + abstract public org.omg.CORBA.TypeCode member_type(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + + abstract public org.omg.CORBA.Any member_label(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds; + abstract public org.omg.CORBA.TypeCode discriminator_type() throws + org.omg.CORBA.TypeCodePackage.BadKind; + abstract public int default_index() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public int length() throws org.omg.CORBA.TypeCodePackage.BadKind; + + abstract public org.omg.CORBA.TypeCode content_type() throws + org.omg.CORBA.TypeCodePackage.BadKind; + + public short fixed_digits() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public short fixed_scale() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public short member_visibility(int index) throws + org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + public org.omg.CORBA.TypeCode concrete_base_type() throws + org.omg.CORBA.TypeCodePackage.BadKind { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodeHelper.java b/idl/orb/extra/org/omg/CORBA/TypeCodeHelper.java new file mode 100644 index 0000000..df1fd39 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodeHelper.java @@ -0,0 +1,44 @@ +// +// TypeCodeHelper.java (helper) +// +// File generated: Wed Feb 21 16:59:33 CET 2001 +// by TIDorbJ idl2Java 1.0 +// + +package org.omg.CORBA; + +abstract public class TypeCodeHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static void insert(org.omg.CORBA.Any any, TypeCode value) { + any.insert_TypeCode(value); + }; + + public static TypeCode extract(org.omg.CORBA.Any any) { + return any.extract_TypeCode(); + }; + + private static org.omg.CORBA.TypeCode _type = null; + public static org.omg.CORBA.TypeCode type() { + if (_type == null) { + _type = _orb().get_primitive_tc(TCKind.tk_TypeCode); + } + return _type; + }; + + public static String id() { + return "IDL:omg.org/CORBA/TypeCode:1.0"; + }; + + public static TypeCode read(org.omg.CORBA.portable.InputStream is) { + return is.read_TypeCode(); + }; + + public static void write(org.omg.CORBA.portable.OutputStream os, TypeCode val) { + os.write_TypeCode(val); + }; + +} diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodeHolder.java b/idl/orb/extra/org/omg/CORBA/TypeCodeHolder.java new file mode 100644 index 0000000..edefd9d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodeHolder.java @@ -0,0 +1,31 @@ +// +// TypeCodeHolder.java (holder) +// +// File generated: Mon Sep 25 11:22:55 GMT+02:00 2000 +// by TidORB Idl2Java 1.0 +// + +package org.omg.CORBA; + +public class TypeCodeHolder + implements org.omg.CORBA.portable.Streamable { + + public TypeCode value; + public TypeCodeHolder() {} + public TypeCodeHolder(TypeCode initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = is.read_TypeCode(); + }; + + public void _write(org.omg.CORBA.portable.OutputStream os) { + os.write_TypeCode(value); + }; + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc((org.omg.CORBA.TCKind.tk_TypeCode)); + }; + +} diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/all-wcprops new file mode 100644 index 0000000..9fdb723 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/all-wcprops @@ -0,0 +1,17 @@ +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodePackage +END +BadKind.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodePackage/BadKind.java +END +Bounds.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodePackage/Bounds.java +END diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/entries b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/entries new file mode 100644 index 0000000..5a42ec5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/TypeCodePackage +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Bounds.java +file + + + + +2009-02-16T09:48:55.000000Z +2483115018fc51f57b423eb9c2842b1b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +286 + +BadKind.java +file + + + + +2009-02-16T09:48:55.000000Z +21c3e1a2daa8aacd0ccacefe66306f5a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +291 + diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/BadKind.java.svn-base b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/BadKind.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/BadKind.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/Bounds.java.svn-base b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/Bounds.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/prop-base/Bounds.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/BadKind.java.svn-base b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/BadKind.java.svn-base new file mode 100644 index 0000000..69910a2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/BadKind.java.svn-base @@ -0,0 +1,16 @@ +package org.omg.CORBA.TypeCodePackage; + +final public class BadKind + extends org.omg.CORBA.UserException { + + + public BadKind() { + super("IDL:omg.org/CORBA/TypeCode/BadKind:1.0"); + } + + public BadKind(String reason) { + super("IDL:omg.org/CORBA/TypeCode/BadKind:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/Bounds.java.svn-base b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/Bounds.java.svn-base new file mode 100644 index 0000000..187c0f3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/.svn/text-base/Bounds.java.svn-base @@ -0,0 +1,16 @@ +package org.omg.CORBA.TypeCodePackage; + +final public class Bounds + extends org.omg.CORBA.UserException { + + + public Bounds() { + super("IDL:omg.org/CORBA/TypeCode/Bounds:1.0"); + } + + public Bounds(String reason) { + super("IDL:omg.org/CORBA/TypeCode/Bounds:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/BadKind.java b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/BadKind.java new file mode 100644 index 0000000..69910a2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/BadKind.java @@ -0,0 +1,16 @@ +package org.omg.CORBA.TypeCodePackage; + +final public class BadKind + extends org.omg.CORBA.UserException { + + + public BadKind() { + super("IDL:omg.org/CORBA/TypeCode/BadKind:1.0"); + } + + public BadKind(String reason) { + super("IDL:omg.org/CORBA/TypeCode/BadKind:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/TypeCodePackage/Bounds.java b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/Bounds.java new file mode 100644 index 0000000..187c0f3 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/TypeCodePackage/Bounds.java @@ -0,0 +1,16 @@ +package org.omg.CORBA.TypeCodePackage; + +final public class Bounds + extends org.omg.CORBA.UserException { + + + public Bounds() { + super("IDL:omg.org/CORBA/TypeCode/Bounds:1.0"); + } + + public Bounds(String reason) { + super("IDL:omg.org/CORBA/TypeCode/Bounds:1.0 "+reason); + + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA/UNKNOWN.java b/idl/orb/extra/org/omg/CORBA/UNKNOWN.java new file mode 100644 index 0000000..3a01b0e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/UNKNOWN.java @@ -0,0 +1,26 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public class UNKNOWN extends org.omg.CORBA.SystemException { + + public UNKNOWN() { + super(null, 0, CompletionStatus.COMPLETED_NO); + } + + public UNKNOWN(int minor, CompletionStatus completed) { + super(null, minor, completed); + } + + public UNKNOWN(String reason) { + super(reason, 0, CompletionStatus.COMPLETED_NO); + } + + public UNKNOWN(String reason, int minor, CompletionStatus completed) { + super(reason, minor, completed); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/UnknownUserException.java b/idl/orb/extra/org/omg/CORBA/UnknownUserException.java new file mode 100644 index 0000000..0cbd4a2 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/UnknownUserException.java @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class UnknownUserException extends org.omg.CORBA.UserException { + public org.omg.CORBA.Any except; + + public UnknownUserException() { + super(); + } + + public UnknownUserException(org.omg.CORBA.Any a) { + super(); + except = a; + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/UserException.java b/idl/orb/extra/org/omg/CORBA/UserException.java new file mode 100644 index 0000000..750e8e1 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/UserException.java @@ -0,0 +1,20 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +abstract public class UserException extends java.lang.Exception + implements org.omg.CORBA.portable.IDLEntity { + + public UserException () { + super(); +} + +public UserException (java.lang.String value) { + + super(value); +} + +} diff --git a/idl/orb/extra/org/omg/CORBA/ValueBaseHelper.java b/idl/orb/extra/org/omg/CORBA/ValueBaseHelper.java new file mode 100644 index 0000000..b56f011 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ValueBaseHelper.java @@ -0,0 +1,61 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public final class ValueBaseHelper { + + private static org.omg.CORBA.ORB _orb() { + return org.omg.CORBA.ORB.init(); + } + + public static String id() { + return "IDL:omg.org/CORBA/ValueBase:1.0"; + }; + + private static org.omg.CORBA.TypeCode _type = null; + + + public static org.omg.CORBA.TypeCode type() + { + if (_type == null){ + + org.omg.CORBA.ValueMember[] _members = new org.omg.CORBA.ValueMember[0]; + + _type = _orb().create_value_tc(id(), + "CustomMarshal", + org.omg.CORBA.VM_NONE.value, + null, + _members); + } + + return _type; + } + + public static void insert(org.omg.CORBA.Any any, + java.io.Serializable _value) + { + any.insert_Value(_value); + } + + public static java.io.Serializable extract(org.omg.CORBA.Any any) + { + return any.extract_Value(); + } + + public static java.io.Serializable read( + org.omg.CORBA.portable.InputStream _input) + { + return ((org.omg.CORBA_2_3.portable.InputStream)_input).read_value(); + + } + + public static void write(org.omg.CORBA.portable.OutputStream _output, + java.io.Serializable _value) + { + ((org.omg.CORBA_2_3.portable.OutputStream) _output).write_value(_value); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/ValueBaseHolder.java b/idl/orb/extra/org/omg/CORBA/ValueBaseHolder.java new file mode 100644 index 0000000..d71f82e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/ValueBaseHolder.java @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +final public class ValueBaseHolder + implements org.omg.CORBA.portable.Streamable { + + public java.io.Serializable value; + + public ValueBaseHolder() { + } + + public ValueBaseHolder(java.io.Serializable initial) { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) { + value = ValueBaseHelper.read(is); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) { + ValueBaseHelper.write(os, value); + } + + public org.omg.CORBA.TypeCode _type() { + return org.omg.CORBA.ORB.init().get_primitive_tc(TCKind.tk_value); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/WrongTransaction.java b/idl/orb/extra/org/omg/CORBA/WrongTransaction.java new file mode 100644 index 0000000..014e802 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/WrongTransaction.java @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA; + +public final class WrongTransaction extends org.omg.CORBA.UserException { + + public WrongTransaction() { + super("IDL:omg.org/CORBA/WrongTransaction:1.0"); + } + + public WrongTransaction(String reason) { // full constructor + super("IDL:omg.org/CORBA/WrongTransaction:1.0 "+reason); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA/portable/.svn/all-wcprops new file mode 100644 index 0000000..238fcd1 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/all-wcprops @@ -0,0 +1,113 @@ +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable +END +ServantObject.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ServantObject.java +END +InputStream.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/InputStream.java +END +ResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ResponseHandler.java +END +Delegate.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/Delegate.java +END +UnknownException.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/UnknownException.java +END +RemarshalException.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/RemarshalException.java +END +ValueBase.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ValueBase.java +END +OutputStream.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/OutputStream.java +END +CustomValue.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/CustomValue.java +END +ApplicationException.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ApplicationException.java +END +ObjectImpl.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ObjectImpl.java +END +Streamable.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/Streamable.java +END +ValueFactory.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/ValueFactory.java +END +StreamableValue.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/StreamableValue.java +END +BoxedValueHelper.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/BoxedValueHelper.java +END +IndirectionException.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/IndirectionException.java +END +IDLEntity.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/IDLEntity.java +END +InvokeHandler.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable/InvokeHandler.java +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/entries b/idl/orb/extra/org/omg/CORBA/portable/.svn/entries new file mode 100644 index 0000000..e612df5 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/entries @@ -0,0 +1,640 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA/portable +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ValueFactory.java +file + + + + +2009-02-16T09:48:55.000000Z +c00ad73f796a5506a76a638f3fb7a6c8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +339 + +IDLEntity.java +file + + + + +2009-02-16T09:48:55.000000Z +240d576c7f4707a60dc4984803e58c25 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +285 + +CustomValue.java +file + + + + +2009-02-16T09:48:55.000000Z +82a61e349ac2a65c37e29ad0d32549fc +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +305 + +ValueBase.java +file + + + + +2009-02-16T09:48:55.000000Z +4736a599dba51be089d4d43f30676103 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +307 + +ServantObject.java +file + + + + +2009-02-16T09:48:55.000000Z +346ad0be41349180296a8c83c13c9820 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +292 + +Delegate.java +file + + + + +2009-02-16T09:48:55.000000Z +bb2b3501a4b010540d53a5287748ef1d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3871 + +InputStream.java +file + + + + +2009-02-16T09:48:55.000000Z +4f3ce11bc95e1cc77d2c1727da281df2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3191 + +StreamableValue.java +file + + + + +2009-02-16T09:48:55.000000Z +4c79d72ba4301f6b0b0d493d84788484 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +292 + +OutputStream.java +file + + + + +2009-02-16T09:48:55.000000Z +8bb7ccd561f92209b1a290bd7d2e588e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3358 + +UnknownException.java +file + + + + +2009-02-16T09:48:55.000000Z +70db96ba580a1499954b72ad73e81d71 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +473 + +Streamable.java +file + + + + +2009-02-16T09:48:55.000000Z +25d6ee14087eff165027d75b88ecc70b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +405 + +ApplicationException.java +file + + + + +2009-02-16T09:48:55.000000Z +5f3c065fde200e4095e08931fc5e415e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +625 + +IndirectionException.java +file + + + + +2009-02-16T09:48:55.000000Z +57d6f14763199b8cee73495f2846ca9f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +475 + +ObjectImpl.java +file + + + + +2009-02-16T09:48:55.000000Z +0b8567ca2ad9bffc5eb2f59c281c81c5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4313 + +InvokeHandler.java +file + + + + +2009-02-16T09:48:55.000000Z +bc6acc12be8e333be2e100c6a9e6fee1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +472 + +ResponseHandler.java +file + + + + +2009-02-16T09:48:55.000000Z +2e544372fb2cdfe119abdaaba99803b2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +397 + +RemarshalException.java +file + + + + +2009-02-16T09:48:55.000000Z +5de10aaf7d5fafcb698e4df69eed4bb5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +336 + +BoxedValueHelper.java +file + + + + +2009-02-16T09:48:55.000000Z +74593e6a4fed916f8632fb09b0106445 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +479 + diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ApplicationException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ApplicationException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ApplicationException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/BoxedValueHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/BoxedValueHelper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/BoxedValueHelper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/CustomValue.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/CustomValue.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/CustomValue.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Delegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Delegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IDLEntity.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IDLEntity.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IDLEntity.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IndirectionException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IndirectionException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/IndirectionException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InvokeHandler.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InvokeHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/InvokeHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ObjectImpl.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ObjectImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/OutputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/OutputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/OutputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/RemarshalException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/RemarshalException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/RemarshalException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ResponseHandler.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ServantObject.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ServantObject.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ServantObject.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Streamable.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Streamable.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/Streamable.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/StreamableValue.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/StreamableValue.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/StreamableValue.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/UnknownException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/UnknownException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/UnknownException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueBase.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueBase.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueBase.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueFactory.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueFactory.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/prop-base/ValueFactory.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ApplicationException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ApplicationException.java.svn-base new file mode 100644 index 0000000..817762c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ApplicationException.java.svn-base @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class ApplicationException extends Exception { + + private String _id; + private org.omg.CORBA.portable.InputStream _is; + + public ApplicationException(String id, + org.omg.CORBA.portable.InputStream is) { + _id = id; + _is = is; + } + + public String getId() { + return _id; + } + + public InputStream getInputStream() { + return _is; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/BoxedValueHelper.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/BoxedValueHelper.java.svn-base new file mode 100644 index 0000000..5c6f54f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/BoxedValueHelper.java.svn-base @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface BoxedValueHelper { + + java.io.Serializable read_value(org.omg.CORBA.portable.InputStream is); + void write_value(org.omg.CORBA.portable.OutputStream output, + java.io.Serializable obj); + java.lang.String get_id(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/CustomValue.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/CustomValue.java.svn-base new file mode 100644 index 0000000..4996480 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/CustomValue.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface CustomValue extends ValueBase, org.omg.CORBA.CustomMarshal { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Delegate.java.svn-base new file mode 100644 index 0000000..07eaa4a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Delegate.java.svn-base @@ -0,0 +1,118 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class Delegate { + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + public abstract org.omg.CORBA.InterfaceDef get_interface( + org.omg.CORBA.Object self); + + public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract org.omg.CORBA.Object duplicate(org.omg.CORBA.Object self); + + public abstract void release(org.omg.CORBA.Object self); + + public abstract boolean is_a(org.omg.CORBA.Object self, + String repository_id); + + public abstract boolean non_existent(org.omg.CORBA.Object self); + + public abstract boolean is_equivalent(org.omg.CORBA.Object self, + org.omg.CORBA.Object rhs); + + public abstract int hash(org.omg.CORBA.Object self, int max); + + public abstract org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result); + + public abstract org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist); + + public abstract org.omg.CORBA.Request request( + org.omg.CORBA.Object self, + String operation); + + public org.omg.CORBA.portable.OutputStream request( + org.omg.CORBA.Object self, + String operation, + boolean responseExpected) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.InputStream invoke(org.omg.CORBA.Object self, + org.omg.CORBA.portable.OutputStream os) + throws ApplicationException, RemarshalException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void releaseReply(org.omg.CORBA.Object self, + org.omg.CORBA.portable.InputStream is) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Policy get_policy(org.omg.CORBA.Object self, + int policy_type) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.DomainManager[] get_domain_managers( + org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.Object set_policy_override(org.omg.CORBA.Object self, + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public boolean is_local(org.omg.CORBA.Object self) { + return false; + } + + public ServantObject servant_preinvoke(org.omg.CORBA.Object self, + String operation, Class expectedType) { + return null; + } + + public void servant_postinvoke(org.omg.CORBA.Object self, + ServantObject servant) { + } + + public String toString(org.omg.CORBA.Object self) { + return self.getClass().getName() + ":" + this.toString(); + } + + public int hashCode(org.omg.CORBA.Object self) { + return System.identityHashCode(self); + } + + public boolean equals(org.omg.CORBA.Object self, java.lang.Object obj) { + return (self == obj); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IDLEntity.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IDLEntity.java.svn-base new file mode 100644 index 0000000..41d72cf --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IDLEntity.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface IDLEntity extends java.io.Serializable { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IndirectionException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IndirectionException.java.svn-base new file mode 100644 index 0000000..a264e48 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/IndirectionException.java.svn-base @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class IndirectionException extends org.omg.CORBA.SystemException { + + public int offset; + + public IndirectionException(int offset) { + super("", 0, org.omg.CORBA.CompletionStatus.COMPLETED_NO); + this.offset = offset; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InputStream.java.svn-base new file mode 100644 index 0000000..082ea62 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InputStream.java.svn-base @@ -0,0 +1,88 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class InputStream extends java.io.InputStream { + + public int read() throws java.io.IOException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract boolean read_boolean(); + public abstract char read_char(); + public abstract char read_wchar(); + public abstract byte read_octet(); + public abstract short read_short(); + public abstract short read_ushort(); + public abstract int read_long(); + public abstract int read_ulong(); + public abstract long read_longlong(); + public abstract long read_ulonglong(); + public abstract float read_float(); + public abstract double read_double(); + public abstract String read_string(); + public abstract String read_wstring(); + + public abstract void read_boolean_array( + boolean[] value, int offset, int length); + public abstract void read_char_array(char[] value, int offset, int length); + public abstract void read_wchar_array( + char[] value, int offset, int length); + public abstract void read_octet_array( + byte[] value, int offset, int length); + public abstract void read_short_array( + short[] value, int offset, int length); + public abstract void read_ushort_array( + short[] value, int offset, int length); + public abstract void read_long_array(int[] value, int offset, int length); + public abstract void read_ulong_array(int[] value, int offset, int length); + public abstract void read_longlong_array( + long[] value, int offset, int length); + public abstract void read_ulonglong_array( + long[] value, int offset, int length); + public abstract void read_float_array( + float[] value, int offset, int length); + public abstract void read_double_array( + double[] value, int offset, int length); + + public abstract org.omg.CORBA.Object read_Object(); + + public org.omg.CORBA.Object read_Object(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract org.omg.CORBA.TypeCode read_TypeCode(); + + public abstract org.omg.CORBA.Any read_any(); + + public org.omg.CORBA.Context read_Context() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public org.omg.CORBA.Principal read_Principal() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + public java.math.BigDecimal read_fixed() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Any read_fixed(short digits, short scale) + throws org.omg.CORBA.BadFixedValue { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InvokeHandler.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InvokeHandler.java.svn-base new file mode 100644 index 0000000..56d786d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/InvokeHandler.java.svn-base @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface InvokeHandler { + + public org.omg.CORBA.portable.OutputStream _invoke(String method, + org.omg.CORBA.portable.InputStream is, + ResponseHandler handler) + throws org.omg.CORBA.SystemException; +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ObjectImpl.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..014204a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ObjectImpl.java.svn-base @@ -0,0 +1,140 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +abstract public class ObjectImpl implements org.omg.CORBA.Object { + + private transient Delegate __delegate; + + public Delegate _get_delegate() { + if (__delegate == null) + throw new org.omg.CORBA.BAD_OPERATION(); + return __delegate; + } + + + public void _set_delegate(Delegate delegate) { + __delegate = delegate; + } + + public abstract String[] _ids(); + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.InterfaceDef _get_interface() { + return _get_delegate().get_interface(this); + } + + public org.omg.CORBA.Object _get_interface_def() { + return _get_delegate().get_interface_def(this); + } + + public org.omg.CORBA.Object _duplicate() { + return _get_delegate().duplicate(this); + } + + public void _release() { + _get_delegate().release(this); + } + + public boolean _is_a(String repository_id) { + return _get_delegate().is_a(this, repository_id); + } + + public boolean _is_equivalent(org.omg.CORBA.Object that) { + return _get_delegate().is_equivalent(this, that); + } + + public boolean _non_existent() { + return _get_delegate().non_existent(this); + } + + public int _hash(int maximum) { + return _get_delegate().hash(this, maximum); + } + + public org.omg.CORBA.Request _request(String operation) { + return _get_delegate().request(this, operation); + } + + public org.omg.CORBA.portable.OutputStream _request(String operation, + boolean responseExpected) { + return _get_delegate().request(this, operation, responseExpected); + } + + public org.omg.CORBA.portable.InputStream _invoke( + org.omg.CORBA.portable.OutputStream output) + throws ApplicationException, RemarshalException { + return _get_delegate().invoke(this, output); + } + + public void _releaseReply(org.omg.CORBA.portable.InputStream input) { + _get_delegate().releaseReply(this, input); + } + + public org.omg.CORBA.Request _create_request(org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result) { + return _get_delegate().create_request(this, ctx,operation, + arg_list,result); + } + + public org.omg.CORBA.Request _create_request(org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exceptions, + org.omg.CORBA.ContextList contexts) { + return _get_delegate().create_request(this, ctx, operation, arg_list, + result, exceptions, contexts); + } + + public org.omg.CORBA.Policy _get_policy(int policy_type) { + return _get_delegate().get_policy(this, policy_type); + } + + public org.omg.CORBA.DomainManager[] _get_domain_managers() { + return _get_delegate().get_domain_managers(this); + } + + public org.omg.CORBA.Object _set_policy_override( + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) { + return _get_delegate().set_policy_override(this, policies, set_add); + } + + public org.omg.CORBA.ORB _orb() { + return _get_delegate().orb(this); + } + + public boolean _is_local() { + return _get_delegate().is_local(this); + } + + public ServantObject _servant_preinvoke(String operation, + Class expectedType) { + return _get_delegate().servant_preinvoke(this, operation,expectedType); + } + + public void _servant_postinvoke(ServantObject servant) { + _get_delegate().servant_postinvoke(this, servant); + } + + public String toString() { + return _get_delegate().toString(this); + } + + public int hashCode() { + return _get_delegate().hashCode(this); + } + + public boolean equals(java.lang.Object obj) { + return _get_delegate().equals(this, obj); + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/OutputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/OutputStream.java.svn-base new file mode 100644 index 0000000..4dd8c9a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/OutputStream.java.svn-base @@ -0,0 +1,76 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class OutputStream extends java.io.OutputStream { + + public void write(int b) throws java.io.IOException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract InputStream create_input_stream(); + + public abstract void write_boolean (boolean value); + public abstract void write_char (char value); + public abstract void write_wchar (char value); + public abstract void write_octet (byte value); + public abstract void write_short (short value); + public abstract void write_ushort (short value); + public abstract void write_long (int value); + public abstract void write_ulong (int value); + public abstract void write_longlong (long value); + public abstract void write_ulonglong (long value); + public abstract void write_float (float value); + public abstract void write_double (double value); + public abstract void write_string (String value); + public abstract void write_wstring (String value); + + + public abstract void write_boolean_array(boolean[] value, int offset, int length); + public abstract void write_char_array(char[] value, int offset, int length); + public abstract void write_wchar_array(char[] value, int offset, int length); + public abstract void write_octet_array(byte[] value, int offset, int length); + public abstract void write_short_array(short[] value, int offset, int length); + public abstract void write_ushort_array(short[] value, int offset, int length); + public abstract void write_long_array(int[] value, int offset, int length); + public abstract void write_ulong_array(int[] value, int offset, int length); + public abstract void write_longlong_array(long[] value, int offset, int length); + public abstract void write_ulonglong_array(long[] value, int offset, int length); + public abstract void write_float_array(float[] value, int offset, int length); + public abstract void write_double_array(double[] value, int offset, int length); + + public abstract void write_Object(org.omg.CORBA.Object value); + public abstract void write_TypeCode(org.omg.CORBA.TypeCode value); + public abstract void write_any(org.omg.CORBA.Any value); + + public void write_Context(org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public void write_Principal (org.omg.CORBA.Principal value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + public void write_fixed(java.math.BigDecimal value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_fixed(java.math.BigDecimal value, short digits, short scale) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/RemarshalException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/RemarshalException.java.svn-base new file mode 100644 index 0000000..a91cd06 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/RemarshalException.java.svn-base @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class RemarshalException extends Exception { + + public RemarshalException() { + super(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ResponseHandler.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ResponseHandler.java.svn-base new file mode 100644 index 0000000..3b6bc06 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ResponseHandler.java.svn-base @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ResponseHandler { + + public org.omg.CORBA.portable.OutputStream createReply(); + + public org.omg.CORBA.portable.OutputStream createExceptionReply(); + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ServantObject.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ServantObject.java.svn-base new file mode 100644 index 0000000..7eddaae --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ServantObject.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class ServantObject { + public java.lang.Object servant; +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Streamable.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Streamable.java.svn-base new file mode 100644 index 0000000..aa8d6b6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/Streamable.java.svn-base @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface Streamable { + + void _read(org.omg.CORBA.portable.InputStream is); + void _write(org.omg.CORBA.portable.OutputStream os); + org.omg.CORBA.TypeCode _type(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/StreamableValue.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/StreamableValue.java.svn-base new file mode 100644 index 0000000..b40f6c7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/StreamableValue.java.svn-base @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface StreamableValue extends Streamable, ValueBase { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/UnknownException.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/UnknownException.java.svn-base new file mode 100644 index 0000000..b3efa61 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/UnknownException.java.svn-base @@ -0,0 +1,16 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class UnknownException extends org.omg.CORBA.SystemException { + + public Throwable originalEx; + public UnknownException(Throwable ex) { + super("", 0, org.omg.CORBA.CompletionStatus.COMPLETED_NO); + originalEx = ex; + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueBase.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueBase.java.svn-base new file mode 100644 index 0000000..11e6c1b --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueBase.java.svn-base @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ValueBase extends IDLEntity { + + String[] _truncatable_ids(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueFactory.java.svn-base b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueFactory.java.svn-base new file mode 100644 index 0000000..b338660 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/.svn/text-base/ValueFactory.java.svn-base @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ValueFactory { + + java.io.Serializable read_value(org.omg.CORBA_2_3.portable.InputStream is); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/ApplicationException.java b/idl/orb/extra/org/omg/CORBA/portable/ApplicationException.java new file mode 100644 index 0000000..817762c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ApplicationException.java @@ -0,0 +1,27 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class ApplicationException extends Exception { + + private String _id; + private org.omg.CORBA.portable.InputStream _is; + + public ApplicationException(String id, + org.omg.CORBA.portable.InputStream is) { + _id = id; + _is = is; + } + + public String getId() { + return _id; + } + + public InputStream getInputStream() { + return _is; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/BoxedValueHelper.java b/idl/orb/extra/org/omg/CORBA/portable/BoxedValueHelper.java new file mode 100644 index 0000000..5c6f54f --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/BoxedValueHelper.java @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface BoxedValueHelper { + + java.io.Serializable read_value(org.omg.CORBA.portable.InputStream is); + void write_value(org.omg.CORBA.portable.OutputStream output, + java.io.Serializable obj); + java.lang.String get_id(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/CustomValue.java b/idl/orb/extra/org/omg/CORBA/portable/CustomValue.java new file mode 100644 index 0000000..4996480 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/CustomValue.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface CustomValue extends ValueBase, org.omg.CORBA.CustomMarshal { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/Delegate.java b/idl/orb/extra/org/omg/CORBA/portable/Delegate.java new file mode 100644 index 0000000..07eaa4a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/Delegate.java @@ -0,0 +1,118 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class Delegate { + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + public abstract org.omg.CORBA.InterfaceDef get_interface( + org.omg.CORBA.Object self); + + public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract org.omg.CORBA.Object duplicate(org.omg.CORBA.Object self); + + public abstract void release(org.omg.CORBA.Object self); + + public abstract boolean is_a(org.omg.CORBA.Object self, + String repository_id); + + public abstract boolean non_existent(org.omg.CORBA.Object self); + + public abstract boolean is_equivalent(org.omg.CORBA.Object self, + org.omg.CORBA.Object rhs); + + public abstract int hash(org.omg.CORBA.Object self, int max); + + public abstract org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result); + + public abstract org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist); + + public abstract org.omg.CORBA.Request request( + org.omg.CORBA.Object self, + String operation); + + public org.omg.CORBA.portable.OutputStream request( + org.omg.CORBA.Object self, + String operation, + boolean responseExpected) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.InputStream invoke(org.omg.CORBA.Object self, + org.omg.CORBA.portable.OutputStream os) + throws ApplicationException, RemarshalException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void releaseReply(org.omg.CORBA.Object self, + org.omg.CORBA.portable.InputStream is) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Policy get_policy(org.omg.CORBA.Object self, + int policy_type) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.DomainManager[] get_domain_managers( + org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public org.omg.CORBA.Object set_policy_override(org.omg.CORBA.Object self, + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + public boolean is_local(org.omg.CORBA.Object self) { + return false; + } + + public ServantObject servant_preinvoke(org.omg.CORBA.Object self, + String operation, Class expectedType) { + return null; + } + + public void servant_postinvoke(org.omg.CORBA.Object self, + ServantObject servant) { + } + + public String toString(org.omg.CORBA.Object self) { + return self.getClass().getName() + ":" + this.toString(); + } + + public int hashCode(org.omg.CORBA.Object self) { + return System.identityHashCode(self); + } + + public boolean equals(org.omg.CORBA.Object self, java.lang.Object obj) { + return (self == obj); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/IDLEntity.java b/idl/orb/extra/org/omg/CORBA/portable/IDLEntity.java new file mode 100644 index 0000000..41d72cf --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/IDLEntity.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface IDLEntity extends java.io.Serializable { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/IndirectionException.java b/idl/orb/extra/org/omg/CORBA/portable/IndirectionException.java new file mode 100644 index 0000000..a264e48 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/IndirectionException.java @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class IndirectionException extends org.omg.CORBA.SystemException { + + public int offset; + + public IndirectionException(int offset) { + super("", 0, org.omg.CORBA.CompletionStatus.COMPLETED_NO); + this.offset = offset; + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/InputStream.java b/idl/orb/extra/org/omg/CORBA/portable/InputStream.java new file mode 100644 index 0000000..082ea62 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/InputStream.java @@ -0,0 +1,88 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class InputStream extends java.io.InputStream { + + public int read() throws java.io.IOException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract boolean read_boolean(); + public abstract char read_char(); + public abstract char read_wchar(); + public abstract byte read_octet(); + public abstract short read_short(); + public abstract short read_ushort(); + public abstract int read_long(); + public abstract int read_ulong(); + public abstract long read_longlong(); + public abstract long read_ulonglong(); + public abstract float read_float(); + public abstract double read_double(); + public abstract String read_string(); + public abstract String read_wstring(); + + public abstract void read_boolean_array( + boolean[] value, int offset, int length); + public abstract void read_char_array(char[] value, int offset, int length); + public abstract void read_wchar_array( + char[] value, int offset, int length); + public abstract void read_octet_array( + byte[] value, int offset, int length); + public abstract void read_short_array( + short[] value, int offset, int length); + public abstract void read_ushort_array( + short[] value, int offset, int length); + public abstract void read_long_array(int[] value, int offset, int length); + public abstract void read_ulong_array(int[] value, int offset, int length); + public abstract void read_longlong_array( + long[] value, int offset, int length); + public abstract void read_ulonglong_array( + long[] value, int offset, int length); + public abstract void read_float_array( + float[] value, int offset, int length); + public abstract void read_double_array( + double[] value, int offset, int length); + + public abstract org.omg.CORBA.Object read_Object(); + + public org.omg.CORBA.Object read_Object(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract org.omg.CORBA.TypeCode read_TypeCode(); + + public abstract org.omg.CORBA.Any read_any(); + + public org.omg.CORBA.Context read_Context() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public org.omg.CORBA.Principal read_Principal() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + public java.math.BigDecimal read_fixed() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Any read_fixed(short digits, short scale) + throws org.omg.CORBA.BadFixedValue { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/InvokeHandler.java b/idl/orb/extra/org/omg/CORBA/portable/InvokeHandler.java new file mode 100644 index 0000000..56d786d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/InvokeHandler.java @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface InvokeHandler { + + public org.omg.CORBA.portable.OutputStream _invoke(String method, + org.omg.CORBA.portable.InputStream is, + ResponseHandler handler) + throws org.omg.CORBA.SystemException; +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/ObjectImpl.java b/idl/orb/extra/org/omg/CORBA/portable/ObjectImpl.java new file mode 100644 index 0000000..014204a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ObjectImpl.java @@ -0,0 +1,140 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +abstract public class ObjectImpl implements org.omg.CORBA.Object { + + private transient Delegate __delegate; + + public Delegate _get_delegate() { + if (__delegate == null) + throw new org.omg.CORBA.BAD_OPERATION(); + return __delegate; + } + + + public void _set_delegate(Delegate delegate) { + __delegate = delegate; + } + + public abstract String[] _ids(); + + /** + *@deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.InterfaceDef _get_interface() { + return _get_delegate().get_interface(this); + } + + public org.omg.CORBA.Object _get_interface_def() { + return _get_delegate().get_interface_def(this); + } + + public org.omg.CORBA.Object _duplicate() { + return _get_delegate().duplicate(this); + } + + public void _release() { + _get_delegate().release(this); + } + + public boolean _is_a(String repository_id) { + return _get_delegate().is_a(this, repository_id); + } + + public boolean _is_equivalent(org.omg.CORBA.Object that) { + return _get_delegate().is_equivalent(this, that); + } + + public boolean _non_existent() { + return _get_delegate().non_existent(this); + } + + public int _hash(int maximum) { + return _get_delegate().hash(this, maximum); + } + + public org.omg.CORBA.Request _request(String operation) { + return _get_delegate().request(this, operation); + } + + public org.omg.CORBA.portable.OutputStream _request(String operation, + boolean responseExpected) { + return _get_delegate().request(this, operation, responseExpected); + } + + public org.omg.CORBA.portable.InputStream _invoke( + org.omg.CORBA.portable.OutputStream output) + throws ApplicationException, RemarshalException { + return _get_delegate().invoke(this, output); + } + + public void _releaseReply(org.omg.CORBA.portable.InputStream input) { + _get_delegate().releaseReply(this, input); + } + + public org.omg.CORBA.Request _create_request(org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result) { + return _get_delegate().create_request(this, ctx,operation, + arg_list,result); + } + + public org.omg.CORBA.Request _create_request(org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exceptions, + org.omg.CORBA.ContextList contexts) { + return _get_delegate().create_request(this, ctx, operation, arg_list, + result, exceptions, contexts); + } + + public org.omg.CORBA.Policy _get_policy(int policy_type) { + return _get_delegate().get_policy(this, policy_type); + } + + public org.omg.CORBA.DomainManager[] _get_domain_managers() { + return _get_delegate().get_domain_managers(this); + } + + public org.omg.CORBA.Object _set_policy_override( + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) { + return _get_delegate().set_policy_override(this, policies, set_add); + } + + public org.omg.CORBA.ORB _orb() { + return _get_delegate().orb(this); + } + + public boolean _is_local() { + return _get_delegate().is_local(this); + } + + public ServantObject _servant_preinvoke(String operation, + Class expectedType) { + return _get_delegate().servant_preinvoke(this, operation,expectedType); + } + + public void _servant_postinvoke(ServantObject servant) { + _get_delegate().servant_postinvoke(this, servant); + } + + public String toString() { + return _get_delegate().toString(this); + } + + public int hashCode() { + return _get_delegate().hashCode(this); + } + + public boolean equals(java.lang.Object obj) { + return _get_delegate().equals(this, obj); + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/OutputStream.java b/idl/orb/extra/org/omg/CORBA/portable/OutputStream.java new file mode 100644 index 0000000..4dd8c9a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/OutputStream.java @@ -0,0 +1,76 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public abstract class OutputStream extends java.io.OutputStream { + + public void write(int b) throws java.io.IOException { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ORB orb() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public abstract InputStream create_input_stream(); + + public abstract void write_boolean (boolean value); + public abstract void write_char (char value); + public abstract void write_wchar (char value); + public abstract void write_octet (byte value); + public abstract void write_short (short value); + public abstract void write_ushort (short value); + public abstract void write_long (int value); + public abstract void write_ulong (int value); + public abstract void write_longlong (long value); + public abstract void write_ulonglong (long value); + public abstract void write_float (float value); + public abstract void write_double (double value); + public abstract void write_string (String value); + public abstract void write_wstring (String value); + + + public abstract void write_boolean_array(boolean[] value, int offset, int length); + public abstract void write_char_array(char[] value, int offset, int length); + public abstract void write_wchar_array(char[] value, int offset, int length); + public abstract void write_octet_array(byte[] value, int offset, int length); + public abstract void write_short_array(short[] value, int offset, int length); + public abstract void write_ushort_array(short[] value, int offset, int length); + public abstract void write_long_array(int[] value, int offset, int length); + public abstract void write_ulong_array(int[] value, int offset, int length); + public abstract void write_longlong_array(long[] value, int offset, int length); + public abstract void write_ulonglong_array(long[] value, int offset, int length); + public abstract void write_float_array(float[] value, int offset, int length); + public abstract void write_double_array(double[] value, int offset, int length); + + public abstract void write_Object(org.omg.CORBA.Object value); + public abstract void write_TypeCode(org.omg.CORBA.TypeCode value); + public abstract void write_any(org.omg.CORBA.Any value); + + public void write_Context(org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public void write_Principal (org.omg.CORBA.Principal value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + public void write_fixed(java.math.BigDecimal value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_fixed(java.math.BigDecimal value, short digits, short scale) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/RemarshalException.java b/idl/orb/extra/org/omg/CORBA/portable/RemarshalException.java new file mode 100644 index 0000000..a91cd06 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/RemarshalException.java @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class RemarshalException extends Exception { + + public RemarshalException() { + super(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/ResponseHandler.java b/idl/orb/extra/org/omg/CORBA/portable/ResponseHandler.java new file mode 100644 index 0000000..3b6bc06 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ResponseHandler.java @@ -0,0 +1,14 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ResponseHandler { + + public org.omg.CORBA.portable.OutputStream createReply(); + + public org.omg.CORBA.portable.OutputStream createExceptionReply(); + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/ServantObject.java b/idl/orb/extra/org/omg/CORBA/portable/ServantObject.java new file mode 100644 index 0000000..7eddaae --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ServantObject.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class ServantObject { + public java.lang.Object servant; +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/Streamable.java b/idl/orb/extra/org/omg/CORBA/portable/Streamable.java new file mode 100644 index 0000000..aa8d6b6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/Streamable.java @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface Streamable { + + void _read(org.omg.CORBA.portable.InputStream is); + void _write(org.omg.CORBA.portable.OutputStream os); + org.omg.CORBA.TypeCode _type(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/StreamableValue.java b/idl/orb/extra/org/omg/CORBA/portable/StreamableValue.java new file mode 100644 index 0000000..b40f6c7 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/StreamableValue.java @@ -0,0 +1,10 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface StreamableValue extends Streamable, ValueBase { + +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/UnknownException.java b/idl/orb/extra/org/omg/CORBA/portable/UnknownException.java new file mode 100644 index 0000000..b3efa61 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/UnknownException.java @@ -0,0 +1,16 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public class UnknownException extends org.omg.CORBA.SystemException { + + public Throwable originalEx; + public UnknownException(Throwable ex) { + super("", 0, org.omg.CORBA.CompletionStatus.COMPLETED_NO); + originalEx = ex; + } +} + diff --git a/idl/orb/extra/org/omg/CORBA/portable/ValueBase.java b/idl/orb/extra/org/omg/CORBA/portable/ValueBase.java new file mode 100644 index 0000000..11e6c1b --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ValueBase.java @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ValueBase extends IDLEntity { + + String[] _truncatable_ids(); +} diff --git a/idl/orb/extra/org/omg/CORBA/portable/ValueFactory.java b/idl/orb/extra/org/omg/CORBA/portable/ValueFactory.java new file mode 100644 index 0000000..b338660 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA/portable/ValueFactory.java @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA.portable; + +public interface ValueFactory { + + java.io.Serializable read_value(org.omg.CORBA_2_3.portable.InputStream is); +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA_2_3/.svn/all-wcprops new file mode 100644 index 0000000..09fa34c --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3 +END +ORB.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/ORB.java +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/.svn/entries b/idl/orb/extra/org/omg/CORBA_2_3/.svn/entries new file mode 100644 index 0000000..d8a2f9e --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/.svn/entries @@ -0,0 +1,65 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3 +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ORB.java +file + + + + +2009-02-16T09:48:55.000000Z +e5e119d0f3fd4ded7a136aff6f0737cc +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1772 + +portable +dir + diff --git a/idl/orb/extra/org/omg/CORBA_2_3/.svn/prop-base/ORB.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/.svn/prop-base/ORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/.svn/prop-base/ORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/.svn/text-base/ORB.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/.svn/text-base/ORB.java.svn-base new file mode 100644 index 0000000..40d0fe6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/.svn/text-base/ORB.java.svn-base @@ -0,0 +1,49 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +/***** This class is specifed by the mapping as abstract. + A "dummy" implementation is provided so that the "official" org.omg.* + packages may be compiled. + + ORB-vendors shall provide a complete implementation of the class + by extending it with a vendor-specific class which + provides "real" implementations for all the methods. E.g. + + package com.acme_orb_vendor.CORBA_2_3; + public class ORB extends org.omg.CORBA_2_3 { ... } + + In order to be conformant the class shall support the signatures + specified here, but will have an orb-specific implementation. + + The class may support additional vendor specific functionality. +*****/ + +package org.omg.CORBA_2_3; + +public abstract class ORB extends org.omg.CORBA.ORB { + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) throws + org.omg.CORBA.BAD_PARAM { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory register_value_factory( + String id, org.omg.CORBA.portable.ValueFactory factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void unregister_value_factory(String id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id){ + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_delegate(java.lang.Object wrapper) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/ORB.java b/idl/orb/extra/org/omg/CORBA_2_3/ORB.java new file mode 100644 index 0000000..40d0fe6 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/ORB.java @@ -0,0 +1,49 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +/***** This class is specifed by the mapping as abstract. + A "dummy" implementation is provided so that the "official" org.omg.* + packages may be compiled. + + ORB-vendors shall provide a complete implementation of the class + by extending it with a vendor-specific class which + provides "real" implementations for all the methods. E.g. + + package com.acme_orb_vendor.CORBA_2_3; + public class ORB extends org.omg.CORBA_2_3 { ... } + + In order to be conformant the class shall support the signatures + specified here, but will have an orb-specific implementation. + + The class may support additional vendor specific functionality. +*****/ + +package org.omg.CORBA_2_3; + +public abstract class ORB extends org.omg.CORBA.ORB { + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) throws + org.omg.CORBA.BAD_PARAM { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory register_value_factory( + String id, org.omg.CORBA.portable.ValueFactory factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void unregister_value_factory(String id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id){ + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_delegate(java.lang.Object wrapper) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/all-wcprops new file mode 100644 index 0000000..7240204 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/all-wcprops @@ -0,0 +1,29 @@ +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable +END +ObjectImpl.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable/ObjectImpl.java +END +InputStream.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable/InputStream.java +END +Delegate.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable/Delegate.java +END +OutputStream.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable/OutputStream.java +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/entries b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/entries new file mode 100644 index 0000000..be37080 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_3/portable +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ObjectImpl.java +file + + + + +2009-02-16T09:48:55.000000Z +db934355ba10e52bc3d54ef48cc93c19 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +620 + +Delegate.java +file + + + + +2009-02-16T09:48:55.000000Z +1e16d5479337b3d87cc0850526bf925b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +401 + +InputStream.java +file + + + + +2009-02-16T09:48:55.000000Z +b616b9ef1b10127c5f736853534936c2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1189 + +OutputStream.java +file + + + + +2009-02-16T09:48:55.000000Z +446a0785897ba65519027d4ad1fe694e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1020 + diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/Delegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/Delegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/InputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/InputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/InputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/ObjectImpl.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/ObjectImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/OutputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/OutputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/prop-base/OutputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/Delegate.java.svn-base new file mode 100644 index 0000000..9ad4837 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/Delegate.java.svn-base @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +public abstract class Delegate extends org.omg.CORBA.portable.Delegate { + + public java.lang.String get_codebase(org.omg.CORBA.Object self) { + return null; + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/InputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/InputStream.java.svn-base new file mode 100644 index 0000000..e6af465 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/InputStream.java.svn-base @@ -0,0 +1,39 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +abstract public class InputStream extends org.omg.CORBA.portable.InputStream { + + public java.io.Serializable read_value() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.lang.String rep_id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value( + org.omg.CORBA.portable.BoxedValueHelper factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.io.Serializable value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object read_abstract_interface() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object read_abstract_interface(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/ObjectImpl.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..d651e7d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/ObjectImpl.java.svn-base @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +public abstract class ObjectImpl extends org.omg.CORBA.portable.ObjectImpl { + + public String _get_codebase() { + org.omg.CORBA.portable.Delegate delegate = _get_delegate(); + if (delegate instanceof org.omg.CORBA_2_3.portable.Delegate) + return ((org.omg.CORBA_2_3.portable.Delegate) + delegate).get_codebase(this); + return null; + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/OutputStream.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/OutputStream.java.svn-base new file mode 100644 index 0000000..003829a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/.svn/text-base/OutputStream.java.svn-base @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +abstract public class OutputStream extends org.omg.CORBA.portable.OutputStream{ + + public void write_value(java.io.Serializable value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, + java.lang.String rep_id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_abstract_interface(java.lang.Object object) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/Delegate.java b/idl/orb/extra/org/omg/CORBA_2_3/portable/Delegate.java new file mode 100644 index 0000000..9ad4837 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/Delegate.java @@ -0,0 +1,13 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +public abstract class Delegate extends org.omg.CORBA.portable.Delegate { + + public java.lang.String get_codebase(org.omg.CORBA.Object self) { + return null; + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/InputStream.java b/idl/orb/extra/org/omg/CORBA_2_3/portable/InputStream.java new file mode 100644 index 0000000..e6af465 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/InputStream.java @@ -0,0 +1,39 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +abstract public class InputStream extends org.omg.CORBA.portable.InputStream { + + public java.io.Serializable read_value() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.lang.String rep_id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value( + org.omg.CORBA.portable.BoxedValueHelper factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.io.Serializable read_value(java.io.Serializable value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object read_abstract_interface() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object read_abstract_interface(java.lang.Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/ObjectImpl.java b/idl/orb/extra/org/omg/CORBA_2_3/portable/ObjectImpl.java new file mode 100644 index 0000000..d651e7d --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/ObjectImpl.java @@ -0,0 +1,17 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +public abstract class ObjectImpl extends org.omg.CORBA.portable.ObjectImpl { + + public String _get_codebase() { + org.omg.CORBA.portable.Delegate delegate = _get_delegate(); + if (delegate instanceof org.omg.CORBA_2_3.portable.Delegate) + return ((org.omg.CORBA_2_3.portable.Delegate) + delegate).get_codebase(this); + return null; + } +} diff --git a/idl/orb/extra/org/omg/CORBA_2_3/portable/OutputStream.java b/idl/orb/extra/org/omg/CORBA_2_3/portable/OutputStream.java new file mode 100644 index 0000000..003829a --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_3/portable/OutputStream.java @@ -0,0 +1,32 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.CORBA_2_3.portable; + +abstract public class OutputStream extends org.omg.CORBA.portable.OutputStream{ + + public void write_value(java.io.Serializable value) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, + java.lang.String rep_id) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, Class clz) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_value(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_abstract_interface(java.lang.Object object) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} diff --git a/idl/orb/extra/org/omg/CORBA_2_5/.svn/all-wcprops b/idl/orb/extra/org/omg/CORBA_2_5/.svn/all-wcprops new file mode 100644 index 0000000..225ffcd --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_5/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_5 +END +ORB.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_5/ORB.java +END diff --git a/idl/orb/extra/org/omg/CORBA_2_5/.svn/entries b/idl/orb/extra/org/omg/CORBA_2_5/.svn/entries new file mode 100644 index 0000000..c88e502 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_5/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/CORBA_2_5 +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ORB.java +file + + + + +2009-02-16T09:48:55.000000Z +c74354246c8fc68b6991275505e4f983 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +530 + diff --git a/idl/orb/extra/org/omg/CORBA_2_5/.svn/prop-base/ORB.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_5/.svn/prop-base/ORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_5/.svn/prop-base/ORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/CORBA_2_5/.svn/text-base/ORB.java.svn-base b/idl/orb/extra/org/omg/CORBA_2_5/.svn/text-base/ORB.java.svn-base new file mode 100644 index 0000000..d9041fc --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_5/.svn/text-base/ORB.java.svn-base @@ -0,0 +1,21 @@ +package org.omg.CORBA_2_5; + +public abstract class ORB extends org.omg.CORBA_2_3.ORB +{ + public String id() + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object object) + throws org.omg.CORBA.ORBPackage.InvalidName + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } + + public org.omg.CORBA.TypeCode create_local_interface_tc(String id, String name) + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/CORBA_2_5/ORB.java b/idl/orb/extra/org/omg/CORBA_2_5/ORB.java new file mode 100644 index 0000000..d9041fc --- /dev/null +++ b/idl/orb/extra/org/omg/CORBA_2_5/ORB.java @@ -0,0 +1,21 @@ +package org.omg.CORBA_2_5; + +public abstract class ORB extends org.omg.CORBA_2_3.ORB +{ + public String id() + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object object) + throws org.omg.CORBA.ORBPackage.InvalidName + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } + + public org.omg.CORBA.TypeCode create_local_interface_tc(String id, String name) + { + throw new org.omg.CORBA.NO_IMPLEMENT() ; + } +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/all-wcprops b/idl/orb/extra/org/omg/PortableServer/.svn/all-wcprops new file mode 100644 index 0000000..6836da3 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/all-wcprops @@ -0,0 +1,35 @@ +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer +END +ServantHelper.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantHelper.java +END +ServantLocatorLocalTie.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorLocalTie.java +END +DynamicImplementation.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/DynamicImplementation.java +END +Servant.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/Servant.java +END +ServantLocatorOperations.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorOperations.java +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/entries b/idl/orb/extra/org/omg/PortableServer/.svn/entries new file mode 100644 index 0000000..8bd50a8 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/entries @@ -0,0 +1,204 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Servant.java +file + + + + +2009-02-16T09:48:55.000000Z +65b267ed412c4a11d3a0097e24293cf2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2192 + +ServantHelper.java +file + + + + +2009-02-16T09:48:55.000000Z +bbcedf7bab9330ed372c1fccdd3aeda8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +982 + +ServantLocatorPackage +dir + +ServantLocatorLocalTie.java +file + + + + +2009-02-16T09:48:55.000000Z +e89abe899dc7a5d7817870ea3771a640 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1115 + +portable +dir + +DynamicImplementation.java +file + + + + +2009-02-16T09:48:55.000000Z +f3c61d7d8d8b3d3a3d2eeee19d0ca5ee +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +359 + +ServantLocatorOperations.java +file + + + + +2009-02-16T09:48:55.000000Z +c58b83542a8e1fd16545280d6d19bbeb +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +843 + diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/DynamicImplementation.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/DynamicImplementation.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/DynamicImplementation.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/Servant.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/Servant.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/Servant.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantHelper.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantHelper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantHelper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorLocalTie.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorLocalTie.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorLocalTie.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorOperations.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorOperations.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/prop-base/ServantLocatorOperations.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/text-base/DynamicImplementation.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/DynamicImplementation.java.svn-base new file mode 100644 index 0000000..cc880fb --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/DynamicImplementation.java.svn-base @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +abstract public class DynamicImplementation extends Servant { + + abstract public void invoke(org.omg.CORBA.ServerRequest request); +} diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/text-base/Servant.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/Servant.java.svn-base new file mode 100644 index 0000000..ce71353 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/Servant.java.svn-base @@ -0,0 +1,76 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +abstract public class Servant { + + final public org.omg.CORBA.Object _this_object() { + return _get_delegate().this_object(this); + } + + final public org.omg.CORBA.Object _this_object(org.omg.CORBA.ORB orb) { + try { + ((org.omg.CORBA_2_3.ORB)orb).set_delegate(this); + } + catch (ClassCastException e) { + throw new org.omg.CORBA.BAD_PARAM( + "POA Servant requires an instanceof org.omg.CORBA_2_3.ORB"); + } + return _this_object(); + } + + final public org.omg.CORBA.ORB _orb() { + return _get_delegate().orb(this); + } + + final public POA _poa() { + return _get_delegate().poa(this); + } + + final public byte[] _object_id() { + return _get_delegate().object_id(this); + } + + final public POA _default_POA() { + return _get_delegate().default_POA(this); + } + + final public boolean _is_a(String repository_id) { + return _get_delegate().is_a(this, repository_id); + } + + final public boolean _non_existent() { + return _get_delegate().non_existent(this); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + final public org.omg.CORBA.InterfaceDef _get_interface() { + return _get_delegate().get_interface(this); + } + + final public org.omg.CORBA.Object _get_interface_def() { + return _get_delegate().get_interface_def(this); + } + + abstract public String[] _all_interfaces(POA poa, byte[] objectID); + + private transient org.omg.PortableServer.portable.Delegate _delegate =null; + + final public org.omg.PortableServer.portable.Delegate _get_delegate() { + if (_delegate == null) { + throw new org.omg.CORBA.BAD_INV_ORDER( + "The Servant has not been associated with an ORBinstance"); + } + return _delegate; + } + + final public void _set_delegate( + org.omg.PortableServer.portable.Delegate delegate) { + _delegate = delegate; + } +} diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantHelper.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantHelper.java.svn-base new file mode 100644 index 0000000..63d508f --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantHelper.java.svn-base @@ -0,0 +1,47 @@ +package org.omg.PortableServer; + +public class ServantHelper +{ + + public static void insert( org.omg.CORBA.Any a, org.omg.PortableServer.Servant t ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + public static org.omg.PortableServer.Servant extract( org.omg.CORBA.Any a ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + private static org.omg.CORBA.TypeCode _tc = null; + + + public static org.omg.CORBA.TypeCode type() + { + if ( _tc != null ) + return _tc; + else + { + org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(); + _tc = orb.create_native_tc(id(),"Servant"); + return _tc; + } + } + + public static String id() + { + return new String("IDL:omg.org/PortableServer/Servant:1.0"); + } + + public static org.omg.PortableServer.Servant read( org.omg.CORBA.portable.InputStream istream ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + + public static void write( org.omg.CORBA.portable.OutputStream ostream, org.omg.PortableServer.Servant value ) + { + throw new org.omg.CORBA.MARSHAL(); + } + +} diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorLocalTie.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorLocalTie.java.svn-base new file mode 100644 index 0000000..b56c022 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorLocalTie.java.svn-base @@ -0,0 +1,45 @@ +// +// ServantLocatorLocalTie.java (tie) +// +// File generated: Mon May 03 12:56:49 CEST 2004 +// by TIDorbJ idl2Java 1.0.3 +// + +package org.omg.PortableServer; + +public class ServantLocatorLocalTie + extends ServantLocatorLocalBase + { + + private ServantLocatorOperations _delegate; + public ServantLocatorLocalTie(ServantLocatorOperations delegate) { + this._delegate = delegate; + }; + + public ServantLocatorOperations _delegate() { + return this._delegate; + }; + + public org.omg.PortableServer.Servant preinvoke(byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, org.omg.PortableServer.ServantLocatorPackage.CookieHolder the_cookie) + throws org.omg.PortableServer.ForwardRequest { + return this._delegate.preinvoke( + oid, + adapter, + operation, + the_cookie + ); + }; + + public void postinvoke(byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, java.lang.Object the_cookie, org.omg.PortableServer.Servant the_servant) { + this._delegate.postinvoke( + oid, + adapter, + operation, + the_cookie, + the_servant + ); + }; + + + +} diff --git a/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorOperations.java.svn-base b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorOperations.java.svn-base new file mode 100644 index 0000000..a06bbe1 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/.svn/text-base/ServantLocatorOperations.java.svn-base @@ -0,0 +1,22 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +public interface ServantLocatorOperations extends + org.omg.PortableServer.ServantManagerOperations { + + public org.omg.PortableServer.Servant preinvoke(byte[] oid, + org.omg.PortableServer.POA adapter, + java.lang.String operation, + org.omg.PortableServer.ServantLocatorPackage.CookieHolder + the_cookie) throws org.omg.PortableServer.ForwardRequest; + + public void postinvoke(byte[] oid, + org.omg.PortableServer.POA adapter, + java.lang.String operation, + java.lang.Object the_cookie, + org.omg.PortableServer.Servant the_servant); +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/PortableServer/DynamicImplementation.java b/idl/orb/extra/org/omg/PortableServer/DynamicImplementation.java new file mode 100644 index 0000000..cc880fb --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/DynamicImplementation.java @@ -0,0 +1,11 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +abstract public class DynamicImplementation extends Servant { + + abstract public void invoke(org.omg.CORBA.ServerRequest request); +} diff --git a/idl/orb/extra/org/omg/PortableServer/Servant.java b/idl/orb/extra/org/omg/PortableServer/Servant.java new file mode 100644 index 0000000..ce71353 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/Servant.java @@ -0,0 +1,76 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +abstract public class Servant { + + final public org.omg.CORBA.Object _this_object() { + return _get_delegate().this_object(this); + } + + final public org.omg.CORBA.Object _this_object(org.omg.CORBA.ORB orb) { + try { + ((org.omg.CORBA_2_3.ORB)orb).set_delegate(this); + } + catch (ClassCastException e) { + throw new org.omg.CORBA.BAD_PARAM( + "POA Servant requires an instanceof org.omg.CORBA_2_3.ORB"); + } + return _this_object(); + } + + final public org.omg.CORBA.ORB _orb() { + return _get_delegate().orb(this); + } + + final public POA _poa() { + return _get_delegate().poa(this); + } + + final public byte[] _object_id() { + return _get_delegate().object_id(this); + } + + final public POA _default_POA() { + return _get_delegate().default_POA(this); + } + + final public boolean _is_a(String repository_id) { + return _get_delegate().is_a(this, repository_id); + } + + final public boolean _non_existent() { + return _get_delegate().non_existent(this); + } + + /** + * @deprecated Deprecated by CORBA 2.4 + */ + final public org.omg.CORBA.InterfaceDef _get_interface() { + return _get_delegate().get_interface(this); + } + + final public org.omg.CORBA.Object _get_interface_def() { + return _get_delegate().get_interface_def(this); + } + + abstract public String[] _all_interfaces(POA poa, byte[] objectID); + + private transient org.omg.PortableServer.portable.Delegate _delegate =null; + + final public org.omg.PortableServer.portable.Delegate _get_delegate() { + if (_delegate == null) { + throw new org.omg.CORBA.BAD_INV_ORDER( + "The Servant has not been associated with an ORBinstance"); + } + return _delegate; + } + + final public void _set_delegate( + org.omg.PortableServer.portable.Delegate delegate) { + _delegate = delegate; + } +} diff --git a/idl/orb/extra/org/omg/PortableServer/ServantHelper.java b/idl/orb/extra/org/omg/PortableServer/ServantHelper.java new file mode 100644 index 0000000..63d508f --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantHelper.java @@ -0,0 +1,47 @@ +package org.omg.PortableServer; + +public class ServantHelper +{ + + public static void insert( org.omg.CORBA.Any a, org.omg.PortableServer.Servant t ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + public static org.omg.PortableServer.Servant extract( org.omg.CORBA.Any a ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + private static org.omg.CORBA.TypeCode _tc = null; + + + public static org.omg.CORBA.TypeCode type() + { + if ( _tc != null ) + return _tc; + else + { + org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(); + _tc = orb.create_native_tc(id(),"Servant"); + return _tc; + } + } + + public static String id() + { + return new String("IDL:omg.org/PortableServer/Servant:1.0"); + } + + public static org.omg.PortableServer.Servant read( org.omg.CORBA.portable.InputStream istream ) + { + throw new org.omg.CORBA.MARSHAL(); + } + + + public static void write( org.omg.CORBA.portable.OutputStream ostream, org.omg.PortableServer.Servant value ) + { + throw new org.omg.CORBA.MARSHAL(); + } + +} diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorLocalTie.java b/idl/orb/extra/org/omg/PortableServer/ServantLocatorLocalTie.java new file mode 100644 index 0000000..b56c022 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorLocalTie.java @@ -0,0 +1,45 @@ +// +// ServantLocatorLocalTie.java (tie) +// +// File generated: Mon May 03 12:56:49 CEST 2004 +// by TIDorbJ idl2Java 1.0.3 +// + +package org.omg.PortableServer; + +public class ServantLocatorLocalTie + extends ServantLocatorLocalBase + { + + private ServantLocatorOperations _delegate; + public ServantLocatorLocalTie(ServantLocatorOperations delegate) { + this._delegate = delegate; + }; + + public ServantLocatorOperations _delegate() { + return this._delegate; + }; + + public org.omg.PortableServer.Servant preinvoke(byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, org.omg.PortableServer.ServantLocatorPackage.CookieHolder the_cookie) + throws org.omg.PortableServer.ForwardRequest { + return this._delegate.preinvoke( + oid, + adapter, + operation, + the_cookie + ); + }; + + public void postinvoke(byte[] oid, org.omg.PortableServer.POA adapter, java.lang.String operation, java.lang.Object the_cookie, org.omg.PortableServer.Servant the_servant) { + this._delegate.postinvoke( + oid, + adapter, + operation, + the_cookie, + the_servant + ); + }; + + + +} diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorOperations.java b/idl/orb/extra/org/omg/PortableServer/ServantLocatorOperations.java new file mode 100644 index 0000000..a06bbe1 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorOperations.java @@ -0,0 +1,22 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer; + +public interface ServantLocatorOperations extends + org.omg.PortableServer.ServantManagerOperations { + + public org.omg.PortableServer.Servant preinvoke(byte[] oid, + org.omg.PortableServer.POA adapter, + java.lang.String operation, + org.omg.PortableServer.ServantLocatorPackage.CookieHolder + the_cookie) throws org.omg.PortableServer.ForwardRequest; + + public void postinvoke(byte[] oid, + org.omg.PortableServer.POA adapter, + java.lang.String operation, + java.lang.Object the_cookie, + org.omg.PortableServer.Servant the_servant); +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/all-wcprops b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/all-wcprops new file mode 100644 index 0000000..0ca1887 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/all-wcprops @@ -0,0 +1,17 @@ +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage +END +CookieHolder.java +K 25 +svn:wc:ra_dav:version-url +V 124 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java +END +CookieHelper.java +K 25 +svn:wc:ra_dav:version-url +V 124 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java +END diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/entries b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/entries new file mode 100644 index 0000000..f63fa94 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +CookieHolder.java +file + + + + +2009-02-16T09:48:54.000000Z +f72fa9c70425e8bae73882105664f99b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +807 + +CookieHelper.java +file + + + + +2009-02-16T09:48:54.000000Z +8bfaf4d1c608d4ae12051bd69962e9e0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +996 + diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHelper.java.svn-base b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHelper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHelper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHolder.java.svn-base b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/prop-base/CookieHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHelper.java.svn-base b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHelper.java.svn-base new file mode 100644 index 0000000..76ca88b --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHelper.java.svn-base @@ -0,0 +1,43 @@ +package org.omg.PortableServer.ServantLocatorPackage; + +public final class CookieHelper { + + public static void insert(org.omg.CORBA.Any any, java.lang.Object _value) + { + throw new org.omg.CORBA.MARSHAL(); + } + + public static java.lang.Object extract(org.omg.CORBA.Any any) + { + throw new org.omg.CORBA.MARSHAL(); + } + + private static org.omg.CORBA.TypeCode _tc = null; + + public static org.omg.CORBA.TypeCode type() + { + if ( _tc != null ) + return _tc; + else + { + _tc = org.omg.CORBA.ORB.init().create_native_tc(id(),"Cookie"); + return _tc; + } + } + + public static String id() + { + return new String("IDL:omg.org/PortableServer/ServantLocator/Cookie:1.0"); + } + + public static java.lang.Object read( + org.omg.CORBA.portable.InputStream _input) { + throw new org.omg.CORBA.MARSHAL(); + } + + public static void write (org.omg.CORBA.portable.OutputStream _output, + java.lang.Object _value) { + throw new org.omg.CORBA.MARSHAL(); + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHolder.java.svn-base b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHolder.java.svn-base new file mode 100644 index 0000000..ba00aec --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/.svn/text-base/CookieHolder.java.svn-base @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer.ServantLocatorPackage; + +final public class CookieHolder implements org.omg.CORBA.portable.Streamable { + + public java.lang.Object value; + + public CookieHolder() { + } + + public CookieHolder(java.lang.Object intial) { + this.value = intial; + } + + public void _read(org.omg.CORBA.portable.InputStream input) { + value = CookieHelper.read(input); + } + + public void _write(org.omg.CORBA.portable.OutputStream output) { + CookieHelper.write(output, value); + } + + public org.omg.CORBA.TypeCode _type() { + return CookieHelper.type(); + } + +} diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java new file mode 100644 index 0000000..76ca88b --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHelper.java @@ -0,0 +1,43 @@ +package org.omg.PortableServer.ServantLocatorPackage; + +public final class CookieHelper { + + public static void insert(org.omg.CORBA.Any any, java.lang.Object _value) + { + throw new org.omg.CORBA.MARSHAL(); + } + + public static java.lang.Object extract(org.omg.CORBA.Any any) + { + throw new org.omg.CORBA.MARSHAL(); + } + + private static org.omg.CORBA.TypeCode _tc = null; + + public static org.omg.CORBA.TypeCode type() + { + if ( _tc != null ) + return _tc; + else + { + _tc = org.omg.CORBA.ORB.init().create_native_tc(id(),"Cookie"); + return _tc; + } + } + + public static String id() + { + return new String("IDL:omg.org/PortableServer/ServantLocator/Cookie:1.0"); + } + + public static java.lang.Object read( + org.omg.CORBA.portable.InputStream _input) { + throw new org.omg.CORBA.MARSHAL(); + } + + public static void write (org.omg.CORBA.portable.OutputStream _output, + java.lang.Object _value) { + throw new org.omg.CORBA.MARSHAL(); + } + +} \ No newline at end of file diff --git a/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java new file mode 100644 index 0000000..ba00aec --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/ServantLocatorPackage/CookieHolder.java @@ -0,0 +1,31 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer.ServantLocatorPackage; + +final public class CookieHolder implements org.omg.CORBA.portable.Streamable { + + public java.lang.Object value; + + public CookieHolder() { + } + + public CookieHolder(java.lang.Object intial) { + this.value = intial; + } + + public void _read(org.omg.CORBA.portable.InputStream input) { + value = CookieHelper.read(input); + } + + public void _write(org.omg.CORBA.portable.OutputStream output) { + CookieHelper.write(output, value); + } + + public org.omg.CORBA.TypeCode _type() { + return CookieHelper.type(); + } + +} diff --git a/idl/orb/extra/org/omg/PortableServer/portable/.svn/all-wcprops b/idl/orb/extra/org/omg/PortableServer/portable/.svn/all-wcprops new file mode 100644 index 0000000..1b5d6d8 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/portable/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/portable +END +Delegate.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/portable/Delegate.java +END diff --git a/idl/orb/extra/org/omg/PortableServer/portable/.svn/entries b/idl/orb/extra/org/omg/PortableServer/portable/.svn/entries new file mode 100644 index 0000000..f22b108 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/portable/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/idl/orb/extra/org/omg/PortableServer/portable +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Delegate.java +file + + + + +2009-02-16T09:48:55.000000Z +a84d0768159aa68113866db2479f9233 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1014 + diff --git a/idl/orb/extra/org/omg/PortableServer/portable/.svn/prop-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/PortableServer/portable/.svn/prop-base/Delegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/portable/.svn/prop-base/Delegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/idl/orb/extra/org/omg/PortableServer/portable/.svn/text-base/Delegate.java.svn-base b/idl/orb/extra/org/omg/PortableServer/portable/.svn/text-base/Delegate.java.svn-base new file mode 100644 index 0000000..b3c376d --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/portable/.svn/text-base/Delegate.java.svn-base @@ -0,0 +1,24 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer.portable; + +public interface Delegate { + + org.omg.CORBA.ORB orb(org.omg.PortableServer.Servant self); + org.omg.CORBA.Object this_object(org.omg.PortableServer.Servant self); + org.omg.PortableServer.POA poa(org.omg.PortableServer.Servant self); + byte[] object_id(org.omg.PortableServer.Servant self); + org.omg.PortableServer.POA default_POA( + org.omg.PortableServer.Servant self); + boolean is_a(org.omg.PortableServer.Servant self, + java.lang.String repository_id); + boolean non_existent(org.omg.PortableServer.Servant self); + org.omg.CORBA.InterfaceDef get_interface( + org.omg.PortableServer.Servant self); + org.omg.CORBA.Object get_interface_def( + org.omg.PortableServer.Servant self); + +} diff --git a/idl/orb/extra/org/omg/PortableServer/portable/Delegate.java b/idl/orb/extra/org/omg/PortableServer/portable/Delegate.java new file mode 100644 index 0000000..b3c376d --- /dev/null +++ b/idl/orb/extra/org/omg/PortableServer/portable/Delegate.java @@ -0,0 +1,24 @@ +/***** Copyright (c) 1999 Object Management Group. Unlimited rights to + duplicate and use this code are hereby granted provided that this + copyright notice is included. +*****/ + +package org.omg.PortableServer.portable; + +public interface Delegate { + + org.omg.CORBA.ORB orb(org.omg.PortableServer.Servant self); + org.omg.CORBA.Object this_object(org.omg.PortableServer.Servant self); + org.omg.PortableServer.POA poa(org.omg.PortableServer.Servant self); + byte[] object_id(org.omg.PortableServer.Servant self); + org.omg.PortableServer.POA default_POA( + org.omg.PortableServer.Servant self); + boolean is_a(org.omg.PortableServer.Servant self, + java.lang.String repository_id); + boolean non_existent(org.omg.PortableServer.Servant self); + org.omg.CORBA.InterfaceDef get_interface( + org.omg.PortableServer.Servant self); + org.omg.CORBA.Object get_interface_def( + org.omg.PortableServer.Servant self); + +} diff --git a/idl/properties.xml b/idl/properties.xml new file mode 100644 index 0000000..794195c --- /dev/null +++ b/idl/properties.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/CompressionIdl.jar b/lib/CompressionIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1988390946d24ecc82fcd49862c67dc79026e27 GIT binary patch literal 78851 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%0AG_@TJUd)5Hc*xE&d$le#Fd#8lUrWuKFZkd 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 literal 0 HcmV?d00001 diff --git a/lib/SecurityIdl.jar b/lib/SecurityIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..917ff8f1ef7b5cbff7545071a690d614661f65bd GIT binary patch literal 358664 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ℍ#Z!aqGgTql)uA0WO$vHMuG)(gI2` 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

aVxfu~JZRAt*gcNm?m)#X~iZ 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%0DbNHDlm_qO-q*bsl~HE=k~4n|Z6KyvoT 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�yj=u1{_0 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

?%zc|Kyak63sdE>vx7 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 literal 0 HcmV?d00001 diff --git a/lib/SendingContextIdl.jar b/lib/SendingContextIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..a508aea2460f9ad7c8189a1b06b48292770248fe GIT binary patch literal 15743 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 literal 0 HcmV?d00001 diff --git a/lib/bidirpolicyIdl.jar b/lib/bidirpolicyIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..63f86f558e798d1897b0139069d7f30022ea7412 GIT binary patch literal 7949 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 literal 0 HcmV?d00001 diff --git a/lib/commIdl.jar b/lib/commIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..fa17503b4a9c214662d1d41de3405296cfb5637f GIT binary patch literal 62225 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 literal 0 HcmV?d00001 diff --git a/lib/core.jar b/lib/core.jar new file mode 100644 index 0000000000000000000000000000000000000000..ee0354418dc95e20dad03046a6d716fc3122662d GIT binary patch literal 440495 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%0AX`yF5J7KK8M@ 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 z�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 Dn&6`=S3?YSO$eL@VB%WzHP%2C=OF6F& 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%0Ao%*-x`^t#SqG^8 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%0D?8rg2U19}pd1N(Y@sQ91~wJaCd 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

93}BFm`@u4;KY`mXQB6B`LSUQ5 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 U^ax4?8&oz__>+*lSA_oef0g45P5=M^ literal 0 HcmV?d00001 diff --git a/lib/dynAnyIdl.jar b/lib/dynAnyIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c9477708b4687cbe612c71c421f65bd2e68f376 GIT binary patch literal 68360 zcmbrlb983QyDglK?R4y6XFEp^c>^OW12dDqc?;p+z2&cuL;f>tU!w-Q&q08I zBt9ob`oDkta|B8z4&o-(_9l+BM%D&SPDv_SPHV!b?~9JqS}TZa5|^^8BsR4sVe_cu zd#a8U3xhVf@Bxbaklx!A{V!M!dq~ zXx9%0kTB|~#ZrbEU+XIbyh(U@;djylnR(;th#n#XPg@C-RWNgYJVoY-Ik{4T4~$8# z&=&qE6123qKiCnpj4G7c?_?N2Ol6^&Pcw_%33mbSL7Xp6I)?)oT?>CFrRg7SEC-y^ zmtH5|f?1gzxI(1$CP#HdR~?R0&yIcmN9WO<9<^1SdYZ`mBF94gX1H{9;*8y)_I8uz z0T7s5UTC>jR%n4Pt2D|`4VZds&YM4Wrur_q;yOrL)~Hg(QD}QqG}UOlUU>9wo&kTI zdLGfB>6FgD(T|)tiMD}b54&3#Nj-ukiaCW>PIsy9IW`g3T|0*5R-N?SW8mvaj#K3> z44_s)hQqWweBzqa*1?<99iCap{@!+~l-+b?r!}gEV{;f(3|0t-7$fN#Zlq;~y*p^C zE&xXi*-oJyd&zN6;3B#(g=v1!O7O~Rm(|C?P;vMX2kfmE(ZVThV6ZrnCYneR=j#tK zPfJuPfXq9Kj{3$jvoIW-D{YFnR+nP8h&!h2U`G+bT&Y=A97P-_;JRAF#>lG zRV@H^0Bm5EvRQ)>*J*7g6KBA6VIMEiEO{S1H!xY14%=5?1z>D4dMqtG^`65DR9tT7B*5l)21z>%yO{jQ zfnkq)j`*!mT@IoweB6=nL-ruv+i$V@@Lv$WVC*p|hTjY6L+Qi6<1L#2Cz!{SjRkSa zN;=i;eIYCxTUN#`xp;;=e(Xx&CwzJrjOEWq4Jlh?eljQ5n+4z~$w15>60Rm&^`4DMb z#Y1q3<(77#L^jUy%06=Fxq16eAmmV2p%E>L(bI7QdWQO2JmJbZRm;pWZ6 znTHs2`Qmkki@aXr%)bUdH&vSxg)^>wJ1kAlYV9p;CkOwdj-qCkUK~UZ6m-D1h zAcO*Shd~OsNEOA>6ti+`sEHQ7?5?7ue)SR9Lz?xv3N=a~O#VhKSg}3=t(QuoNXUfE z2vs!`bOn~ye@Cx4gNJx7@Fr|(Zskw%s`@1_bXms_9sfUE_OJNaNKDlyed7G!XT$&B zIx3;3NGskPAdvN_LlGb`)%FXC*?=y;QEB| zNT(zsiZ}x!q%mnS>B%9J3=;AWJmpkU%zf z+~K*osl;o-iJ#i;KnSF&BKBtW;sj88@2#6a*7PZ1B!z>*hLj8_>KuBMOUaZ_$*Ynh ztew_$5OZhVi0TW@gg;|xRCE_a8+u=UQC>!pRcG?RQ1|TX_^uCAI;E#C)L)a$9US(N zU1XY3VinAhtZ7xV3j+g#zF}pv~bd<7&(!4zC zyKPG%VsdiT)^NVOVlFkMI1-IAD5wBGj?Y*yB7^*#EG!Y9h#%OIw1KnezKH3YLiAy? zg@$C2N9*HygZE*k*K`V>U(atK`Y<&jtXVokpdd8!-dOQ*o$mG9U0yYWSBCy+1mQ@c z;S>g6Z*oJNnASUWe(m1iFwHxdRMfa$lrKua+0dz`SCkLBnr4ubMU_$JmR`i1ZMDou zG1alIj7`-e7~Vzzi{)L|3;RdPpwJ2nCB;Q7A)(e+K@u9&y|KP#)U;_JHJY{ZW|o>_ zwS^`Uj*dtdfM>+AGGFOzp{1>Gip@AZn>!NVS+~U+5O)RE+uDXsRf_CY+-_rDxJzWC zRBl>Q*@aP~J;S&9H476!2Xfqv74lN=oK&9K4H+w|!Fox=X;kcHO{t~UGA?v?p$U-L zm`)DXUapg47`OUqR-T-+YJ$-f)?V9OX65Qp^z$Nhl}l%BZYhadw-R(SqaNtDktQRT zG;;bZk-lg@wXL|hpm@IvZBt$r_^x(luvw}R53P zR}$)-kYGqpP-+SFDcl!~_Nk^kSW2N3J$9k_X8_p_lnFyOYL1yX)xG`-SK5j!8Ca#b zJCtYKVnuam-YsQ{1y9-{jc1Bd;GQA_XoR?U!;hNuJlO(XYaIq@t(ML5^y+1-0r%Ea z)1mZ_S~mGX0?$?)sU&X|5YplzR7(5}%g`dQSov$ZZ=wA&zAR9flpH27=C~%Ykpe&B z>k${UBSb2)Szkt2=X%lw_Kc+Cg&Aeos+NvWbF*eIk`Vgfd->vG+Ks9wvA#?rX}@Ze z1;*4EoriE$!1x5bf(8&@9KgLWB6j!7wEwo=QPtegzekn4a}cz`(RZ8489DE@8Cm9k zr>#yP7Aqa)=eF0r$enk9nw?6Jas*Fu+WR*7xEIilNDI_f??E|Q5fM=_)!{7Usy#dw zatJ*>Qu-YErvZ(!ObftRSl<4 z-edmUi~p^C_$T_a`=meA;hc($@g_;Bs%&t#9fyzWSv-%vK7QW7?0wy^P{-_sqoe9WSO}-w#-!Hb%Zarj z1P`zsR>*sHIz2@lS;@XDZjsSH+1*~aO$L%?bE|*RAq~pXjO3evDl}b*6C`eYOTa5_ zXu?6a>b78piuQeWyuaAde$>vva#>rb!L5k7$F6_l}8;Ulv-A;4blPQ*h4!b6tQPNHKVNFVD19#mFZeUt(hF-VBX)yX0pdZZ>tTi5;JIZ*# z{2k_uhNH4p;~aMn>}_X%C^u6ec*B2UT=N<(j-eq~xVI4GTQwR)*t(XL8IS~M6eLL4^Z=#rUy>G4qIwhB&)|)IHoE@?h)UZT8CVM%IGOyLE9BQC2lx?r zGQMr-8dh0UG)FAAkRU|8EJw`11j>`EBMyev7ZVm1hBpd~>QT6V5x8E7K_;sT4BM&a zVj9n6%H*)Sl%oTJugwwyx5Ci`FQR7u!J%9`6?eG2wY*o#Xe_4Sy&u_motfu6n-gYb z@JwW1Wx#w3+%go)dk0L%X()a?j2W~JHv(ToT9l976RTXRZb1HSO@Bnz<;#@W9%X-^ z*~N~iG;Isvps2|C)fIJW=fKxUPK0(gO-*6oYf#))_#;^f{%Zea7>7iKuR%x9yzH8$ zGk6NhNHm7)N5(+zvMC)H;>?oV3Vt!m^a%pi0#n+=2kPu3KCj36> zXUsVdNh!EX!e2xjuodLKhE|Cv)_t8pZ$SHK7VT^>IJ|#ZdJSO3VdKwbNBi72wEx|u zSGM@~$|ouQd*yWv=hUlG7PaubrIZ+mo)(B2RRqYD3!ku(o#FaeDJ<|N^eD*l5q$me zNo6gCmCyDK+)Ul3GMO5<>@MkQfZ!EWN9|A zknP3lauF@K9io>-UwHSV6}iF((!ngJkxmCraS`9i{0yzU>f}s0*CnjVlHD75LR{#j zADNOznhLBT%4)>T-!9dEr<{lpDg`A%3$Kq%DY=krF9pfDo*)R;m?00jPHF1n= zK2AMyH8jh3zKzJA%fl6YbZ*!*YDE&pPOMmYevhVw@I?)$uwuatHgdnubc%#3MX*~C z`;YtvsVx#n&d1u8DK;CRrbaryPXFS8ERpgxx$ke5fA*&MhFJahTW+PY74cqQ=7xMp z!20QUkrYwWy!a-RNbQcL* zqt8{caB?=WbyoJUHxaTk{`Xg2q%bZE%z(;+8;d#82N8%Mzk^I~ny(cOl`D#Z5`}=A zGC3n%J|hdT%$#-v5k=wajbUu|ryb0a@szvlI%Ga?!_TR?1bUEnWrzVoZ%}Wn+an6e zgc^sx0f%8#wXQ@qKGC*!;g2m>UIRT&KBEs5+&_!vRqT-xInpaj{chj0+FW;FfGdJP zTMt^%Loo@ld0xBRc*vbtE5P5(ZJjSJpW<*du6u<4E%3p81~Ht&lD#+}-oa5I$P0_{ zLm5=@&O?tOuR0+t3Sappxn+tj1MZ`EdZ(boUnD|GVCHRlpR5wQF12?DH_*F?^S9GE zaum@wXTL)_qhd)E;>H;TN9}%E93I#PYQ){x=IHSZJ4<*#YnE#6;H0+x=rr4@fJl)_{ff?9~@uWe1g@z!+xlNIB&R z%P@j@sdx^wr9yk%fwiZ`6uc!Bnhi65iS6G-7{tOfz)l!qQ(v#NxJGPI^%h45*_F7+yjVd4Y*npOyt*tJb+l# z`FOW3-~n;&S;u(1o7i*ZHZly>9h#TQh6E2{%~gj9n>C`e^*P7+#^BTQb(X5jNo2Vi z_T*FL^YX1|cOi*-`Dc{vI2xe~c8Kr`Zu+}JP|V8oB)A6ogG7&r*6gzD=CBx?)4K1l z1IE{*-qywA#Y&Qg!Dd{fb0OTe@y*LWT6R1IISDC~(g~bwZQbzspTwrW3O@>nxmmHy zUM=~EUZ1}v?KZ^N`q^0fJ<9QPdC&(} z>nYu!H0~K&j#?L~`Sj=s{MSjUfaVBSYAzOQNwA}Q!yx4^T5&xyhN@j3?OZ`TF$poe zUkut>8jPk;hN6Nl(C5pkrgW3q$_6LoTY=D0Vo1s*ai)?LEBEV;i~8(sJKU_}t`2j% zXf2jf3lbgd#7Z~*2GtpR<>bfiGzExLYX{iI^L_%FL$(ac|s69&CliV1XrZbi5o+&8hX#TH(@4V zHH$PDpP}PQQpLN4jS^I+Ivx2LDnG;hc7wlK{31ID4rzG><~(=yaxH}lW}OLSeg+0a7WkB? ze&*uN%m=csQlHXU0%;jW|49Fa@`AunkIB^*Gs_3h(A*ZIBw9Y!M{b}!SOjF0ibx{L zd<+t~)PPdNCnQEi;AbFeeQNpk7m`a^pK1*Ggz)uGwD^BUia#X!MM_#yzycUN1s%4l zs+yK2YE+}+1Bx{v`XZ>Hq9Qen)d`hV9re+GkMdk`&m)Mtf_%)4YDCD6ao^kX%v&AP zsfo4MaVmcu>!DmiG!f8ajDtFY$$Vx^I4P`TmP*7@9!ob&f#ZpLEWny2hL}%iGj+q+ zT@e+)$kK7?G)L(+nKjknB(-|Jjx&?vt^Aj1sBP9clJEn~$PQ_sJ*}Ti?x;neBdxk_ znq-w{BRj@|;(;!nyq(qXkNI5h%vC zx17`(Q)g+xB_t8)f%0gU%F|Ipp^j8pYr;IN=Hutr!zfj6XE` zO5KjZt0vEyE2|=#+juuwA$aJ@>1HS0k-_*xBNouPb~w!mQW5dv6eB9~q2~lUxt$ZHUD&E^wnbd472g4e)50NEB~c;{Son_lr8=tobc3Wts>^qfI-tj zmL{T_Ypes!&XwniAR>zO7z>7}lUtC1$K~Yr06Q1ca~9nEQ#pBT`czK(yxqrjrg$#* zvmXyHTkwGZSCYaoJ4E0NdqPYA5iHRs`|)s>ZJG}km2FZt?=%-p9MWnaB=<%S& zBGOaz$F%wvhN0p?xl?b2`%{3o7}^|u!aAo}^{^v$Mcv-nn=w(d_@c3`2)@x(q*-Jn zOW#)H9W6s^YuYzbGg>BQF;6*@Iev+1WNWXaR}A~#fkl?5OqRY1I#Y_Z#0~w3`H?L5 zL0IGE!4j7-CnWN{3er^Q3`7#v`!^vxrb#S6`Ow#Ll$*Q9O^KLX!p8C9a{cg;*5 zvlC>=7+jLvNoCCroQj7$Mv9}}ibaH7Ty}xUACuGSj&jG+)f+Mvk(R+qZZOI%4w^9l zas!jJHOJ{LUobz4^Sb7nTzo_*K%y3aJe_#s-L%KQY6%NsuYyTSxkpeTYa%7vr`2%I zig-&wA!id#&TwQ&#vtziiB${Y;^Kr!wMM{yVM5L}Qtijl6%Wgo>+K8WI*X1MB6r(VIm{P)~=`#a6DO{=x(bWKtYoV+n z(Nuz%cMo^{l8!lP>w#d6{)XbgwPx!#3)T9ty-ZQ<-DzNB$CoLh^#qd{3VC)*?>3|4 ze}yJne~t>HS1=3pHD5VCENj&qgez#1(Uz@xZOSyl%{~KXBeVv{VF|u1Aj4HW)l^qI z9;Q@EDV2F%4g5r)5O|M#@mfKdC(epI^iHr@=o@+PQp6~P`CDZB-g{$q?@LSp%$3yKKa1BvkKx^J$ z^0F91cYpG@ToJkMsNGCY9z9600sQ`)j6M6K4qJUfEcEBz`}=+O2mFkRSNMleGV-Cu zmSUBZtZ8AQI+KY|pc~bDmPdd{>6ugkpEh9=S+U*nc};-#0_0PAq?@H2crZLQb@BWg z!R*6}uV<4FD04?VB+wa$!C2YaP%794sUF%9+7KR(5%_2!6~p**P9@=T=%=x!yN}v-`IU`K26{*eywIlS7~ZDI{m6W_3i4t z*IBefC70shNld_`yPZ#Q;i8cri(?j?H|^NT5XB^q9(qAC3$@TZVraR(oDkkC7Bu^e zeHf~M?}47ShwL~sBr@)5NwLsIvxb#(1^ zKZi13%}zR{#(M$^N zB1VHXgoupi2vOK1g@pYGB`W2JNq52G2n(U=1C+x^`UMIJ_evDde*HOGL%>$g-#(+& z@Y(+MD*7+Vh>g6A)Brzf=A>9caou90ik3)e2}!6ZPczZoE)gj7SI}#DLo7kbbaCw9 zH!3hbetGWKg25EkJoS`~td@z1n@w-uu5OS|VG9^j3z->npPNJ(Rk@BPkHA2zzd9I8 z$TzXDWs@9Z8uQ1}!(f|JW7#4MDsZq=}JxaWRj`c`2ifa}J zi_$CFJvjPCbdx?f8_KkdYHJe$hA>+s@r|0Zkx5ul0}V4dBPJ>mF70WA;C^ZG$`S3{ zDG-s0ziGFBT0eFxmF{k+93oyU4L~N*x6!3vT8kNT7C5V%j@>Q#L@OVh3;b_ z^Yz1xIrxIF_;hWUHl1UdpfuW@m=x>d;2oj5Aj{% z34Qxl@CPCu!JAs|mp(#fq;x2nV2@x`K>&TujHo%8Ga{_P7X!k)gc*^eZ`4H8->3{`3duyS6Yb#-c8<5;gE zCEob-33uDAHD1c1I%@s4@J))zO3)pvLIv*e1_UiK!T9DmCI?wR1f%kJ;WWa6?lKM@ zSWiR2&nc#5qxO|2>gyjq|JHhS{hpQOKxEsdJ^Bj2h-XH$eRXbzKjx8O@C%ddRR6tO zk)Gk?Wgb4+1RFez8M8zTyc874;yBYHc3(f+t@PyU$1hM(9OL0G$0Ag5waJwk{5E|> z-%5^bzQT_Xu%5Fd$^s(+`8#b53n|xNN0hZ7?V*a9RXHm$>&bIBDQ5V>vi;uz6ov5f z?F7xLMou!Cuy5QFLKYS*^^3k2RN%JD^ZM;2*SVakcjlYPtmEY{sC1JT>|1!QuMyQb zm)P)8+f&X%o$)QxR35&vp6V;D#9Slr?roCdmyySj(b^b_71%2h{)Nxl0yZ{l^Si32 zG)?z1BJUN?zU9rq56g(6!c{Kbt1+-mivy9NN!OMz0>5h2C|ig6L#o}$G8M%(rEE%r zgM!7dZLUotiu8yQlg)_?F~TUWZNp8}MGK3X0|@yvLmT0T-rNuSFRz;=PW3CRY|>Jj zhl*Di3}tl(y+}7nn!06*S$mA5*LE)yxe%wAT>XxU2Olxtp?~A7 zqSS;w%S$nM9!iy@If$Flrl!JrPow)msOV8|v{{y+ z{*Kl<3D}DsOI+73BFtAJ#HwzT%{U($2K zHuM)X=P;|J9qn`1dUkOnN7+fBWm6~+7_b9O>@OIseTqg#gk zqzk$~7RT9V_Hk~W-2?hyu8D%E?2G!oUn2*l?3jS7A?Ze|VQ9;^lj@pWS#}O@HMwW? zonC_nu{rM8^=H6U6KYGHyIA|cq+F@WzS+2U^l@Fu2A#I0x;f;!HS}OFzu>K#U+JzJ zU-7P6+rw2hG1<_Yz=N%~CYW@Xb0RrWG@ZN?b}@n(7;J9VBWC)#`JvtKs0e{a-gI6QFN8!! z>in`rF%;V{i3C+w!85$&du-)Ahs}K-2}KiHWwt;^H?V~M_go=#@p>&#QS{M1eI)7` zumsgUK^+2!XpxyRm>;SFDYUUc(kRxM0xh($LUc&X<9gJ~+(9Cf<^1sCQb#n4VzC1Y zMC$o4ds|JA$tS=Zg-tA#8GVdCaOhfK<1T%qi|U$ra>t4lDXJ%d=vhf+iNw+)sS)InzF!d%osH=hJ@RbemH!0c%hj%@nldEErgJ+C=;b2mG` zuW;&ZnsEBbAO14hJJ$cJpdOWM;k71=I3l*SYH`shA)%=W zy)W-?ctNFIrxYY4DX9a@&aXa>Ef!woLc$R}KI`a5rhE0}NuGP6T6IpdfOm_{>bI$@ zTlB~1`)dy02e5z2b`0{HVxS%kd2j)5%T|6@JL#LO#vSMW$;0^%&u93Xa`Rgjm=O9P(CVu|45@yV}<~Vle&^5$aCkKlH!n-5C ztMyL`(>)ZmU^R7UuL0oNmsrrTx+bGS`YdE(w|jpWzB#hMMq)DWolPQIWLPi0Odq?uAbb zM9fYj9D`nIPutxvRmDP>e{PEkDZrD*G{hg95|!l&l7<5d$p55m*AmBaFCcLMN%BjC z&^%q$bCdO1vJtY9xs1{RmRNkm0F-3XGIRWuC(J70uyR1@us_mQWK_rnv#SK}$9uI{VW z(EG0-2xEavSHF)mv=j;Jz5)g_=?lz-@+s#RY&zp5Jf@=L9&~$Su3Zc-S!En3MM#Px zD9kkq2NhY^CX5%Q#G7q=liL{oE-28mmAWPSp-}>?%>Qx>D*t$S&G&j3L4uXL+K^)`Yd4W?Zb; zlFmC>8M4Q&b6fnb1OwmKzl?|xiVfEK(2E~_&ik15Vlco}&)Kl`0>ZXwIE8d-f8XAD z49@eF6XIi}=VH6H?HqRz_bMOkD>vv(gGz5602rv+EH|t(xY7R&Myk>&H+AVfPNv!^5p^67`W8}uvO!4gcl+>KF{fpdR>5T>jx$Pb*<}>_s9LgZ zivDbX8DxV&QmxrGM}PLT!IIOB58>gaqwJ)fG-pD6%9Wj3au;w7@&i_<>@xP%Hv_xA zwcx7#TDL8o{>^cN%K?bsDxr{CN^3+{5X)enQe}=Q-at-+434wiOz#%Qi>~n1sd_p2 zC5>jd7RXmrTdLn|ciiiJx}*0@l~LMm@lHF(FF4%E*+T6i49gMLB-u^H0Jl!4C7RIocJF7TXMAi;icd%>#+1-L4U*PPpuGpJC5h=*UpNWaMNWG8k zVx~Ww=z3f?xJY}9Nnr!>DqU6|jF0l5&QPz56OH`UAGkeObH+})X}wwHea8Az9zUGc<1zcSpGOGwZKW(vt;Wi* zVN>!Ay$ARXrGVgYbo<<7zL#cCZBznC=2-UzHanQyvOP>MCam9IURPj%QuHa13 zeScCNj-q!415uB^&I%;lHo;^w@uo8hAxw2?8P7BjZ^;TYwfow*vY(XJ*ep4x!8NS} zn`cpB+@^+6Xl@-vNHExFY(q9ej~Klq3SV3t>7kI|M3=Zit&wbstbW(@f(Sd+c4=+yn-%^qlj!4)NHwMZ=L!a|9DcQk+6vgacr#Irr*_>QULgk5_$r7)0Fz1Q77 z4e}MwQ$`Q%)*yL?#XV64yAqy;FU8{JQ(Z&PDFwT|3-iZZ3a*GP!E1~Tx=k2ildjPh z#$jSIe7fHI#j;6&1Gh$vO6};$dBh&0e7tL8P~z|cPkexrn7MS{fJK0@zX7Ey@b*IS z@lqgrVB^7Y>3O70!E73V{uE2?IQjtDfWT0X$y^`U8V7-`y4+68Hn*o2$3VBA9XTQc z4M2+a0vc#K3qHOa-o{4kAs}vMVR`?HdjP>E+SKb4ivvF);eQSXf6z*^6xU??KTSz6 zG)bChsPfkl>7)C3Ncarj!VuC^^*edv!P1M>HRq@?-X&3@1|j}o8n_S)mlOnUK6ZAU z=HO~zx_!QX|3VPMg9g205F9IC7l~$|8X`fdu2fsCAH;tl-(iDzgkEiSVmrSe*8y*% z*_1zzM*E>Nw+g}n_j`R?yTX?Y6fAHiZeRT@l^}I$9Z8(DWomk?q=Z}Cd_Tf$hO_TI zrd7F{lj4MC$*9p1MxtV}8ncAuH9~%WwgDq11&@lNWkoMa+hF5s3dwvL(j?q3^ka19 z3Bh?pK)Jrsz}IG$!rB4@bcVozGF#V!RhI$cFlO`66IK`LE^QkO7SUL&gc|~lZCTuj zS}mefX7asr8j82jE()h~UpA7SPY_~vO|om}fv*D8%MR~u*8 zqfCRuTORnb1igCvX!fj+5xubu{$bPMubK9&OF~!Zq!B|3lC-aZ{0MWg^}(rf;ZNb> zJfm_xsDIH;)dNFK|3?h_5A%nNg_Dhevyu6~OfyLeGIF1>^ihgk)O_Pd1S7@yB7}8c z%J7BxI(PO-V8=m;)dj6trcBf~8J#};3FJ*-SVtIPXGq3%b7~?(Vsq`E47*0Yk~$I? zr9qvpULVIV8fpTg5ygQ*_3b8jAv>06lZ=G&CoAC!G-qaP1LkGUhtbH{fHOy`}_^PC+R@nKwWlf#?^UXSWx9Y$aJI0OzPAkm+E9 zA*UlHC^jd|H)d!PF7Ij5E-RZ2`$8p0EHnlW!3asbf2yY$_u6)pIFOJt*t&?bO6Iw@ zKUV5z%?GJZIdfb&coq8-r2$NGy%s)5A&>m5f`)4*i0U~ebKo`efw`z>e`y&$18TBm zjktD9tnwhCDI*0M>rdSNx3mGWKQrvwg_e5z|Ab-x7=S-B?77;SGREg8&Poaj0R}!0 zPQQNkoq27h47Frmq_2pPV$HaeMW#l_G-H7|YgaDq!(T7W)1PU|`E`%uT>&pA!!)^B zi00Y;a`N`ZOZVcIdo0I~=NYb7MICy|NVjjzU2K>I40%)K3U4!|E|(xsnor@Yi8n#m z5?W^j!mGuzxTtC;b+`#f1lpHctf3KT-oEre7jMd4QPlQ8hCO5NVtqmNm0lUlobhF2 zNc7GPEVI-Z+?Gm?pY_e1b!~}1o5R}A65RoW_2w(dZdn2mWVTGfplQv4yI(Pfcf#Ri zG=t+!mfB7kDu=nAG`!eu5iCrWSj&?om>mkwiw%6u65H(f%zjn?%r?g%8yNkL+5i$^ zRCGepcaUTBsgGfCOqN=rb^R1As7g%e2|5h8<6hM!DdFgj zZ363BS@4TEODLj^E**Qy?UEigUM zv{Fq{FQF_a%Mx3u2yDk%t9IbK^)Yr_CL1KHsFdoWIw)PQNC(8J(kc*SbZ@CgRIkyx zRpS7~J1o+(O^pyT3arv}BNZYBr@*Evogp0H_pMZv&`$uuuI_xgSW8WQ=b@Q{xBjF% z6HGt^(SdO)rDSemOw-zw3EQoeM%MOO`|sXT^&*RurOftyj*E*%70K_*JtnEA6gG@M zC@-M8@a89}SS}O+S`zEzn}_)-fDX-s2xV>hfuBzlCq}Im*I|oicY+Nk!kCQOoOOa) zioE*NM<=Z3-*tXJGP;~VNcsfrHDz;I43c2Ppi|GrgtQ}2cJj_%To2on-J&;XUP%M8 z+#jWniqDS7QXCHS4yHmr9wH6+VF{2BG%TsYy!j)pF0n<6Xb+kRU@! zJ{TNIAK#$R*b&q7YUVs%IvL3GgN_&E%&@2%r)JjZ&m$k~Z-CAi1`EPO;g^MYQ6O>i z?WXzecj2^QTMrQh@y~Zp238rht$03eNd|oygh+MfU-&eF&6;)GYNPrQa=!JW4V60#TtX@F@v-WrhjC3 zAqJ13Z^q^F^1uESLtp3P@8nrN*~@OAJ)8t&l!yrW4||6+>!-crSJW;WK{h?HU551= z+@Apfqg&?L?|;Ive*%R6Eyto&LPM9ji^%NV%!I{YpbSFDFk{rj7zcoV?}}~Lf1;9M zM#g^w;``AGLrMu1zFa)NlI7$&H8nAExW?s=(<~^D2t(xW4tcANXsVDJ97qZ_4y_8g z$I7C`8Q{9p>M~h(vT86=oUA~zjJtjF3$to-w!K=%HT|W`!A?Q7YZ3+Y0d`IQ74%*C zC7qv=lf_q-mgPVokSawdYZ0=!XKZNhSwO&wlePd&X({^L^t%o{e1m5s|MRDGJe`6i zLD95q7p-l|%^*OOgtr4JAn2<*M52r)5R6(`u0GHnLBgtRO(a>%wKy4#(@@+2x(#ll zG+F4XL#2Y{nS?|lCVuf9?P7V%xq%{H;m&+JQaTW zK0cz=J_yYNyi52NC2zE2ktf>&v^}UDq-_g2oY0sae(_+Y74#?YRLo!=>4^bQrWM*Z zJ_4i(c%k|K`yU35E(D{Q`0s{s;REbJjlEXD|8zJVt^z|+S21P=ct0t2h62N zqusbku6n;_RxPEXeVRTtIoAJ{-fX(t`_=Jb^LC^`&-IJ6p^zBgHy7>x46Mz$ye%8t zlUe$fIF(N&D4 z@iJo7M^y}&veCHpg(=LA>-AUOfU!No=gtlmpF{ta#(m9747 z570zY129F?(@lmpPKWy2uL_4E0CMcA*Azl67_( zE|HOW#Eo}>(yENpW{o4av;0>#s{SUCsTNFH()r1Q+97|}5P8+Ux*uPrEbATAW47M> z)QCsSrgO)OVk=N1Y zZ?4k7LB(DGBtTUIavsgJY|!g5p%51Xx+cC`@(@uVD_!OdFpp_sOK=U+KKZ2pkkWvF z`f&8CXM)q0jA*)-C6eiZ4UJvY>dX+*HLVww69v$wHAMBpx__ONWI$Sa(f&XnIQD&= z11N&<1|c65x#W#Zx0UI+k>Q7R&H59w*GEDF_ z(@j>F7QQRAh;EID{HG2ze`0c&`K<;zf~1r$mygmjMl&^+W7%u-{4F~r^e}U}rUe10 zg#BjVdu^}`K8f`+l0agLjjkcGE6JH;7*iO};eo8gWyZnGR zIM3@>@~F*#hf_2C6#5TqL@U{U!%O5#T1q+zeY7oA!eV{_j7oPfzI_(Kk`V_KM*854 zvI~b1a(tH0UD8n(RIkDIB`?k^3o&6^maWcN!3!AzUgPXG-`TX-IK7+cBj|h7gKwu5 za6+}Tsn=htD=W6sV9=WvX?D+!taI`Ru z4EnVjUqaPQ1ECCECW40}>9R2SQ~4Kbd83TyrtJ|3-U+Z9Sp)-xD*WmF4;@;+|HTE- z`V^gz_le@ipN;VUjOLDx1|I)9Bl$#r7HraE1e5V%{xWg95Wh6u~FBWmbU9AmKhfooJyx6K_f2|X2*bgcahJ#W~hMJ|g|CR?TOA}YgJ z{ME{`sGv&~H+U@2G572rkQe&pB`Xy2Y7ynnpD4MKxFP4~=js0G^!OW>$3N!x$0JCT z@|xnO^H8Vcvt*O@(|PC)qP&VqjxGQuJT4-j_3xU^x_{Pe=H%;r;RK1CD(xJN#NTg~ z%SaZ~vc!{}T1jbIT3Mm;d-r|)q7PXk+^Ek#NC2>$i8P2y=JLk8HcZU8^mK^Hx%`eX zz^?c0={g`xf_tw+4A>C3SeV(6zqc_Aa{~IG)*2YHGeDo)##VTK4SV)Dq^L~Y zIizy_*u^Kak138hevu@I302p`-hrtrv9WD<1_xSiv@j%In`8L_*$v5lqrS*e3yP&7 zzq*KgIZoRQQhvDjMIfqJ*@(E^I!(eTC_x>MA4+=qD5Yvq1D&z zSJFvcL%TwJ-$hMN6No)cw+9=^}T9yell*4J}|3@)TziHECz_YlKk? zr!x-{xhwjhg%qHY5X`!0I)TM&??U5*435faX#twFL%^Dke&k^SKPanX7gQz4Dyn5) zjGAY1QUvyhrMSW$n8zAjXU4?rMD1F92XTBEm@r!Op@W>z!G!^T%1?WIG#GUqB?-CGBzy*i%Taj6 zjjD;+dc}N(^VoE9<%l_>F8`@E>^Cg3N7?clgf+$W z8P&E~E)qCrE6IbR5sLZDj3c9fZG~^K>(R}`GK(sj1LqnCofBEwJ9|lBY!4q1p%#GX5 z(1yp&n#&luPkx9eB*Ybi#l*~5-Z97stqjJ6>Ogh`HO$fE2_kSib+_3#ZoVJyE!Jt! zr~}DX<&FV230zLI$av=vP^RHUhEypTQuc5uj!ZDzU^4%{^@LuvctK0qe(KI^qYm&j z>frgy=DP^mN0by3$b;baCi4Q&IxF@unE%S!^fEd;t6z&P?fj8R0{4N2S)s( zu4@0YQT{z6{KbXn^Y06)-HY~W8&zLpOE5!(b_Cn|QlzJAWJp0l0-n)E+VO~~;s1}a zw~UHo&DXaRf(CaF4#9&5cMB5S-Q8USH16(h!6iU&LgNtJ-95M`$iK**Ju`csGjrbe zLoH;%Vs#hQ_4M^z_x)>z{8jb(=ck;#CL+w`X@6MzlvK|k&yn>N?rdEkK_zRS0t%`N zlZKdwbihNKlOYAzXmgl9l9d{oBoj5E7+u#-kiy$}i)QUC9R{jo^6W$JssuL5;=&L9t=SNce~v11}BQf8EOC>n4<@1p;75wTFP(6CUk(7E8WK@^}u zkTGZ*ln+Y_OAA*9D~_&$9z{}4Qch7$Mj)m3Q3ACYju(Uo+Jwc2>qGZ|qe77-w<66D zd7oPp<-Z3p;CzgqE*LW#zSMR~4BWC}qkEKns`25(7y^Vsur%LlRl&eJ_NYzeC zonLq9N6uNf6`v;8qTt5^ShnRBLe|S)h7&TbrN2VBnQ^OFNna7%oEPQ=j40h?sV#OG znyx14#Kx&+bRK>%XN}6;&JZ@YCAC}K%2?UTAlWh^BD1kKvZCSN*eNC`mv&KQnaWwL z%#&%Rxe^&9#w#p=3+=5HVFl+Nqj8h$O( z%TI)2mcEwHKX#C27pnt`n5xuhZZ}H#FuzkAee93MyiP>CA06EZ*U4pNKKR8snrO~e z5Jb%pyZkY^6|KU%u0d?(lJBd4p>LeV(k?c{0ZPRMsU;_~Y5^yIHi`K=YWm=r!O=F( zRYV>{a^A?h?ePrpi92b**eATip`EJV`p-XWcpGaLN5=2Z!Q(^z8 zqJhjzlqB|L_-C824$0w8Ep`i9rk+Gad6t_X1tB?ant3>uBAs_!RvqXSs<5v}sEQPw z@B|rsA{4^yI!}S~yA5$#Y_I4f84VaxYvY0LIyPqIon{F%#~F`-(ztlFQi?AJq#9*r zWTg!8B@v8oHXHi24WRt(#nzF*7=7)b9sciOuHPT{@xtE44Te}6GDzuMw!YF=kt)ZB zUom3mr|h^`A%T<7Tp-Fmy{ILLEO>Cxp(EUP$VGXK(kKnxiW-braw?(BN2kX7UiTp# zci=q_yot)S#CVHDL;O_Mx{(7kE-J?r1$vrbnC8#;JYtfKqMQY86D7~Nr1FRq-uGp! z;G%1z{k|W51t;%PHyZTN)zlQd?Jec}!!4xjOmyR?sT(LhP}Z^b3$hSU$dP_vy%Cj? zOPpLFibY4wQ6Dt(sgDry%qUe}&|_8=zG!VMDy{SD*JQ@3lX9-7y69LS6&+*BheaFN ze1W6&!tbJ{Wq@;14>`;5REuX+55qiw$qm{wmT4}yywiu^UBCVkG4iUO{~$ydG(`d; zlEK6pN)ZA>?*$?QN$U$n*2aWW($={(3b&HZp;Lzd)wM+EDsUO1PQWalmRMuP0_~g! z1$T3pwoaraf==)(e(OtHRyXt&t5dAj=`{`T;;Bo(A?(RFZp4*9SNv9(6E-)ZXI~NN zKHxT{^9qFjxh=MWXa|E2?B|QYfx8qDjk^RMSQ?D7$?sU4_kiKEc^Aoz$oE@cbj9_; z%VxTz<1@A6SiiXS@8ktBZb(7v_O|`0FMd3qJ#`MST}y{v1;2t`?R7V5xhE!b^t4fVc%O&)CM_N_CGsxjUAX41w+RfYXqeX!wGlW4AWoes>1<0Q;d1a^k) zu1WZ&4Rzaz#BG54Jkb}!mSrvV`zr3daB`I)bfaV*NrEY+ldVPBJD-&soR)mU)pnT)OODFK_7D zbu~!qW&w7p@EmRIelZhNr#*kEa(^h`TN2@VxeSd{G-?I#Mw`=+mPIvc*!`4*@CVzB zXyw^rrfoDah|6&v+8)TYcbbq=PJRR!Se**m#KB?g!OD|rMWgG?WqM5vjZ0}#;`_qQ zV7x-i=Cu!&qE%B+s_L#0%FO~us^M#9fN^P0{+W7nTDFex`_@ou#YOb^okQ#4JsX#< z4Fs2O#Yo3YuWs?hwomRw^z_~A{OzH0`;vx}&tUAY0jqW`I|Co>xYeV6WfOMYW1;4! zticBEc*a@E%nrfbAw;QNBH&kl-H=Q358}9d~H+}Qz`Kb0blf&~z zo^?V(#a-KpI|st)JF0!JrY4KsFIGZSs-wG_R=XF}(--Ot?OeM`RM%uT2APf;iHp?~!X;f8h!}IV(B&@2)=e}XDZrXeKx2@;; zi1Lyg;2GQn4r1VVuC9D8ru?_cN#Ija8)xf37>aY)9}H#p1~Yq2#eN;^{S9Af@!uGV z1%}6;425Lx+q+k*uD)8fFB($dVEuBxN$AnNLrplq1hy#9Yke+dT5+rYx$mru79R!8C?Cd+S_Z+ow+tFeC)k8k-9nfC%$TfO9qBU zkPik&xW;a>s=rubd zMGFfA)V1H{(TfTS{u$jgoBXr%3gNHO&62y*q?QcVm0{kK(N$ai7YOT#AtneRINdSG zGB{Y~IO|=Xv0WSQDzR^FAKOEix}T$)$Rg5fB)Yt4DA+M5^3g9}#*@aSpq;7#y;qY6 zHa!ai`v|%7Q1vpqSbfwhmaKuJv>1cY4g@Wu@`O^W%$h|%K3^N#%3o@){44{ zVG{Y6F)K=b=TVmXUilJcqUoP-;Xc~S2*C@XRh}!uaP6zk;i6^fC*?X)a&n8MJP@=H zxLQ^F3V@xLP~K6kbM8>ktv&Z$K>_7`G*&-xn@3|*f)dulr3S|wu02BC6x2f)dv|fT zXddFcpiG#X>OL96F$yNymT4gbT@Q|!^JY%Ul-^6mW3S;t7z^dCY*HATjfJ!n(o+9h zdXpjfL(?`I6!c)7Kq=i@8R}XZ#fW9(L^*fOnFSA8KhR)yD8y@L0cUxp+a^dUGwml5 zLTGBndIbebioo(luDwjFqMIbat)maLp)*rGtU9^cpG?HQX!5;SeDx%?&V3FZULf%_0d&+TD6wEAkUvprm7)XpRj?N+9Z;5sXQH!dH!&X5#Tz`$)8xR=B8LF@At+{UIisWz~o|i{aQxjp2k&ny!?= zbbP}R?bXG>Q0mR<8QhX;MlCJ5pI%@aNVC5(8R)or8*cf7manpUc>~apZo7sK1vvvz zG=Yw*o(WnZMUz)GpCqBB>(uZ_?%_iX9kHk}by4sHQ%E%>ASLKP>IErpPh0u57b@2z-%tr9lN4QR*v$!1A*2hni zLUD8$$sq{kWFO}4b&0n|(ksF^Tn1OVnbKMGBeh#7P0+GJ7wxw{dr9aGq*jGLBTC~k%g!brg{o6HM>NFv2DepNXhXh8LuZy-s z*@vXeX~B?F`2ME3#}|eTpEjYN&gF1lmQ28ZE@&qiL+tg>tVC1f`Y1<4jJz0FK_nRT z1w%wCS}q&)=cnEqpOL?_lXN5EPmjQT>Jsn2?MVIe+5cZsod7zSBwxl}mbbUD{aDKw7}?MWQ=7F@y>5Y2%#kQ1~ow0Rpw+j#P;J%88t zVrMvgpo!?=d^uBDB6J_2Tk3UF zP&T@c;4Q_vDo7XINBEY0-4(Qo{wQ!uw*C>skNzlhOS^6h>Og-Kyro*#1^J>s3g0rW z%Y&aF2~Y@xUj3#g!q4<%2TcRc8sy?n;)Jq;`bT4K8XxNddP=ymjnm%KK^ynxsV~QE=ta584-E6F z1a~26^zy*Tz9W>4n;d|QKQ}CNrXGCUHGc3{RY5a>!EcUp{G8dR#3_)t zCaWB@fQ1XDsH%&S`DH9zc!h%PrJk@pPt3cu{l$jCvxZh4Hh5~JJW5r1MsubkvB9jq zdxGjtT*{r;U@!XZxI>7sghxSPtq@5EPjrm>2d`)>F{M|rrL}Jj7O+xjz93j~)!<2) zZoAYG$a|}(f|Y_$k`JT$wMqNeKjpy&$A)w*qN#8T<1TD|3%Y(+Dn+{}<*jC{44>s% z-HI>qKK)`vX@)3%wcSg*mc6*KgiVp!S9yxs z>Q<(nx&>=Sq|y6@0|II{?17}11@4UR9d_fJMeRl-%o6rez6uzX?n@XdR<1HVNsDm< zL|pq0Y9Xb!ced!L0*;lsf=C$ za+ysu#_kQww>2Ty3}jC4k#}?9ruaNCqil9e7BQVEe!qcSY}1taV_G3!Ki`e+XyWsfoA}^cBA~K+%nA#rV_)>7LiE zsuK}}U(yy@ak7cAGV161f&0vFuTnX@x4ih-_ zwO!^gwrIQjfZ$N&qU1wvb^Hi@KX0&0YW$n_Y868plQ;aWP5Si>(FRpXW;u|E^B`h|nonD5)VQZ@_!Tf;N;%J%~ z@n6UfiZU}~Sj;R0nzB*vY|#!bwsb!TxN`P&4#!HBpbT$^;j&sX6ec+((@)EPC{Y*V z{JLVS@>uwm{&I%AO+Br49jD;a6;qvZAMq8T{Xu2}N4I10&sjoTm_+6HBf(uKCGPm; zF0?N9p9n_9HLzUHem_27Jx4(azmx9GKqad|T{w3Z&UCBiz%zV#jdcJqZ_n1*j7v8G zRmr%tma%)eLdqi@M@~uyH5zv#Asi#GVl?OTixs*HfGml5Nv*0 z8EnuTO8yl$vRZJlZBcmfaq7+iezLD)KK5|d>JgFsQIhLPO!Kke>UPyAe01RF?RM|y zi;n<`X_~sz1Tv|@&W|Nrx|QV%cXa7v=F=BvT_*EmE`5t|o1}!j|>f1{; z>8G1<=%1I=w+yW3ecx08Tm)`*nO`tEdTExPFr(0w*wr(9%}Sg28=uGzp!DF$Dzrf zjevb+Sqk+luxfBh9W08&%iuoDWoUZkD0L#Tb7P#muB*&Sby;*0s;+Fl-U?0`d&1Q< z6*W8r$94i=;XMN}cNQ!XfrRq4DW=FP~0EK$HRQZ>|H z(Lm1bW=J0JRQ-2*M9kdH*ytbjNcg|mBPveoz0LsnD3g1O(b~C+BPErdfYS{CBbZY; z157R0jc4-l{lUKNrJDZtPEHR3@2Ho3F^1jmSlBU(q($W{X;}6Te=57qixT2ca%M_m z6eyxnHN{2g-|eEP4#o{d@G(jIo}}re_|8$TRC%M~N{W8YtQC(7(?5%(H6)}6MAJvH zt{>7mVtQ9MCfH(+{bt4EZ?dEDMSs};t&jYEfPaM_|E`aGg;;r!7zeRU`uUR?HSt?m zh>bldN>GSjoQnaR&xi>mmBw~|kl@}ES{T)djmN&!(DJ2ty zp2j!Dmn;Z6Ju4pp`q5NSk1AthE3yeMg;Rh^>M#!l}2en5g`q($vaKmP(?`YR?E2W<6zS-I>g}DQb70G$}2!#87 zY%Rg&UOQZp_LDudd865^6@7AtW2`3DM`ffC8Kc*e1Uu}E4UM_`ePzx;z&fE7p6tPw z?WRoZnNzUJ%B`4kmE_QO;Z8)UCSAw;{HsFsk_@>d#8vELfm8T`FW+%01cD!gXr5i%}i20D=aEiVgB^Qs9b4_W9hp9{> z){iwJEYDFKp=!CXxWYKgc0_F&B=pVh0@}UX7q|*^bd&R)yow!v^$` zRzM%w{~z?jZ0UaL|JFzTxcvTtKmMtYNNE-psw5R+vhD`U>qdSne+vr=Yaev_qv-n% z&6G{-ghIrlzxt5*Zgx6Rm;52(G)* z##P$?N8}*~+t=l(5znZV20Y{9zDcRW0oD(YvFJlJd(?tz)I5NxGOJgb!K~aXS+kSg zENFKdu2TBd)Ogs@yL8rCvBjkosVyJD5*Z_QA>UShM*B`x;b;s1AYz_x;*Ao(pl1N0 zFU5>SG895esW0Bk;J|!77he-iF6cAptJTz?{}b{oX=R#C(=|<_euWv|Nt&H$&5ku| z#LRl(jV(QbOzC&iiHI*~ubvooE^K#DUoUAA)Pw^7#IFss*w2s(01%pRsUNgVpR2X6 zo=d*hx3_aL#6swadxtE}5OYz#_`7{8fS@eJ`UM+J0#`0eDtd*P%LhWO4Kn)F9Uute z>)sW_{M)XAkbqwl7jWnN@A}B^Q}#Ci@~1wc>Z(1 z0A}7L*;v$7IJw_fc?$VS|3Ii!{zAqbZ!cJSXfn z=&L>x?YGAOxoy8WCnL3$b6Xv;zx^Ap=N~yGTmu+LFu*|mGlBZo8Tely2vBWR^t;;X zw?6W@g?OPrL@~TVrX-E#%y`F{>u9U(9g8I15(oPY&~5cnOa8Mzj))zUs62+M-Rh0E z?$|}g&CaltLuK8=`RMniC*R|?-7Lpdch?o)i;5Qw+>4qu$g4J;=x3Siz>X}LSN7>E zFftrJ>3zy6I`|_TKiPf8DLj}Fu7mVG?Gztu3)ew*pLGfYCW7-Ny-z*G2J6E4lHF&X zB7^zio=ET0Pl><}pr_aGiQj{ug~)P4t3QoN_XFyP25be0-Jhfm9SfBUHWS3~7Y6bH zOarz6;{lwb9^?$V0>#7O!xjS!gdLR~U6#U%#0YK~^aiW~Hpey9?B!e*9Fka}b%*+T zz&TgT{TACJphoCq#C(;IcE{y*@}5hMXJ`8+!qfOGP!Tn#j+8da@U!QD6Un2N>hnI| zT22Xn{}Ai){4sjg=fX8*amwWh&|Xs5aR~SRb&^)c7`GBV_5%cUBA2nc3tztHoZw+o zpTmmV9_!|%Nd}7%)AYW*e7P)rk?&}GJ7L?eo{>O@belp2x?7}~`37pD^%<-;G%$u_ zmHbC~?k-VXc*RY4A`!+HJLEl`5GP=`ua^Q}23(lks}$&AHcFZBq1mw`hNA0dzKK0z zV?KnbRzA~?0Y_s^nR)#|87pK5<*E;sL>1OGY_4rM5!))f% zr|{&6MTO|G_1712)ONxjUzvZr(=({s8gFH>t^|o&aGI_=_qNu$_S1U$$nun@c@lVv zMY}awNSuW1O9yJDq+9OP##>2TGzBcIxD@VYevY03y!4(btY0MySQ>`HDX8`1_jN?L z7WwhtgO$&0!Ua!aR2iBJH$*E%sI(OD;mJAWB!kx*%{IC)q_PXB=*NY+$A}a+Ceems zzDr0Qy%6@PL&hbHxH}sNT-`K`ANNz!b)A&9$T(nQxq(hX~rVLdj? zHFpVrKA>x#4k4Nk_dv>&As`{*vRHI|fJ#_j-F2Ae(2PzS0?yM;2T?>gb06>H+$-}{ z`5AIU{d&e!MUw$DHA|`8nS~!sMF*NcB&NlT%m-bF2%^y6Vp632+93NpWPTJqPy#zf zcUAjYhcT8{avCVP$}Ed*;-${wvL?Pxih?>)5X;=ZuZosHbsDDePq-j|0lmBVxfA8u zG=l{(%U?erz^$}%avd*%)HEj8)D9LZpzAFj0Z9jl=@pS*=lgDPT+9F(N(4$c#rG!f zWEx>d-?>p{8J}A5^sP0yWp!ShK?GoLh(cqdGvrgeBv)5>&nW zXUo-Vu;m$704-cqA3nlL2nTL!D!ecJip42A!~Kz4aHle;tfVa{|6~hmr6;fh|Afhn zamCb*p5wwt_VVS=mZ<#M&BjicGm-#&yZp{z`}j`rcZPN>d=_@_>xPZfYwX~@Gq`|{ z8;a1`y`~5@R7-;Are~Z1+-L3qjB5-5&!&hgdV53_&XVvgO}ojdvsc$z`fXBY8|ar^ zazNx$@x?sh*3!gdo|b3&n~>>U6;Q+Q&$`vaov3CgMlY{S)$)j@>7{k_b>yE8v{)A~ zc`gFedw`01H2lpmmrHx4Ls@octF5%377-p7q^WMp8Tv086gWeO?=Y`u8mm3d4v-h+q; z5vbL5ZO%DX3hUaaYkJv-UMwTjCh%AgL3b&grlT8>kkK9#c*Q0m+MCfNt7(Dns8-XQ zuL4s~EG2lD(eTqq;bZ}6=KHrj?wFQNQnOhohiEm(a3{YdPAtJ-hLpP30QXoje&!x2 z4X?3)#ws$l&R$%)aVUpuN&s>Y!8d%@GtZ}qX_<}l7`nvW%4&d30)A?e-XF7B;Mmt1 z`OvglVYRDArISY6E|e`<y3PLGtCzJ-y`1y=#N7ayGq3{ysvb;#E_ z3hp!s%z>3nq4oHKspagkRlC!Bt`5yzDVBl@Pp9@vnV&zua!pVU@9G+FW*1#lHEfTv z^FGebZ8$c!`|O`N`BaT0yU6Wk=Ux;#PTiRTe~Y<(_luU$;^FA7rS<48%yjnXME*er z40kAzxxVv=@Il6*6~2#|$E*4*Q4Rf}hl_U)kFgEvu1|Knd=vVblx`qCKc`KsPBLdd zr(>*6^=5%)uV>_87p{Ez7T_AlzljHX+1fZjJU-C*_w7Nr2h_m203Q}>V1GJw9;pa+ zFf?{~*l|1iwc77DxmE&{!=dN`2Jkuh_V4=+yxg}Z@1iH~To-Qv6-0;J`H>;hH#+jk zEt9dTn9KL;NHT|drf=3raxjVNcP4BT1O0e$RwzfNCLP-o76;UR;yt`K9A)~w1>0vD{ z?|ZA0Wlo#{2u&VQ8Z%8k0zs=1bD#u@BK6L_=Ldq<4}|*&gwi|F{hxPD`#%{H-9wvF z2cp~)iHkH%L@mO61uf)B)!4`aUVsIj3d*Op(8QpPe`xq&)QV|mltQ4ze?gyAyb`8? zSMX*DcSM(pV+oNzNrkyIG5LVgUu6}65P={q@Erkxg%V2)8Vgzl8k%^x_Zt$%_KUFE zm)o4UjW{@ev!LgR<_PkEXXgYs$bsX3S2}=*qqDJ%;Xev`yk&-;qcKtsWgTnEC}(>W zYxvT;`tNY|(7kA#t*nm9mFNBdKlbQ6um;5BF(96-uiT&5C z>xYTlCKizw;O$`yxCC@@L0G{^NzQjvzSP!M(#m-~><~S`lt*T3h@Epm!A1 zW69W5ic;-h_Zp5F+saFdZ%`hP1Tu8S_bB_FZoc$VZA;#(!+=U z?*0ukyurrm`+f<9H-+FxdcqGP9 zTVhmco8-T{+_1rZ#jA~B=QG47NLMJCU81Stkgk79w{t(p#qmR7uylnv(sgNWtxN;U z`ZMf8I@;QOz8ER5z-zp*xB6n8=vu0B(J}s(LKb51!tOc={>3TAjl3+J+|qN}qIA#20LRtcDqWiG^%D?AK6%@vTdAs*h_e$>AQDu z(!zNaf3lmfE5gA^z1H#9$=lxu*EegK(@&#PSjwAyPa;f-D4g@jjx~KF47U=0SPjV_Z4sW{qw3vjL)*gs$2FhK-^hw(3ugnvSF?7K{c+D;rmm*vXkMWSnL zzi0_~q_d%2ATXrAYXQkd669GCoo8)2z<(u7MmZvF$~(^YN?J;2ilQ4M1UU*+I%P4R zm*#BHd|^0}BTQy;Ky3mapq94h+{2XW5)q%$p2KwZqx!qku+>J>dNyV8*eL^!N64Wb zRHhT(bY^nd1;H;#`r5T-!xI+^bEW8Y;}#|PVbj~`)z9<8GcnoAs!05K#aRkoI$~e5 zo0#tZ)=9{tw_fG|yb8YsF2(;3m*HPP$6q~acL(HGa-n!d+#JQ=FL8X`{EQu$W?@2ZhFx4xaII0Yj?(SMF2~6w*+j{yi z8%o>!dHj%dbPxxrL36MATgw5hBaPWI1WKA&FHgfBbc#$Kb=4su?Guuxk>jI`$#GPCVQ^eNY8+X-JE!TKW6@N!iS{ZUDfZVmo~|Dv{OTb$Z~B%F3k^0h ziefyp(hzg2ugj?&kz~^8uVe*hc-PEP?a-8xv*c&!r`7jnd--6>VJb%?3sve z-@Q&#%AvN@3z-ZJ`MF0++HFqYR5fM^!^}ji=mSAJ#2Dg~FE(}XA;^eVpglm1m8;wv z*8v2MdAlm?Bk}|B_0eJ~QubeWAmZS411_$Tv7{AZo_zcMoz z3z7>!W`xZW+)Lhb|c-Gea0hnH~xQV9{T^#JP>n}Ot%*WUxG$1~4M{wlMxTw~>7=@X|5(@Hz2!*_HFZ`TN~%mclk93&qR_0~$(c=Mo<-+vYvJ1$<-?#3+OjIZAYb zi|1s`wbJf!o|s znWzz0864)-uoXta6KgXlS^Eer)z?(;V1HKwPJ5O6bT{ucPMZ)U?!~{`vQ1h0 zYd=mkuReHYr$24w5X+UX#vW)xBQC=WRqjgE49r1HJ z7Rb^x6sQ-aKWAzB_-;NeW&&B7W4~`W-3@F&mWEfyZ~j-x9 ztcr1VoTt?em3>!Wk|fg_7Y7rE9a$$@_BQFwfRqN>EPh^NZ$K zn9T?XBFMK<9)@!Ze}d5QG7lWRooiQqF)>74u0l++fqrOM^EI9;*FF zaSOZ&(nG}98%0@0G%SEDVyl2rAhd*m;kH-@fxH;UhWh1~DW>S$R2tpSl;z}0LQ2IY ztb`{pt~2&m=$@};CTB7ymU&z~Ng_3%BrZpvWR+_5mr!k$%1oWXXN>h*Uishlx-RMjkiT`0m71iKTw2pD40x5LevSkp2) zW#w7c!x?=iVL0`z>rFsgKi-cnp8$ehg!5CxUXnk9G-G{&(s){-rg%K?qwH=-S(c|f zJgaLo;Atlh#C0gQ+|F>jihnkOGxpIU=!B}`YKb>yE#S|2ka0JMYPaK6F}cy}n4WsH zcCJOb#doHkVFjea*=~QcC22*p<#2;pF+XK!U0i!MMt;3Nz1e&P{T0n7{~ATpb{B)M z-_IA;6=x|F8J}Rshz}f9w08ol$sZPt>qP)0X#h>+7K6|F6xVBJ&GELia~Z_A77i^A zrwdL-Z1=Ci^Fq|+XbiSv99aFvf!H2si|++PR zHawtT1m)gav`a|*M>{UY#vEF%2;FbKzWp9KgWpMEN{g7sJO4B=x0}GVv%|YKx zIq@ys*TR4~B3P(dfMD z!x>&;kA=tdmnPl_wc>k*@1~jhvC!;IxH47ItKzJfnt`ryngL?&m=W_57fSpD<9f|2 z+SWRU^(XD~DU8M3@CA^X1ED*67%Z1;15du|zjtw^> zqc2%O6VnBb^N_lFv!z!9o3szX38M4g27)tm)<|VVb{TxZhvfirS@W=DsF(_N3Sj$C z=F}NE6UL{5y=1if+%?YGNbiphM03t#^~7+iN~{(p?;ME6?x+A$glq3U9`HJtogOtZ zeZNF@$nFj;i|!UXJ<_xL6ptk1$BvvhZ1J(CGbR_O=*DkVxo#Z*U)<0wKLr61n@mPk z=FAQtHghDin_YgfomU*)u^5{)f3InMujuq>-EhyT9Q{P1>BYXknJiWETsA)RpuC%1 zd9htub^+v59B5}oOy@x(eZqhTO%2oCfKqO#^UB$8-*^ zUw`nYUpHq; zel8xrJb-W)Q-@pxVl+*3{s80R8Kv{*dyd|mzSp*^a$bJ}bd868-qq;<5KG$B-J)|l z50CRBIzU?Foga}heLEt3YXFW?HR78$;`^-^&`Gv=D=rwv@6Io0?mkZ3oqw3UOFp=V zvA%zq`4nT_=3?%3PxRMyiJ}V_Ob)CJxgq}B%+){FC4Yx3k+E&EfJ_3~4XGi4g!N^@ z#9(#tqZ?NU%qB&93mb#~`p`}#D!`kGlL}lV*7@pGE~Gx!t^iU#v%IgB71j-`hg{Vuk;GGC= z_Dy&~TkY}OlOKMCSI#Q;aQ?c?7SU;4F!CP8{LCSd!< zG@>F|G&-{*ZrftS;9j6gQGw)&C9U7W-tSssq##)W)BRx=HL&U1z{Jkg+P=bUCW5Y! zh|b4hBQ#{MROx;G$3D{hMYUpPXV0?UnyEoGrd6wH8&0n^k9QdvEVan6DU@Yn6`#ao}Y?|QG1o2 zniiA1An0T8Gp90;H1W}4A`2jQ2^4repkew%OeOA}eZSRBFxnb7l~>oj1@JK_rG5YV zytwXy3?=W6*hI6fao^)Uu!}*9K~n;J%7oa&SkLgqtG_X+vt@bkbJdPNfNTD9-Hzh# z$M?U(8p`x-iAIQx&Rh^83WMOwaRHG$V%U&EM$MtxUV*uS8PTocy{Z=#5Fg5vbP5KE zjOXL6goq)Rf>X2j+K>15ZJ+KRu3vp4)(JHe=?Hm=@N?`FNo(EpDcc zT3VQ>sswkY`fMLA4>~oOu?+M3uH`ZWhRPzDffP#w#Pwsx*gClwTI59q6NZQ6_f096GWhVlPiLan@n+RG`bzIGJ6%yWzQk=Z zn1?^A1k#*qkUgtx&+3ztVfoVa&f$%{zP0eKtZJfCi}fFA9M#uq`Iyx!T5vm=V-rn) zjvayZ5)Me?XbYhWp=mTt1-U@$GKqm%zB4&dZa5l(7W>W^!Ef;Q4wLO(aX@{Sa*G0h zf*T2m|C^UmXh|2rd_k2gg|q>KV?D#hW?Y^FC2Csg5%fJfxC=DAvX#i86;>MG!a&J6 z*k*0z6bMJjsis#>DjfTWvM~JF{v>i@3~8b(8bMr<2Vb2ijMbX&RHmJJCU7XbwlAq? zwZMY{xZEKn?$^|TrO-6eViZbzdDHB#!ijUwb;aKl7HB3)_O9(F(B(Pb!^Gkg5S)bx z4kyml9$4i2nvy*P;EM1ykV}$JvQBzL%D!B{J+iq&u_C%hzcX9hS;#=OBkZh6j`#Ai zvbJQ*;MCrO&!B=Ou;*|cb9}K*n^CYhMA0rBaqDD_ zi_-ye^<}sB;x_y790SRMyMrX(C*P>0g1amTIc%^fu{c9?bZhD7#shyT4x>fmI4!rz zYOjd2(NkaXqeJ0;=qO^%u^P3hC~FtsbsK)erMJnv6QJ$9(?c1@-py!uZ6)_294v0C-4qYwZW;s1F7 z{yU~o0DKey93R;~#;K{RYm8+OiFva@DCPm<)PB+^221a-_YMQOjz8N>WT_H!T>9Et zT}LlkTW^-U{|HRR{$uX^TsIc-A~1LUhs0cBwK(xLBKJEu2ad|s@ns$HDnx>O(|Veb zPsOfN$QpIhDBNEN!n4ptrZ-;s$vH1dC#mipzE`%oEgGkM|G2Jl_!S#-+0omA)mpK` zrS%hYp!ua(nA+y}*SEA)BMDQleyWnO?|n1;U1zfN#c{>@&pH!_*Vpzr#L@o#!UeFe zFBlxQ7py0#B%C7Ka~Fdq#}9`q=kvb%;}S-BZtmwT6dj!{fai)9o~$%3bqvhbx1Z>= z?js;>u&I7rOJKA|w0MTR^+Xo)Sk%2NTY>7wL0=mjbG6X>~0z1_z9->BIV4~Vq zfv~I=Eh6fJsHA~+n!dwhM4n)9JhXWp^gAl+niwVAH) zXX(Bq(C2uKXb%O4DTzsqNW-2lVJPKS3E-_Vz4V-`hc$~iS7;WYjXYjvTWLe9=7#aB z;wZ~m*jU3p=X-RaMl~)f2^rgWTh%!QVTBargk>S9Grricp2Za|)9G`Vwifsm-`J?4 zlwDuNGH)%Mmjx%j5_+`7f$A2s-l`U!!xo^Vo3`>y;`?{91Fp`^*V@`;%(t{!yg_81#y9aM#h)~@Fz`p?d;BURa3;UQU>HwZ`1n|s% z!JEHtTYrT!|C+V-JC&n75!sMn6A${6%~03HX^<-iCl4GtEey22lbT$MB5kBi|K-2o z4`26MNWfkdQWa=4(dzVG#lE};*o?d6NTS!>zZogXzp@*D>AXnKSfTvUIf{Sgbf1UY z(Om`GL3tl^stG=U?V!5%I~50K!}?O*2cD{eS7Cjr?gLIgf;(WJDDQ($A=f(~kYJH= zgXE+>lYJ+dLdS!3go^}G3bAyeXuw`P>nB3o`h3q5)$~zw1FBQ1LDdP>5!D%X2>MX^ z6#AI!YJh`c4`Ta=gMtWx{A2PO!N)m?_kLr-?_=%IfIJS6!vPS@zW|Lsi@sEVqf3Be zR6y@mNb=Q$&A4OC-1_b$@1t3>>7vL8;c!924&|+LbqZr)7J#+j;*<`O92|nk*FM|DUWnYsZ`F9Ls-sDE zh}Dudx>LHH=D(+eWJ>j7y21xabM5LCTK8;|owB>?t`N~9=aMlE>jx_8UJgZwvit-T z7lM=XxODH@l^_Dv2)96k6>Qb|P(21}UumE6>LRuIr&j68we9c${nb&AO6f8NCXpt% zBcIYeO!K3{dd|9{>lSysUmH_kAATY^7;|g5io!9iSd#~>v;x1zI;92`pW~sQHftsP z$L8IPh^D-0UweiFiFa{3Qv(HbH2a4b)j(z z()V)(9WdH0uxL zVl!OQ$Bj#;k(F9jV}NF*`jqF*}anMh6OD}#CFxok}Mde@pB_j zZ#%yzr+l$E!MTZE2LjboPYf|3ePM&`P0g>(_91ojdZ_7kJ&jb+3c(8c3>{0wU;mG> zvy7^$QM9&nBMs8s9a7Q)64KpBcT4vsL^?JgT>{eG-67o|A>G{w-$Kv1=e+Oz&b{{s z1NDbv?7hZbd#$KU-I;}RQL0& zqm*g@o@d)~ehC9xK4FH$<8xoYN4lI^w?Ao3K949^a-?Mg;m^AWTnkEwht9VHR@bN{9C0(9YZfX5l=_ljjr@{ zJuC}{8?T<>iFEVe>a<%#$8(p(3Sm~!Q$X9!K$5$1Xm%Y1)~-7Rc{#ieuNm8p!;OF0 z&>nLw%`LIxJIHli0QR`&9@%!ycsc4No>w%~6PhhoeS|$|A;cht+!xP0N z3wvA|j)BOduWg=lcWhout9o9Yt8q8+9r>rP0!M#3!DjT~A|FwBpzfa|2`CcT3Kbi57+8-?K$O7iLfPl)Y?&d2lwZ_VM& zfx+QZ6YkN8vh7D#iK|W*dFg!@q|Qb27N`S9Ww;;JxP+FtrieMVY&E{GAN*4f5|U$9 zacJtQ=XH%LwDiP0H(WL{gQbA5X6RZ52y4`RTta_`HAkSyX>T~oNJxk$j5iz`)k8q% z#i`L&@_S6VCc7rc1b1_b`n7!aj7V}^{FBF;4y^hD)vk+A+DPJEXfRKZP=2SYhG5oc z&l=~Kf!*}C-YAjua(PqE`6#OSN}q7@om}#jY8oed0XvH2=gF`2lYCiv)K5x}I387k zu=Dg6Y)N}~#xw}LlWDb6?_d(8Dkpa$w|EPTgRS54<<~4EA1E&%gXOc|XZRmj;D|Ia zNBl?b1O}q#i4U^AwG>c(qHhG#a28f>@vp?*{*C|+_WZ=vI6AD8oIgcc6|K~1p z9(COQ{cds|dE6y4Z0l*5v%Ly<50?%oHIWSF=-GJj^7pv?Lqp^|`ndfJ-=Ddkms&9L z<1jBZagPcch4sQbj!|t$AK>S2In9aA`Pdua@~{BNX&C>P+~B{Z zG)hBqkRoWsipJPpnWT=~UB*NPaO_QJ*RyYKAbjF05^pr1 zQtXp1a=tb4rQP0mdBWL8h6QE^#s-Q7XQyfv$?n_@9@FjPuQ3EGmH2R@adb#_x;@ZU zFSy|%H|(nyQfCpTw2RDljA#24ywAuIy{ovqnY(tYx^$agP1|B3q6f(^H!6sjaF>!c%x)lcp!SstpO~mFt|Cwfy-8Ea2V$pIIVRTMIkezp_Nz*W)+Pb=gSVrBKV6TDU=?A}25YsAw(G z{-sd~h3fJGuFLx_VGRNc{m}5>kzphtjrWAa)zTgtSH$^c7p9h(A zP$xLVT5ZDb3xzy;RB%Q>x5v5!pw0Zno{$n2ilTb>h{?-O3Dm`{`-3x)aiT-4p;x^o zrKj*9RF9q7qpmJ(`MDWHcXN}7LY@+@B`u-Z;{Fg@s4FoRnBgj-z%47^c31 z6-57q2cHQMNY3PX%f8Xa%Dr;FE+`~~#ulL18h*MihQ99B?HUEs4I>*`AfDkTg|3{0 zbMp3|D3Q!Q@>)ZD4Z4htT{ku6XUx+%c1;@P{X5z~yJ1!o&(sd0T`iLndq6}RU(-8= zw%Zsjg+%3ES2r7c<-rX3O+nQ2n3UopVGvNEQ<;-VZ{(8JPh!B!Yw(7^Ty#|vX}h7DKr##-9DSh?Ieb?SnU{4adp3eH3} zyL@s`t5B2=dJ6yCuX=QIPsq%4M%Qeefj8|Np#KD2A%(!?snZ|>X-F@ zi*6P+#I^o+lIYK;@86S~*uNHR7?lALEpE>89}(>@Pli9y&GcUiHvbgSdZL<*w*2Ng zu$5>o0^%ATZs`)(wm$}@61UY~NX~s0medg=4>!i6BQmrWkM6C76%&&X zQxl8Ky#952S$>Ra3hFlTH2$HnHHQ&7f0|25jLgHd8a>bpZz8`-%n&xYgz?v7B|f-{ub=St^MGrZW3%=_uOy@*(`pU5 z3mqfiT&_bR6#U!sl-B`G-d;d(69oh}{~09u*8%viQq6O2L!^o=7?&#*x5O!xa`fz> zWuc=|_^5^We!@Vy;+=F1mbct;O0(=edt57bnT5T+u!@4h{1SE#3@)OIEc#L%ed%g& zc71vMansJN+2~Ni7>oWRx6{be%4VwP(URvzVb?Y0IPCfZbz`{C^t;hKeeOxSojSi2 z2%ncXP^(dXLJ*J0H%O~xer*tss5fw{8GgPHk0>`USKIvZUpyJH!W+D>d{N`a*Ul&` zkO{#`Fa~c9$q9v(3Bw9EhG-5|4YdWi1;O{?90KVD62#{hpCM#k$UyYH07HPG)Lulw z6hjljX~1ZpXh880m*Yf3I72o9&z)#q%s|OOJ44AqrXtV1;DNEHU*&Ay_2YP91~~$m ziZTa32h9Ul{>q+t^-Vh%HYdMhhpT`sr7ldZ<9O5lF>)o&m5on zWC#~sK89;kO|FNWNd)e3&qp5Gye?pHivKdA3p;(;=zjE-W72(!s0NpjC8chtAy&YY z|LZmwS?lZc`Ag2t^jv3M=~ixJ{V{z$;l99OdAQs=tai7ytal8E}5>##}$t0 z@^&b@{e~lDDS6WeJP{UxrfA=7v>R8Xe|`d*Hr*^?zus~NeH~lf<~!S>Noz-QzowY{ z+%>;od!4CT`90e^Xkh#_WGeh;1m;3$9czRRszCFG0YY$l@NzW9)+eUGC0s_uJue?t zs4F0_VKsYnN@Bgb3R$4lwBAE{KhCIq5IN;}(i<6+kVvyUuB(r9a*)cT^h!*Kljp>quTwS&S}!%?CDf?< zS)M1LPL~jHJr-At?UWSK&96G0{k}xh_bY{?=+=-Yf3W&S4=JPj)#+NH-cLy}pn*nKggm5%n=+sL1;^}AYOWrnXR`|Cg0M#k z>=wA*4MWR!PKytx-04+K-mLG>c^sdzq7P#jxRA@(x^gh$V%1F@JL(sZ?AR#Ea^vvB zIWJPKXcuI}#f?rHIZMq+^kh`jfNP4ZUt!cce%VruqT@(pp6LB7UlVCP=vsi`o?YxP zJ*hG!XR1|tkDBZvh_b9%dJiJqoEJO6BwiLNl8w?b+c z@T)Wz%HmOwJ`zIe7f5$`*?l_>;_@%jb3;(HE;%J@4{b*nkE-3xbbiSe6ITsaUoK2` zh@0A$X_i0OEe3sbAHHzRk?bO|cU!MMZyNp(w5ac-vMr-Epbj3oK{Qf8!J!n=9UM)Z zJjcrzwL_ZI>uP(idmTMqbA&ccNO^WE7LUSv_+WK%TwK~zxD`3}y@=12+@8BbK)eQ4 zoKWv#iH8TN%l1o$Cbzf?7uH4G_7mS%t%uP~^ogP`sV49TibPF%ADlV{x@=h8e!+Ha zdc^Zq#nCx547R+MNG(tgd1@#%`54!|g(7UqEn~e*w=w?BxH|nc1d|e^+tB#fcJA)w zLFEJ6$rWW(7S}7NV?DC`#_`%OJQvMP11L3;1Dxfz1E~#CX3gBv92$J$=Nqq11izs> z_d_l_aRuB~`dynv82B^RD=}!$BDt;1!s84C6x9UuRQk2i#2QRvF~z_<9DahSdB8=S zksF`TQfyzL`#!-hapd1-f#1Qd*}ftaVbH+1YL~|uf~{OFn%;$?)lpHoDsiZ#MfY-- z+9p0S4u;!`!6SjOUcAYu7!2cOItD+}4=JeM-?Vf(F83yFR1!V8O>OJEP<+eGSdhft z*e8FuO||bh_SVZf_IBU+(T494fj#4;5xZ|oM@VI|mtbAb!xzq{w}GQ}Kyb6)YWQQf zOsR8wGILl+YU{j1aVvxI{5G5}$~Uk>V043I>Qp}F)^%@Yw9xV4c%o;U)BVAV7<`*Q z^dQ!V+4qV)Lw=t9Nj7;D&T;pCIAu(8;QF@w=-%t&nRlzYYxhDDVZ}{7i_>eW)O%-4 z!TdWs5C@Vz0q6awsrwTUM=U)wIC|Z@&IT$t4N$EO=Fr;45G#(H0mPc^+~g6N>Ntes zhd{FKYApD68hC-m2w?oa}j-B1Y}CE^g^S4{iH4zN*oT*k#H>Em1Zi(Y^9peZmozPARcMg8Sq5V)(y|~ zw!ROy&L7V>+6pUE$EY}`Ao5ZJ>K$Um-Gee?Rf zsD;{d{bqJ;jfHg}9j{WTw$ekX=2aMngXQJ@`M3E3-APa^CAA~eJ#wLx-S}BRDVbv8 z%Z6RY&7_xn(SwDuQkdIuD-=TX(wfJg{i4>{bMxgc)zs&{thw!4eMgi}tURj!u^!1v zkkeY9kkwc7I7%g_{$9w+ zPbC!|1iKF3qZi|2sEpwncq!$VUP0gd4O1V(W=YKh@}5)RhwMM5ZvVD_?j6wr;8ld( zEIyn*0ZpiUJaArt3w&6JFmTttGK@?XN*}Q9EKvphUQ(%bbmYOo!CmtM#WA552dvwx zgcOl%eITPjHX{xE6eQ(Ma%)ai@vZ$WO!?f>SVP5$2oQPNXG$iMExcNyz+5m`$M7P^ zaIypD>$h-IjbBNmyhq;XDd8%)Y1L+f3)h#vx&-^Qs!DGSy~axIBl_CMx?cR65p%oQ z`rHP*~A9!t-zz@y;{2ImVY;69SYz2M(w^v%Unpq{*&RtLm6nba2~v_Q<>vghr7FU4wHvN%XjeIfeA>`rKt6q%L6p zLi(Inrc}D`XeS!pO(>a08veQlPff%!0IHl}-?Bvm4KI!8gSytx_Y(9IatjnDv4*!1 zRz^g5(qXjWt_#?ur+9dLJ6Vg3FJIaT{OxYRtkhXl7|6G(fp*e=W+8qb&p)sAuPK+N zGO)MwXbbEufx#uKhy~Sj3OKl#p*RYKex#(4t;V9E8h^6|lXE=M_Bkz9V@X%L*IzGH zd2Oeroc~zyZS{d;1tpSev5|g26XP=PD1SF()4FuJ&aA$2ZUoAZ6b~mGNp$dOX88d5 zvi?FrShPJiR00`334<*{5|S9njocu(qe!EPH;s%lk&FAo{IG9lQt7u{8)@)>aRd*G z?wF9q*Kg>9{o=GS^aceS%Ibw98}1;TnQAwZirkpR+5&ss?>Q`1Ib`fQ@`|wW6Tr$Kj7nEO5 zo`ph&kk~Nwi8=VL${)j&tq)B~ZZtwM*e88}ZD`Km$q!UiPYq;U9M7XmP6&#>N0)SX zo=2B<-@Z}`W@&W^uB{S~r~aDI)2;L&J!^8eY_p6ic_0s__??^oG`oJ^!jProMe_J0 z?~mLJC+P%H_F!QcA`8=77YBS8t7LTD%2L;FAcClR!UFF%lt^gT;jpETVs=_o+7f5 zBOCjc{XI`f;tp13+W1kz%Z{rKp_r&98{1(5h*5MMPxr#$m*qBxf&67i-of|K{uD=B zD0ir&Uj8Z0p10kz7A}EY%Cw68s5a&PKSX@d>j=25jgW4e>g6Jdv$kIRY&~?utg{Ay zvNsKsB$*$dYf8)H3NJgUNYw@9QQW5$9WKQa;enb`z@M5@uzbO<;9m6*_=nI(QC5#| zgJkJQ;!KOSDZrW&4Ahjof7g^~nuZ)Nb${2C!s`y9J~9!VAv6OuCCf+nwg=4bo;~=3 zRri)_k_W?O8ySh?hq$)LzJL2Ddfo=h+XLTv&*rNC+eh)=BQGTzV0#HqK>bfyX};(c z*B^JzftV7Y4ps%!!3PlzTtIRnJ`v(0EJWX^PLn`tlPK_}X`3*;%ISD}_8!hpnQ$;V z`aQXSYPgH_N#%fyUMCo2gTN2{v%UPDTI94Bsj+d}`En@Bibt(!57qs?eeKIOPr5eQ zyHw3m@lk}Imb?DK1@1&&1(Ya4dG)PfzmAjfJfctG*Ws%ExQ4W>wpK1{^2u0MlyK?| zdwb4SPMeZ7lE8U)Q6^zMku^%`Uc;HwV0ORcDBeMi1tZmu@e%vLP+tTB4l%5s)${4` zdxDwkupj9(2W+q{fvvh-wTEd62G-VGD&B@oF2vWvbBIpLa*yhE^0X{GY7Zi&@lZ*I zlVOKW<`n1vm@5oomZnhheT{`;=8CclJj14i-}>OSO|%iRUK~;<4Td)I*PF$p*p8KC zG=&M0p-!LhVBhqN38Dej>Hdko;nJ?&>chwC}ucxH{8WX!UVx3Gq$Sz&1IN#$(MS zY9Q&xWzGVbm^&9Zpxs;p^Se3zRr#m^JSn;wlB?L_nf6RLKCMsSV#~SOq>hS5B4%IY z&X#Wwp7G*K-rbFFcQ2v9h$w}!ABzm$jfZ_wpUCK@rO`KE$yA16Hxce|gXGx2?G8Sb zZ5E1WS9*Fj>5#sxxD=;V!~#`2yu3yK#7)a-hs)#jH$Hm0vFyb;@O9P&m~>eF&j;hb zVz6hn42Z!VX{64-Y}Eet>0s^1h)U7b15#lODLR~Y5nt#X&e-4UKc`@M7JIGbO%wt5 zu=Nl)Fl@A;454A!^#S*-$4%MW8QgZJv8neWZCnovwbOhZOPk_TL#Zck_kwdU4|0K!Bd zK+qJ0doDKdd@BEB@7TLL!jnS8i4x@jV>is?iTe5wKFsJx$Bo8yE!_&y=yvU$@&oS< z4!xcot03_WKTUJC_6VHMt}|SO*~TxgTUof2D#^S9Jm;}7g7CrUAM=qpgq(3KDEA4X z9U|VfM(=8iHWEUHL_Wlgyf^0W7c?$Dn*zO2%j@0y;Vv>dbENxW`%OJgoyuU;E$Ym| z40)9O)^{_aL3hkGXZ8^~)U9JW*!8Ybp-ltLk25b+-}lawL-l)!PE7Dlk`8seITr3= zdNToS+>@+Wros$6p(@6l6y1kkgjpoOGJH=}ra?@M5D>6Eh)+-{mX$*88O`8nqUC9B z^QpL@#WtpQnX{&vn>Kg~LJRlpjI?p76q3J?gp#k8R-u+vnJ1z@!PQjakp*W#I99#M zyp2UwF}M8b#6hI@kw{(B>YdRKs4TXnxY|(liz_$r(NU?F3}(kYBQf53rGyjO6nyLC zxV>w8^9MYf6JDj6wY7)44h&KL@icf#INpam#a& zYd`hjrl1Ey^=3@DLX%+`8*|K+Y@2wjotT2$JU$q<3yFC1jBa*Pqj9Ch#%O(A|LQBr z2lLU+mGNLHEB)LO8*oys_}2yc#CPvT=IQ3;9hFk5Kgcn^ZKCv{d*u;qmlY!Bd2l>N%;za?(_7WTl%jjq{A=0`d|}1t5$Eo!vg~~v&6CT8 z8!ivsy8XE=FpLF!rIV*o+$zZ=1>ZoyPQ|UBjy+Vkimd)+%+!PZ<7jp=uYk@OYCn4H z4}o~pAy#q#7IUVZlmcKeEiBl#OITa(_u+5KYV(}PO|M6#!Yq}w`F4#y>Ng%+vi8^* z-m#=7xH?!RdC8d4tPEFB$5GXOjm@*P=>K>?90p0dN%h4uo9W#~^_9d%Je)b0Q!6P~ zahf>9QgmOw&vLq%bfge8gL?_Sf;o)Uwb{Lq*P=vNFryUtc0LCI8|W6!xTYYr56yhweYb7{N0!2C3b*MgX0}%Hx+Uf?yJeh>9PWKi^i6A5%cpMgmx9qB_8>y}g~-3~H+e|7xkFia0FJ);w?=8;wD=4Ajc zBe1XO-~w^~d=G2atBt%IR`;rz=$O@whUW2^6w~T-nbI4bxwc0*-t1lpxhC*>!Hu`n z-?P;1FWCPWS$=8i)xX+R-?OUb)xG-KYsvt>j=&3 z^|Px;H`yJD_8A?Cr`UjOSiff$nV8gzXodBLy4B>w#;b2tq*JVZRHTn$Mvy-sReLTW z5wrY!+`)4RLx$H%z&<@?@i@|b4en^k%VLRX`$`bsr;Vl0*vGkCOUZ>ud_4G4>HcNE zZo3Fkpn^{tOB>uNa);UAB74Q`Kvl!}Yo0XSy6huU(v9QJDss7|H$?6u`^_*elG&!8 zHtIiHI&q}rD;}=~hf?^LI^h#e1viZKCMViczIT?(30&}^{A^6N!59Ue5|x|fWOq@N zXLwuz@O8_%irM={&wu}%5rrCTRb~< zPI?18o<+j>71es!{bV)>EhcyHj+xrfLoWV=k2oEOx}+qCHYodFE0pxRfO}lPu~Wze zR@+x@9Nx<_a_-oi3D?U(DlJcccId4x^#O^EPq9!dNn^4t+Bt2hPhz)GKX9wH*AaGh?Is=FT=IfeG$(Xl78Tt+Md z9s9YofkdTu+pc?Fge&sF5bSt=G%-};Dhb5%6zn9uaok~#) zBgEX|r}dqjt7`MXz1ipSop*`r6Z8)ur7&$+w`@Vb_(PnI-9}+)z^;R=OF9ej8E^=% zq86>n0)IjNygJah%3QQc*C<@dg7YjCRww$L3Dl5k0HN?SjH@=xqH~A9Oawo$(KIa^ z)gmZxwSkj=p7HH`vorsEbmrEPd+PQV-;)o4ZxevS<&OwSZVMT#9|PzbutT*C5OimI z5Bb1U6w&@e8sC!$!PA>(0IY3f_P?2g8QUK_(}3%SXUz`V|K4Fj~+` zQj%(1C;!}AMx17U^9<&o_ZnRo7*~?9?@86GPF@g8FNH?;ez*xfX6y27A(4L}Nr`L~ zj3Op$;G&+SM<*J6R0gV#E4Balk(cbYL8L$r1GToKej2+iTw`H;IK+Gq36Y zUT^t*`~TM)|9{q7q~T?T)Y?%L=;#z^|I}OleI`g&+$ZeuAEw;T!#6pE$5xX{jSA;$ zn=MVLp1@AfA5$(mP;Ut%L+=Wm%7mc+>Mb|ydp&sEE0;fsg;sFcA`x0;&(@*PmEHPX zqoCiy$bL5Oj`n+nUX_ITdnf4pc_#=k<@)#JHW0~C*LHCX6-|zx@M)UGYTrQznz5U9 z7t_I-mD>e&^nAZiiru0XlPNEwjl+?4G%@6tUV>?Nu>yZPWG*apap92bh@8U_<1jfW zAepk);i~Pj0>9#@<^7a&s>jU~9AkiPFg2IapJIBA!i7HB-&;pu`KCnPe&Wwi&>6+% z**!B%=3-K#^pa_qld{z0&!sLT33?lJP2Kk@z|L|q8?dvij&8$ilh&o$lJbluHT1D+ zA=fuI)PEZuEfxdU}kexy#wkkjFd_a5c?Q<0gWr}&-Io;x9v+eY3{;b+t2luRfd>9 z^_Dn^118;1ufVpgs$9AioWX?#h33*siRR<#MQM4q*Sw$v=i346(?wbOaiVHv06m{GAa3AJIhY>0>I9)HtqAy@(whY zB-+cvKRe4i&pXTLmbi4XT6?1qm*h!sj>daa3Mxb~MWaC%BDG>)X+g7ygZbt+;S0y+ zUf#$nqhoeAV)-YyNgHG6Ur^6o9XrNXX&7URBR1=X+>OmdO8nU$otVkh8xBb-8=U*i z?5m(YOg$jz-Qs?E=}3rJg_;OYz6~}Se_jbH zK!?Y!>rvr#DGlf7X|%&<3W(FU%=7TooDrDKm*{$Zsol3f4mW82BZgeb_l#-qThWvB zHvs@kn%M=gq-w3C@i&!D%hpmI^uNt9s944^%F%sU0Th5a#_7mmeSv9`Ce$VTHWh@|ys{kc4Xi9PSfkrg+#8b* zB^5E2R_J{S{Q2kYJ%LG6?h-DW zX=Y||l2}2`JtGFuMBFUkSp%(Ld{S_9toQ=$MH!Zku!7fBPPbGMsgg@lvJ)_}Y;x3M zcP!8HBC?!8L=-G3C#=`r=!b$%{+bF)VI$_J;!nk`3UN}@ocTNfXG!IN19w+zy_7~X z*ht&AnB4aG&`T8r_2UR4O4E1HviyYeSUBM3Z%k|h?~D>i&pCw4T^Dv|#8wJ}FeQ(N zAtzl+Oj$o$tXz~H+!-GF3ExXjqk0P=<17pwYav!h1QRBv##TfS1^m)@hcblWDmHYX zwH1$}aT8nPX;$)8FzSN2w-y^c{_&kiyOtiF!f@e2-3((h%2!c1GGN6i{p|w>Upe$< zwb8}MSRx{rJyXXUy3ld-9dfMn1Rg7*5wb=Q*HOn0ay@7(1wmc$unGp<7O3kNkJyku zxSfau|8_)-+Od3Mfwl`V(f`zT`PUKouiN~;QcBeSpp>3hmzjd7El6#$5~j%M@b#(7 zcB|vucZYK=6dd#wmegOnilh6}=fT#5HWkqRv+RQ8@yKnr>395Ud@8e9<1IZgAIDKu>7t#K&F5OPZY`!){y%5Xpnf)`y{dF;pJzM3?nHcB_nyNu!gLL zsD?C8OnEo}AMySHl?=Ja#Lda7F=o)@sEesmMa?NvrFkOCBklRtkUNt>Rq$q*BV?&E zJW=K8<^J}9h7@a%ok5`Y&pMi{xblYH-ER)ejtYz1t0pZXbvwKoE#F69*4~N*+N2rr zy3)oi#}lm2>e_znUKBjo{PCf86nlohU^#lgB#eNl`fH@}WaW^EYKRc&kLp~l$flh6 z-59UsA?*9$<}4qU6&mYPR>?O9PA?m6G`YFwW|W7`90Ns57rkf?QQ#)3&$)6h##FwD58LD%;!C1r97#^)-C*)FbYz3O^kyLyd>1Fn*e>>bExwm{ zPWcy7VSyIQ{^;EI&Mi`ITu^#hN!LB9stY9GsGb>TM)&lX0qkb4in5jKs&obj)jW?t zUI1ch1Ry4x{2IaPuh)(4`24X`oq7Po1f&h{B@|f=jNk7XL}DA`CSqc19-QQ7T%qK3 zrR1R=-}!>~X3aqsokaDp#pnl z{sGF9wdj0E`*_15L6ymE`BCYobeigR%eX;R$)I}(t&K?9Xu67lqLqS)6Sew$cdNuY zni=)CY~w;;)`?p-vzu{ziI`c0F~5d_lE&1}v@r3NLreUD;A5=tDf@mctOG~7Q@ z|8rO4&{o9UszlwN2r$p^@4%QXQYCjrYs(%B5c{~wy&f5EFP)gS*mU^eRUu2Ptlqyq zC<242)T+z8Qr2AslR?q;rALn}!=*%Wt-6#qAgoKc{a9ST-y#+e&*axEe+uL8G##)+ z2kXRt*`Iq8DGf&@*Y==}L=ypFkq9|8l1;J}F3srY3*+l@=&@+z zOz8rP+eGhP(TuD<2G3Z*;N(+0;~_-eIKWo(HqNnzY4t0Q!ThQ7NO3*KJX#GrPJ~e{ zvA=aXP6webDM5)iD?s9WwMOUM53ni@a0m9DJwF??GS|=0Yh)sApp8Qh^;Ia~_WNTZ z&~LI}6%+SmORECe1=Xe8m}hk0F!?k4G*$%<-ht#Lt-%9F8Wj?Exu|t~`YoejngnDt zE?~I{7;Y^F4`2g&pwXy!48~Eh9A0e?vO#61>FL`UF>egZ^~Y&Vzuhbko$j{{%>I(P;Kx!Pw7=Q{)H>-{nB5k;vpj*$tywrfv z1(Y;4I341^FE^Zy9^h9Xjz}G|+Zg>^HWG0q^AZqG$SVn4*X}mZl&Porei}&(DIIB3 z*&a&K*tVO!jhef89&@gCdE{_@%z6E20t`SO^8r%dA!Yq-fB=hHb4YuVO?v`Gw8?A> zS!kCHaS1;D?aqAhU9PJDaH(1LKXzb#U)cOTe~19+CZGc&kn`@DZaRaa?M{+fY7})g z^fHJqcNj-DQG(-Bp1}Fw`#p$cRq~Y`0ST9%AzO08b-KFk*01$Tly*8xoIxCVoU2!Z zBb4yDpRAc&^kHk!wb)hgzo%p+As!*DpY_oy^a>c!>a_AW64I@JaK7Q7n%+{Fz#?<~ zy!RjSK0N!lz1G~*bZGS@T4Fq5Wi>i$*AK3CD)}D+jU(} zdsN^ZHlsx7OrtAwOEAGg3UqtqE_I@MVIrtrDnT@TjRTPazYmm#HO(yFk!w1YvPozbTDx&y_dFHFf5x>9TKe)JhQo7I2V}a*MwEzDs zNW#Lz+E~ue#^mn-31Hgw7K?lj79n*bp(Vw`FliBQ4-|vZ6oxr{%{-uD$u*w~hSMPmB;$FJq)quq28At7%Fdwg)D0N$A4YHqMHpD0hs zI`W7mPd-K1xkIJS7;8Z|uFFBMLMnKTN5Wnzi0&t%lrkQex@hMhJElwVu@MAjXacT0t9n&lo#P z$-(DWMa>3G*wEOZcvX&tmCS>v)Gr5wT_eV%CUe+0?r{5D@iL_*$yw|HVR4F|AC~hCSmdv!sv`p=X7B7kQt+(zcsl2w}+BfCI8r z@QsT$mSdHgqWzmrqu?B6%q=tve1!$-8NwoSv)woAu1jNu5PR!1gz_;{05%63m*vTk zK-!;68y_U2IRzSF62Sc?ut2~UY5RU!`qIdrYmwmYll3(5ca<`cA4p;=wd!i0&)_kA zs%%BBUtj2;rQ#b;(-$jvkr#OKRbtVJ_o~@|HLvWY=W3^XuP9txbSI8j_$6dml20pRtl=wiZb<~0dVtf3w5z4K*ZW41E zpL8*TO}WO};*M{lVvJXp;qNo;aa(dccXUn1rVYl_Q(G+3X8^CkH)c+843zm5C?qT-SpKBW-x0)?{-QEw7?`9fU|lY_ZYa=P}HweisbJ)TS@?L6;EyX8Z8B$Gz0XmsSYCi82)U z`44Ta=T9dvDIEEiPA*} zVFp)l%AzLmj66;=Pd`pGUI!LJ!SO@S;P0X0n`3zRLLV6uT8mvP<$|F(*As`S#+o|f!2JApu(Bg-!t3D$g#=9i%kXl8Uy&`YL~LP#^n|Jyf&3{C(vXPF+uu?`PU|cNSnJIF7%5RJqZ7?g!0#S^WV>UX=*mg znCe(Q%u;j4^X3@ch=@1^N!D5c3tBK<9o=fuXbkb-iPt|si_T>8xhW{3i$XtHcGRo! z*-iF#Xw2>s`6hQ8QWBE5`;%T?Z#HKD<1??H9A2g|q1-vPHZ?sAAWtCtIhs zm8xgT!F3YMUW!4(?FNM_E?thFC4)v=>JPdEhLL`-7~fQ^iYxV!A0bsxRlGU*DbwMz z(^Cn;eihg`t*&u7zH3ExAHh>HaD%h|^DYf^O!d&dDy7*ZK4MR;$y!w*DoF5|MWC4j zSDVbTxxB*+&%?|`tj?CbzB5J@wvKcXOrK;C>~9aCGB{be1XQ+K$g^GVA9#&ix1!_c zxT>4e$+Qky!Q0Mx>rn5x%|HyFjy1l5$rxrAG(R~T26wbsTO^l=m(*wHIi;d~owMS7 zS=0TfHY0Ec+eH^UH&t7sA;(c!VKOuo!FakvJsZluLa0(L$B?UqYJr{_I=}^PuU&<6GI8n=PhXMXT{z%VgrgTBG-FSEfLswd%wgF z;8sOnNEkvPx_9J5WBPD=M{>cqOf3eqH?JB4qE0^rICu$1b5l#s$8*e(kLEYf87g<+ zI3k|0g4Q9kDoZv8FHFT@lveoU%#3>`^ z^nD=B%5Cq&UaMrRoWm&;j4jVGz-^yYu)2!z4?IUUb0^ zZzwxU0<+?rG1Dwn%B>4V>mZ6?rwqq=-X$EURdngvZ8rr~rXMU>Nt(R=_<+QE@d?2# z)TQ7@bgJj|u7;SOb*ext|8h^RvBJTC2j0Fg!AZAF_loxkAB4EtkDLo8;+#=|K*lYi zG%x3`<1+i=jWEF3*K^9doCZxu6PYW7s65%PDJ)&!ej_lfpo<7ZAW(fj4OKsreQ&S6 z>i#p-J2Z;0g7Q#QR#iXinoVLVai>IBT0+0$63=@)(Ow|X_4s9doF$ASwzp?4nPJig z+;O?sQruGXI}Qv?u*C@`-jlgrlaG1yncg{Zv^hff4usAm8X(wd~hWZFhq zO!Z>%nqE$o4UO+T>dHMP;_mT0ErLFAxvxVC;kb?~VVbkOeb7j=zrP?Es#8EE<}C`5 zfxQih*Z{4jz&+u1wk3AgC>w@%juUnUA759boI-?PR|De6XYbswYpWA?hmy5V-J@N! zWB3GrU$D>*zLS6UrvDE$x4)fX{t|uvSIwOo>@CL}^+(t%PGW3s0UPM-q_y@ejBcr6y==nmspPh?kO*^Mj-a~rb zFhBWCcqSW6;$_nDl zDkeQr%uYwQfWQ6kUapKcg+*h)_3$nbx&DWu+g}eJ;K}^=Z-@j{ZC6ZHtVcQOL&{0z z#oSDV$pvA5=KvHeY|kJ)1yLw*rJ_*${7IwKFLIs60T*dP9Yrk7wS$P7l{*16vuCqA zMME$L9BCNlT6`m2sT}ubX?Dj|*XeEPPZcl*&_(zjY}spsf=Z_qurL|sJW=wh;g;ro z8u66t^whcbN?nSw;=3*)N6eN;)jA4cnk9h~WKs}j!RfOV^-jT;Gx@k!aayr!=O z^=k85^+9&La_eG|*DY?>#SHa;RBUXPaviF*=RGXFvz^mfk85Oojj?}Y+6 zc@Swq5fN-;VGQN=T~XdjWL}IG@KD8Ae7o(>c`J-T_<-^tf5A0Y$ax}1q>?0c087k4U__iAD0(+F6WBmV>b|%nNbzcCNDPxo&QHIQ<5JF|FhlEg)Df5&e8A^nQ zD04C-lJqi1GH0mF%9J4qNfNKfkR*lwd6n<=?)Tn(zV$z?vuG{ncZR*sK6l@H&ORL% zy3@oe#s@vlZ`0%>XBKFOazB3_k8D>i_?rQoope! zTO?3s4mv^cGKP=G{ARb8#x;5ov@WRuYn-*UG-X2)Gq8lJg;@&(e2 z%fpNp5sRBGshz5#+Zb8X{ac&n$c~aST@vWGOE;>abs$Nq?-7sfOJ)45vVzD!=Y;b8 zJiZ}2ygA4}d=IWj^Ozo&Q2~*j2U!6B3lNOK|MeaU>s&dnIagA@oU0tK5yW|iT_$I9 zsY*O~$VF-Thf8?|W4WmNR5+g>-fXf+q7Wym!9p>VV)5D6-S+cu->NQ+o~c@3!N~rJ z@I6Zr%DXM`=25bu=7MIzg&BTFJ~tEdcj%&A*z@Cg+C$Sq{cq&V3| z8!vK6LwwLeDNE-ee^LIAKJ@Jc3-h|hO~{g~36V1L!K1EcjZl)hv;qzHkJhFQj%w$m zbpCL=-F9+BW%c9h*NV0k314KH_vx?7_a50QJF+L4+c2we?tlVqJg;2Bo+|23yX}HR zHp;)DZFYC$VCzu2JTT#>tVXwOdnJp4T^?A&yV(vjW#-m>El3WitO`+XM2A1khqo~3`B!}c^(L_p%6 zxzXi~T-oK9qgi~@)0y^eh#fRwv>V9_dtT0zHkKc#vs}*lWc!Ey^U8oeq&Yr)SWbET0y`66q;Ui!LIbBo===qW4xM-QLEk z!B>X$wBK1Dfzl&g7bJKy$>lTK0v(38%mnkEAvI&|PS|B6jI23}YQN6vB}r@J&`-Lr z&T}cL_D#=Kd#?iX_ia)wmfs?(O!l4|n5(fc(ofO2R#|F;5^j#PRo-c*wt2#=FmnE7 ztgex?o}9+dEpv_yLG;b1b1LdusZs>PwXB-1j76x(lv*0w@@UEz@Y8p-_gaath$Vv~ zthD!>lUwgyb7eqH-?4d3?r_JZdCa+zwdml&&u(;zyBj+~BIB(wy~ZK(#`d{X(GQYc zmIc$yZ0x|mklV=FCMU5kvrERXZ&@@;D{Jh!HB`K--?lJ~C!9;FD)gJQ$y4L{Z|JV9 zgsI|czAwTK!s60SmYS-YytPfZwY}J)Lw1JOU9s;`?L#Z*DEA(#jV2xW-e1pmnRA@^ z{(Rm+Pj`c|9yDJ#i$#|7FhthaSPmT!ED~=|5smE2s7GEi2mwukD)e>Ei zdFS+m)~ptFM94tpKx&8!_o_| zfWcTm%O%RXf7UKQOuuUIa8J1BefHB*v^~Kae8R1Ct!U=^%8IO1Yo6v6U*~_`np|4J zdtK(>_|=P+CZi`Kg8R>oird?m3TBSCh=iiGRh(unQJAVc17}IIWNzNGk8$ENI^UH` z!zPz(kKE1aA{ZBPvrX}_)w`Zf*=29>Zkv7aW)4>6)b{P-2auh8!Au_{j!CA{L*igl?$XRJS{noT^m-7B(^b)OyLhXZ6@t z^yy9?)hts=F1OI8&Z2am9S+Uc7C1E-+*TMb-SIo}V`;im=vhr2i`~5P&+y8)sF3{R z&neGC1U*J>(6N8cKNsQnUSwmm_yfOyr-$OwYi8-TdUIV28JQ^T*jPTYL|373@Z!Ai zZi5+t={gpZoY;w`HvO#)inqDbPDn$)7T9NPU2+E|S_-VZ>oP4kt1jkq0o&ycCCz&V z6cop+0?YJRBV8l}uFy&$BG^l<1482B5~L{Vj2+UimCtPO6&j_B%i^mqMc+oJOdnlM zP3kE4#y}$YDv^h0+hKCyZMlY{Hn$RsgXyW0x0F)VE0kQMR9<-PX8fqz0lk$h*{c=t zf^%YDvDNVkKTWMNB}O@E=kEQyRJj!*$YbYjwq8tInI0=QbfBU&Nq5|E+8Vk?wOSQ83 z=N^;?PTrnq@@Co9ZayF~Q{~ngl|&vWx4_6Lwm)zuMlQ${Xg~(*R*qWaJiDP zJ-r!a7BL|k%^>BQrTSD&e)rq-5ZxV9Y~k0eP3nS~wLi)tv)QV5w+uDOXGrjB*^P~x zFei>R3F`XhSaEKnKZ$A#jM|m|Y)G0uoIQVU@mO_an7M4KSY?BUclC`_(<+I*x6F2; zoxD#(>@C)L6*Z+LA=J_%86?tB{Qmi8nz}-3$7ud))U~POmp@5F2z*P?+0QXrX4d>c zX8W0;-7(^q+Kje7H^>&qH!cNUcUQe>M+r^vIXA_)<5X-R?J0IFepQYq67u3>(-t>> z+i}~+xcu>Z&w4W(*(2;{UhWVzeVAe?KVDI)kJ{VI!g|YgAvPz@RL3l~T{ixv+Q(WW zh6cSlyST91CIh@iv>R)8zpN5)X=XzR((o(#Z@)CrcQ%MOR5_%_;-#FMPmPHYOTLsz z*Nj|~WQ{rSsfz6iWWGF^<###f%YR9>E8^u?C57(ncqKRT7!kF?=S{kzEj5qPLuRlBUqc`&*}>w{hkvvAN}#3KWBxgAnBB4apvry>GKo0 zp$3RE$+J{Wv~w@UdZ?l*msORVxgVmZEoHCXc{@*j{E+>WRH{;igF>K@+JHft7fmKv z$*%i)ZQ`kSmKByFGwlmhpWp0A8&nJZ&it(4ii<+PP3e!F922kjXd?|bEje|>I5Qtv zjR-lI(BDdlMJ84cXp)@g%td<55kYwgn#5weh#? zz@thg-F_E&UWTMn3FA@K4d#!E*+^QrFvVI3AlPO7_Nb`)yHt~e@ys!#lW!4R?Wm63 z`@L9V&Pi}^5fV*HLY;RQ<54*Q^RQmifMePRz^+5!P&vnD+}Hi|J@0<+&5W(euA(Zv zw1*4RyEyhdE2Zb>7gRMu8w(4uDsw#v-Ew|FNaPCjR}A4vXYynJK-YbZyOoo&f|eck{|@!iZ=&heWW2_km#9yiab$ zj}VR}%&aSXMkBo10nNri&NA1j8TtBmR@FOM^M5GJ5Z~XZO?yRxfvq=HNos_mP>t%_ zTdt-?Ri^|CiPB6;!&jfa|BgOBQoF7WuN3P^nA5O!o>T#8Y+=HMlLs4M9BhQjE@ zp|`9cZ0QD4W-=NQ5@6oH?k`dRUerH{ngsX*zY-(KlrrWQt;5Ha#Wb`Ldsd#2fW3}u zMX5;UK~dql5Cs$PM~)yfWB&S2LLo6>GX5#5rL3)iIIMqsw-y3R_;=-NRg;ilDz5+p z%ze3VB|s1UBut5cKP6n9;Y%^C75Y`r2B6M(?&XE6RtN_mi68L$10TY|%ER>>_|9i_ z#=_19wlh39)C+Lbf8(friIO$4zGezcO${(G{QuxcNKnW!{5bFl60&+@`~4fKqZ!tJ z2^6LWSX|^d1>S-CgZyjOLy^uJ?GNKY>*_(~!f9nD*w%nY7Qct`_jgh#Y)E&c_9lRI zfsA<}u$E9rZ!ic1VSnU;pQ%lL;*bL9Zw_b<=IM1Up^ztmt4xgfx0?)Y?Tov@slT6# zvE*U8b&z2O6|wW7&2Av4W{@$Kc`c!kDVvCsA-lt&%|1n{*JusEEMQP}uaUt|6ml!$ zI^q9pbcV9c5+8;10G2c0V_wp&B^0u0GjTR_uMw1Pm1HJ|3IDhOY+F)ULxZ0vBzg;R z`r16xaItcAad&X{uyOG??tRuq)z$jXZQaoNXd6q6>%k~V0!2~BsV@*1NMfo3S09{O zB@VV1W0vJXP&00=d2Ih@tuQKgPSVd<8q{bFrU|ZTNCZdS3HBAPBi{p<8_$4_&;Tqh zl7SNr3De33(lg%$0I~>VAsmTR1LH%ml|*I)y?4&3LeTGb+kWrzSOcSw!aT&N1gFBP zA&aF1SOpK$|2{l`g>nhQK#9!(&((f;anSowkoT@J!A}%25ybT%I09H@^s;bru>SQ* z6~Dclst%DY2NH_|7FQ0Z0ybcZ{!;~T%E90qW$Od_5D2Qmtws=Z>%Ub4qcDbnp|<#k z>$}uCs=?R?EeCgJ3lA%M{KGZy+1T(A-r>3^^B*gK8!omQt?&MLhbvtEzg7b?TwM;4 zMGc@gnB^9CepwuVsfNg7$Hu&33(R8&=B7Gas*@5CDok6;7o)D<0Sbx+nFmKv_khKL zfCimAXW@-skV5+EmY8h=Yr)vph$tk3Dl868Z27(1e1FH7#zLbI@KBhJkD&v@{*Ho- zg(|DVLW!6`$=S{uJV5YQIG`4*R)aW~pdoCM*!BVQT#kufgYhKR5(+7z2a6?U3QHpL zveN)<9As{g*Afcpp-%{W*u~Qszx*fsYpgJ*m0iF>fcxyJcN~reC;l&sqz#xyAx6N( zWpAeSrB6WU!F@lTgTjQ*cZo!cVs54p;$Qp9iZw?i^h)B8nv_`-isP z*GEAU-9Te8XByWM3aMfRMYccx$kUEh>LKzU}KG6_BLOd!|>02Z5vn| zobc@jfA-*?`)&5{P#Ec}C?TWd!C;R4Yd`~l-;Uqt{pvUo@hi5^?05^r9}2{et5u{< z#JL3Jzn~{Af(dnC1e%LG_k}%RvBVUhpX=53y8t{5G9Som358ViBm@Sll&6i06@iC+ z{`ZV?ieR25fKk9z)m>i1h;V9fzGJo-17n-0xK<_`sHah$=F)}fgfZp|sW&a2v$o}i* zU#Ry7y;~Q{8wiEx!KnlE!cZ*LB%BBpMj4=2T4Je;k?>R^ssO#I5etruS_hb*B0w)# z!gBW}!gGnK0rb)!EV<$aA@Z+izxbC1=p8*+Tv8G&4o(T6SC3$!TS0Ib{8s!|8`WWS z0D3tF7Wym|7D_|~pm#oCxteLjxdb%;8iyH+-INWBC8hw-D8g89b`Bvhj6Vzw*o(zQ z=ECCs4&Mv4EzrogSg3d2I-qd61&#EHMUy{R4;n_ppphuC=*NZYKoik3XlO+&{b)Y68g~f`kEmP+oS4o*Lmgr97ph?KaFT>ZaKSYUnWC)Eif`w*2g@qE49yC@4 zmMd3BoJ&w{(37fI?3PwoEHQ~e4_{)zH`?%m@gBv5&THs-F)Vfe3%pd^4ej`sAn36v zEc7b)P=aT*z=gu881%dZ7X9hvdeAV62Hnk%MQ6QQ2b#z$CFpKoEWL4XophMCLpP>k z=}B)0(jnVap{fDhpowLU4HIX=2@$$K3rkjdzYa3YI6yZKVady5#K}ZN2;F{wg|mHJ Y9~`IU6qFc%G5ALXJ_UUIg!$k90Jz~tH~;_u literal 0 HcmV?d00001 diff --git a/lib/messagingIdl.jar b/lib/messagingIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..9c15fe860a276c25b41391f2f5e0f2cbe086d2fc GIT binary patch literal 155456 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®9`43%keOM1Ygj4)y2kJ0BLxe9wq_BDx}b*`q4*v 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

2ZOc!;$wv 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%0Ao1cIV6eDO&(Wyc@bo< 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�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 Nfdxc;e);{c{{y#^In@9F literal 0 HcmV?d00001 diff --git a/lib/orbIdl.jar b/lib/orbIdl.jar new file mode 100644 index 0000000000000000000000000000000000000000..b0388d76373060d72b105c9ecc4f2f1614b2d61b GIT binary patch literal 551785 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

kz@rit8lKK3I#5Kw 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≫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∨G= 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

xUIctU&(Yh7N) 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�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 literal 0 HcmV?d00001 diff --git a/lib/tidorbj.jar b/lib/tidorbj.jar new file mode 100644 index 0000000000000000000000000000000000000000..fcc9d489edafee1a148bfd0cf68cf91b59e01e0c GIT binary patch literal 1598012 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%0A& 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

jmVK`W6@GkZi>MWDqnB7V?qTxs_WkZ&9gN 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%0DIaE{1gPgJ& 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�_ z%|17gfS&lzBlb1i5|>e{4rQD%0KRfQXxNkxkWJ*mi0b2Ex%rube#B#CLLDs+bXYT) zvLz(X8ONXwyHp{!uvyDIJ)@t=?{T&T@*<>%MI!g;<$R?r7#5gi?Nh}%xs8ImKYtd6 z3pJV6V`B*^wb|4kzvptc=D|fbCQc$GqF+bD-3(W0@yx@m;6a?7;M;uBMU2V9AX8*C zW>38+ua%|S10V4%C2%#-!CDnwm1K7FR=%@KE%1Z=Ox+;CEa#L!8J%)OBV;FL*YyB< z26>}csH^kn-Usy*vs21yYNQlV_2}b{)A(d})hW2I5%QcLz?HPML#AC>bJfP;*<+X_ z#oH|l*VeshULBm#9d(+S;~raYF=7<8kc;0!gq>h3k-6#UP_=-xTELj~)dpw+xduJ1 zxMmVl^eeGru{M#DL<>>iUmAxhA*IaP7KeW>+?ZHBy0Z!vyty1a-(i?f<@K<}5K0J<#>Xi)*w!o1P^g zNg)Cv!2jU=e@IW4(g1y_p|0YLu?8vW%5fzCog7B~CUyY7E-I*ysGZ3HS>o|vGuBUa zFwxn_H~+ViBRPtsoCYHVw@2?zgejj(zF%~5ncE7%fzG%eja94-rGspcYN1_G_fgM~ zhlR(WCIFlDe z(kKt1d?^eUZFtwLf6CgQZXbLfe?5I6-JywjMo|)|?)M|6-Jg;^V7{P?rSblPYxY!i z4SoZA9e!t-I!V|IkrPp`=qqYGT0w-wbQ~9s^BpOVKaO6}Bhv1VyM;H_lrs!SJvx9L`z0&&&(Dnij@5rIEdPTu&KJOW>Ix1R1LhM0PX^3k z0k~+X{yc;A6EUaR$ych3l>`JrLe^W#5}V{RX$Tj9$uv&MDh`XIfThp>VIO$H&^T^r z`cgwlDJe}wE8zsDMh0jDRRxT&PQ{+mUQ+g!L4r<-c4T~t=FcQ^QnK_0#tI?}$C=sc z38`r*>4DRO|2?wRonvSM#FZKFB>+gG?qjvE1w7-#NH$21m`VrzIjPOJQI$AxfjA+LClBsHlgHb^! z(4+R1Li?IvQ~h!Z%t5y|$7CDtAU0@byiUExhSfC2L9!Kr>nKA39 zCHXQxuDJ_!&Xy3;Af8iS`Wz>a!;ZG3S>-aGV*)2T0Yc@JN5aZFGsDfXKDRMr6MuJY zA$>U)J9~pC3+8;%if<|_sv=FACpJ4fk*_5~!P=Hw09z;{jU#_V(#n~ifhYWVLr2^* z-Dd*^Yb0%+RC7(kJgClHqsvrlN<-&N{W+{~fE>a6SP`9mXAJf0MorLpTZGv*HJVGplG9GK+pko4PaFi_}|u!0nnh;N|;^XX|U;XW`e7Ht|;ogxY2= zu(D*@3kr1#XXSy%YY;U4{#erW;@zRA@QCbPGiu)$y^<#~U$UJgYTwUWWlwm%-*$a@ z2zL;oekk^4r=CyMGc#)$rsF2=aBz!G_M;I}0}0oM8z)2XN*F9w`J{QYYC$${6D6V@svX2_S$ zX&((dc5V$NJu)1g3{LxdefRX!E@^l|bS|l-f;jr#7LTsB}-RFCQzCIHkE! zmzY07lU{=rDKUF)G9+MsWl69G40f4DxU-}4PdN*Ktwv;Sc4{*9huzB;qP!%@nQAmX zV_;ygr!LB7(A3f5WmfKT*y}_TInKFc-Rv_eIhfN{8FghzIK_mNfTowC0H?S|q>_9$ zIMFz@wA{)Qyr)T`Tzys9bO^w{87*F4cv7`5TdTJK*3JNj&RM%7*&Zy zaImPc3-pzWFdxM=^NkhXC;P&VAVI-vdV+1D*Q=jGEc-K98UY`h5V;cG>Y$&+OeEy_ zN6Xo1m^>O;?NFFv?{gWkrj%THa^^jA6Zgo{I{5qd$Wnb$=2l6uCJgMpvB+an7&N}r zqO3Hz=@YK51y|>kGU0wBq6KpFrB8Xntm#+s5MuXv5F? zms+CLDPtxmu2q9yg`9Z4G3d6Cd8;RJOJYy#UkrZe>TqYXsegoS^9-#V5uI%9m2L8n za3NFwQEwrGmHaVZyfU@hRX&7coF=oIwdMR%?Rbk{!2pc3!JY>Fc9X2(XN`k|;i3i%I8pDgP4xz-j{K?4 zqPb6(BVp&|hm#o#w|=1G>g7g9)W~Zc(OxhZv`9YCVeen+@2F>w!j%aql6oG#D|w7b z-FegUuy@GQLX)n239e%DOe!iqZr3?+TBtg?fwL}R=r6xlePMjluO7aXw_wYQpxKB<%(Fep@JhxgVQ`ds1&<0x5PPLg8E{D zsD}l*6&FZlyZ|~H%eOOFrgTwNGfLzLQ2G2;R^(B`^GpP%=+KtM0o>}eTUbHzB@+il zQiTqBWKzTZYLYOhQ*L3p_S#MP3GmqTXqs{h$|6%`IobT|^a(J_+U45Xbn%J3U0VF} zZ?ut>oF=i?%8Pf9R8|kli#LEj_sWY0E0s0_%q2deW6-JGJPA!0W}7<(o5zOm9zL7j z-Mu6ywE@zv?mTSBT7yKQ1;8;wq6GjhY476k(I(dr5@i0Q_Ed8Jgbjydc@@7X(7$89o~#3%1dV3O5-(YFON( zhz$ZSc!>=LE~La}3SGfI#L(ruq6(=LlzC0&SXVd$b!gth=XE#h9M*KLgGh7bx_aKx5n0Wzi?OP=&B2Jrjao4ciq0w<#D8hFu9e5y~sS0Nm(fCNShAp#)6ZXNO9O$tSm+z6Acsh!Ro>4$?Be~OrnYE zk*h$1NTR;#iK_$yiZFGec6bB!Aa=nsuxqw3H(-~QcEG=`ErpD#JQX7g-_6eFN7I+YkKLF%cB60O;yFCUxW@7Qkl1`XumWRm=|7~rqy&5m0hAvaFgL!)G>}O zvi@*XaCQ=VG+b9nc7p@u$fd+uHGh4uU1?O2s(|r4jiHO`FlIjxSz2=+#diy;+^4wS z?%2`EI%BeS14ob^zE->}`A|*IHGVg%B-1GxGl^XyOIEme_Xm>IqhXc#S34+SjfCk? zUnmgFBzqJjD8(pd8Hv<>)V}&4OjAr#GVCWT@Ycv%oy<$yoyH)KH!lb`vh}{eAW(F& zb%^ioVPpYCV=j=eb2D0mYjf6HoK!G%bIi_*nFW?9V^O{oMlLiRekJ?kOa{|l*cK&? zs-9#%?}d<2x+XcLX&ZM`1tg#ZI`gV8d?770^{&&mM6f6^8th(+lqB|0k6TV)U<_Q(wu{VkKTZ@h zIkN$CUMKQN#nZlEWiH$cAwg}x^iQb5FnV6ycX|~wn3O;fG1NV06e7pch7{sLo~n5ihYe2lm-^W4B47lP_1Jbn;lh(RG>j`M-Q+F z?M9?-A1q6ZI;yHj+^+1J7Yu~|>F=v@H$f>9jAyvxVHV=Sr|Y`OueF$%UauK?O3a67DetcsfU6KHXhy&5&m)= zCbS3F$&U1s7M3FuDTAt8N7Z-uR<#BPC&ikJqxut9j+H_G1fttLG11wl#r*xHI;$S$ z9Y~MKZ3ff~W7URxl_#B}Yzi3YH_h_pDB^H9aFJu}7(-E_B1Cl!QDQ*-m3bc{s`OfM z4Mn)rPwhv!YW~8W%}CtO3pgG5)k?mmD$9FmacEA#7+q@M5His4`9R&&QerNn+o-8T z?BfEZBt9)gzg_b42u}oKDF*$*AUo);qFk(LSUwO>0p!vaHS&o9p83`I+L$lSd71Ts za#VP!y|jg&m4i$H3e$hwB}aI3{#pR#ZWv&IkN!W}rQa7M3)PO5aa9rDd0kV|@WAV6 z5fd>LV&Y7esuA~)Vn{!I3=(D0heg(TOx^C*orDK%-}NDwG1q*C`C%H5sV^->^KAU( zJwY{jqplC|0!jEe{j*5#@$&xk^ql|w=QW1^-jim}M_4M%K~1PB8vE_cK%~qR#v93Nge0dj~-w$(0&o#S8qU!&8b~9*V>J90M$qmKiMPP^bl#i~ska`VW-iK-yT8&*Xf(%;$Lz_Z1ygo+mc$J> zfnr9^z=<>_Cz%NnqawPzZQ@he|JmrJe&i6qHJchuD-swkVM)#*_*9Cu>V&Noyxu9>|L;HzdrY>GAaC=dcaP=kP zo1kJ=H@i0@5BQzJZ~?kkV|%J+R|X{N=Lj;0>p0E#K8${i(bPTEi1l7yed;o8KkQQsuEYH!5r8=@y1x{0)0I zuz9Qt+yUl?vb+A;8om{Z{eeP_b>+G{_SAA4#EuBqwdFe(u5th?hx$&dNjY!ip>+eI zgWB!uW$q0*_D?s(7HBHeW{4qK6|jq52Z)=SZ}uTS$`u?-w8&wg;LK~=c_kZ}aHBzx zTd~rzFmRsPXAL3zTHx;OK0T_ug`X&P8R0D`Z;B6pUt4a1j@1yJ2->oc>;O|rA*-Z| zQ`4Gl1uiv~Jat;meowBv6nEm#_c^p@3>DrSI)V@N3zed$(+)6u)IogT1%H;C$~k}K zk~6R7HwpoQtIX~-Z(YS)au*I{gBI76G)!HzScf)PzmG*FRnH{_~QuLI{pEO9_)gla{2HNB8- zPe>r3RUPzZ+7Ub{N8>TD>iE9Rw9>&vi?uuo%+;#<2&=;iqH)T4suGbj#%9Ts0@UGe zRoQlU41y!Yc_Bh}5KEUgg(uzaie%vlm?eU0t3ivOHN-RR2-bs%N6ci=K(D3o8D~9* z3GKQsg)KXec?S_89_H8y3TW0=%RN;gzz-~EBz;al-!q-2j;H+z7wSTik2P$Utm{4N zCm^AjPcl^~8)ujlhA^-S!c9_UXd@qD9nCFy(@Pb*)R8;);+isn135dxs#BZt$KBQ) z@G+jKc*UM7uc2>1KZ3Sn_Hy<=fvN!Ee8=c7$|Nfgl4IK^jlO}rwo773_ER1mWHuy` zP#%S5A|gXWCyplM2e7aGDR23!ni)L+c8(sfb433-Z^_yj{}(xYu#%45tUf@%QH#>q zgaDo$DY|sZGr1^iroQnvp#~B*e8J**!bq|!}@pUwoB&(ZtIQb zjMeDEHAvzZ>yhqLFbqDy3O&{Jh>d&wBf}9xB;_*>ddtZZ9>}otEn6{DKZ;?;oK%`D z2wY;mDhKpHy7vsnoyv=Xg;TpKpznH8iQ^0QP?kj^^}24SZeQ8Qhju$vb#Z%NEM6m zb5ZWyThpy3YKX<06qzAd?-yupM}jbSVqCS9Mo{1*qFNr{V+DXo?Ub5_(4XMPr?Xi| z%t%uSvE)RplB?JbI!BuXgXU< z7D>4l0jzpP9K4z%5?_|Fq%bi`QT>>zw+?TcDBhnm>*#UIT&owCF%qWpqFQ@NB#*N! ze_a*_5jkNuE%(K0pP!IKL^Wa*7q{zomFr*bJ~BQ^-~c!thSSu>)rwcsLhxi5Z#`4N#)`qjnx zE|K|-(rhbn5C}WxppTQ{@;m307xz}@`y*60r;19{ZiQ6wEfal7oW0_J-ILBB0k!9~ zSrDl*Q&F(J*Z|O{h-pX7K|SayN(rc$3XKEQahOyvFu(HV2rKH@X8L3tY9@`O8d8!m zM7DJdm&s~=BknH+9a@r;CQfyw#sLLRu4(ejcas{dV;$p!0~E0~vT|)0$J>cZ zj9*gdwh001Om?ok5i4V*-HQon(=fnXl^E;2MgG>7tTShi@W`6kYXJvwO+(~-5R=QG zO1U3ZXl?uPOYW+>UrX@3w<}d$-VUT8wlisvDKkGD!d09B4{vr_9wNCY#tF# zvi{b5Y zHF>`}g1Z#qywFsuTf{cypwBr_(6q2u*Bj8R)Gn`(Y>?io>5%<8``9%7xbsgKPd!7K z_oz+seVJXDf|Mg^?~ptA(HEK^CQlSg7@yO9A{0QU;REP1b=;t-Nha#BgUr)#N|-+( zrXR>Tjp0u0QCF_?46g?->PCj0K~8Xwd6GcrrVvSn3j+$UJTSMI!X50Bg4a)p!lSEL zf#c}wFMYnrsDaoP23rV`lB7P7ND&JCm@_D{KW6*iT(MCzR}w6*gR$Z*%Kx0CM}I8e zTL3~mI>2-PC$If|c1|$(CB7B1RsI`XN-GV3OA+!ru>&L(6d=)jzNBHK$*>Q8o%y}` zR({mHj%zdbp$CH5Wyf#Cl{LlxOLS=e%$i> zq`*)O^Y&b<`>1fOz$9=vexqUKqo4}ICbEQT7Wwcgib-J7DPKc6=<8m|;mf!s$2`xa zCs3Oy?kOy4%}a+J^QO+bx)RK?UGyh21pE}^``y%oki&s$6S&)Hmi}Do<=N`!_7GrK zmNQ~eh14qov#PlQKEXVjd)m30R=T=H^EvJZ@dw^*dzPB7v*}z}=5%nfWs|0}Np%Ur z?{a3hb|*+uz1p}}kp=$xFRC235j9qM`-eJN>YK%{s079!%t@uo>4@~j#g794? zQLsFdZ=FDVRYXF2u+TxDhH{3xVPV-30bM?zTyby`wICjb`g|ZDDd;4(+mZ-&->AmnB{P z!jkL1S(5WNOUD22S~8tB0rcNnQeHt+N${7L?Ef)K5^Q7dW9}Yb4*egoWZV<|4Fupk zt^>Y*CT{uV*$RS6g0lZdtcWQ7xARD_jk$j`_RE4Ozdwtyzs{oSU!BFlzj-z5Z)Y*~ zfA=f`$+xjP1H9P>@cmu@_%~wyzgh5aV#a?q;eV)V@^=B?-&6z=^QC{&Ehha-YJPwK za5dZSiTMM@f&X-0mdBzK_X4an5b%)zzCU)p{A0cUnfUTwNU;D2`mO&+(Es;E{~NJo zMgUR2>F|XTV4L@7As+D5Ls6D@Xsu;sII+pZ?|IQ}g9Z{#q)U z1+aSCf2{tWm6w0Te|tYEA!vY~Z2>;Qzg+z5&?ewIVHKpka>*;~XP$VqDSelA{3)G=T4% zEDJDoIWUm9=6yK+gZYwx!S2IDO(jt%8XWcwma&3@!hD<%65<$k5$AqFoC$p4vc0v;%$exAJO^JhUX3Cvj~EZM;9e(qbK#!W7`S<7eoVZH`0-tC={ zqhyHqE8dV7{tmNsIQL;fs0<=ImSVdph16WC#q`ENf3Nu_ZkSYRvK#Xp?B^}Avza-o zJAwihU(^WW2nqfb(b1bYO5piL=4H@Xk}FZOnj}OMV$z$HAam6$!gs?lDAQT}H1GWT zi1`UnCz06rNh)Jk^XS~ciG^%a?>~{xbKOFB%L1SVS%6^aKi}hpe!mxgczvq@R3}tX zH&Q^!vB=qil9Q8_C>zO9q|GB41d`OrkVT;KP+8$e$l!xyxLR`ceO_r!2(D-HT_5^tByww$Io6T9A@&k;T}UFApc!IokUh6S>#J^`4C=-Mmw zWkg{HKa-{@Fj568Q&;WE#U;C;%0R@y?&^$7Y$Zh?nijtBwv2;ab)xzqcDF~cpsRR? ziGmS;UDZU$(NZ;+=SdIB8gWX%Tr zC~rcwpJ=`G7&^)rW|GXJIVJ_Q!hBfB?1;C=VU>EnnGVkpx;aF3AFH=L6Vdd7aRIy2 zztjNk6!tvSB5if_1|S5U7Xr-2(jKVJ+8$<=wEYt294MtWeiMymtE{R~UT#8<8kZfM z5aMNznZ(+kW7Qlj*xJsOjtxo;>oYPkkJ$4d{X`|Ez3&{Guhim6gvXn>=qU|OEp#5{wiQQB};x?ADt4z_EfJDrYm`7(ri6HM!?vF<3rOY6P zyvkG>qGh}Ac9GoV``D9C@l-1ZAynhCSxA~8Kz5d&_D}}ZXB%Xd| zx%#Z@_(V$pwn?Zdhqq-)q1ff=8G@zty(IC`aMU=Yqo*|bxg$c6a_l(!Ci%|(tV;Ys zDOp?%&-gL<$R)uTP;7i95RMac3OVp=*RtZ*Vf16c(!P6~wW^8TY(|xoBk_cuWsVln z%D*d*2Czxhb;3MA-sF#t?3MM!AYWbPS`2wW6UU_J*iig1&*Lq)>}x{Z3hs(H5U*N+ zyK6J0S}jbg;ujthc0QG#Q3_6o;QxF{q_ro%;}zIFIdxThM?KG5e-RfNICkW+Og_y1 zLGQ6S5GdR`@r{2zF433_3Z5_I0mJsmPuyJW@tmX{)gu6te=v=@*BZm-m{;Us8lO`d zX!0j;^qE^`g@iT1@`s+;5*LH1=HdrYE_is^y>-=?gbp6rsGLa@Q#1@;A#;MS((#dP z&3A`0T+L$p*Oi4oMx;Mi76fnyv*#unel=qMt+Mc|5nE775fKut^UF$zOcBmr z{fpYKK5RY#0_xT|ER%wZ<5|wYG6k;p&lbK#?WezPOh}@1`@Vw+)Z(E*hOQ6vr;m6L6A!RX=0f<6#1%@6X)<@~EP#J1t)n1sC=-iLjiM%OvPK z=VBS~jhVEX0aG^l!!?LrdJL;{u2sr`&EUIKwA>!V`-gYRJs%U}D&v68yMqq5sg}os z%*VsaZ(D$zZr9t50)lWg-_J~&R5i9-!KwJy%m@Bs@eeh~sXsMKR5pdqo}w z>>-d^Q$_&!EVh0iv&p4SF(K>yO?J6vb4YS1ybZ5-hKG~O+0%izL+yy$E?-wKODe?W zG(ypypFCh6dQnBHj)8(RoreEDwbob_psUlV4zd7d`jO%aQD`W+o6Xf(16UQ+Wf_>Y zeg0Z%n-w=e=M0HDF*s(I=BLN@KeQ?7xmVv7z~ zkaA>w(WOsCP0eEuUklMx`FwDFmNXKCJO7M0$3WIWggqa;xVOChPx2sfB8ni3OlA?t|GI1*{xQQW11mdzgrlRwU%WjsDm=jY{pPF9N8r2?@jkGYBpqi|K}@gQfXgC`s-@FUa9 zP_{#1pu?yNTX>}#*Ov~M4Bt+x(Td*rbbYIb#G<%&6^n+VxM!yTjZ2}bcm*L4e6d-c z0&Q|rr83!;zJK<%Q`!3cj9%?*P(&HcP_IbLr4y)c$T zzO3jF(YDRVd$E9*<;UC5r@D`jqYgwj%qJn-#5Mxwxvd?J~jHwHQV#JV~9&5kZik( zEr*~0wTTzy(o*Ol)Ru`_a@Tui#E!4crplgUPOOVp#DKy1_+6y})=2}|9u+Jdfx{H9dL;@qNA?n&w4X zbX=oFVy?9{)?usBA>kKhj@FokcSLxCYv|C0%4CI|TrTFC|6Xbn|9 z##Tka>gE=H(!2M3pm%bzA(D+&_4g_T*cX*3U$7!Cs}a!!mOES=CIOXcVC`=s#~Gw~ zu6-?^NsCKW_xVnGyyllf{apPU!e-LiK13cKRR#pEGGfuir32u}FCYO@g6KXXVwy5@)-C9)E13 zm%;xLa`YfD>{bcugsQcQlnXc3<8w|sAdC+)PUfnGS4@XMphFDgm-7JrrUHFVKn*`5 z;#wGW!HxiBxGW??FILkT-7{jrG0l%BuGKqy!y|dx(dFy{duX+YKvflRi9EJKqlXh# zDyd?6kAMOr`CX@sR$TmoO_v8>{gAgnQePsm00}T^X;1731Pjxs-+2Js+yqfpfCNzv z5PSbMO#EjqkCpq?B^Y{lv8G-kr(mkDtH@!)74F2~dy$6&N9Q{7AMXgEZ)U0z-Ym-z zC3yMZRdS@QmE$+FmF019ap}$a=-t(|$@3AgROKIL2rXB@Xo*MFTLg}dtU=zSbOuNI zY4unEs8pLUB+GdXmV+<^?O6k;^{nwJQGecIr-Tv6ycs+yf`Z0WL%Z54kz%RPVeApe zm<8KhtLWp|HF6X{hY)z|8yfVr$2v}> zyWwp&%URDhnROyhl>rYa@AW2}plVP42HeWXz)+s>dLX#1y$l!7(GqV7LH!K8EStRJ z!@+Nm$LKqV^Y)^Jti;z^m~w#-#vs=*VnLGQl+f_0yvnuA;Yj1Cq5{L+!|Vw72)Is= z!vdr-`5JG(RhI_er$CSZud5aC{MApB-^R(>(BYq=JZ1_Y%HamP#mo^6PO=*s7sy?& z;3$|E4G8^8aRU5uNL`^x0utLWXB9oEXsAe^K5!?rXaL3rsn4KqCv1#e4t8(vvA@A% zkR(x2>JNM?1HrZ+!P*}iRfJZAsXz=Hil~1J$Z7Xz4&YZ2q{}^d!09cXJ`Lu)uDXr5 z?pHak46oM~;UuAoCDwktA!oe@qT8FvnX|@TsgWg^|EdBiuo%4~S(psI`rf!)D<`l% z2+9nBEF@|lM8IggpU#(&$+J0RHVK@38(@ZU8)AF41nw|wL(EYn5W3 zeqxHp6yDGjF&d9Xn+6-1+bIbLl2G)mYOR^XtMeK3hjoNsJuSbT&IWu$HstT)5OwdF zYb}6tlm%qTzo{&`IU4=>Vx%Rr$_tkPV;2#bD<<(2ghD!CM+&O#PtN4_(H9A#tV>855cC^fgC|kqcZ+X6El&PwN zVWCPDsj5RkzDut8byC`hJ`#HL=|3y8qvi1b5zUt(~<6`Z#j@U5T@ciCD9rG+`9$Xv5i{7-}5PR9%C$u$uyb>e#WMgwBp#ZS-)f0zY9PBn@IF+7z%t zXu!b3*QtEnbkX=)d<-Zl6>!cV8zp1*1QLl39cR6MGEW z3I*Mc!Oi}t?BgvjeBC$CYOu-LwWUQ}bya$c?Fe>XYVWM7%^QZQTUJ-^9z72p-#3O& z!qbl?ZRbX$I`>QsnAfyQJq!o~nk_GfP_$B{esTIod&uv}qV4PtfTpk~uU1Dwlx*U7Eze zq%CzVL`+MK1Z<5T3>gXivA$}cqr37JJ+}n4wDrF}GtiU5*^~Gad}5&ez~>X_3x6cf zj5h+i7wY>A4XvpjF`kZw*33X_1zZkPy6sa2|FKLDbQViJVwRnhoHbTb4=6n^QV$X} zj*L=Qp~1*;n;h-8pwyS#>*mBWnrb(p7^mj_43h!}hS zrS8gm3*@OOpsBU<;|(1h37jpOFV+_w%@*%l?>BHqe9Ra_u$%sGo}i%ARKf>R&=ITX zDa?LKzVo)c3n3pCXg`_3QVE-3BOzyq7SZ}j%?#28LX9Ay)R3*vx7i{?|8|Nzfn|qZ z0p->}!1LDyX8}c39eE)IMR_p+MI8kJK>zLkx8d zh}?q z)wyUOml9aw7rIh~jKTJC`EEC-K4fFcRDEm*UQDum{gelioB?E4qx}|^;Ho6%q>#%b zC(B67^tCWU{jkmu67i913OpOpZRdC-NKGc$5dBi)bx8eUP?LlprC-lZXTRxpiy7_KVgA!^z_^#FkB|Q-5tO`eKrb&qyJ57F zU)@TaT%A;1ZU`TJ&X-o~3!>%bzYPc4RL|oro-OVc_RH2yj8_r@6f=VzCeOy2yE~^g z4j)Z;E9@D@ylNCo3%NU-S0R?m&+?=uE8dFf;ifZ_;88K(`q*M5s#k_2X3#m$DkU0JI zd(C=YVUf@D7#b7wca(0%db@3ETFgtMDEl(8p9Vi!#p-Nh)rLa{59_b5(K8s$kr^d% zE;)-A#A}TaRW4%GtJ`tG6U94}IYp0CIVi-)UZF1>dn`SWmTk;f)Lt;H`vDuw1=i_s zMDanBwe-{m=mjCZ;@34xxs0?qG|E$}SJ7%I+r}G!WHS&|s1MeMPt@6Z`f6b5K+6A^ zIICKtQdOF&V#O+d3fr~n=(7VNi(;Xx*!q{}01OB$wpp7mEu#p0!kX@d{nt3xNT{!` zEmB$7*|JyIA`s1NmK7AsTciMe$yaC~tlVnenjjc|xUL}>eSXe@*@xt7$%P}7t)~ttAVh=5%&av8zHzhc76H#Vivy#z#;2xKHFJ6Ht{A}L9QE! z4TK?#0saj!0Ur2C^f&LmVQP0Gf){Wb#_3gFeP7`ABMB0SrgstBx|IhDd^qA7IiUPv z65vx9fVvC@sLRhvB^ksXsSokMPOc>P7K}6#uti^a3AjY#2w5&A&bE2Hi_)*SLO2DQ z{p<#R=8+G@_6UYJ#nuq5D7d><`{vI|l6Q)Ty0bgw`WieE2HXuzO60H-coPcaiIMky z_d@;BMVjC5m$u9H=OWbN;wsNCXh-4Swi5p*KKw~q+WeB1gV`J|T2)HQ=0!j1{SG|o zPAcK&Hvqg2VH;0;g!;7C;eXUc^KcAm~Z2bg~ zA!i}_W94dnE5OqU_K^0FEyGMlk8s&y8;raul<(;UQ(KlnJhRG~X z>XG9Cwh5|t8g_CE)qo=WkN<=}lj;KC&+@>}YKcxZU`mJEvkn^4yfJ4h0;`VaUso#_ z+oa>+kqFe&8Hs0y^P*0}^KSZ6j#MVm2s4Uu=?32;QlWWKCbv>PD}L+&(h*Gg7A)m9 z$hB=3nq3#;3TisY5d!~OU=yQ_$IV9-tQe$#u(?2|l%}s71D)zPOcXH-UQ1?(Y;h|( z;u^^4_ZD11h)ghISM0+Hk8fYW#qC{jznzsjcaRpo=|#5k}SYd|5bG20y&fuu06UKKDKDiMCkY zHs|uE+zy*r%sd#~b{6g?+hfM%nuqt#mj~=`3|OYqHOV5dpH(>xYp3!G@+$DdxsZ_~ z-$cl9%3TR+wgUb2x-p;iwlv#*gje~LK#g-Km%Gi^$egFm)ye=LRM4V{Si?24iRD@A z+A^0;gNtwxV%;80BIOQ4RZQiTPp%;q9^|q~&`$(9&9t0jmp* zR{kX@SH6?;#(jvlp7Sm(z~6GFWC_C=?s>*zt$1wV$lRJQaJ=E@Xpv4PZ8AC<9%>J9 z4y`-B_cE?KV~c{!Gx4nvE&2G1G17M;n?QZ^S#={Ix$kdb<6k7R2T(4E*}@Az%nENn zQlsryqpi-Sg<-piCbo+)ad(!vi*S?opI|F@m+QCuJ+VTHN8XNgDY3%T=V<)b^1L1!IjTvQ({u4Cj3lsspgH|Svz;G+CfQBw8 zYot3!o&$-xhnh%4vR`oG(e~7GkZ72sSVu=sOHWHzLreRKj^Y#MC$!&al7$Nbz^fu?HO?r}M=;c^k*+C@7^c;fMhrtDr_xNoAYReJ z{W~=+Ujk*uM8P7!tirG1Q1@SE6>~1S_}~1Fzov|NxE;8e9HjmLIQG2*)%d)Ulh_LU zVvGT!UdM`04ArUq4`XanMQN?SxK3>BI4umi&i*ddZwlEnS09N5X-&R1iU!#exfj$P zvP;=cdq<>}EPWNSORi>Mi=}@T!z9E;@m#*FO-I~_xp{H66uZv2OsH!dPL)i0N{qotcwv$ug1G3FzBHFe2kIejY#qeYSR*Acn619a;D7>v7(@L7G4?hfsU%sR zu!7?Jom>pT=+tM`Pmg;BETsvD<}sCC>6AAmY51noNK9?J8*-IW_F*mO>}%Niv0~_i z)K22XRE3fizFYBPu^yxf^4h``_J!H3eRHliwbp8P=Vl7WNCkrLySq ziR3t#mX8MoRB1Fu7$Z_FbG}QU9{fJSz5C}c#+X8(BKD){+#ifF77;@E;3xoNEd3A0 znD9RsW1xR9#yVTC+UNgZjNQ1%_rcb%U|8;w(4Mmnk!}!Lx!<4>!jy&uN+j6>e% z^MAQkbRK=W%gy7+l=VA^;#yn3edXbN?0$Xu`2=hm;03s{*!9QA)keX`BV8U9?#+v}d*pOB8gfw`b`*9L)T?fh1-aR@& z&&d6^A}K$AvFS%3VazBi?Ut|60K}M6aG2^3I#UL1jcoGL`(+)#(7X&cU}%0e;2`KS zT$us`CD$wju%QLmB#8ELo+uh>Y?AAjT9{Fque- z7@$_8XdopB{mX9A8E>QZrr9jG4}Z3@i@Amg{B%WvqrA!ne|_qUdyZ%y*+tMH4o2^? z=m9Pni&Ojjw7(_DM5q9%Aq9F=h5G%0kAfWeQ6kd#hj1^oC zVf1<99Nz)^bLy#+=XB`K0RH6OyJOTA?l zUO}<+TGcLy7B**4r0}kWovrwer^tLmIiP$Z`xG9jj=|3WiqX1A{-kRLgx?dtr=Ee7 z{1Hr7s?W>fpipgZBkhnV>)$8w3*P}_aS6i($XD0^xER5IJBj~bi@9lHsbIfzFR!O! z2iXFfGVfV3?UNTsEuiRQfG_BZ@_s8oJ2zg=jDZ-taCXKMio7@9)w+BwX zp!V=`I8p~1&307D(hfWN7o-j(8iT$4@hiv+?U4qR>l+mjJ1*_M{3ZGa_M)z=c9yHV zNJ%fm=#BAZjTR3I7n|LS^R-U@b{BG2)QyRJ%odMmzsDUfPWNuV&s+YIT-3V)^xTxY zgq-cMp}6}O29VrQGFM0O2-b0Q6acuG7(}*w4WfvVXWIIdgXDoxM%*p;&cdkP< zMi|G}0JIo)sfGys`1ICvF(u)`j0F)TVf^Aa`c9}N%WP1iKu$-gTQ{$%3Q1|b=4lAu z*dhzlqsjPn)cBt3P?c|P)wc9Ulk5KxuGKaE>vThjuOyOVk=#qBXIXq>wjRqrIb^7d9MzF~CBU2D8a5BNWI2Jq0{h(LJjH}TAMNm`VW*>BO1;gRIvWBdppjQPGQ$_XpVO)6Y5_UFSz_i{qs zk`fS!4IBD~lmRj+e+d9BW|$bpA(%*120)9!OP>zygi5Z=Ml@Ka@CVm(lqS|Qy|zF0y)vKUtmWy)EKd*Eh0 zqFHy^u>~M!mU_|IdQ%=+A#&#+)5C0%t&4# z=>k&C!vCU4mUFi#Yhn+Y!eDY5h4@~xmvJzJhA}mD5h^Qo{wW~Vm?E@~o}s_JYA>{i zkbGKs=j~xK23t7KhCY4vi&I^1T_sO-L4$9F^@?OG@%JrDWD(yndCpzwrKhs^KG6j| z12N?Gd&MLMMt+d#aV!n_uSwu)T@j5{1vgYFb1jmAd0taUYbYgz*+6AlTC&eYc~Y1p zHHD?!tjbywUqy4eMrhJc^CkCPyW{g6VeaJk`xy?;VCb>~6;o9UctkY$dxoKubv5`< zC@Qb*;)C?jB{E8(R=_tZ4eMmTxdYvN`9}G^sK6w?0wMfW{AD4j^!nKf3V>_*P)TL{ z_)^ZAeni9{V&j}GLfHPWY(%9m#cByNuw8>Ls=&0=Q(-2FkwjNHR4MpPV#r9FgoQ#= z1l!0+^PED9!r|f`g;)V{R|(_+2+lsNr9t){*`~(^+C7bJiRM^a$4^nTI10I7E|2pS zM#-^xKDkAC@%aoxJts~NQ+x(8=@|%HH&uineNmepX@t-H(QMaUq}prAsMYqS-f4dg zq~85!v=4~66SNjzuSc_;$+e%5{x>n`s`K#2XA+$ZceY&Urm2ZHhva-zeYMNsJ`>Nf1LdLg)ACMe>@{dvEsX;m&ZxXs{4TLIXq5IJUs` zdsik!p{gyRjZVDk!5Ts_Gp46EY7K9$MZ@&#uQvS9i!cctq9a z3<@gPMAgOse=v!vrPDA`lV*yXkEtv7uWiS7G&0@>avy|qj>C6Ptzy~GICtJtQily8 z>ci@-RmOgh4~lGH6-!74)12ss^eiu9H`O0C-pr02&q# zfQJoSh3RnwEa`PX5MmCl!a4K1qV{_DzG%vkQ4oJu1P)qq%1@a7EFPM8cW@)GFSJBn zRFO(%#Nt(gR#!UP-@!|ptPqau+mw0F^{gtLU{skfoDx))XxeDa_Xj(S(wVGt#>)3w zm^RTT!rB=Lb<@$2eS7Hz$${lWD9BW?mG8`seF?Wl#QA7LVX@1iG!vJU(QRokDPMvU zT2^CS!w*vbmO*Iu%XU2Mrb{Sx7rs&taJMdOFl(p^Ax~!@*-F_Bpr;Yk6b$ zwU+G7=i1=*wdt!WOyt`>eL`UtdG?b``m!5vZp<*5%!koR`KXZlCrU}QAwm#K(_eCN zKOqRi#nXn-1=&F$rWl4u0LZd>>UoP<`Z>)+-Neu5DAp1w``s?KD!p9eVgQ4dfY%(X z&$Xn}o_4rE{*KWH!_FD!9Bum6?A*lDm!qY~t%FAn^vW!A&s>GN>IhkpB0uU2XMOK} zM&r{uhE5jpJI{edH*DnxlZ)&0fTJc3!lvQ&JN4$C@EA{@EW3o%UfW!G0lfnYt=F(p zF+yVa8|ZAmno@n6q=^}+%{X}k({b9p0)(NYNbooSXPy?$L`1B`6WhoiStUM}P>vZ)+ zt+Mr`yeQ{G!N5Yq!C5wwlC%hOrAI_;HE#Po2@mT^4XDYES9RS;{q7c&oZ9@Dtnz^gD~&cb+JM3rxCz-A2@i3_$#xUPqHXqLws%i@@wtEznwXIGNu=9gx|&Fm>TFktBC z@$&qw$Y5~u8LA1e(}M`Whf)0(x%RKu^q-~1OyyGrL=~iWt()bEx_LN&QM)=X9npeM zW95ykn`vRdEM%j+)f}Tu%H112Q&J2O!Nke`%`+ z`t5dB`(c*D1zY!R%kyD3&rcv*q$MP*!5lvZR*G$O5bg{G+5i(`XbNxwbb`r{fWs8F zvMoDK+`N4dh(n`@K-wr&wMRcc_70+al|dnNMEW-5jtB{Q>iS`dibrx9GW6=&4iW=- zesw;?%}igMyme&lx{i*?@E(#PSC$C^wv7o=+So&Xpv#RIT`^KfVEG4rKGfyRagFbS zUr7K{DO{VI$!K3Lc)9akpnyG~=W1jipYqO8f#1eS;zl*%f!g!Vair8$M`**_jG!_? z+$Ueh1Fb(>;Mt&9O*DYr>#xv5HpQ~EKa-1PH&anbDMzW)?{v1Nq5HPcX-LRKn+Doh z(HAT54?o(Edr)|GQ=DKB64t~M6*aI?#mW?=;Gf0?xl~_7*96nXVxB2cVraw$M zzCu)G!LWKqZ@WNmd1K}(k)B`w5Hw>2MEY3ZAbq3gn4{oVsgE)Q47;xKLz6pshDtd- z-d1UV69u@}olXxkH4>@B710I&>S_kTVD@2W$X>*zAP3kEl1pzlgb|9u?WNNcnHtYM zgm5#IY5Xv%Z6Kc2Kug zR=Fm#;PN#fcjwz*ktL=?&fa$LeaP)GL~XSTSpSaTUo}aH4K(pMAl{2g-UaN-8C3mb zuTFhK-!n$$Iq{W5(bL}s9pJO!S-k`HR+9Ibr}PQE+meFNz3LljAd4+dX2xtQ#|Z^{ z%(uM`s0O!FvvT>;>LZ$+#B^3AYWAvLa?m9xM}bi~G`n<{_=ldbr1B!_>9)!uGtv04 zN(D7plY+3Qj}NwE92XZ7C)P5zpP?~H8l8r-j5X#@fFd_OZV$&;vzD)x`WcO*HPICp zpEd9XqoS)k;RqPhs5 z9?v^>ELy#BfX&^~st9pPnQdjbrwcmA;J>%_eayWX*l7+3D1A4i$XN0|_IY)z$ztlZEp^J$hD!OOB5bP9v}d z_9q!9%ldAO1Nf6fiJHALK4)n0+8ozaevqlw8Hy+3wbGLcT+2lmSLAM$Y8+|!fW8Zy zrl7(ZvmZrF+%?A)RUY$K%r2v0iSC~4h)Q0vT<1_mqBD{D-E)Z9#BGa{3+o0GN(w|lA zTiV4=d&G=Fs%5Tmnx;CCKfOq(27_bW9A5QXTM_EQ%%6*`{0-Qz zb}m!5R~{FwuW#<}A8aE4#nw78q8NqRFebT0p%IE@*_u+_a9$jF6J2dqVk_s%G_ z%FT@IRHdnNhLbv|@=Zv~?C)6`_@WuhRTI(>JMPC>yk+iIRb11AAs{-|z$jLTSd);R zG`bDPs>T!dU}s5o>NXXkj5t8)*ElcPaW6hU7KdRTjvU0aX(miBp1Nu@XJ|i52_TgD zS;25DFUWq&3L>Ci+vqNCy~}7qhAU`u6qO2Y!>->rQ>PM^ed;^t&q)zB*JbN6#ghUm z7lNXk#U9nmQ<*`CbZv|q#u9m}CBsYE<$=Gx2`0Tomq}j&=@O5I2b5fWIR!j{w4t}L z^gTb6`9$7O=qpSj$m4&(w2u>Z3wZi0jxkoB0C06!2A@r+^OF=63luJZ-z%mI`)%B( zC9+>94v?`90MFlysQqe=**h8h>J!V_SehBQ{XU`wfRs2pgTgw40+#csok6Vu1`ooZ zfq&EV%bVT%MJDli%NXAi7Y6nH7na29y`W-#4?!4|iofj*NW^#FpFY)prsF?c>Q#`|S*ju8 zXJY6~6SxIE10aa~8rAu0KdSSI@$pvP(Pc^wvSJw51&LAd2zd*cE`_NsnV+I+jo~gV zIK+$LRmVNs;vUvcaX)T29Q1X2{{+zml@W~CX$zsTH2^=fRVdh&;2sZ(-QH=X?b>;D zgKxfK!maac$J2+G@Vt-ou>n~_p^G>LN)oErit=fPuORrc#Q|T;))m3TT>;hdMHgUF z-{xWDk6&xfG0@PdAW2hYMQJ#vL8R3HB^-p$Xrf-kF|{Ql&8Z7+OD9!!zK1RxhlriU z7^9H$(W6Sj3;3zOsQh@!UfoS%EO~g@1O;tp?^^LyNg|oCJY~ZXdyd>5p{UV?xRy!&eer#Xbr|!Ik zGyE=0sj5YAb=nzJ0GiuHGP$mM4%NPL2S*<^$$WSgYv}7F?P_RSlDGNMh31=e6#?a(r|7I>YT~}$E1>E=mnX6JCDF}@gylp~HO1+3`>Rm|xwR6gCZqn+#(b*G9 zkkp-?7m&2ftTu8zEL0HA1b|(=7{IO`p-NxJlhtV8_AJYOj9fKs!i_DwPi!??gNWaBgp$P?z z4f)bw7S?S~H{vX+_!9|Klm{J`-lprb7S2Jm1evQ>ZF4R<3OI#sc-FOxw-diBywz3# z6$DL_+Bc4vw@n$G29N6e6ssQAzze;AUEtMgvGs&u5Of`Ao*o1%kpnH&o}((R{}C4R zH0WXGs>AG}6#2M>Q`{ycQiuYhLWM@0Uvhmxw~=TRz7l8B&r#L3df-%RGiAmm#R(oU zvuTv@Qy!Y2T2WoBp$Mqxn)6(rks-~0l%mG#N@j22tTgyk9MATHPGc9w&cLx5kAF9{ z#2f6pM?Y+fnk?)B-rGl>k+S=5$)WkCwBl^H-+LPouLi+g$_+AT3VJO~y=!9Qcdhuc$&y+z%# z=Bf6%{3^sFc4**~fAV#(zaYp3NIO0(y6Io<+k{pFP%`sZDF&t~k z`HW(eEnBR9^6|$dJf`CoorE@(l& zFo(`k#PCuKK5x&|5t7!yOQbD;JS5?eSt@&gxqa+z=|CH0>tBW$)?6I53Hd=UAsQ&j zY#68R7V?Bk6uB=}P|-=i9B>t0frm&?S_7{Ke(hH9dpEFL?$byHAT1359)NS)Z`hT; z2JzpUg8#N10^}yhc@6!0 zzbx@iNq=Fts1!japWOzCg$hTAQ=i>FKC`8cB>n^`6$-_(ru!ST3}9-%?5iV}Wdw8t zv?T91v?Dzs6yYbRPZTkL5A^45-`UJjiXX^_58nau@qg)i{wZDktLYc1eCRM|jP@S7 zoRk-Wz|T+T%bXx*!Wcv^jxByl)X)N)L1Jc_Qz>h?9WopjyPx1l)AqRGF`H_8XuHqe zbzk)^_#XO|V(IjDc(M+p-{q@L=hUmmL(I>Y%jC@un$g*Yjs%ku%@H_vH*;O;n!y@w ztx|(ui451GJ`uba&hO-e2+*IzBpkQt3}T~g8OaX9T_n&&^dVft(fJWda;t~8+kNI) zr{FWv8$v6gvrQl_a230iJ6zrM93MvW?~(Z;7$HGRY$&8k&rC?&V|>oWd|Uu5!msT| zk%yPDd{u{y}yZUcEyAvwIp*w&?D~C`n74a)xK8ome^6V z6yX5Bb%9IP(A*2$6)IyEsI$KqtqkOBEwsQA*%SuV<=ab2R3&Gd;>#F?q%C4#) zXp3H)FJl_yQe;Z=CDnCVy^IH-F1X!qnd;kd`ZWD3GLqg>=>}_7hv9+4%_a zc?X}HvqG1miA<4qRfschOOBId2SDxK68kt2e(yBov0(V#<@+Q{;1)8FiBe;~u>;(i zHiHc!vuy@4wWS6>Mdpe_L+T1o6Y8qgL*c5_Z_&|BoimBUm0PU2kU1V(YC{T8pJcA- z&l_@A)Ef#{+}wD@^4hKo8K`O?xI2U(xVwlT**gp%%-kwhAmwieI%H26o20|L8t^7a zp23&MEz4v%UG#N81fd&UXl_d*+S-({wN{xLAb?ay-J#8-4jwK7S#R>Fx*o)1+LG_Os_x2UR01N5q*h{)AG!#vI) z+l?6&7)!mBhG<}ICJprWpIM$RL{E{>%aZRkDj@`gOd__d%(9kSR!Od7Wf{yInK12( zN)#`I%15+$^&agCIsrFSWIgOiCV{xhE0EOa@ZeRhoI?Iv-gc8yX!z0oIZrGqS& zaPjkysd8iZO?YL^W>Z_Tpu{C?6{-~G=*1687bgZ2RpKe&=B%@SYRV6RGEaj^eE}A%g{JT3I)0TnKqWoL&zrMITGVn> z7i;JBsIda=MS2p^L0Z=8vZmCLaO^z8GXI(-u%;@^7#n8Pu+-Ezg;(CbrUga% z6Z!^8`J2FVMo$njEZd{thuQZv9?G%EGx&?bR|cm}4+eY#;^#p0g968v1W$x0Wbb+Z zb08CF^q|IEgwI7a;|9rbY2lFW| zG0HJuiln?4t4SJQsu;WC4T3?(DI+x_wJ0emDO*;&4#Btj-irtu4cuo;0glaZ#9^G@ z+1+ly4CIX#XyXx!`IPz1!6W~HH$am**eNK%sP!QR-+S48LZ;=|Zj-KE?&t+J*I~8l zQg{k|d{(K7s@qVM87Td1UVOhCJ*~OrP^}6#^eW{MSk2=>q#ZE;p65nTCEyDIBgc8> z%eJ*!(YP$7-`Iwo?oXb(Km{2 z0x@!(75f5v&PzAD?q3jl{MC6>%w4I)#*(ku}XA$uHl{N^t1Uc%NSsNMt zpJe&C^tWnU2rKMQmcOzKuAn`P;W^^p0+3|`p>D#(5#sIT@42)*HE+e~ zCCI;{p`)RvpsAvz_@*TKMt=N#7j7a#l)3?M1vdpqa>Bp6&Hdwp{6&caW^hTGrI_>a z=}eI-g&Klj07@J+XZk~?IvUOEcM02rmh5!`FF-H{ix8sp^=#OSa(b|nr(D}zBRgxH_ zWYd0JOS{~lp88{SVbQn3R;#3nq{}8rXmJVG!%yFbm7&Ws*6l6l$Rz+;{EKBUe)%KE0r+5)Lz~#5N@S;O~!I|jrEKOWo7~R^SvuEyzkGn|9pM-wFvQG>;)+c(_Z+lQb+^NX({h9MSCoxiwgK3ton~Kz-zD2uQ>tGszj#GcCrhumM184~2uTj*FPUq`)Kj$FM+9jL z)#r=kkYD$vuN6Lr4XOI}$nnN*dzu7X1X{AafQZiSP_eSndcmR!#Czykv=9F!dTIHAYg}@?-Bl4vXF^Sj|dmBONpGY$&GFg6R7 zGP)wV_|8F=KkmsS0y(V{N_~N24XED80Jx3;X6>$6tV(sZz5SnZp`l3lVMx1sWSZO^ zb}1NNdg2nq^IQ}RsB3uOt#^y)j@d=XHojP?AHc`FAp*!hgDA3+!v}2FYCa}r#Rs3X9d}5V{GXMvaYf2dkc#kc1&rtMj1&cj9RDX_M z2+Isz#sKa86Oa@C+mHTFlKW4iw^ULT{~Wyyd@jO+BX_4z!31b-wBng&a?&{MyN@rj zGnvw)dOQCydi(SF?H}7hH)aL0vbCX9@L>cANR||&6eV!O0w=JRemjl0&Qjf*Od99u z;YHtXxP-B%nlOM%6^0y^(fQ=7*AYdjHh046a3}!VaS&GK@K_W2zPR)+TPp{NsL;z) zyQ!MffoP+!-p-2kZ>l11F|1 zXueb#1p}wzV9U=HYA;#x+?|OC%SM`6&nBfzl3BF-l2S;Gv+0ayu(=S5WHF)MT3#fI z^-5sfg5~?@hQ13f58}p;o2&`ps63H#OkQd2e%eFcK|Ed{)#CO0%!_Q6|1+vTK}~=} z{{}vu`Gk<@9Z#)dioj_XCKSGatjob8y;=8hm#g~q%yB}JF^S{y}nWU-eSiuiho^XcQ)glmZY zLA>Az!;Q0XkM_&k(;uI{5o1LWMj1qr^(Bd;6}aISXSHC8T(?-f3CWm-vQX&&|A7DLuoi}ueLdb=33)5b@Zb6vtHkrCKAgM5)4`yKnv zW9Lbi`l`Dnm6v*&yWFtm8C!rZ5X`@i_SY=Uj!m*PJz$mA0sij@rvJ*{|5EggD$m|n zM(FR-4=LYAG~$ZPj1bk;;l_=c3PV~-so2OPrP5RSlT@8D&!n5@ES;O`;}cx{z)DKM zA#r>lcLGrX|Grd~Q;t*iiu#tT ztNagD-@28~2AtNUN?ehnuFe)9ptqRTI+cY$s}*wfMGGD|RS7l?rN?qXrO6i*&ca*fi}S%W;1KBf3YQ#=Luc_6P9Z^c7iBwv%E|9|YgW0&RollEC@ z+gWMbwryLLwv9^Lwr$(CZL89(MCI($J=1ee-~aAj_nQ0RJlJpG8*4}WBCbzdk(+Xd z1ywIIGL}qg&B5fXlew$}R-Gmvy`G{t^&+9bwAkS@WgH?)=QF|vT@D2BdNNgPJP9N3 znWVsewuOpsc@{=4_%xL>>wabo9Mam{2$iAEWh#9r|Fb{ev!l|h*~D5{b}G@*IW1mP zV@B&A5~W6A992-QE#6!u_x+cSBBPO33!CQLsI!$?s}k{GH?R2HhA?jA_hC(^h+kV5 zt$k>C%kooaCY_*XL?7Fo%YuQbCZ>MeWjv~~Exz`27U0O0r*%sU=KAGry`cqnL3upNwdC>B1(D_sxyEocw@EyzcloQWFs zR2&RHvO6+A`YV)lu1R^R`!nin&dK^B&pV|r+2JX0Zy!CF@9=Hy-FK{BlOs3amjf)U z-qT@xjZb_^CDBh~GHqVE$bq5D0ybHPno~-!7MT~ZJ^9zhKA+dfzQ)(esNVX7UYM;| zLa69JhY9v~dwmKSLMzkx54sVLG1phfEufs>;-TcRmztX({tI(EY#UbTA5BzB-k)HtffeH(XuuK*YpO} zV7D_e04&AU`_GjGb5|q>T&;K2gjek)TX9nED;^v`rjYiGXVaFCgZ;DIuqbcXR@V%2 z^(gM5!<7~5rxKA}L8$^Ojj9jkJouK4*OOLQ?{j80bsRN?m;ndbg);`BiIN4mD4vLdetB!i)t1Vj&w=;NoMmh<4d8WH%E7Dx1WK*g?XdMsL zKi&v~be6;_T_rF<<7G>5s*SzT)xFQsHo(%Ed8aoULxA zr07DKE>%wn1Z!K) zr^vu&nT46)MO$mRUD+ifdEPa5h&*^)MW`osr<*-nPDfx^6KPj-AF z3i6ia#A+I;*FVJ2APm`>yJc#=C$WLk;OxVgGhnaqa39xtERNIlz$1LHaGd~6X2&Kf z#)2MRCOm%Wf_8NN?qhTl9F&?5Pvti<|Ak8BH$IO^p4IbG#xGF$#3IEq!i7#S9q5M) zZ`3AbTa$oBv`R~KzsEExk^F<$Mp67nL7@|nBElp!gO-U!5u?zLM^q!}CB~@EB?)xJ zw`=jE3gs|2H3IcKoHI`xIJ3C4y(i$MM%~!_9^iVf2ap(dW8SUYJT`$VP*%1-SW4Z& z8@`sU3fe`_GzzOCHVDn+<=K~I2D(K7FbnfD#!Ug>TI?l1qSWg6aOFo5>!CBa67Qhd zrkHVD(o!*v#@C24N>-GKtZQ57uy{*h-FaYxKDA88=4e6awy8+O!;V zZu~l^n{Ihy(;i}*HRU^zUTK;d^|larc(7vDM>pu%8pJ_(`v6|uY^i9)Gt}qVNW4?U zaa4MCa3(ocMbZ{A)7qcbUI;Im3fzcSNeC~}5>!vSqld-Z)!kfN`shlOtu5+7gFBt0 zI-KKtgDA3!eGu>c+FPkHrQqmFx=#?8n(kjCUgJZu*kEKsvgt7T#bRVu=VSz=o+Fm! zSbr{RrofM+*{6!u^~wOE&W!lk>+9b<694V)El?+6AK){_1N^`J;{5yIC0hAi zegm-dOou91rL1`BeF+Ltwltb^kOk@0mTq9IY4nj#`6yMfma&ljt9OGrQo4oTz;CI+ zDSts^!a|IbjLwrFu+JQ#N(17!idzLcM( zz%5`rD0Ren1P1B?j1fw(vw#u8@FazvX#MD1oYwtlSR?N#n&h6htDjk>__Eov+ti>zY+=Dk$x76S#f6Wxj{>+|^Ok3txYVU+?}N{9kEKpmNRO{TKbc*7-q-#_ z6JU^Eq#G*1oOb9WiO9n$KEN@S*(ULDw}^(qlxnYQH;Y+G8Os>yj$mGoVU7kxd2FH8 z5fD?lO4dt<>q`AXcaRs;>N1T>226OcsK>??>ZpDIESCe>ub8H;lb_kgb>-T+=1ZrW zx2OhX*niyA>F^%2mdd8VTROGhuH?nYfsSIGd~q&2A0TyHL|vPQ;aNg#f3=-KRtrD+ zAS(wgKCYN5u)O2abUwo6%OmoOX)@D^8#8DTuh&BQI1e_aISmFjg;*r>5qskn_qahf zB_0y}hDHt?)wJjQQ4`MBuh}6)5@dxjPLPi$Pk}{&`V^!jD8wjFfkv@(2{k|W3Ny@` z@2pVI7b{GBIvdXmFI&W4x_da+*OBEQ@%ZhNc5#wgy^YkxdQswC8qQsbm^>_QFiQADd=h4jw_w}!u>Sx1!THy~NGNJ4_Akr)SitXJs%HQGEw5ns z!^+UigkHqtKbXXSpCS3g3CaUAA_nVguApgviO7?Q+0|vRFz&FBw7D}R81UHBce*HR zXg8=J`=&q`9r)w##WKk)!;HA6r_Q{;m1MufwzB?o!co~T)Dy&lQ_lc;25tiW#hg?s zRSGK(qHMgyW5R>Sr}N^j&qq~V#q<{QAr0IUhoIXUk+dW8b1L<@^4IC2+UPsC+hE>=mba{TUq?r-`A zaGm_mg!_0F+w1e^(8XugU^m}~$p87S_pTF!G=Q-#C-k>(Z2$HA>R-I;-$z>6YF5hM zRRK5DB-e~Jt&z=XHRhBe>&k;X%b}alC8#Chpu>nPbrKfa;;au$h09yN=Jn@ln_A-H z>lb}5qWs3OMqjpRK&;zb`G0Y~=e)dir8a(jysR>RyV*xT<9!twMhroVDudkXi1_}h z(l3iPjTwz-BGb=-q6~1(Q47**Me{}<35t;Pt|>rMHY_4e8^NeD4_Uvyy_{q)O=rRw z=?bV-ajq+uq!BTHX^ya~8|$=7Zz($9_6F=zgJJnAjI`^g0G}?Ba_7>ZJ&fO_uh-8X z@hFZ;b8^zm@fc~9I0+NXt@aWi8Z*(RCv?-;x76;EOVXn=RYx@8`q%UA{w{OzTNB5o z*NidLVsaZDtHJh2ml>B@VVjK6YzSE|AzH=V982h!4_x}K%b}DjaG53iXi>;xM}t9P zC^x^PcxD}DiU2QbDwmhdp%%qTtjSR2?Ko2}OD%6EsEzH+b@@`G(}2sCkkvGy8oE}j z$Wz^!@6~c1=kyRtm0Ql$xgj5E<4&S&k5aYISPIlLXCa(fH92P!)nR zwp~_5g3H{RNe1T@zZy3p4{XzkxuZ2Jr5*{6LXFMW7m7`{Z!xQ$&)GDOnIUHu@?1 z8+iNs{@k*^AkgPgoIOrV2$Tw1l|@^qOH39+TZlgDN5ww-hc8!@N&b|BxLbUtre6FO zN__}8i91Izu%zEKjy8OK$TN{vcRKSE^kD+Z8E+G|Tf0uML#^A3q`s|rQ{WI-O;(NS zMgz&^Sk(A-N_ktx+Olx;m5sE2&ZiEgN2(&pva*U5Hxb zpL&8g?hmw}^b4Q6!o8TlRI#!fqUQ32Svxm#>QQQfRua1b?x4OZco91eOT3@~tSmNd zosiBXU5oIb^CDK2J<)weMlk)dL3ke4>bEtcDJ9A4&Yxfz_<7oXF(zplQGhajDm;OCK8mBe3L=n>JmGCW~!Nb4YcMz2uv z)9KX_BiJhu^POE2i+QfQX6SJ#hx#&~i<;Y5rIX9Z?kOE5J{cF^?vN=p5QT zHN|Omo$YnGT%v2{j@sMXc*+dfw8cJ_ zdit26=!7p#8JzmQ;hraJs#7-_V&}2tn2juWG~`I*D}^|7d;^u#U=<-8wZ&2@k+1cD z#R~N-o}6>(q}7`4aO{rjI|)|3tuA6I-!m-Qu%#hcJosg`gzfhnM3OieYkob{Q`KGc z1HB`L!U&tq#oAC?9G#oXHJ*ec>q9HG#)c`EV5dOWa&5^1JJ~aml|#@~raMsT*ttVy z>e-mgWNzTXm^N$1jMe;k+ju%>#aHw#fcQ>?6>%yoR|00}L3LP$gXkbjgY+$Ijn?~T zmyj=V4#FObkkL0rD2#|3NH|WIFo-ObzHsyi-k>i9WDT5RR2VzRr#x6nX$kNocZINp zz_$hQJD7jQauCz&Y!DDfBY+n2FQLnSuhIY6XifG1FlV-FE)3#<#_>)mXfz=8_+7R6z&tWY(#* zjAf@#JookizmipPa`8xfpGG}^ha+p;Bc7d|%zXCC&EGe*>&dEK-6Ry+sORv5 z`6&`F_E8*QA;iY@hP(CE30LUVRX3cr@y-?G)(d)D_|nC{e%~WfU#VI0rNg|dmF}^4 z3;q7n@8lg}T28wmHElQGBB$carVo7`LL6=gx60XoX@Y5Sn1t3^nSp30NIx~cligc)Y};{0yv7U$ET%V8 zs0N9PWa_A`um{o9=gTd#%qeZCz%w1fj;ow@VwqFwBwVqG+MYTd+c0NYXhX_Yeq+FM z9hTlH)sA>0aHHzvb}bis4)j2NBRU;Rm{tWr!4lR^>TZ@T+GN<7w&Mw^jo4(}KM|do zWzLc=-elDajrj$W|105#I!IQtij^B4!S65e=udVxa9ufnooW@=$bJ$TW*Qt@BImN& z#LzS#Sl<4rHC}DmViQgpJlmhnWr{9IzG%XamxPWDkro(*yt2riy>j{>O-x#yQKJUh zaj|sVyecmcQUW#v4OqX7FbBsKynv~Q0E&ft-WCJCaCM;-H4As}V!mdGnuRIm?EL4q z!4YQX)qInwQw6-dQE%{LGZA)tp=nH)Gq^|VgitZX81VTV!d;4_eNs3(31e&l!h0}i z0dV&Vq}N&rwz*1{TPa*0b&E{_KkuL44*C5PeVNAshLrlmAVW&jAr~rL;duMPHoF=W1Whjo2hW$0haP1?hZt{F%C z#p6%eLk)x+x)pqHH_j z(uK*K8XZ{v%}#CUFFUoy4nhI^mMRzsx-Ln#88qKd00Ags;%i3`@brd$_GBFHB&$ACwNQ)$x%8eYS<#46p& zt<}BEdQB-v*!O#l+0IO!t%@&~CTfs7lfFx{ll(1T?G(o4xdfWW2B%&a4NNd+#=LJB4=>>7`Kr>r1?^eG{SgI5UAxDplIG@7R-!_?;!_3 z8v>RsigY|h-9hgVG=E6{AlcUh3qm5A-J$aRPYVx4AlXg-vo7!W|3#MvV2S^NlK(%g z%P+-U@%_)byyM@Sn13VW|9@TnztZK`9un$^d>yO{CE6E19Xp}$NR`oA7{V5n-1Mp~ zxf7gRrz@_wMU*f*h5ZBMtrzo=oj~H*p0kO|@}Gie23soSF-<%A*`Q-Z=CP!Vjd!W| zP=`kgidqd#A^Lv74nonRQcs)p-@(&StsSh5kj6Z;^)b?!-Rx5d4^8gBf{Xk)*tmGZ z5tNfYqg!iFKexg`X{*}98*Ocytq;86s4*1lf5G8zLSMzIaYbA-d%FBYNZ6M#gPLqt z{gkt1PBp{CcSf4NSar2R1LJo*do70;{!!JpN0B#X-@`2QBGi)g2`mm3a0oO3ivcdM zjhviOcODRf=NAbj+$C=C$aK8VoJFOS9y2F9iS!IoNZ}khMpNQNx@3h_Fy$UABT-EY zc44CysJBa?^4nRyL+MdKsr#xhc)`!P5rn_>a-om;d6;aQ)FWx%K zH1BrYbnR^U^_=3l$^IFsB9e)4g>ONrRP08@caqKgp4E644};p<1hO0Ok@Bb5d40%0 zs$p?vIj04Z=$i#9IeoF+yl3EF-|kDL{5!7WOHd$j2Gs3lh?M+mUVL6NTb62Xdj&rf zLcmb+0j^kkw^PT047;CwZtqzN6&e?^iH;HVtPGJ%t7yjQ12oFPw z&ZyZ>wLs=wpbvkSv(2F*S%Lh{co(6#0FCEfhffzMzEwTPrUA`1Peaa?k@k|>HRg(VS4n)Y2CowpT z;$2_={>0CD-}U+O_66b?tcM0$CqW)7UmJ;m^gx1!c11%)OM*N?atT2f{Ide%S;Bsn z9(}T{x^3-FSJ+|&#u_lxezox{fS^Vl52`3+^*Evcj}oBEL(^=Ka-@&`wVZXOaT0xr zu+Dq9W>6r}lml4Kn(!6@{zpnI!bfYP8kpYUB22vBe;YRO0_>H#0STm;!t4_ zi3zkgj9JG^ZWS6*$%m_;M0h)A-TI{(o|rFm z(xc^ef@Ggm?suS~K;3{Jk@aD$m z0r_8UfB##b;P{_)`R-(CI{-;IYL-tzYauD+!LN;{oNQ4tzT_;eTC{kDO@eRzbn))D53*) z;&R1{`#^&VOR{=LYMF|iErw1~MFJ`#A~c}?4`$TGZjruic#T;Rbq1FGC)M7?P|^wR zi(DJMy<|d5VwGSj=`18(xM`WT!_Q53e$(%M_d_+Wc*nv#j}-7c_W0Xjm0|sEl7&~+T&!qD(Q0&5$q zL!+M<9nu9v>rpEhej-!BW3?%-9!;FAi3ZMd-3mDVvh!)@m$uZw#+2^TI!W_d zdovZ2RlqHg$--tElwhG2h=pKe^3F}jpRcp#BmE88H^LpOGvUJ+rVK8BZY=|oZ8kL_ zwQ14OF`M^kH=8uo>g>0q|Hvyy9MgaL<Rb3AdMEL0%Axu~see(=W;nCTJ#Y&O zcB4!=so}OsgymAHrirj1&_Xr(v!C@tcht_-A*LT^>zlx|V2(2$x`dsOzcW&bgq>h~ z6X+zMPy|21Z;^IGyh!5r2``A>raeOOkothnN~#;eW$*uuFZ@d{!E^GS+k^e~&6(=I z;}abJgHM>&gz`o`M)Qj`W^QauG?r}em*fC;4+4b@EwDv}10qF+On^jQa%toa3ZAxI z%Z}cwrr3Geey?k8-hf^qP4--FX=!<`3+>kS%6+b}5!`$+b#*m!Gd%=X9J^^{e(1jR zy7}69@3AAJ@46dO{#J*0le*{F7D(?VWsk8nE&tNC&(xMm{~~G6-z6R3Hs}TFUJGjL zp8M@4wGRY8F6>hfiVqb3WD>;tci4A6XoUO4QIb~<9+Cla5_e2IL*iWHiBgSoMJU%n zyb@lr{?dI1q=l+h^&mw&zYwrogMJ@mZ}c4F9c3b(=_9kWk1ELA!*?fSZ@eCY0Sr-h zy&!tV^GW2cZ~F0jmDW$9D<2t<`lom78lRao4+)^V0d~^2xGBHscJ)o~Ur1j0J_LgB zrEZDcv*`Iv@8wBeDL-Ta)YG1!Ke8-(4`p619}-BZiqgF1N`m}dqv!31N`LPKk!Z`eM zCrD_-G5A#_0EJrKHUO5?_a2fWQiIYc`R6jS$R0dWcM@fm#Q7jLl9gx`$~?JIcUYoG z7EJ+>QD9g!ksOjkMcAT97M)RI7_&$g{k4CrP-|C)hz zZA#b>_$Ja&UtEPvOrt<|zr01f`DTNJMC8zq{vr5;at==9NONh#i43z^VTzlmP}P=7 zo0vGQ9}mB--HqyK`B>Ig)*D?d#I?DGGNl2E%2rDxe%koK;qL%$k@Py zsbuRY%#37t^1&bqENe3`6;W)gJh?X5>9VgdHAG3+0515xY-pYa6t$|Y#Y;siGf1k> zmi==ps{Q+XY;=2!L6hV8Wq8f7t9^7>vBRc7W|M0H)jVm$gUR;Eu-yBWK&KNN2%Df; z^oPJY5@AQPtxZ2P^US92n{j<~c`L_p=!DYJ9@-*>a8*#4@Ipr?+c4!3Z$+@=g?gi| z+#8}w8BD^XN)IfUT=$fKxJ}%VQVHD?EE$kCaKgYs$Ig$La$?NJ+JHNac~CZu9}lE} zI!$zfD@}g&vjXP~XIPa}6vpR=q0hO(Rx&*wSRBQ5@S@5Fs|xuxW`vnrYK-vlXpgwG z>5XXdi1)!+m+Oy2)7(T?5L>cf%^d&@!eGssd|lr1FtMR-;YpNfQ6VW0`oH$26h-mz z==XigZ2M*?L?Yud`GY1%ssf0~q6$V0s1X5NY zWf`3KdLVjKdu|jr1)m|5c)^8eQ$(wwNYJjd^i)W9%H>}I4CN=wRpbe>!=; zX_LuoiOp8ly+H_`Tn+BIhP@5|0?)hnk6rV_RcEcIbpFSukD;0mH7yz9pWhz9=IPaTB_G zk01iubhn7)m?ED{Sy8FhP06f0{r8c{1)0xk_$Y@*2?kt?RD-c%K>$|RXrX1Cr_9*5 z1h=C`z)Wk!+1r@~Xj-eN=3LyIzDX@_U7mdGfPx*(@Tp>R3eo0x@*2H$d=3iLon=Nd zRkk*I-!hcw%#-@hOPA)OuIMs~)tLqkj*4V(tAdXjP4Y8%UYd2abA+K*e4D9BUOw^J%2MfON#pXdnv@;)#Sq~l zNDrj$3+bG=SY@*G6D)^KSGzNlaw}xS?3D)ME3x{OkBQyIDd=3l>KZa?CXO7gaX+Ii zS`di?&o$IFSKKeC%w`Syc{33T+3ax)Tm65`ld8MnZ5Ux&H3$tk=K!stn#EwHU1u$gb*5a*J|Gsb&=kNiEazck3`#GjIR z2v(lPaq2m_xjFr&BYn7u`{D-U#Pi;{Ocq*qmAw{}nz^fhqdhx;D}Q;c$(v+0zx?)s zJIXAa!kWV@Jd^VWiSVVrZ2XzZ)GL&$2J{_F>g@|Oqw`gbEvull6$Q7)E9sH6$QxV- zJQZXBjRA<{&j7r@OSV1hHg%XU+^>SmW|j;Ix1!EU6Z$>dJ^rA}y*JoSx`vZS1%1^b+#39^gC{aj7ys66&=oeXkD-wXwbkiR0^!+}{}XfqphLv#eu7 zTcQU`w@~YWA?6fQfexT7xiDHwzgDK0Zh=^i>6{{jG&edg(({*l(4IU&#i6*M& ztDHH>P0w)3mXBpRp_aUZ4h*lYQ~REH4>$j68Ujj2I;^-N*DRwy2jXSE71~ ztC)(Tf(Od+=sybfvL+*;J}B^S(?)Xc)kd8c?UMl6!RH$H1)6qF3!TP?dmYvb64;@O}qB+ocV%bQ$SS45Cpx}oH;5g#`Z z<528qp-07SQ?6qwd29$nnK*G=9Na`fU$kgLnC(EKata-|s%qRmZi8l)qE<*9eOzMU zP$TApYSLOQrmktZM2%Z>`yiyF%LJK%GD7i)*~J=>H2QFxl2GcCaxk8lXJdxCg59Mj zI&-M%7;K!dSgLYzSLQ3WZynewSKd%uyde>}DlsW?D4_VGs5pgJ@1|Cnhv&W?;`H^> zqapc^q_tb1pJSwwEN8}9<=rxs3tz5Mt&9>`Y5s0)8XgM;Tm%#JckSd5;$q5K-n0^) z*_EVIe5gx+e-ju;OB@~Md!4%mf}!9hp>>}lB=ur9>#sSEBR9s3XK?QU(q z%8ulkD+RA_*kEl}-?Ad#4L^O`jQP8o@bR_~Vt<9MKAo;UUP|)}olc#KpDg)9wr19b ztU=Iy>e>WfO0G5KSDDti342VR?2Ps`BM^Om9!MF@3)oq=Y`F%R4Qc2`lpUP&BpXUo zuq7Ny-)le&Nmno=wEhubKuD5Cpam&O=3dQ}Ay-dT>>QzLB~sc(n*`$$VVrNhN{I(! z5-Jx@n-u9RRUGVC4|p#Hx_QcF^oe4w;mmwYyVcvjiLQTjM?65=+Kd3`gCFj{qsjj2 zj#Mm6{(aWl4In%=#ZY-8ZLDvV@X8Z8pb#_27!mF9e1Lt@#I@LeLXkBIXsfnh#P+3> z(J;@Y`(EH*IB{Leyn(zGGPP5WFA!J{Dri}qTx-1i;x)VJ?yU6F`+Q>mIZ6Sb>u0^} zaWyS^!VbZ6BpYd_BUmaIj*2uBPuf{77mkY8<4%HEG8eolr_~p%B^zm{g5`t^RgAlCz85xn&YxcFVlwL(~lt& zjMLHC;oyhuT}JtCRe)IAiYq!TvrblFNXGgK^7b2_Ub#~jXd#|ZLd7g1_2~k+WKZIHHJHYOK;d^6S;c<4$cm$8^UXPkcb3*Jj@6>tsMV%ti(Mtx zf!8n~2z#}&p2&ii?*Dk58jM;q?o&7-Mb^&Gul!woJJUkvdyfACGyA{sz4&Rl0RhzDS%nQ~HIaUNHgGouR@p5}nYuOxBL=#)jQr|pfo#I& zgj)@|uy7dszEGx}@{YK?OsA6W-7P1l)6c^vxIRW~6OA>Rei2z|-N}?_oA2Cgu2>cR z30N3R&^Jr=s9;#ag{2E?$_VwRFLtxsIbXtA45*_*A+TOB66_rqO2$It)DVV;|$Yd=l=8A z1N85W`~Znw9pJ$6U(+@J>e>G;j1~Wb?rUpGQL9t1FjR(mqBEe5TOrC<5I|KtY*-%& zt_#l$4sf&SeusF2`H-^mkBX9eAIJJiV2-)z)C6A((%we!n(0YB?aq0)-u?RXhy3U1 zZDiC#8_6M)Ug{h@@lPPEKnaO9qC#wSVi6DF0ah~jagI=S;z#V1IM^Q|BQ8-BWy2bn z?8Z?)Sfauq$?niWm|Z7ve!_29cR{s_^hq_ ze7u+F8vYS!L7ZR@XUJ!KJTuKYY&L6Exyf~TeL`{smZ%3Y={t0Z0X%$a3_#j>hTNg* zDK3MeiV8mq_f#J#&IHI+f3!lN?iO4}VZt|3R=nlxK@5WBq!iP34ea3e19y$t#l$Smyci{ysu^Hm-`CEo?W#QiR`mk^N_X|#u&5!a zyEiaDqZ}yL5fjh!TcQM-4!N_Vv_9KRJ+Hl?{!#531@{bux#aU@?LNIgVNrYWUZ31M1JGtWta$p!8CZE25^- zaM2r>M^*94Jk}yxfh`bzrrmoy?h7V=10>bTYq|iA4qjW7fU<&SwQUgtt``42E}<8m z`p8FRb!6#<38RWP$Yr z;^k+as2MCjX7~zW!z&w)f_YxMrH$3DQ6>t@(uf(BhZ<=A;PqE>%{)LPW}l{1DqHau z%LIKdl$w3wtlpezbL@ieJq}p8rY348-#sAGw5=*y*#Ba+jOON_7lt9Lj^R1R%wfzrZkTF`Sdl);5fV*Tzu-K7Hm(0|QDUr$C z(4_%g?z9n`<=wWyRNktW$frNvy#O21bV$Ak?BI8W5g87WgIpD|kH{}{J^?*KeyCXp zdu&3+pJ_ob!)`$#SztpTa#VXFFvEBQeiTqNF-j4^>_MIiAxWepAW}ROBIklW=Y_9e z|13{!ji<@W07^&&3IL%0m+<+&isgUB5Rx&B+fyKF*)S43nx@qUDK)2P2P@cEQza`j zsYMUkM+KgfWXo8-@9@v7>%T!SC!3xpEc3Oe^or^0)?Dxn8b|?Wq=#~vJ@1@yzrRh} z(fe)yF$BxP38yXC1KE|kYX=6nvFHqSQqftQjW}nKFjJWp+sh3?O^u$rXkPCu*8LRq zU?JvDHEJUQ+|bt%-V0s@Sa4d9ZF`CZ<;r@t$L)71ZjExZ_SC5VF%Het&6dvaCZ7 zH9HVi;;uI#GPGmBA%&iK!pp47lx@Uy)83*?qPv7fX7NyctvXRdPA_SeEj3N- zWVi!$UKFwltE0T%KnIP#6I6CtEbi2j9yO8J3flFlP;wd?qYL$~l-o|-$C{=c0&+m-F zFguQgI$<-ZB&vbpBbGybywrz!V4Ys*lOoF~4guSBO`$mF#)H=lgLLoSV zw*ZRdp*_90p&|c!rgd=(T+*^ar*VCIn$jr*@?P;?#wzw(sXzGxcwe8P^FueHM__Fc zP$PeeKu5!A$U*8NK}+T`mZGz{^i)q0M&Jq0#T+aA4-o+OS>K;~1sp{F2t^4XqkjGN zVNI0BC>(QLjQ0DRncQCsK;$2>)lq=%p#hLD{`Ygm-&23WrqrMSV#t?GVo9~)<+^9h zXd2O-y(UtV9t9*?<&L{z%axMSBFRYgfi@)tx*(vJKz7@N)OIgt(d;B#WW9C1}M;9NpVzjpq`Vu8kPw><2uk?|#XLIxN2Cn+O zF&u9!G-ncqilfLWE>#9m2Bq(q9uWh?W_Z2qbI?ieYd1s@DGQ(*Z*A)?mhNO+DhxRH5P;5|L1-wa-kn!g1 zdIHk+-GcNGeFMBn*w#iyz|fJcy26Y77@=UB)9cw#m=^(NAaRCK&O{auSo`2h_{J*M z&2b`)DgqV+_iJ0je-rKh3NbTCVKNRN#DoAg$|K1M<$4>)-2>i0}{s)vu4 zFOYo{F9d+M{k676+9bymKh7*Pcq0#~ra_XmHxeB8p(hqFt+M{~UP!53M_@(-S7VYM z?wq&At>#Dw^?uP!v6z=uEXdKrg%7?D!9S-+YL*~=XOlu6MEvEpuv@3@fQ1$y4wEvw zOyCRG4T>;4C}4MBzGRS$XFu-3iDi<^B1XT@nffugS(&K-QNj-_ZzY5AW%sC{E8`{^YZFwe#w+5NVy; z87=Dq+o9cVr!(Hn58LVM{JEbUUdB~u9<4mx3~_8ag1j@<5aefDeY^a?{&Ca_h;YAH3L%7dIsOwtA^aLr=iDa<#R8pXFi z8H(DBD-{8+`D-ms*wS~0IQ}$sjzyyOa3}?=seu%7_4#kNwGZm~lN*E(oePt@% zQcHjK(&&QYub>;Z>^C`dIl`w>D)7E=h%r?ivI~DYgw%JZNw*v$d$l_XZnYb!PY%St zQB(09Y7C#kGAhotnYPQ4k759j{9;&_va7fI?u4@T5*vrDA$1(U{m>ZpxIN6lwuoBJ z1PKT4K%&qX7LeVmj6-cqSd@0@-&oMLO5p2QdsFM<%v38JQUn=4-XBur&WY?CQ~(#z z!A~X^(UvpppZ92Lt6?<7g#FQ&*A(lVj}v}`5RcQXGOQ`akZji69Xx|gd^h1(ernj% z!ZX;aed1jq=cZyC%aXdRQM8HsqYxfcLy^&d7wIA|Ix>f5;@bouCi1<`LqkWzTP(YZXMN66L%W^@^}2RuIEb z%}N<#G4VdK_zTNFAiw2jSP<%67_gFs)hV`tsedH^8u0@!eSnJv3orf|jRYG_fp6M3 zs}zoKMIzZa&EF;QW~em^c`>JR;D$3p{XiU!k0c#?MvFtqqp((Z>Q}n?`U%MkqRu$J z#xG)@G_r(+|Lt8oR|23HZAF1GP^)eb@77W;}3fXmV)7@Takdc00;8X9` zxS)&5>ykwLH!`0ULUBb`TddL#a5hx%^QW&0OCdNF7W}XDMyH$?dv~**o?U(*97BEK zZ;WWvf@K=Zh~h#)tVk=W)@5rd^`d#sw4K6GMC`*Q%gr*Iju)os9&n{O#J9ODS>W8H zaZ!(~0Fw%m0{_j16hve@8<7BpBl-f;~i#+Q({58uj>t5gKbIK=A;c5YM;g75oTW58A>oWQ6l@ zr+fKh9f>Szm=Fb*sb8iA!UI%O$QXItRFB{(?}KQvi$!4IQxT{g;!C+V0{@@6oXV#% zKnD;!ZU8t*{a+PGNn;aRXA4sclYhePDw|3uf{47rbeS}PaRg;$6hzp_qyg-pT>@P{ zs|tR)v(t^IX~AVKF%kGi=PdGzEH8{E+G$Pl4#6WVW|%}akDYQ7nrbzF=wckz)U*JQlych zs3%20v2arzL`PM178%M7BM6g{YbOE>TNNFl&li*kv(wYFG393yS(PUu6+>>*OtkNT zg$d?+`w&%3HyTLI;`52;^+St9{b{^3IT8rt%N}AkYsI2ZPb$*sGF%CH$#Ey?qNq$| zt0YIKkj~2R%X*Q9=a|T+w<5ordhF=XKvO|dR+=s?=lzP!%BbQQoC%^gnL{G;2)$%Y zl8#XcEh_zWA5mm)NcTGuy4#sX5?QRJI88I275>XoWW-Ul^%h5Wt#Y4hl%<2RwmM05 z$hbTWBPN1{Woxf394myaJ}X77M@=Y3yKR~=k~8FaBVT>Rv4EyJVVW_P8|PEP@z)3* z91M<|L+l|Rp8YRz_EAL=Or!J!+Vh5z`+<}d=KqVauZoIu%hnA9m*5`U-95NVaJS&@ z6a;q)clY4#F2UX1-Q5Wg2;53{-*fg(_qpdX#(LqYs{Vg{bFR5Qk;!~Pjy~EbWWXcM zw-K}`Cs;-1Vc`;_{{_0#K*g>7C~v@YXER<3#!ek(vaKM;zRVgv8DyEHA@VkjUpi89 zaaUzip3^p@cD`hNuQW%`{BijQxRoM1Nx_g- z>2d8SgBBxQH}^7?vtrbnVzZgf#BcY$=s5@hQ zpFwEFMf({x!-+^;@qF|p!bRMJ>IvnHeokI}cDH3!hZ1>BaJKasqaWm!3bo@cxJ$`f6UHKX?bSB$>jDM)~r> z$JMg9PC`}sZVAjVXR+JJ;ywl!M(PM`_cf}%~G}ti&DBL z$Z)p^j&V}r5K5SBweV!t!m1S6OHZS;$JRA?3#f_*4z|6K)KV|Tu)BYHCpNIa)!+=T zdyTl>JGK9;RUmsWf3D2WQP%e!_a!y@-QJ<2t;4(#*(ASrfQuehATk!a9!cpnoDGMr zM{G^+7-H)nLiHbs$lvxn&3!<>Q9Wq=hfd$w(Gi4U|LpYt+wL3`!tpP=^MA&2h(k^P z;ruz1n>*JIirn}^Uu66(=95~%KRnHUTb%btAdnQ(=;Qvs{616sVuJh<|IO_a{!q4{ z4g|nTpk|u*-vRiapZl*@Cx1=dC_ifD0*Z8Jo;mnh&W5gy4 zO5LdVSL#NwmBlZm#gpihla^t!7%Ut9wL!PDw#n2syVuvld+m3uuK9-O>Z+bmj6i#+ zFQsgrm3}~X74IaCKXHdzBmD7=9P#(|j+z81yIALz3@j%Ezo%SP048>O zXeciNzeS-G<0>~Wwog=@0x@CFswe9hl!3?Jc#M4zU#_^!;z$nn1N|0(dBoNF#WG(8 zs48j4<1$Sni7IBLzVxAYUldD!z@1~!M5}V8u{wiWN*$$>yU{?&wDgN9=XW(4Rekt? zN1fA&(gYico6l8RiKQYCK{ZYg5pN~Bfa2zUKdw{N!*@p^(%?x3tNTR=$F{}yYeoh< z5;547S_h;C{3veUAz9ep8GA5E+i%dZSAq`?auw;v8^L37@%Ly(F}M6gPcGiIg&IU6 zS}{{sUoeHWRqAmOoRE{3bBNf@^>6zqutPA&;k}d6Q}3V6eZk48j?Lh#Fk^N{`)hU3 zzBK+t$yBT}b9u-ZX8@|9Q}N+Mt{{I4EI8`Rk=lceA9w&MbbO_A(U-69IWjGyNRhg) zks*Q89ZZ~}B_!5Ash}6zhy93WNXc7+YxfZ-Wof2R+@~D_e@!t3T_DE>iB@U2(@U5$ z&5***m?&GhhtJ>nma)L7>MiV6o~;mFZv^Lt_SkQCLJlCuIa=pMz9G>wUxDh3R1x$s z@NwX$+up6l+C1XZ*!}SdM}ssYjKpMk92K_G{w|+tV@XA`(9QPjSKeBN51x1{QfOa2 zjqZk`XR;v!XvigK<*bxQA`dOFa#E+y7WMqkgza!Z7 zV!q*TAcdTbGWoD61m8fn8<(+vcnuV1)QC`$Iqh+?~(sm=EA7> zgYzWfbPPabhi$aCMNPsyvd5KU9$Xrw1~aC}VFFnUpVVb#wjTj!CWK!Dv62;qZ z3J+n^BXp>3?@I{9CaL>SKKUtE&0^&+v^KpOXkVOX`RVx%5WrQv) zm>?sVow_JS1|M&6!jff;mp?S^lXslOCLkog0nH@-=NWyaoDqTw4yW<`X(*p;JS@;B@rsM==Xuv>WFywIiq(t-P8NK z&pWQZEGS5B4C+00^lF-(G#D{Ra>!FS4w$_h6X=9*_WM6|XYm2!; zTN9TOOuM`fhvH>u+4)ydO%gLMnTyEd*j3-ch(;tOp50yh4N*sy;it5kki?KK~>Tb|0^BEL> zLGV8nivLodM5;-HDJ$i=*KY(XZ~Vwiw_OrwhML9N%!=dH)@ASHmXyPdtz~9UUT(wS znu(v;;~tPBHabzF#$QA+LwlW)MzzAhi60gLQPpf7s)zJo#@0J@RM>m|pp}I7G)LZD zYr?yd)UDp))n((%jUR41Ac7cvb9CU>Ai@1XkFOK8y+;7utvfW#QcE45zO5<$yb9J4 zc6Kg4wOp}MLkP(oLzJ0xJIG(N9X*{J5)43dB-|93;?ISO8V7f99hOt|qurG*Rf=)4 zs&7H*xXJ&5UF6whfSQJV&;}A-lDS@&J}5^ZQ740Z%#sT+ae+aX_N3KN( zfe#T+7C$dkXLe#Qr)2-$nx@n4>XRQkvp3KWD0}Q>n+z6|mOrcA_UV*~%EZLD{G_o+ zjtE1)zEWHDC#3BZ7@PP^wvCsu!l|(eakHM(_8ZEEv&CFUV7FOj@+k5*EnFCesiT7_ zuVIHULRbd9b450lx6m9`jY)d4lLEY&N*po04nOKe| zMP*LuR~q6?jMwwXt4TwGOZ(4Dc@>;JhS%?K#6GyPwvRqy{nnP}c&8hS zx@31J)huE6z$k_ioVrWpEeHmkmk7-qS-xST8D0ohRoPa>wuECKB;_Gk@jBn0U3MmMDBgDuY z528ZgeSgSwo0a;2Gx0n)is$Qv-V;-U+k?tts}&!MNJ43(E3P*HB_fIM6#v_SE(~A$ zD9o#X_WVMstfby9a4Tu{`+=|%!fM(a4tS|$1SLX=!J$&RWmt)3>&(|cgX4S#c7##; z4>*l7@S8M9*e^C7vIE)$Hv;8GrKV}62HZM2=A?4S(3=c=+FUCw!_PXhEeh`Ird~@l zlR*d^;)TJ~i6a3pxsnpd!d(6)qS!l~mrUqU(LC(6C9N(3FjgM(y1*A5cYiMSBah`y z72r7Jrg&^2MZmZ1Jh2$Ih3ZkMdHF-da)qdAhTC}|%YB^k+FOWC{Izd5q!;&O#Vn^+g9mQ<24Q7_Y3MC+e;*_4h-|~>fI#U8 zwEj~~a{}1ed^T`&GB>dPXAf=@T?5y{gdND(z@diq6>D0o$hR!MBK#XVdh1)F0=1O# zOkc3m?>V_mUow|gPi~)dp<}Bl^FYBYp z2K$C?Mq+-`X$J9+`)G|9(htsrDfhG`cA3*fmwolQys%=<)U~;B>Vr&|?;~rX;K;?~ zMn(g*aG04OGNIPfiHu>GA$X#@+93WIlRSgt&kO%+O!6P}rOto(et+%NgH$Y(K_e0` zktoDbM=@J;aGF3-v=1ocAwXY$GJlAY+L!8vz=~#2y!N>Nj==R7dlj&Pf*s1Tm(NL{ z840&zH;52=yjaz?37E|G`Qq~qyFV?2BTx)PToR=f7mL^i`!WFe37u)Xn-m3{U@^`? zNigtInc&kl!7O-|W04sNE(!({X-{|xbRGBs#3wWRp%thA&W@5Zs_lrl&%yD9IVQ6x zP|4O82P(j*X50MUpK3fGwY5@1f$GO>g?7ad4)PY7;~5mVZ&SDd@r1J!rvp49Wj@7y z@t7C+Cby*qED=vKXVYi4`Fm82nVk0(frfjVw5c#iB*odXB2uw$=HzcPDg6)#_fpDI zUXoNTswRASaIQj6m?vj6qYp|2>^g;*!Yark7R7LyMg_-vfZjc!9{A<8Mk#yMhzXUYnjyp$n^$Cw?ZYH(>OA~ZlSLmEc{U-ldljMBRL%j1F@ev!n(Qwb3K-} zS#I5pBY-?jKZR`B3$Hcp!Nhqsd8V#VnDb28a}R|iI%Xe*X6N>tD%FO)&q*t8DwF{@ zvGdOAV~j%6f~trxFVE3I7&aN*E_<(FZ1N|XXw?K=e?k#dwHRaU_MZLPMpU(Hps{93 zq&(<9j$~|OQ(uG3Z!IZ`a1lOZ@zvFLl-w-X)I_oIWvC#29yZT*0{{(+IMo)FyEol=XCks$8p0F`%^TXdT>zO^O?d>3}q?RFt}*F1$f=p3idt7jUyP5a2Gd24XkFMk~Jf4mP* zwgQy_Owd;R-?ri38tA_{Bjoo2WBRmUyzWd zbr#1Y|6-|kov-t)*XgY-da~*3yXPgv93mVs2x`zV7{x#}u-=~?)IYO8I3}-jh{bS! zZExMKKLKiXeBx)3?d;81fV}7VI>&$_`T_SGikA%L5S|kv?s%@5CY_KLEnnxFPK$I2 zUrcw)|MEbUqMejK2KDYxa|Id?e@sA-Oy ztAJr`z9gz9@6IWk}9Jo-A+f%mbVq7Y45yOCB} z=6(Fwv22>Xy5rX7FyQrbyRejNINxgwI`Y_6HVobqY5Y?}+sN+6Fa6Ir9c7*VpM*R~ z_z3frVXnc7Nh+|uAmg&Yhd|1*=;ylE1YaSMMfEG@7YmTi1+a-G#lXa9Oohw^yev)b z{BhJVVXiLuZLzrnTBQHhvx*9-2z?Qems1l{QkIgJ`*S#BAO~d&MZf@s2?dHy<#&Pd z7Kh?UA8Q{&1fhhk+Cf(u7nt#UJ?+$w_t}kxJ&??4K5i$F} zf>eKP#pRB*1FD;GFdaw`jLnd@43LeHcMSARwhWD9#OAkluy?R8&n~eJaM90>FN28* zbu@M2(oVHvGqm2ZB*qGT=nRTL_%!j_0mffRT*+|l{ThJ)7pODzZKw+YffrfdKp%o9 z4pFl9y_=yv|NHmJn54H9Py^=(vUuI4f|gw0EJb}SQ~cP1G4tv_gu%&?DW`N5nj59` z1R2A@FQMDu=r+Sa{c+P`40HU;57hl!LjA{|(g0u}Woz#YPzE@f7})&tr*uxVQl1qA zof|Rob@mxxa@Q=r_di!`tOyr;U>(Em#_42Qb)h#AZY-?u6&Oc)edm*~dtl8`Z*h}z zE4%5mQAgS45!d~B z0u`mHWsYGkSndi~H?e_|l$r|2&P6p&_ z=eZ7RtZ3oF_Zo~)0OUnrYCUM$e1 z&s_~q$|n6dOO_WEo6ovjX22g#Q*$yg+4Hvi`o#3P$$coZacZBch=E?))%jx1$6?-H z<6=}y1l?G*fZ?v(+EBBO_(U+e`Ov|+oc4G_xuHK=_gEz;nLd#v7(qEx!a4#^(MWGF z@8J512K&%*PE(<~*kx!f z4#v9_PQonHpk;MNfwP~`HXJB0nQmE%McO-1Cf3P5f~~LLoa^m%0@<-LITc;zyYo(| zPY3}e_2N`ul? zKfXDLjX8j~udP|4JsMgR9w{_>?r`W3?GrhFuhR~EJ6T7Ml_92Gh~0J6BLU%@?cSX2 z9qmD)QkP2+_@Cfy^K&Sl4+PwwL03)xp4}+=_c!>jUDQ9$vWm!j$&J=+bX6mGvEXn8 z^GQWiL|O#kN_0wO%-&1Zqd>YO+d4X`SF|_CXowK;etC*l3ZslRU4r$-qhyb-ml@nn zrWa$s?hkJ{--&2oO$Qc-fFXpL_r-)5L|mDubcui&>3u>a-l~a?*afF}~Y zqWK>Yz(<~@SerhbZ(+VX4ht1+eQ~G)Olr2Z z7Qa6qKaw?c=E2m>o5k@GA(!0GPnsX2&V~I^#oGMDY*TBSkBuAf>w~;jb9~aeB4WG& z+fnsk?K4_bo@T!aW?hSJym86M4+tdEVnR?Kh1M%c4P~Z62`S<{qcU@ul(?1_H&P6K zAmzlr*hn(ISX;4GU`ZqzYS|fkYE7oWtvd_C#z+KyB1w|y>&9MEW@)nwJe8I-7sC^=G6-@0prO{JTuPjSLyyq# z;R7tKYyXt?7A4YfFFB*2F!C={wOHe$w(foRNb>S+b__EI4t~8_rrm&8Fklv5c+)pi z$I@Y_f|` zYI`E7>fOjR{VM-W-A zkI*y%-FW;G``uVDb}t*sj~(%;+YA+Y)tkjw_R&;FV%5|G3Koh0LZO#Xmqm3I`Wh}+ z9{;_nA54ao+(5~N02vCbC47<`FeeIOIjqn?OJqK&;-xGP-MBlX7XnDU{ zr+k{h;=cX>?lS0^{-YEkbXTskR}N;!ecw;8w1vKs_Lw!$pO({gg@h|4j&ISd{&-1E z<#(tr{=n&}GWor)*jrB)AH(ozV#q<(Ww=WjE@qB}q_AprS&lCsqF4f3LM$=Wn@1e& zqQx@5P^k>`oTGWC&3wAJ~GJ9NI(#y+Mt7!W4oLP!?Bi_ z(jrBq?@eJwBT`9r7qNyoAJzmhH6{)YFBTZ{MV#tS*F30CTXy`Qa<2}W_L2R2=L7;v zd1t^M_1-2y6Xa%u9#lm<2asPWRDdf;0B1;FZmRD85UZpbHusIc9%-H|wXjl0es3v% zyXd+LX-k6G^dchhG$i;)d4kW(l!gB~yR*~#eHZ+d&7)zjI$kNJEYdE~_8=XuX7$Ng zX!Bv%ZPqF0!}n6{Nb$tX_wWY|CG?_0n#Mxi+$uK_NxVgLYH3yVniYr*<{hDOJ!mG^ zAtv@ThUnVT8MB6#Ds=#=+^kwQNrw5Io~76pmqe@B=DV&vIpJ>mPM+l|+8LLjL@m-2 zqR{t=bi5vBXV6X}nD=X#VR!t%)XBcIbJmSm?efnXc?9}%AKO-vGz-UC_(G;Le)c{#pWs}N(6Wj`{98*wOw6aG5v=DeCoc8cbg zS(=#6$-)}MCldLBB$JP@TrWx^gsR8jM^7}Hl*KR|XS}=93_~_ORFOPm;g(BG)=;KQ z`(*q1BYwE3@cr60AaAI7;oCVMEQ721kLOjf;D>lY(f4@m*E5!BCY(2u`2(m6vhm(& zLlllK3_efB4s=UnWulBPd}ACEgs?YNH?)Ng1!ztT!CrEc5eDd-*CXi zW#`{$UdW>R{zcFGn>Z<666pU41QKeXVhu7p`Xf^Mcd`EK`}aRoYt1AH+Gub%NDS#R zdL*#@0!Yyq63N)UM}s>0bkiC@x{1(r_9LS!nIIdDH_J6A&hFZ|KVUWY%fP<@bNAy-BV;oM;IkYlXP#y0WY*-J`45;W9?O$?=GryNuNS*}%qg2J3E%wD`` z>AITfp@R#@0JTjOSS7xaeKw~wbKzfj2)5p`>E(FTzypQO-rrM?eHWEpV{An3v+K3j zz+H1W=EOu@)=sN92G!-PEeDAE?-o=Rx!BYa+X&h{-3rNUiFd0eWF z9-$|+PiohO>?paiEo-8m7uj``a;5nAH_|D^Mg&2(-9LJ;4otIRGAr>(?gB*9q!FPYI&v_gjEtXmz42#XV^l` zx=*Ma^#n-Ae9GNJY50^YH?ox#x2~F}vm6%4QO{bBF}SqlYvRmXfQzbyqHhj}lho*! z0d9~;xJeQ)c)+6yA0<}<$wW5U8TwHcuES31xRS9MzocJxAHD0%JcV!mW_nvHg!5vP zpZL34w+@4r3Qm}8zI(CV5edJvEE#w!LAMnt zJfSDbXtiQEi2CdEU<|eet^U;?(+-}kA*A2MnhLZJ|3CKN->UVxG`JAkI;&vcKX+W=AEXrP}1oq8`O`owZE(N_R@mMWfO^-&(&%K z;Wzoj7Y8_xyJoVoWD2$>Pu)4~g=(13A|FfrbrC&=EQXA}h=5W1@4Ts(w93u?fJMb$ zDM}LYpf6iET6%~e5-1pmRmiXV+JrBE#t>QFnlf3sd`S^3u6D@kn01&CILWp5MFy-J zoKRF_q%(7j^@1r{#xv<7iRZlQdpDptxZa0t1d{gmrM`%_7_rP|kfAa0AGjTQKN9^6 zi0eBc>u1wL#u3C-UWkFC4y{JEc=u!xvV-^c@i#Y1dg>ua6q^W&yde2^v@|ibu(beK z*xAZh*#0YkHb~9J4qX-7tFZ071MvJRPQ5>lwGvjDOC?>A)Tp0R&=5otws3q=FWbgj zH#V^VPV=un3h%3c&@>I9e#u{Cra6SicY5q0WxVnx*I&xF;U77uLyEv3~Eq zqnPC`Y)aWMbq_xFjN_PUlPZ2l*@&Ko^nN1}Cmc8;4d1C-F3_BO_!wTU7=8lutioQ= z<1#vwmVV*gQkG#7WD ziSaPN0K3_#K;fXGmdeDmT1QzgTZRO49yd12#F%^+-BpSqv{aKOwG!uEm@=h_wN|O2 zw8R*byv1~FGRaX%!ALO|^$3RoPEJ2rJ+uUe2IogVJ9HFQMmg&whJ&m-eYdA$C-)-5 zjXAg%gU9!u0PF-7$7HF7R=B%FXuj``6|G9`uhru1N?E~5Cjka!51(+F-8`{J9hIFe zClk+BS}U8nAny~MQI0O;c?YGVidGiBwSI{jc|eEw;Xq(J_t3YI>rRmF2dHQS#e=)HI7f;3 zV(&1+H+-e${8V{8@0UwUD1NB~O_xKKt{S}B>4T&^BSG3xOmy8z9uP@KqIE-oX~Ke_c<8;ZVKPwO?#a<6Jj%8$|W zq$0vLsSmXj4EB(@vo#`IHrEMphp ze2djy_?1kY`ZZ~PCk=M*G}QBpN$}V3*$%s*pK(4M)ZM{)h}ua6uSVyGEI)Wl)SN4xX>Qe7A*@Cmjc!Yh#d4zmCM^&xR%Y{LP zEcL@Bg6i{wh=H*5Lsx*FdygncIt9V@o?ei43ab7+ei!aHr+KYJ9~iLabe^|-;k_?< z==+D-U(4`y%XhLnI%w+~t4_6RJ1Fke^F&9nx6{XeWZ0`shz^{l{FH zQ|If#C)v`Aswey(TZB&;l`%$(hhRo6V-=IwNy;<_L>H5!sJ3LF?1<;$XoRQnMY95_qljtoFTTT>r}0pfcPWK>G51`v8E7Pv~`+RT|oNL zhw1a&#gGf+^%7iJpZ9-<$x40Ll3Wl>+JVHGAb!K2P37NU@^3Ars-_dVD*7u=-Cd>} zW$GFkGIB0#cupQddM?B?ov1h}I06KU^I0lr54pDnXJy4SZ+BesUt1=cJYmkkQPb1A z){b-C9`?Jzau#7Qf7`bL`f9i!tz{1uub`9M&0e4c_$eEe`RJ4B^-h8&w-Khb z5Hn?TZ?diJ)nimsqXs$TdLOeLLki9+;DCjDvo3=>x1Y}d)wz8mJM8pnMv~%G#ge}U zzHV);yU%3uW;ip{qcpwp$?9jCLlK=U>?{^ih{CENm`+SHv^l2;GS1hasUwF%ltpJ%IVL z`NMZEDc;#ejH7y->rlPoVafU#hcV~Uj^jt->qft;6lc%v@ieiW&(jVg^z+szafP%! ztRixeQ7n1n%rZi;6xO5VK$1P#&kG6d{HG9SGgWzV6(3Kyk2Ou;Cj6Vn3Aq?`M?+=U zwFN^Dc7ze`ps`D>A?^ zvU&6*FdVslgm(TEfMVFjYs14oKnd4qHb{x2X!&&%y()P_1TvB#@MDmOMUw_8w6>0I}xu;$9q{br2=>72Z z&wQ|sX0H?^j)of0o#DlG_u_M~90+3K^crt%ER$5~7}BntznvEh2Ha$sUSz-~3`puI zbnpMl^;Zsvj4!-C5Z;~lGF=jMQZF9cV;WtpELToD)r8c(cmR}cX-?A5wgtSHrbji| zycrcMwn2z6Ig-j*n(h3$yIm3SQ6?GD6mCO5x5!1|7cY|2!q7q+aHd)$68Ov^Eh+~s zO4JdSw6CAsgXYSTYb*SbzP=Hslhnogh-ZgZQYU=rg8`RedcJBc&cJ7~s@%zDzdg9Q z;hgjkU9r@g8m(k0;eNF{=nVo2O`yhRaad9Q0jVp`jAsByHu`$U zde?d7)%t)`kI!k?&S%!=CNUv-1(=Y$naId-%wom99KkszyQENYLn7YAgHiS*%^C23 z)qbK7&a|Vj-bF%gyrmDs_oOvQdq8oyfrjPw38@Z$Ky$eT>mlffw12-T*BpB}RAG2X zLvRpqSE}17NJ*I-pfUta{_Q1z@Q9r)CU+4a+8yPvt5$wYh>X&fC(5kEQ6DB@3nFrw z_f3lkB^k)!h|szMAlrInnPk@zZJx-{9Vy9n1^$k6Ej9XUzpp7jf*SY#73coiw#WTr z$Trwnls?)ZEmKj>MsGfWmA8Q_M6HPa`<`++N%nwaz~b)9Kb*rsHdwj5nF{^_wrik^ z%IwSDy36&4$wMq((zDT+m?%lrqIO-yjJU?#qs>l z@#PY|Is%);!p1|ru4~llg73FJi3F5H7FWDDSM`gpL&9kg+|B8 zm74`k2?m*dBnz%^)*~ZjXyo?{zp7C1?v~Bs%C&H3*J_+LY{a@r&>GF`P)bK+S^sC9pai9_glTmS;^Jjgbn8(N+*_!xoY?7eZ; z!pLPvL<$C(FaEKDp+%uMfz;osA~$Nnor z@b}E-II!BN9rVg2!2GA%anZkii@#S_D|Iw=^mWcE*!X`C%K1gD5z(X}!fgBu-`6B2 zp~I`tddX78TSWk+7MSLKD&MIGx>QJ>g5pl58-C`sy4$kA$`TabZu3tVWqVzGKO7Ty zdws(4L z$KM}f+nU=Fk5-?bkOG5jyT*Io8}Nw0MiOWocp31ci+x9Qws|*q!Bl=#t7*ZH74`M1 z(%&WuUuVY^-p)yOX#TlbSpD*P_YpH;XwTi&DE6C~aR~oacpa-cH-&>{H-6NmeX9ckwO|@>oP@&}6PoekUwZyvRKk|5+ zV*B*wP%&}AG2t+{R{)}y8=VxksD$m;L`o>z2Y(b6&jo(Q`l>@kuZB>QWthK6%NV#F zAw|tA%%~kzeTh>zg-_BDcS7H!H;h-xwV*5q_+DW-zglhz{i#T(_(n6^MW*q6+?fqK zJvvaPcQlTeB)mC*<4M3W+K3*Ae(@04~ z>Xs0dR&$U)277JR&*r#J$KF6_*Zs}MN)e4z@5?F^yqcF4~ z`ocN^qnSzKShPyPI@C--YfNHPP@f#aFSf@me#tL#c6mqJH_M13Ks+;pn8AIvhwjUW zOG$Sk#-O%_h&A&KDA+a536@ITXI z{tf_tD?9&2kNH>G(fq&kn17a?3Q*J?mX|NT3ZRH}L~^|*xXr`+E%@;DD`B?X<+~p> zdBQ?GQP?arNi`%rr7)V1R&Wa#doX(ppqo&kiyrv2!bRJ(#FP2!Sht;ql5;(!WR8k& zvdFyEy6O0+qW3%Wek#|vI*E&eBM{V!;NcuFE)t5H@Yof+Np2TE@m`6~vU?2eIqk2-Pl;iPGJ9gJ!8Rws#O0nKKnu96c4aa8p!LC-Pyxk_W$L${lX@(Ix~oE$t#n zfpsIig;vK3u%u2lmwlSJR;|qjk<4j_(E2E6ZVh+>UV$bXwhS<*h zrEK<~Boy*>gS&rjyUT@nTh zSM^~32Y}ANGj8S4QJ-rd85%A{fxYyggRI1nv+70VaY}bNATvJu)_`s(`qW@;$^p#+ zkx(*Rn}3KnRTnwu_ z5cg5jL;)nGx1QED;!69td?>|uY|Lx2?T(Nf_k71X5fIw;Y<%1QdDI1yesBc-t8i9s zD9Dp$A7*Pu=pAVV3U+HUAML|>uBuke0-S%Xc*IxIb36SP>2hL^%xxG=YmJ9;m2StI z5|hb>%umNE>Kgf(o0CN<06sTKn)3u2f>d~`I(#8SLgfn|dz)x%UAwSmmFtt3^LWgx zF^reC9qg`ez}1hVl1vCq_G3#Xm!>t<3_8d4x!Y(_s-7cLv?J7$dR3H}yR2*5k2*@1 zWrt?l-f{__+K%kk`msLR?cztFg*YJ)=WNSFk%@D42q*RW4kO!eW$#*PARNxzraI(u z(;Rc;@OT^CwFB9sJ{~d1)x*fL#z$KE^E9?y=a)r&p+fKX8DZXDsC zu&k|#M~ZoQ%adz}&K62WBh{ux&ukaqn?-O6PA9OjJijA8fD}m<`0`^yJ>EhS6FwM^ z!{$Ww^ORj-wzoEVzO~Emv{L2Z4a#F$Y1+JoURStA#HS-iB8U^cFR;bzfsHS^5JmPp zQv|_b$QA1YRSFj=@;PeLHTWr+-S+xPIjU(m15N<`o^RI(nX2YEx7-O5M=aSwPdM8Z zg9@zT819I=+Iu-Dqk)q@=$?Q%2osiEl(80akVEPrzGSWku#cD6#W~s~+mSTxw$qKk z4UL3%M!#e3MkoD2F?T>1AW-MsEShLZ-_IZZ`N!B)RdL^?PmzW2Q^VeXc{nESM6aao z<6wC}&SXNGvugpLROc7lKs|peY?CuPY5PFam8W-SETEjb0Ys;wu%?8P<`xl2AP!;K z_EIl0@voL&gbENjSTJak5j&k%E1APZ0gA?L#{->zKR85uAd2`crf$cA0GZmcvpOnriAt5EH(3x zFT-up)2q`5d}&Y)-C)cjC0ejo7(HAg&Oj50fmnvSz*f#${P}{74%o2TeyA>6rN%4| zmpmw8I#K4Z`hAO`O2a#e7@*(Q$Yl(JTY?9*-$xryXMnIEr9%G`lacid*UNnU7Lt)0 zgyai&JJQH%R;$NtZ371%|!`>WalLFF`k74%dix@^} z@oAm%G`Xz{Ef)`Fr>zP2EyX6@c>wl%^h2gb^K$^Csv|>QVY~HOqP{FdN#5^epaqa! z#jbE}VwXg*(n;wAH_h=z@0c89T~e1B(4@??6x?H|WgkdW@8JFEi#vx9Y@B0U+f)TD zi0|e$`u|8P#Qwe(<^eiI#DdoU@)ZAP36YBn6i7t`5(9PL&BZ+?{60jqKl;C9jO|H_ zLrEdZfBrk=@z=ZR1a{H@n$l)?jUqckJwtcPSRWxvMMEi5Z#`zx06{fF&0KFeL%r4x zA0;(QN7yNb-zp4 z-;v!wIy7Jj9pX~L3}y{GG8v#ZjR^Ofv^5b749N)>S(AZ2OS~LKy~F0i{ntmaBW^#^ z!Tt2Z$KQsOI5_M55Cm6L62ygt8fNA2D*>_WqOVQ-HrqgL)(ykc4n7=_%L zsPwR6$6wK9p~c2bML3|Kp=vQvqdWrx53j+$6h6jT4}>=lZz`b{GNTD<_0Z|0NS(^YnA0dy=5`CY3%F1edas*YiQ~Qn$k+zGy~Stq%?!Q zqmi6c&Dq*{)y#2Lt9Z@nWdKPB%f=<#R25G80aU+72Y*=U&Br!fLowco*vyos`LTg| zEsd=KvEqd6>4=MO$5cP!O8Dzx}y1-EXh}CLQbdx2j;iW!&oUc!EngiOd+5^0<>U|z8 z8-vi`T5yGxCL>|G3<^_(BabkIqmK~TBaacQTHS{v9WmGB9dXy}9Vk<3*;HU&!^0{O z{`fmWZ3$#97Un5wN7Z75b319u5W=xWjd9NTiI#L9H=0;FdLO_i2$aoBGkm+>s85ZT z6>haCQW=lvCK0sv>8ZDRn19SbnsOWVlM>CAozfY>$7E)yj;$P)02eCYlveKuc8$Z1 z_kddA2fZwpFwF~7TdJ%`C)Y#02m?Zr>x1=GzNSuut-eItjyOTzRy}7`l&JsB1?yUiPsk54(4=@M(Py>xZxBOZ$k{*lQaC#f7?zHs>+Z$~ZySTs zN({p^^6BTvRP)XbNDQt5Mn@@=?FskkW!L5+=pe1_sL0p%#y1lk(TL$~+Uwwxk`}FP z;;CK4yX?KDEqm^X>899j;%iYX{RhwXXQjn#svD~YoNxgm@(pTrnkIE=rw+-E&18AZ z@s?R8neP29LbU2Tq-uMbUng6f1Z&$G3rx>`wYR94FQod^x~ypEhUolRG%h2d zPi^C%i7-kCFlmzjGv|)8&bCx=;UPr|BqgT|k-rowF3t;18*=p<7@|$?wy` zZG4_wGI~b!BihH}t-vOK2}8YCP*(XE*3EgY4c<8hK*gSA?;Hl`NjB4h4vTUO_eA3g z=o6SauG&(OT~mh-1SfXD%8{f}=svEX9~{Qe(%x=~wnb6D+>N;6OhWEz2td#anhYg9 z`-QPSnia)*`>?etGI{f1Vk011!8v19WVF@{`jGZWx0C|s?GH^EF%wsIBBm6sAe~W20;q}TgnNLa zTF{6^x$QRo26OS={|4-j-uvGye4Ndn~4>8Ku?FurWkQ(l8%mPN274*=}#<7 zz8QXOEKmq{c-Z~eB0s(o1B1S=YX#jT=C%8zl$9r`W5c~IQDOzhwX!`61RK;85#$QS z=L8JAgI(G46{o~c{g#sd0ERG=TCnOGEM$I+Q(pfP*oU9nA0mM6lslB0T_8bbYvhVe z%A8S9te|q4jI)km8x2=+FN&H=*766S!ByvbN~yJA>i>hhGM# zDkozb=*g;r+9;y`FwS!}v^J6aYwx6VDZiqC&WAbHD1{gpS0hYiq%1#GjW>86|H%D@Hl)AR zc9T$@T5k`Lb%NUX2!%_O@)GM9ZdWvbl0JCKy0O2DkiGKtn^mzyfm7Zc$;=CQq4a8j zon$1l+gKzMqPt)*qc0 zQ>|J2Ht3;ufLLp!|HFg-)0R%{OU4+9_YlqNL#pGVd(DdU}4MgU3kW=N&hoT zz5H_2`6QF%$`DNeU0*#;Wz&Sc7M{gTz8KfCT>p(H_(IxU-9+YaLxiAG`D%yR!SKI6PTRI^+qT_l+qP}nw%tkFwmYZt?tS+6Vt?oS zSXcdCt5(hV)Er~pqhs)zJPxZ`Pqvo@YqM|b35H~t{RWF&9;z0#mklBZ_-kG22Cy9_ zGFJMNR77;tx2LT95L{MEOR|+cGQIGAUk`q5RFlv%eKlHVF#hS|k+Pmt%X&^XIjR;SVHLzB^yTTt!6 zhQKc30TDcjY^}8t6{*f}YX!iy&ic8GB7k0^Ne$dqxpC>5ga782fY#IF34MwFM5Ots zQ&{hOqR|nU;MYQ8^!uMPK4>O4P(!~yNiEgo1-fdvekZk9D80es>gv49L;OtVVoQ^5!7*!To~4`a<) zpnlnoj&XdJdcyG?eeE(=$0zIoBSG^7y};v0lq>L#A&=t`|L_iDfy?nMCYYb{D^OGa z9%kSIPw^JCZ-pL_V3#;BFyH&LQHC41K-|SBCl-wKm_o0O1%y98a=I2LA#ii4ZB|ZXN%c6-)k}ky0J~n*{ zFs?E~I7Nc}f^ zs0aRGS2i{bKgyCRYEAym zU5GL<$VP)I2%oczZ8VhafI3P~c5%35CY>`7 zwJr6~W0!9-mrquCjicW%q+vD_&+&|{MUjq;88{ekI*ws&HzA}MyiI3Z!x?VFz?hYg zqa7R>^?_lu@S{KT+xaS^iza+dyM{0p{JDrKDgzgtg91pVOc30B3L%%Kl@JY(BsbI- zwhI{nu8T+k=dVcxO@$ABu%0QkQC%d&!- zwVsukftZ!8rI8hY?WFhHVE3=ZH>GI4-+aO0Up87=>lIL(ZsKjK$$?cuvL}49ER=rI zwNFHv2^OjX zkPgyhkF&TC-m=o_-;wPLwXN*tu)lSNC^m(-U*A2Dw3&43bL}_7db1=`BRsGzXOILP zLNCC>U*Y%j2` zU-mRZw(k0F=z1)lpRUAFmLFoyw84RS*lM&pkI&Ut`1E?L<=iNsy>e7<{q5Zj^mdSo z13a$-pT}lY?u8 zKGw35XM~Kf?dNO&7KOT#$#lTY1*WelhFd-I8Uk-NUsZnp5i8~e$O<9vUTAu$=)n^ zUwmP7nF!oS$JLs!W2#|lH6gJ)!*j@Wy_U42&l9TCsP2+1m229{XVju?VNavA(DC#N z{`4NljS8h-G|&bPg>94@^*Q2f+$YPHun5Q^IuUi>rqAL82B}~NS4-GLcu5rzYM|Du zI1NM}`K|V{!RFa~2TUjFaUpL@$&RdIQt|OP`sMt>ja%K2S$__CKs2#7*@f<6Ywo4Q zl*8HuvR@e6dV=J6*-^D~%h=8%G(p;XJG%!NAS5Gm?mb~dvpQcv4?`IvdyZdgSvW*) zi=z^INp~~1ctIVujaD1hy}VBtlMK_+RlHBOEkBeQfowV)J^5PS_n-jO%NyEbb(dEs z7TxjEeKrUq3%7B3qH zdeYZUi867EFn2I9_hP3F%yd}x7+7-3ITpw}$*?-{#_~)>6J;KhR&$e_{P+5cFI|kZ za9)@lLtVjyZn8s6vClL> zx{PI}atnzCT>xSc6qth!ou`C7R0qm+g4k_U#3U0MSmVt)U?W6w3LD9^4wfW552BO{ z;iSmzMt$D?b;{TmzO*|7}hon!gyI*e*pRv z-BNN>YyS>AN)xWW^s{gJWPt493*WiSz{xHR{8CAKxBi4bYDo8x+KwZ2GJ#EluPe}@ z!aegW%-|t|+}%HUKAq`H{Cg*Dua>MY4h#fD2xJ^W8Emi1>^T9?=h)S%|F|(S{so|0+8Mug zD!A(qik>;0!EoS(BvUj4&xOwKc;;fo;-R%}%he0jaKW@j4NnvaMM45r`k8iBX+}gD zaXMgjoyKFoIc2|3#bTb#LaUcX>~CCo%^FMfGcrPpl|U#nRp@C6fMa4X1NPEB-25Dd z&E=x;7MWg)^irMIOIX_PqTmw<)G?Wfi(-XJ_rvn$W>VfqBSJe6*&I)8>6<@V$;Dhl zus=kR;3TiJ!P=jI;s6`{!@E#Ag+PIqCpLJ~aM>{?0&Kx(0Ljv@^CfI0BvpXiuns?d zp&V$y2hVIGno#K-r1ofSN|DvH>$XJZWyC`?_ti3+Mj7+#fLMj z%Xf?v0-2sOR*INPX0F_)7KnTo=u*HMY|e|%!~m-=JcD`oSzfW`>kuNQVVnyxM(L5P z#Y~ltf7KN?l_bOdYmUeKSJ!>V>wDMbyQ51sn;XY>$Ur4};aocx*&$$bF2ev zd0`YbbT=fxq*l;YFaSRvhd6blDB_zW!?c{X_V_qD`t*?7R@#Yy>H`8w8@^xijuEE^n?bei2}P?1vP<>Bh46*-&V@00^A;1Q2bD{8{Iz?B zuZc~5k1tkm0x2;ARtDfP7bz`?WQY~}m>0%RmuiMO5M zT|!zE226khs>=B z>P;D)0OvNgyEcmp1Xx4kB_iAzjUnTb1xDEA04MsFZUVhwGoKRE)Kko+?A526z{3MhgT<1>2|DEey4$dzlYk7&M(R|Zk(dI z(xyRv)w`GwU7o59ka^JQ_3 z)Caphz)gRI`h-5Qq`yV`1*3CE{t9F5ANhrpfrJO~g(`quTvwYTO&s;6sO*r*zi#-n zBQ5`K`8MH3D=%L#3j8w&B)=>?KffxHU=m=Y%P)^a&=CW|sB~HMJ<=aY;77u&RmQ3j zY0;~n)w)@9=Ur`TUeYWKb)Dry-5m#viDi_Oc2w`|_I1DdS_8Ug2VMa5>K&7Wi%GLO zyJ4o{XK{0WhU1|9p>N;~@BEzvWc)yg;u64PMT5mAuFCet@R0S0=(VyQ)~Akj>az_k zmJKCHoWsH@V!R9d3)k}a97g6*arY=kXBdTSMy7-OVl0qDQ0KbB6ot@U8Bcz#eT>l1 z$d#pHT+`YJ!DdLtbr5+VDS{wE3zf|d;{^9DI3hPDLI*TRD_zQ$?|lHe8E6h++~#VE7&$~{-J#idwNwn`7!E=4PD8YNZgCU z!*>eZXfxp+?V>67+|OaLB=JYL?s`BgFONh2`6Dn9Qu`k z#8T5EwjT?{jR~nJH9z9H)7=8KRQCtk_ENR@1_$FP+RLrVO++YYBKgLcm++LNGm3X? z*)2}$xpm4QUe_>~y!?l&XNAbwno3bBcT!0mxU*Ur>nzsIiwGF_vo%iwP;hH-(g;+j z?e$+*9aJ_>Jb=M(8_hXRTtZY)#N1_J#`y#ar_bb zLZ6U{Y123W)RfOl*a&YvTr#Q9o~@WIa&B(UqL80G+J~M~6~D%`P*uz1#AZop5Z_%(&&)B@^n||tLWa&UJiXEy9anq% z7QwYtuW{HOp+v`HEi_%0vd)>dZo%N2smktEysX5XT^XLOf17ofiS%3PVc=H=@xwVm%S*zn&m zstXm!%*(V^NwiZpe;i-xZLBPAfPklpE9Jdn){PBNA0uTYKnc=_5&6$bAdbp5aKu81 zcp!+;wGrB3<$`D?WeiX4f+^gGXm@>oG1SFTNtkWV_T>ikqt40pje$hd#XI}rOo!L@ zos)_3=|1oX+K0OTbP>Znw{;SRbhR*nabCHd`35|`F35|e^JU<`J|C}EF6MPKd znJBFBB5{3A2&pCS+LX6~B;U%HX{>~`v}g?UYb^BE{Zb)`gg`22@}}Y?Jv`L_z$ui? zdwd>M>{F$8a31CIc-Uz7xP6_D*7<~Dx781p)ue}J0d;zgHVE2JA`qb$zK!1R5QGY~ z4n>3RjOL84P1j)@!a#)f(=|3BHm;U*w=%*D{j$ULQfMt47GaIvO%4fU5dq;#dyrZP zMj^i=L)M0BwDoauVG3(RHkd*qqX12{sOhL-gQpt*bniv1dy#N>nRZAKrNTTUl9kq? zYxjQnr8N-e*WOaR#f?Me8X^Lbq~?emP3)*ODciT=Z0V9} zDYWvFr`gpFpI(NIWoVThxllUQv|vG|cnroo``f~9oH5PC_fsmatC zh`MHrBcIBETFD|x9_E7Jhy`R|I{0XlY)h$ZIu()`$zFXRfmGm{6@J_16n_|1!;ED; zOuE32?TJ=BhZ468woK+=_wpfhzhIo4e0_InPhV=8AIwhK^@`0@LX*c6*AhY37RFB9(k>GydQWUrcnBw8x;g#~zw`v*o#QsO575hOKmMa#%;?jrpJNd?Ds zZygwYVQ;Q10gsHD0?LE0^1E$8SjzjyK*$#4+=fRKtdFOD+lE!fDszpM;_hzeLv#A> znJwdubtANQ)2T_vl(b}_d!Pccb)iV+&avCB1a2d7+H)ffO@ZgMM2NwA;Y;rml^aEN z%c3gK<#AISO=e2;2SnFi5N`2Gh#|A^RDJ~InEak#pKgg6p_Jcjwqs^M4wcGOkQx{jfE+)kj^1kseJsR~azKusFVS!^neCCN+-LTSgC_{k ze!~ZI>!gkJIO~@dRu8?CjxYid@Py-$?V0^X#qo74WY5Xipl81jp+@R6n4HF)qL@m? zopq*uEh!13WH)2h*dw{H?W!cApWfN14}eYhG21GW-gR|q-G$RfnA3VKty2@}bEoAJ zW>KF4K}iuL$<_EkD;1%a8N~hP10%G{g|Vc-{gh@YJ=_AulWm)S#Sry=qtlc$^oU&Y znb?T=YNRM-us*md>R7xMeEX}K{e5Q(ossP@P`J@pY2!S}sKv7(_0ghqlu(kb|9d+! z3^g=KT^+n}bQ8hb8a-NZAdff?9E3>Jx6D4rA}zj4m1Bz(GQzcD9?_?;_GfDS31uz0$N7-NKW0MO8!0AWp_X|^76~#$}_W=VzR)+IK(3e9XhlpPIA4=3@*=d?cm%8>5T~C&?Si@xvng3? z7CS~p+(~PML|n+}*4umjpYY$iUTI{}e7oTYV#o%4a`TOEjt!7jz1yz;Ci{L7HoWiw zjERm=Zu+LU+7BPGV5U2>b!>0}#&<;iPj={#d?Tt*_`XE25}cHP zoP=6(gGgR;bme#iL7N+$0khw`RW;wxO`^D-Afypm&!FLZ~BXqYM@Jss4E zn&ygN&WjzpX>AHD_nO-`d#X09RVE2kW!dYIMZ-u7B`!!GbDbLZsxnR$1v7V`O!A{1 zrnF-6Qm|%KD{Q!Q<-B|;c=ViwesD#G6%?X+0=*;vx)Pyq42GqnIm;<(gLaX1?9WU# z<-j(e9}xQ(o%bIj-X<5)|{7b;Fit2;_WSj(;OlA+^Hpok~4;=I;!z<2#e};Tzz}XhOB*NOUPyAl_WT0a{G!nAen!Zm?KoOD{!2G{q zJ>0@Xq*u@9dYHYnh^nn|AArSn*AsvE1Tg;(18uBYiK3}eX zBB{yE$3av_nUSRw)?Di=s^0yC@4Xf?h^rzq#lHMAIfwaRe$pE8{bDdwN+jH}cOt z-?WJ`I7+V)uV?DXA{dlIl_AZ?(QsHmi69!hQXUgWp2;f#g7nyHFFl(aX}lb=&*row z6gAs5)!~%JYdfvfwTnXAs|?fw7~J5dRPpeFE;20Cd8ktpksT_@$btrZhA%%*K0G*K zS5KitL=E~o42r^xOJl}bqqN9pQcu9*rBNT}%M!3vwByDS$eEHC0^KO^WT3O<_`U5d zlS8N)LA0w{rS^Jap=8vAXri%z&=zbn34`^5W>H?blGyBC?OR)@vCIJee+Pj7zjubB z?Ax-ojj`XZ#KzW>xckg<#1aKF7Rxo$aJy^tuGIir5N*XaW)$!cYnM<~KW`lVnmy03 z3oW{|2})hOpo8X|m4MUD*%Lan1r`b!17Yx2VT3$$fR*7pE~|VE(0~9EMPDu)W2dI} zI$WKg2#~TtL!n+thM_eYLTC?oWK#pssB;^2w*pq3I+}DNRY6hGSF~G?bEebTqz~4S zjIoC(wTf8pY$1M?Ju9{M=dxk~wg#cqb&|bb+f$b$cn6z`$jugchM^r6fGj=3wZ>bY zJGW?9BNVIplkEx;b&rovqrbY%_pWGZkL;WFEC%gMx1@eR^(X2&kf?sn0;5$!YwHke zkPwhEG>kR$k1W&`s(_iFF3a}z-mAlcYzUvpIza5)%&jJ?j97x%gxcMpY*zv{yJp21WKZ}EW{!=m(X}QP@nWu~UYMrGDR2k`g&{Mm7Mvu- z?SJ!0YqVI_Tfp@ef1yGy_$Ti&iJIwv{fYq~ORrxR^pNp)mfo!A9;6^I0_QX26E2!* zj)vJ*B)dC`**dQcrTF(+o!(>5`S5>x|A%s6=XX5--hb!J0=5%eZ6dG4C44`2dTbxR zd^ICuyblKVcpzaQn}Z9Av+eNicqxGQKg-_&&EyOh!Zu*&=fAV`h9dWzv2DK1U+*#F zqmMob0u5gT1G4lgRe0e8K7>+u_4j_QF58o2!w6@c2Vm0t$#VU>0@^lJbNK_hm^Gj( z{L?o6&x-JuPNpT(_d6k^Z|GC-&R4Rh$UGowl+M8vvNY3$n3C%uNcvoSLjOrM*}D=686Iw(&CizlRAIDn5JiNtw1`3wX7I*BDGIdJx_rF^ zz8iEE%)}$wIP2D0&FM~^irhbb%syV0E$9{fSj%ToTE3ej;4>Y!OtnnMD*?b}3*xkP z&82RMQ6XA)+&Vu?$XnNEW3={NU{i}( zwBk>){h|q@E|Y~P9C_1e4kHsrqAXPv79NC9Rx*s;Dte!TDVaLD_qAFqk$|&7!xm_c zP}ZW+VKPmGr~G9X_Y+<4#K6s*P2a8b@FC2q=?f>2{xfQf=M}WC2{0}`j&J0BEz$6oH_ZE*zE6n5uGwODsiIvo zfsEfJb?woTcA1tDX($WN&~A4{-f$Cg5sd z^haU;FM7Q9-^6(5Kj_E8prwD^DqarTTkrz_jyeA~T^@PkJpx1MCwU7QcV8JzC~yriLk*7eWON5G5v zpPT!eLhmpyjKp=CjHR}4*%4b< z+=*sSl2DL(ln}S_XxZVHM(8Y8foOF*4njlZ_WI5WeaQ%2adcsB;LU~=+ZN!>gsLLi zeJu3SkZ-Ka1GXZ4%?QlserdN2W9V_G$n6QGXNmOXnCTR&6U=HV6hd7iaO(6_^J>Od z#YGqNzyYb+>Vwp@5rswW^kz8)yoe7O!#_TI>W|Mxinw*QRicg|oiT(%fseVC{3lEEuO&@=f^?Kqk)UwAl zGX!kwHdH=?yDmCx%XJ89Bg)*{r-Dp;*=^$djTSNp?jARA4TvT?xn2)fo!)>HuMi3- zag#K^OI{^S&GAYaxT^@&9>^|Q4hN-PB5E@eX_=*`Khw(Cq-RyFo^)0J1-g6Y9;bs4!4U)m4eGGnzhSC` z>M$oK2dqjLl{g5}|Fg}ted4;K;qZy6yncuql4!DW21x%m{}ZPcV|AEj7bkxU7&&!m zH>QKe4xu)>=n&B=8UYjk`}2`z9ANkKjCr=$HycWr3aG6sc&hSc7+7umWVyqJn{6jx=OrRCxr7-g<;S zFr-ob#6mEe@CG9PQ3vlqs|_e&ATrJFVlIJD#~ejO{v42L=%h9YrT22mdtj{N1T$ukX^$0i6mCPz3%z1>i4D>aT0Y6Y>aRMI_ zWh7PE+jQRZBhlA`#SfF8I?JTsI(8%3F<<;ZJ`nZreYEMb?L^!(cgmm0`dz~RknBZi zz8)j-dwwbtMU|)qlS)Az_(FnCJF9ON@*BdxXjY);$!7{?=2w9ak5`)mZwB^kmhgAY z{!C`Fyc^Jim;m3{KQV%TF4zCNa1X%m1GM|!<}g4%5(Z6*8}kEz_rF2^eG3gPr^Ufr zyo`wu$iv#)THag^uzJ=JWXzb>20-r5?IGyYK;)={KzBee_M@RI%I<4X#3?|E1GpEO z^7DT%F!(HUw7#f?8il^Fg}NQTe2A%)juJ;eg_W>p-rkBMFx<*3#58WpDg?;(|KTA6 z4w!(V?7`DB2CT6e=^E&MnmdESl1)P->;H4t`aP!ad!*BFfc^A|n(@CmKmYs~{-g9y zs)2iA86o>rvmLCjiq(n5H_hLPLh`2t6vf_5XY9Zcl-EPk8SI&AB6p#w%JfRfz@JHPUxPt-N2hMy|9}J zp>N-zHvMcErd?d0@L;KYxs0`G5H~Cjti|olmD6OR6fx zsY+--B`%5h#S3a2>J^0its=e_2NM_+m>I%S-?S}aa)n?QYKc9b*ktyTQc~t5R3-gX zZ|j%CYu&C0s}|lZe)Q;^fNgkJqWD&ED!_IAj%ssB*C0MatFj6%60% z!(L27PUP38^T-7fSB&n;L_6%N#InE=39&bP&kggP}DE* zaQZc*MA5!{7G;`G`Lo=L_}X9{+p+Cll3*SVVt6-KRepI+qaQwUf|AO7HAeh&d%J}> zr_jah_yYQ!!edIkafG2`P1Rn-{Hxpgfny&MfQ~X@j@}u(TZTE)AB%n3m!GcM8sI_3 zK`OK(dyuL*nUgF1fT6r$FQk)@B;_jv&t|{NUI}8)YQN;|eTXjDYFS&7E}dT3 ztwaQG+1~Oia}b^YTxDAvZ^6E3`WrfMo+-=hoUt>A;d-PVQe?nOt=?;K#W3-#1_I>j z>zCahj{L@{@#N>HGtdd49j+sP#a;xGvNU27`L;A*BlY%R)S=zyWqAY&Vq^G3vO%-` zS=d^c)~{Lg2^nXPELQCNOqM8dp})2usfhB16(=R(-zy zxBvyZFsRuCX(I|&^odIO+A6@TmTdA1170cI1k77h04)8u3-KEcUCM`7Hlimqcfl6y zl{m=mlK{BSfF=*gc0dvui5m#w6CyaS@l!FF)T}B=ToGEl9#>j_{;DgtK>m{l_^+M;5#l$($;xe8VTx3Z4^gRI@2V5fQTsdFAjWVowCVZ7~$cVS_`o)fUj~opqh(2Nsa|Cq|AN7jh{v)7+9K zrCz8Hfj%Gl{%)j&Yjp3|W0QVKGN8$3 zXjq1aTtnGb4r2cvn_Q!l*NWyM&ItjksYwg1 z6jGEnWwUcAVg-3>Q)&XIlbqruWgMbNPe#8YCY)izlAV?GHGSDkB@DdZMtEWUfjv=7+Idv!_Q>L z+;&}dwlPmN9KNjBOOUlKaq^qYc;Pexkq(Cu+P9-MePBPG0T0GN+Aeu$oU**9v=;!Q zI=BAenEnYvQdcgiPE(%i;Ur&xm1GqQ=hYZ*AVU>IAV3G#NOf zBop6q+2>OZ^{b8BD{S)i17#cv1e?-$T8GD{6UDf}r>;?G?szFvXXp0L^@~v{wWpZd zNp4T#m*`hn#ip;~jH{l{9mgCLf2ORQMj*#vaprM4@vfUaw=RtL1f;FH=Su{=%#@ZA zl^Ivd+ji#3S%9nU&+_3+wT8=t>o1tng{jXuW3E&6*=3cc6Pa0^#}8?nC?_q;89Y`T zK(8Zj6)hH{pSHT^ClAKp@Tu;M6^(N8tuGx4(5%Ftrz@A2 zM?-qpL|fof$5b#MSLK9tI4E+FNR~rR}Fu$l+wI0?aGn<3$8* zzTOW3A`KVX2Ej~AhW7em`x{9bFNZYTRe zVYNQbQ(CO>KgI$rFz-eJ1sFW+BbKA&sRQ>tSlwBSOYd9n$?^hzZ`RZto`0c>(W%7WT7*N)miJVi%jy$>7*_nG|VOr`VFLto?fE8-MT`d_ekpSY@n zz3wWA-#}YpFIZ+vVzWf2)1v&pzxw`yd+7J&Y-N){5zJx+RboMAwVrZlhzT{jyK{2H z2{6YTr@Bhyl=z;dbXURsi3x@2>sKlBEwd{D3a)DIPmP&uG4^;%PCsCwgL_y;cKz`- z7oAw19C9eLJu>le&_Hf&aI}(VohY=T%9sph7D|^6bYHw-4~$VA!XsPPbequ3Q#c8~ zGAy1HshLB=FH#i|kW9cVIoBALC#SN(FtDX?)TX+9)%Av1>xkUf<@>q9Ph%j`AvhFu zNB@wPJhCFEJrw1vRNm=nhAMTG>fhR5*jmr&kR1MuhUrkraWH7y@Z;IksxQiuQqDqx zl}O3n7OPx5YKViHY~{%hKqr5~cPZh&FSUnBa%c1D7=K<)igr{JQu5SVCC`FOprqr| zmZK$gF6*OL-d)0EWO_&#T@V9FCp~0Pn&`J5LrK-Fm2@nTheT&1KC0g{Qd0IZsHuye z*T+aEhZ;NXEBi8RUagP(B}Uv7sgvTyV=oM)-bW&W;%Eoi>(LQy&7MIO*% z=dv+i@1%k*n>n|eA+f_zGZ-7T&i#W?_2lML%b#J%v+HrrYBqB(w~_j@o*Sb?oxM$A zFPgPu#ueTS%7OQpI28(BY%6FLmpR8<#iFMzE}(wUNhjYiWHE%Vch8W}aHb+}u#Yu#kFEfprE^mh`oLakY#c)WoH%UWY2){&8D!jH^n_ zZK_-^^V!F_x4D&{-DRhLhr%6Nbi#M3^VvJ^3f#XRe*Egwc^nWZ;Sa9a-sphWLpM(eo4Zm z=hJkmD!rJ|?M^|bd1jxTp3KeDpiYa(2uh;*oDn0k%(*m=WC)k_6(%0=ctPT%I zpi8}+HBikl-biRy8lXnzEqYKQOj|afKG2S6-|t!n5J0t%otwO8^0>5c+0doGDIqT$fb3BD6G_}R=csmyyAK&eIo+y;1M(9adV6HWNp3^B@>H*P?w1_E8Wcn(%0 zsL+PmICMPwy}$lu%-@{S+w}w_;OxTx{{~HeCNy-agvzfgBXNDP*%Cn%%@_bTw9yys zQEMXx#z<-?^yRgULz!DjwAzNS3A8jh1LUSDvvig%|9aA%@V?zGjCdXlh$=JHYr zw_O}B+#b7J-rtrtecr&gu)Ix0Xp+`qcztuxgm4)_GxbupVf=e#^=Z+^peUfK87k;2 z=r)X8{kNrpJfLjoIwr4R`rDx{={8JUv$uhQV9~ktpHj9FgJjUT4W2k7Xb7I@{i+F` z*!^t!o|q#p`<}GC>hOq^Ao=Ks|u4w_^MBF{slKi+#lu`qm=)579@|1XSA(9FF2Q+#8 z6xpbtz4$ka5_EaAtH|W^*m?!;EifVivkJ-Uv=|hnPtt z?zyImzFJ`xILss;k)9@%qGroicl}T@PvRIq_s>Q!Anqd^<)#xM86!_|=2sN?PWzH7j!qy3MA_ zgl7q4G->|%v6%(;zRB7i30GxFby0DFxzKb!FJL0c;bvygF7S)xgukY&k^1KI`J{l? z27Ht}bjLi*ndiAEZIchdRd!kbhDFo zyO=g8rQ@n$1bd_(4eIk^CU;8U;lHe;D!1}qPKKVu&uj3vr+(EoFXLJ--J?druu-h9 zC{?SuFQUattok`|BZ}^n^?b`fIU4@nv+K&gCB`{u%eO@UicSpu zk*`V&iYsy*FQ}R?7LqT>9*DNT_L$YB=NI=PYvrW|}N)R)OM1;ka8ZH6tub zL&*t%BA!_BEDN4L#(Jis!0z%>wls!I>Kj6o&A~)C;T=UjDgySA#!+71>~xHC750zl z*+a1md`^j9=e1~zYmXcST?*Z~`=nRdf;O4;Y?+S9M>uD%$W%OQ{fE~nTpjTjm5#7) z5ld@im2jlI_xsM?t$yDFFoIEHSV&v49C{DV8Y6{M9m@Pv9GWoak~UM)$pV|b;=h)y(Yy> zg%k3XA|x1#{GLrFSh7;L`!vQ~Phk?Mio|JxB<%;_W07P4Cs{OenZ-5257*IO!KbN| z6uvOL!OA?M@`13xWNd57Gp_)?u2b*oKl`3v4siZ7R>u@Gq<-7Kd>)Mf<}0ZbX-a54P@ZzdK(@OYQJh6E^6PCpv$aXi5;(}jc$R1cGxVe+&yAZ zF7Uf(eKkRstO#hkPdI8YKqLY({TEm~J^E-;R7IqrJ1qrmq?4obyTyzZc6+=gv@`6) zVt!NUhB!QSM0(AY-^mgJB*d0))qi_i?su%(DymDbOQrVEX`zVMa8z{^G~%rfmkeEC zw46WphbBSGKi+)K@6B{0bZ;o#e1s@=?yy28-`mV4EF`UKIyan#N;JsI>sjQ2xPc!Xm_b~nVr98Y=Je@O+9$SeN zCjB!z>08jV|77?(rq$jjM8DkeY_j(C^3Vj!utERGR;*6vi`vHC@Ixge17<9-ZX%2uVyY#}=V+I*H{LQs|!+**SS)Qp}xKc*uN;XpyuxW_?lpozQ+I6h*+n^}`EZ|S|{TRGX zG4H)yY)%j=;&4=lm`zYN*jV3Z%T_%#a@bp_8lA=5mBT?s5B9^udg;0y-u-ixUPi4? zNe?`Raq*X$df=j%2=oJIddQ;N7%=p|#)l1ES1$+WH zh;PiS1Z>?25oUTjRsLc#IayrJAIaVMpu{OuXPNCB-41LSsnOHRE&wD`h%RtF#zEf< zEiNAxxEhL~+Ct1iO@Ur2pOu<)JOdGpv}U(;+p-gb4kyovV`km$vE@XL*+=l`6EKEWmM(C?E|}hi?BGnv$lM&L>n)S8ApSh zf)%80CUdn74!|6`jwr!hf+qP}HleTR$ zole`fZKaX6)3)E0z0bKf8|OUt!~c2S{b7Dy>sNEms##T|#)yUxWi50r1aLv2T5&Bf z_EvGJD{ZlhRVZx(7^FumHHwT_k4&o_`%C=^dAmL?Hd}|l?MDNuHftzXZ&D6J1|{vE zpx>a~4=|~jysf8Yuz`e9b;$|}BZ?Kps+DjHDmj4XfTn*ytFzq)cQO0N#K!aucrDQw z0BI8A(%c1v8RQR+U8mZ!Ee2n{PwP|Wk00eDTnc`SlAcvX4|6F4mc-5rnV|bKQ!!t# z^tdo!2k8N{DHQ(=&+}G;X@=+BX$$1+7KupApjF6<|aL;2B$Ne@l?d9Iv3*0{15>DfXaaD#07->*VPj*j7 zk6&1Lm=LlUjOal$XTTb63-cmov%$vdsCr;GsF2`23}+61SnN{_kuifAPj+}HmCywF zPEv~k4#zZyy(U0C&T8MUrF>}L_zS%V#SW@ajp|uK?lO$-$z9<`*Vk0-Gp(xX;djth zRWxPPJE%}lBGwF)k2W#eCTX`F}UpVPi!!!(m)mXv-c3IEKE;jrJZb`q#K z#2J0)SDWi56fO=u#cyB9)OtB1Rym=_kY@nUqLuo zsx|d!$lY}SeLb@gqbyPq{BDKrs8=9)+v9SFbmjSF@+TFyUW zKXy<0ey)e*biA(1;Ti1Q;l$gg)5^^#v`>d;cH5sA^Es_$u6@|=pCk*esx8)?x-ZnVBQ6^czo_cc|4 zv2-gx7@mRrg+FnN81-uA%m@`4if?*~Z1Nc;C&(fxam$Gkh7!%hT(V*Y3&eJ0Fw&nM zB^4&GuvQlV02}q-MxNYfx~M+HE+D?psEOX4HH^*k9jXIJoDm|NWE(+9GJiGxu4`-_ z<@!VU>UA@i}G<+Y%6 z&%iv>A#(0AQ6ZHTt=7MZ{CcI4PuI_Pvi*3BrPtt6ok=yyeW8l!0&|e99OeYn#$f7{ zmA^#ryXy|&1!QT}R%|PSBX|&Ii%ABYpX8i0SNqlvQ(lUYBYCRhjt|iox++zD)sY-R z&Tsdn57wGXOmw9Lg9e0?QzYRIgVJXmV9~%GJ5>tC=HGTL$q7ROP@{oh9G!*87jk&h zPHW>Gi-c_zmio#}b`EgM9anp>2Dv)o_dky3e(slB zm~eo6xgIIe3EI~39?X@CBnLYUw!hOKi?9}`nXVh%zute{PgHJvhdQ%_B7@mlU=tLi>LVTNUBxLL@#aM>Q$ zH}7i;_|PGsp96L}v4TrcuF@1oqvxCF&=yeSMYkk?|AXR%GZ&K#oS?j?uE;?8lGW3a zY+O9#TBhnLmS1Lq*{*eX4aDDM&Zeo9!PDXU3U4sMkvRL27R1;f8zK#%^SaY1xoQBG}FOdul>0GlK7zTM}#rMA9j+y2+ybu zui%jRk_h=|nP;r`g$YO2H1PLG$mLu*hkW5S^2GdtpGSSmvWW2g(oyH!(dD>0ghQhT z^Q)XkOYdw}_9@l&k6UOZNPrSvY$rlNgpJ+y$3MENGZrEiYe3NW00{g4M_2W0?EjPE zw49Xr1bjgUmVkylAq1*V(pMn>TIjg$u@WFk0RIB?qAdB5w5P!@Dh{jYOu{e`42ekbqI$VMu%3kk1!0>Uh;Wu#%t$~?B>MyAcjV6E< z3CXb?<25}(@8Kn}A`%j7ZvB@KdQxiwrNt$Jq9BAq<$%KN{BEHyK`fY2fj*gL}i z9AbV-68s+JUF2k}0K*tQ1=vOfH>I9OU)fJg@)jlY5aIm^LfvDAkyNEsrKwIPFG<`F z;16Pu%$z7Z?cuIc+0VuY*B`E-H(+_;P3m-L(f-p(sgKLkVdDiPd|?IPpWD>cp1z!OO}~4HIWm$Z=cEAIN8jMiKL{QDI4Cl z$yM2Cgna5Hwmo@E{yK4=zreKw?ucAiomsv>WnAKAb^dToflNE(lqmmIv z^W+JFYpsW%tqkq`NlhQt1&w!^%qSp@Omh*&{!d`-)q#0lFo1nl01M|YHWF175z&(o zk@+*(mVqpoEf^jh7}{^3URN+*Q82cQv9>WJZc#8(*l`9?Ftq*WL;$i16;|$#{N6tM z&#V5Ka{$C|+eUm}{EVShtfd0%UszMBnlRBEh+vG(5H<`Dj1jgB^i4JljS+qJuVA(Ez*60@mNy&%)ir_;0|`e@j+Y z{YPYU<5>6{%6~#dgZ{Amm90!zA<4bv{wHA>6H{nz_%=f|L1!@uBPBU%;UsG%No`?# zRGeR&UzlHzA7-cq<`PENuc)%0-@$N(@A;FcOb1ZmAo}Y$_}6#*`ULxpsZ0#Rm#h&s zV?GvxA-rD18Wx-6Q$2dFIYIr*Z%kz=C#KAO^Hswd$tC(R1 z^FhLo?8i5{JH`#^- zWpMok&$cOp76ZPmew=j;1aH#Up=y@^Mfy9*lbywp&sf$K$OWG#>MZ+RLAJ+ARMy-= zi5A_!H$m{1i-c};&Yz@>F#c$yX_N(=B-V`xgQMHTh573=4R<9*7wez5)V>+TC!HF#DeG*LHTP8V@a_ zb-fe7gvz8;t_k{^nKPM+MMJELcI~~y*qin+qRf^*XV{Lu;~Z$|6F{;Vk-bvC@nU$9 z@6X^pgsK9K|8a^bgAxpVrivvbd{7g_c7c~}D366@O`3H`j=z<0u#1>AvpVZMec_pT z#D<%sx)rUuW1>3~v`pSoVy!URERYXw>1CsV{&X9v3P4_TaojvHKCbJ>2A!H0O=a$g zZ;RE1Pp3??7xTU6{&YVqm{H-?v zKdfqH{mdBUTLtnt{`=bR@Mqpt6f&KCi2kQQ85w-TVz`GcScN!Oq4;am3~EcRO$AY4!n&n?DHq z&Gg`UHMQi`PT6&9-~wssScpxE!CI$;*>Do5`5B`h^XOj)d(cSPX9 zxUyzT9~Vg>@v8@O!h!uU0l;U>kD>tJGq^|QcIgg7uUiy*tXZgB;eLQK7$V<0mBOeQ zY9b?3ps-I8;L@uUum~@HB-I>YiIM2SV6g*3NQyx55Lj_wu{psS-hYyt^$1*6Ndoxf zX2AL@OkMO}zWG0co&j)YxZim(MZp>p$F9fX0i!g4Fs%;=(^2|AqxHhpPG2S@@|NUYA17nU-4Rb>_ zL3pE;smVA&lca|P1yPoU$D*Tdz`1=FhN77PB|29n({MP0V^T{w_tf>&0Se!C{y{{O zL4+#gF}njGh;_x8AhXP(L3Oh7(vkKs?(O88@$t3Y9kUDUnX&-Y*LRKDh~3k@aWIOz zDn+lI>CrwX(icP+X2^cq7xBqB(Wp~;3)~pwg1`ul;Q=85e$*X=a1Ym5(ZvYC;Jb)= zt^`IrVm|{i7d7tIB18gX@PJ2(zHYo;0TW#BhK^)#7|Yp!FixDka!*sBmQei4)R4?D7tVPMHeR2VO-*;qxZZabBy!oO2`U&T`bqa zbvmC=!mak~tV?CsNzdjigdZQbj57*@Rl;n7^P1SHk0$DO&LXv#gPgvc;|K7{Au{3$BJ zJ*=jN6lZjxOdq;|${n*Z)Lo_9$~`NL9mRS;2Woi=Kq>)hw`qfTM&XWr23efrrE4bU zR@`VO_Hpo2ryG5SmtNPFM$8L}r7|;$_a}H%@4#&$Sqi{V6vaJC4kbs}B&xR`y@>bc z4XaGWbJz}*bKLixYW7(C6!(bylpFy$U&)LtX=Dg9RT%svK=;+3NUXB<*XY|ut42@~ z_S1L*pox4{>=9?7e0xa|Q_=uM9gGI3Vj9_sPpGe_*=$f%LGQD)x*Kk2k3neYK@rUK zy_IWs*ub7&+5 zKxW5E4oK3qLU0(TxzMspP;QVULMXc70kW*}`_)o0gv$tsK*%NC(<~*fr zu0BaQ=lt029{R5D+tMv4VFZvoK~zX&$tIPytf|WTT7(vUh!a0}Os~4uS{Wi-c%m9* zp598(&*6pQwL9WQ^MI18I*yx5HgLjoEFPKSxzN1?#Tz#R!<;A!tE8rA|NUJ?O7j&g zZBjI1WyKOaTT1)rLvq3MWD=b7$%Jgs3QiiM)}m1eVGfl?yeKShMaE+)8dEPDY|49d z@P0MmkJ3Zoz3HQmNaH+#?d8={WM(`_kWm_-r*(%w8B0>5Uk2*M8zhF(f|eC#<$G&6 zUG^#vNK=k+wDO;K8c;owaC9D3XdqnE+Ko-^%auUtmXd5bKqP9}mq(Dm&1;&MS+tu+ z%CqIN-Ard;@8yj-SJYVu>k^}iD5J;OkiCVNPt-*^KWY+g$kKco!`FF4B)@V?QANKv zJeEGQ5vDCt$({ek0crsJOs>y;IuT~&Xc*Q9O_%%Q2TVS3NbzT4w5cOo>vaEucQauX zIEC>GOq#d}_Isb#mJB3)#-t>`Z%V36LihHHM4dh!i1xU*Ybj*08?qX7`B6XkNbc@o6H6G3>n6&l*2)?i*LTPm-7ax4m7m{n zFp=l&wiZLn1n1zLfG$oGwgGd&T-|X{roG^R-1=shb`^U&qpD^^d$=gKgws&AQ?>i% zwG{3F*UIU(B-z@lT91l1u%L>LqYBdT8N~bern^x_+L*c_;rqP3o=|(JSA{{sR9n_- zh82OqqBM7wKeJZqc7>EWGEHd8B%vp07*}Ov>ZRH;&dlre{qeWG0 z0m(08=Zw7yUFw4{W}#`|MRQlSDZ|g;y2r6c?4c`7`6?zKmdbJY!sS!M6I(DlFCTFq(WTiRx#4Zd&hH7 zPM4D*b%iTApMw&rq-8*nUL|X^1g!u?ig|A$jdO5+qH=v5ARX3q#S!n0&Xkg3Z|OYfNb?3N)M0;B zwPginvCbOi`C0xM|1zw_V8vzhqIr=8E7RB-&LdiTl6}Iu!s#sDYgxg??a8?kgJ!l) zGg=5PYOI;~>yrS? zx88sew2PFW=+2iFP5Mg4u^8Y3VQ;xcJcf<)CQsK1Y+rN+bZ>6s%Peb~{kkGT&mkDi%ck=HNB@c0A^A43w;5az6{+riLTRtxmeO-Ap z3v7kG|K-&E%zw?p-JjI~`ENDY-#$gG4a}VWko+pIC?X3W@Cwmo&;)$=fLK7WK?*6^ z)%pp&0x2xtpW^$1Oihxe4%^r9PnVQ{h{fYxDsGVkDyRCOkj$I$85pwoiJ^AIr{&4{ zEbZauX$Ah>ew@OzpD(He3ZN_?O1nuY1bym_XCZVJuV+` zg~-p+mgD>Vi2(!(BXo4o{@9Q4qlD)RjG!u!XV{FbG$n+#R(Ww{yKqt45cyE2_G7sb z!PVSCBWSar)Mgw=$*T4#+jyp!nvsf%sm(_W9H-krgF=9xQprg7PGJr2p;^MYa_>VF z^WSFRLZz|i89F&9V>Qf?1?iDm^tm;BCQgAvjm#q zjhF%aC?DpVV#)qGvVr_=+{$Sd9U_*)*+(4GV9~n+6{43l=MrRbLvR$2i!SJVA7=sQySFSxVV9Oau>zi7UzCoRlU1IPH zQF!plMLIo5VYDENQ%Ot0RWPJ$jiBpTSWj%5PySPnUiY(MOmna-6-t4EEG;?>?I_s( zl~&T-5@`=8vR-MGNI()*cgXj0IHd78Q_2H=X|ODIxui3a4@5cL!!O;q{?fbexn(sD z%)Ktlo$c|YJ!cz%LtCM8G>O?If7@qyTPl~Lyd5*4Ph zeg0E%GFi2rTQU&`% zKc$Lexfm_5;vNMImY&GCay8ou+_u$Xak8=vT7V)l?Z!be4Qb((9!Ma?pEKpMMO{&~ z=^h3bLaEwT$kaBm*N-<&6!G${xGzsIRZ3iq_j1L0t?-`7nkz?{J(z)Y^YhK zIeR}8x<_`V1IWEhXlZxxiy!JnPNC8>6Y9hgM>M@hN(8mHqM3dIbazP~RsRI;2wMm22**`k`S<^rHz=0|Xmq zIT*$Y6CfMTUXXomK37h)C?>b4pZo+_UC-~9oHAodOXME$WICDZb-bMT-12quy*a>l zfhsFsZ~BKvxNCKDQ<1clZXtbFI`0VQ7)T&VlV_j|RHBkK;*uCOad;#M!yJQJEdO{PBWklpZ|K%<~DQnbAvlmQ0cgI%T+5-2qq>+I8AbAvC}SeCj?nrze$uLu$tnqIUu zLuDc4?oIJT^p)`R+RtwLXx1q$Oo-MPjUtB_vULq^=7JSpYfv#z*T2`j_ZnsLC+bzV zI*PlH5+%XCsMK_`OxCjA(4M;#^JoJp;r3_3T`3FZpw@ia!6kZl%bR%ha==t(+!P(Z zSarO&+`SV~Fp&_>V!y@*OUq-%dG=w@7>xi64@Ar?Q^*(zxIVg_R+6pmTb-tqFiZE+ zoSf2wKZ(4Bdx2bn>-!S^EpqOwJmgSos7=Thk_khKne5<5j1!$lxma71oDUTRM&wLh zxcfx4z$ZP@i#dd^@7_Nu^&QJYeKU*2%VmB-nSmF#<`2}KI+k~vZkEA=s>Xr&2A5z5 zJkwR?&kj-(90&2hgoprgBev10Z;q~mgy<8fc63ldT>rse=elqfWaSAXv#g<46G9l$ zI<@PdJFKgvK>PD`^^5Xhb9mycG5xG>aBj4miElJ|;o@trkt z2XyuRfilC$629^-i6cft6&+%-u$SoM>AZtt`iSuzgv6xjz!8TFzo>ZU$@BX};U97& z5F|1p93MBf`WCw>ssUDH|6|b-FTlC_r|{7iK#K5R+{3R$%YS2cH13ESzn0C7{pf|# zT#Wc^86O96Iq)l^R=XYEy62=m#)>%%>; zy}uAHmZC$k`0>&Q(Lfo*8mtDE9Tsb33ZWHT4iLq5!Q5A%=nSogTnj4e_*Gcj>XjrYmfMU647xp`iOS&C zss$`d36rE61q@%Bci%+BNW(?s!#SK`xlvk|3Wkhww%$qjua=c;d9syq!lz`fI0E|% zFXAmHTivaw)_-$3#T4MnZL{j?D+}}8k7Vt!BCQ*E&S6bJ9O}Wwxr(zS zP~V7vz`k!n&2~_8*WUU9Ly`?N=MBzilyih#h#o2@KT4Rim)Pg#BaQkc6_rGg43){D zmP61QN~3?7N0CL3FpA)f@K`)p+;EkWASRb5#_j_8k6YDh-XtFms9DYc)?ameB!s1v zJ?u^X+*ymQlIkCSHH~d{S@{c+`eN)OH-F4x)l3jtQ@Au&*~QbSfl zS!1t+OeiH}G*4U(U&11bduLhtY3g0W3{v$c`Z`?l1gpqki3NtaN2P1EK-cn6mvYVD z<$HM8(?Bls_j-LY2RoiJo1XwpvDatlE|lzIi~$o=z3mL3%pTOF;8Mp_I788Nvw$YD zJ145Wi*g($$JSg!L@7rXoo+X%4mHNmQ7GGD^#OP&Ul;>W4N!I!oRoWovXRYX{~VMu zMu2>ehzLWU+K4Nm&UdOpbhSk^rbE~oy5uXvU_u71y6_1cfP9Z@$ZzsJCftJzi5SO2 zKjnL1my~o)-*<^E;P!eavr=J;RtR@z8)pBM?}^fjavrXNI&>MN(*%{sH@EpI-xGWA zZcLrtluLS4iuy7YQ$h`~le57<(X>R(l)T-PN<|+!;9mQ9tR&G!>{5naD+xCQ0?OzZ z0prc7^+4X?%Ev*~Ez>7ghze3Y*d`^1xsW?g)k!Ys5J%9^evl~#;wo+ESSB`%k09ek z!N1n@t1l`C-yk~F0w&y|GDsBs-T{ePGC!hv|)zueH+ZrIQT`^`4Gh=i{tbH4H*b(^5FY0H|L_P+qPy&&`H}cAAXRjaXED?5^ zXU*Bmm;mJ*s9T3)z|SU~$1QA3H%*&tJ4%QZ=`7*z{B0`zyD{sx{gP{;q?DUt>Q*%I zwx>MvT!ze-kA94Sg*aN~1v$B-V7iOC)Q86WYY6M=^fBIe5i2c(In8)FYlW(ZpqmFC z3P_+rCEj(VBWU%c?BaahkFHt^%^h|^)D}OY?E>*03?6IsUK| zXaVGMZW1%Mm{|DKoY@%1g55Y;a7P33gtw;>!84-!sS?p6$4eMKwayrJ&{d1| zVFOYOGC~&*o%#q5eX0$7BK>G{eLsI>aO7s4w3EhC_vsyfDN@0b6i9t1VkumwpnAb+ zM|UhZJ>tiR?Y=`{Hj(eHoipxcq3>`lS z>!9(wLYO8#NF=HYk+-KEzMN*wGG9FaI$|3TPygzO5k33glkqc)-y-@VSj(@`F26ws3nF+1kEyg23f90Z}DsYovo3#>yiR0AtY zRY6{;4y>0r;?CQ10QI7+QVzj%ZE&)Mmh7N)o#%BnB8pIpJ!3v2 z!AW7bRj!Q5@{iGyNO)VZdPtxk(9fhjbiRJZeA}lNO?_&^4#6K;zkkRk#Ea8~o52*m zf2SPBHc}ZXorX#ROoq$gP{1R24IbZjM5D;2i-0MRPGltxDo%tz6h*)vReKNi$4#nQ zbmHQNJK0Hc%O0uzfoBW2h(lv3|EHgkOWi7hgrUX#^Hi za`b>CwC-uCwX#SgGEO1P)bJTQ2qQplZTB{r@?8L{$G3%uxWMdMm)WT@D1$cUmb{f( zmIuC1=wPr(u!VaeGi4%2AX7u2~z94PD<j~Nt;b*PkVH)>ni29<7HtXfw!WnQj6 zG*|D?x4XS9NY-|5H`0!DX?jSf6&T(xc;u9Gz>O$Ba*OrRgF%$K@$e|ByiwN%hx#u2MTo-{PPtYPQt$7|N$2-+R$!zi2V zTB}bTv##n>l3KEtn9r7eDMMC-f3;Afo-tZ*xz1$J^&c=$zDTLm`r=wzE?_Y%C^xq} zfa(^47k@TKqq!m!D*XD{3T)Z!X3irxHw)VgE4juFFJyE|uDZ_r^;K0#x>gF*un9|= zb&mqg(v%SfB*P}c;bPjk!lIwa4ZvX6;Ag3c4ZMzmC?YZbz0deyOhdc2S#wTA+)uwo z!Nr1BglOj0N;Qv0v+Emkxx$1b(#sIT>P{eqpSqf{R7GbAW|HdZ0BrSPChkwSvGIqJL)AJ^w@XXye4D zMSux;fifylMLW}j*B6n+%+i?EltXwcU>N$m_ciJn*JhLv;}UaH-piHFvNPo&6vRhq zJRkr>$kYLWHu~LSKOd4CPtfr+MRadriCg*zkn=+BGx z?Q}08#z@m*F`HQ>f+anT7_ZPeV&`W4F9?_ToBY!nK}_7Y5e3mXR(&4si5(J;r*f(e z-75Xi3U|s~IwI(6tp#}9<@w}CuNt|=>M3-7j+PO0xAK{J|ueJM)A-hL2Wb*b6A-hvvexD|GHq{Bi zDBarf>24yyINitC_TT)JAj5G>uSxDedMTkd(ysi#rM7$3b)_EkTQm^;~ z^io{nWQ11Vl;6NYyzaD@owoh(a11DRS5DCwV$1`Fr>Yp(VxU=4@u(Sm@A3~5L6!nb zh6NNKAwUO_^UifBA?j5#?_It3R#r}4%4NLVzPQ+X&@Jy1IhY`by|@T|cL1)G!{D~e zYC^BTZHcpUGe#2TD-gmKKpA2W40;T3WBrbJeX?Y<`QW+DUnqvl4wFR?PjuL<(=F51 zq4X^R`4BH8pEw>mZprIp{HCB>)HI=GCj&C!PB>b!O) zEFXPAk3(cE2!qX#d9M%nN1|KsM=S=W!RC^ zHK@XV5tV0DuFc@yJyWMkH=J9(3}#_*Y*t36(XWE|nJSm-1~`_ewNAxqP+4+Qigdnz zYJrrsPrZTz4#g^9;r{hd$jIwSOUOtl|2bj%{|gH$HotL*jc~Soc#PTe6AX&{D;PB9 zCm2-aZ@{3dzk@+pe*=SZ#r(eogRaDVUW5QxZw;{U{%S#431tZZX$eh{e~1ZVKLAX) zkGXYtu#LGp^3#T>zuGYNrww)f#)de9zX595eh1Y4Kel0gEzsD11|&cd$0_$NnK_ zP)Z>e7!h!X_WeJALc{f%`?2WfTI<)z(qmL z6fa`%lbIf12!b9)L93!%W@@oVh4~XyKESxw@xR?{RXtH@0kMCGDSyA&XlHxd2NVC0 zn>_=K!~b96v#hF~gs_P0KPo<>qXDGSkI?@q@!1x`#_PZNMpZpIK}kgs(SOJp{M|RA zot^EV?i>yLLwutLR&CsWx1qe8w1kkxKg)*r8-Rx*&hS6PhA1LHB_4qHVFO_Ob!bRJ zQO?lP#OPl$Y1}tng9)O6ss2?f!Ff14wGxmm{{4K=zyGqh ziM73nDykd-A71W%KS;EYI zGb+}cQB%H1Pzzm{ZD>wCMF-eLlZ2#M6I5#Tqym5zvGRFRxPi8cy^;u=9`!w$KkE+a zsv;xR#kP9NxDDt!)sjBM(QQJDzIeranPO3c(nwjE9gP{Yma)!P)P7(g^J;C{6)Bk4 zxgFf#Pb^Ab7R!Kp#Vu>76R;$q>hvdXn_}MOEY-nYDSR)s!wiA~eHsx71~K7b@nvN~ zEzlgXURG_^j3*hH*D?48Gy9dU%lc+mFom+QTGyRI+DqV4rO&RxBsI~qSH7H_O${YM033sJ}!Diy4X@(^@Ooknmrkv zC3WCjcix*|Of0|Hi=y_ud_#;MBz-#SzJPt^;1d)ZXM?@pHqQ5LjFf^H`>>uil<2b$ zW0U);i+hmvn!s-U6O*!&_R<^q{;fFc+jxU)z8k6CW&Ze_zLqi-4BAKfpC=F19&-qL z4`p9Rzp1>qx)NuYVcUUAO0h_Usg9UNj@ zAcl)KmvU_xw44gS45V8BA))rkCf3+){2XsF=uHhU8+23?#dZOgZnzN*wjyB$HXL$K z_UK{!nda;$xXj&0)+HkvFc_dkA0AGDsd$3S+iI<(|ReP(ixt99vi zzfRyv(CdF8k352Zo>0C?^GsO(_oG3DGE(^Z#gH!Ru+y=C(V)4}{^kW?Y3DE4L=EF~ggnutUmej24)t#8Q@`5|dcH-k({|=P7As^)LjKgTGY)wQxl1#w~>H!K0 zx&m{#TEu;jUN3sJwOYoGebV7GNDWgx`@L$g6h@)ld6Zy&6%O;#Ggat= z<7i_!T<MwbrKCs~8j3~ZuK~ezCKt7>-yC~Y(>R=rwG6obO&kPsRqRrOj zXmZyi(`n^5bea3+Apw1}H|QUg+wsED97U!1pA5ou$%qQ9NM<9E3R?vAhQA7y4p1*4 z_Yv>Rf0!T;d@mnlov4S9#%v`HBF&}0CFhHG$2JISR~20tAb{ip)?cTB{=G&2wGZM77z`2xi%y)YyZe zz+CUo*&n-HC@WF0+r+u8`21(d-{*XD(Ufnp1%4Md_$|f|*Z?BTFS-W^5^SPiqF`iT z2>OOVSbc!B;$0zN{`7<3FS)_bf~2?qcJmz|yubm*PydSa`}fEE(iE{#!cs%=t!Seu z%eY5kCB(`olz=i6PN4;!;hIYdGhRj#9$lW1gd!wf?r1iM1V>EkwKg3k zEK1MWVq$qq_yA(&qU5%R;XS>?74Wf}%E|Be$AR+?PnP7`ACf&Ksz}fe^AFBMt?BE_ zyQCq}-(y^t%q4U-*1uQ==N%RGp4gQ4LB4Kc3U=4v+Kg_9*y7uBD-3;6%D7^jtn+X2 z&_7W~WaoZwj;p&%f7G^DD9o1<9<92pwQ#!#(iF&AGGaY!@1$xE?uP0e%6WX-L-h*nnzL zP*Mb(uB*y-M+4)wLfz_96!#?RQ!WicgR)sdK{bs|t*3GHy0axn&Fm@>ggTmUsEI>dI@m?`Q=`YE$e>=D+J6Z>>>A476ROGzqXHaE2~6+{7ES zL}bwhLPKDEL>J8QjM44l4X$#DXXr&R+3wyZtc)uZD0F39jo9NVO$>J_#Rx7~Tk?M( z#Hw={FLrXPt7Ta(F|mVutB9nK+OkQB&ucVx8s99*i%2Azw%(sky1_|1a8|FScIoy{ zKfk(lEa2MAOZ_fe2eXbAAQ9v)i5E!Kc(ynuRM|CKh|k_;E3=KR}pC z+|#qcyj`pnC_d6yKOfQ+kH5a2w>?M{P0$ zyVmQ3>$vMq!HqtyuqT^iIRMAR>pfJr`+LRrdAq}%Q*M#x!AtCfZ;TJ*p4jqxw$DHC z2Av*n>wFEz`rp?e!)jl$+H)Sph&{tzPj~QRA}oV}#dnJ{Ah`#0yOS(+B@x5#=M@m6 zTZS);o_F>a2li>L8YBoo7(CV)M?f^8^IyCLZ^Eu`h+nV*4>q+-_th^#C}IV~8C~1n zr#F4?I$+MjK!*CLHBH6*`ilen=`#)$JaR*vyzxa$_x)@ec+kh^{Y@v*1 zfy!}d$3hEToesm1uad_3g-C;ZH4%+3goP9KmT3YhEa+R3Tp#EQ&}*^De#5*-c@yNA z{TZjzWSRlq>vIQqRq$t+nN(S!!AO|e_e1)!!5*;q&NSu}=IV3jaj^|Jo6w8Vpa#`Q zq7|60&f{4}-M7ijZt~?hp`zL^q(t1eJ-PJ);+o0(br8+lBVlU|GV5^KwP<3x8%*iT z*TD3zlK0BqZ`Cu10&9@C$+}d@uVOq_-#Y9(1ZeV$))1_>NBOf}7{X6l=q-sXBZgKh zZEbMuQXZG*aHs2h-Tj2r-9NWcr`JFxKM%l|T1A`pE4WL_htJe@d^_j1!5T6g=>pg- z0E3Ak8uEQYDiKVlGU?daiRyxesm2JeouiM7M-aoxN8r_=yg}xXPDm&8Ggx>~-9VPm z6oPJktv#7x@x@Ff@0@;yK}0?oXN<^XyAQjQi{hC=zI`eMyb};+TbVR^gboV`E6HEe#cYo?v83W{0Ele#;9RHAiD1QTtXrS=QBufN~669{7eb5%n z7j_Wp0<{Oi6ajKzhm**_f=HN~%JmJ`+n~-xr6{kt9;V_Sxx6)IiHEVoYaw^z^f^6o zdU}e9$pO0VovTLo;hN$2yjd6h?$IT)TLX6AInaSmG8q~REb$^gninH-h6$ygf$nSB z=!mNbtr{_gLh>}kfHQ!!0GHifskbQ@GFV=;gAy_ruHay2w*RxYr?sW0GYPNMLbahR z3}avj?Mi$KCUDqy&fr|8*AyDeMdVqCrhn^SF|}C8q=&GCU@TRx>x}+}&&sOK8GIW^ zZ#;!a<^gWWnHV0e98yUBVBpU zZL~z+*NT(aq{s_HLUJ5b3-hLN2XG}AT0>6Sa_#yc95;s;BP?bZn|Yzi&WZ5&x^T8Z znp3B1qTy*jAFMqNybZ!ZVxB#YK#oBN5{&Dx%&N~fGm2t--Acg~VO9eKaYsr!RQoDM zU~+eHp*apbVuC`!+n_MP_qSXno7?&FNO04YOquC=2$JaKE{X-miZY6V*LFr$S+PT^ zh-O7IA6*Dx23^}qEfb+Ju9RD7pUktCo@XR5OHB=ewv2phEJhUzQ81+rscV1iQ5td! zzEKLtJ4G!IlF?>3<0M5uMMUc_DRCp(!t6He1dS!)SPjQ7lnf2g^nP6qcJKa}29RQS zSF4{kN;i}_S$?nX`r&z0A>?fhDOi+sxHIDHAx6V^2x(@0X>Ds zB9Fowf)}gLS<`ruw*KWpFV3tK*{%I9z}>VgWzBjD&iSKPr$Pv@b?l`4gy$6XVfvVP zF7##CA?*wSuBgeBywux85rFM*b1iW28N zUsEFp5H++Bs3JT}bG}NaIr-0@L}B9Yz(?M;zG=R)9!2RisgqZ+O*tzFWmPpEG47C% zBHhri=Di#C zjNq9+RuZh2(ipVABR$Q(fjwb1cCbmBx3?nb z2j8Y@^Ai;Glm5>5+Y-qK+PXqPS~6_XDN8NCg&7b~4Pk6yL{{5)R-GX&c5KPx(YFKo z12xT+*tls6e$H(@$AOF0@tLkY&?|$pwX4U>{cJC`k8e*;Iqxbq)DV&H<@;#%K*l2M zH;Y2G?!~)o5MR{K<94DyfuNI#L>d854>6$LTmA8&Cf-y%F{tz?_^KC}@O1;@eETu< zZB3)3l=KUr-js%cUo;1TV_fyZ?y)kw?_g7G!tT-5A@6lRq<1H<;j6L)J4t>U8XWES z=BakQn-KKQDhzX!%`iI1S(Iw=i0DQQvt?*%PEB_HHpBoUmJcWAX;0p+JP(s#K(;kS zpNKcXDLjgzrw08A(j%^#A-1N-1X3jZx)|qdu`xm_HUG@B`c2(`YD{davHU}v#IS#}h z%6ze{{74g3>KVx$>M4&IwgpmSecTdFi9VIo+DNSb?U}!ytW#zoM_T;YO2bKo+LR?Q zrqSG{0vH;(gb~n)5x$t9S#+1LZ=y`P4$&7uNHuHnYmC7jwke3J3~MMgag2s6eRuRX zRc3a2hAHNWCTFNtVqK695CZA>P6a5K@+m71@^xZR?v0e(VUu968jAT%eah<6&s6X= z+ixnv)4@dNJZ48o;A^j$#*^cTwroIG&>^EWaPtifz#-@3PW^9=T4!#KrH|_>Fsu!H zTaDomjr)d{7TK-d?UrEMkR68{K75#TE_NwNuAgB?#zlXqTsyjDnB7;v zgxyxnF73BblXj|@t4xIWLEI;$)nL2C2d^wGnAZ#lSBHL(OZA#oS}t0Mtez@sWg1JJ z$ST(cZJ3RRb1pLT09Ghp!{?o5Xb%(bSZDKP0WLS6GX0yz)=e%d!xXRytiF0A*q8Q* zvv5xw-b&w(8z%{GUqrbHE-VJ-?(jTd=Elq)Mj-U%`h1CVby~ReDS_NTyx*3lAg~y< zxPjSU%^$`??QMqOw`%}*3v8YkSF5Jb)$7tJdikG>{kKy0%S06QYW6>d_|M6-r*}4d zfm?}}iP#wGiz)$Gc@85wwBhI;ke3|b> zLCjWwfGJmPx**B}%peyT%_VR!E%iB^Q;@q~a7b^rTGe-d@#ueUvym0t*nH0B(Dj>P#M6ZXjy<;S-8jPTFtnQA(I=r5ZU`U^Sz`_%GJa~y@QIS%UZry6^zRdR}^ zg~gY}3qql8bg$Q!SRz8#>0QoWnqzLVY+bQj5q4)d=N^Lftqa0!^zO^L|Zdo{h&wi$+ zKcKvYS4r{et_S;9AAxs*@xxrwVak+9B^uoL49h@1)rb{^zMK%!8#a8LA;rXdB+RtU zDv(ft5gg5YvxiON=K0D~Rz62zmxGZZXKUTXYe5|gTUmRWfYX&Ye0C-6;X0q%cPKdr z=~yu!0J04Ed0{Boe8hTDn_$O2g;41b_X^Aa;>jXIwm=XsKbl41d&o$Th7hsw91#lp zn2@k9kwldoiOC*XJW&x;gTHbZX}@R@(f*MFI^RDBDrmH)c;G8YK3~%hivJtl{&x-d zSK*tA)?cx~hpef7!VV!~6EqxT7`7=5(t_qM4Z4<+Aw{^k3Y&Q%+&z8iU1P&Vv(KQ~ z?q}#0YSZRQ8gEBhUzxX4$JI+_*l0v#d;G(!)l@rQ&s^`vPWR7YEaf0xQE~ zk4G(YNy7aLf%VqRT&7+1b;_i&PM_A~OKrSjYrLuhcnstLd1M0kG^p2KYSmXIj}Ii& z7#%ScDd8E!yP9%mev!yb5Dn!iei_qMbwr<7vVJxlyax6K6k6 zg%v_{Vb?g4&Q3GPFVj+9>P(oW29x|iXVKnMA9#YjD8O{OIIyhd^yzhp!AWp2Yi7W} zFB0i%zT=F^e2(7(<=uNmMT+6Qw|WjIi6Dx}jo)R^XF6ZQ&f3FJhYh^>HGqkPn&r3gS4!&d&NX@3z1cb;qIU}~F03hdH)B-TQNC)1v^@UajXNr_~+tcl5REq#nz zG~>YCxG3VX%t$xJQ6p=1Sh>B&idnRYsz`>we6$-wzba(4=}zQs-tnf^B7U188$r* zT@t=L%Y$^7eHo08#!;Ev{fc5I+Jl|<%tVIkI3K}31Qv>97h@}|oNcoXU+scR4#}=~ zoVP2=^pQ%+>s)SvnawGI=|Y%SgQ$*LBHsgB!QL+%@3^X5`$3kcim3kJN(8$dR(lZ; z@vXXgC|ABFlRhtHw&^evZnw-XB~K*-YlxbKPoVY&dD6rj>JBaGyE&tt;0s>gqM1C3 zD3%8pZRLJG(zs9T1>-H8;7RtZy*BZ@_-*_&5|D)bHRrR{z4AaT;Q&!x#lWHFQQ7x>Q^;w8Rs#&n;~Ztuq7yEHOcNvKV4?UB zkSABopZp}z$8&!uB9MXhzApNOvL`G>OG*l9W8o01n9n%-r*;SX_Zpwb9 zS?;C5GdrbKVs)DGV$1;s{uwWEW&|!UxycYl)*)Ju#3eB(P`-=l5pAG{2ej6*cd9Z@ zDAKW~`zwg`4chmhk5LD^CMG$F`_eaB*@0k$(opfcG`zRoy2nTz}T603T)Iz!Nbvj*KRj_+_0s2)~HWIJgB|yvPm>(es+` z$?abiZ!$(Bnyp{qll}_d|3IO%{TI3Vn(aJ4;*Z234Qp-jJd1pcJdCovZ?|5o+TWG~?AqVoT&svNcX!0`r9$8|BNQC?O7i#Nm!u`# zNJ}|0sQKX18?0HOvrsnGK$@i|_Hx2I7{GEefBM@1jSGXQ0Idn5(1Yow|AZSJfOmzG znvdqH=MgXH&PA>;+gx!Xriah6y_(=l4tl^!)SWC->>ug@BRrO*W0%||oKHO1ct=2j z6eZV`t&&mVs3RC775qaV%+Ul11Gf4*)L^0o%01^vn+7_QC`|*->jZw@9&yb6yyG^h zPRW@LVwwe_!|TTR+U{CxjI=um+w2@`_^q?T1Z}g~*RPxZM}_v}cqGLQ3}%IOt(Vvd zwh|x^S81BDeIrZ%5`CWtJtD5;4_q{Uq{(i8g zw+rFrUnLvsE9!**L+N%laWpkBGWjnLP#0M#=za#&tml(EJ1`OZgMRN`9P=|lMCe_x zxr~&Qj3mq;-N|5xYx!LWZDo5lkUOKx*fY3ZWD>#586sz>AA-3Igs@O_0O`!2Go}76 z{T|($>V~-i;)L!ftaWK^(CJ{wpNOVR4X}})FL`mIE6SD3fF|s_rUqh_xp$Ws*u-25 zUpESvQHGk+t?zdg+U7c5H2h;UX1y{2s!_ZP}tq$l3TwXb@&%T z`5%@|w*UP%|EWz?v2sKHvIq@XOE5|D6P|5a#H==!2n;VtC5PaU$3@G^9D_5bq-z3ln?^T6)Mxvs_-k37VT># zsv@b}PKlUD=8J&iTvxr$4v+!wvE{3Q4te$%q$;BF3|=@LI+WyUmRVYq)TLnpO^G-t z=$hD;k=`)4mSFC>k4QGcl#+h5^)efsz7rEGj5tDb^onoJQl-K+R8*ry(5H@$vC*;7_7|o`FmHBJ-+siA8qpF@~t*&~21bEQx zj9v#Z_zgIY!cUrf>-VC#^?MmZG6YxQ+G8568>E^^j_ql#a4({08LG;e1;xrZP?C8fAETGS&)KtsV2! z>9zUeZOp!;BPH2cv?qI0+6;>vJX^{LXX&wm46Mig_&K@eX&X;L-+o`8DeDS;j=Qks zJP=n5KfnkBECePH$Sy)rMcvtW_|#m{Fsuz#JXJLZ3_zK9+8nHFO?1MhpeftNdf3t_ z(vFlGCO#z-eoCuKSI&uHfmqQw{T(mAMPT>xV@^0LU>eRM=HGavhbHa+55=Rr-fNHC0j|p5ojV zr!jT`A8>p3u?F(R=oUj3vdG0Zz}_OqlgAg!IsSNpycG+Td-ygSKwC&W%|q70lCw8H zpmqTCPmoRaFx*iFUl#e$+wYymm8|I9(uEi_qU8%9SqpU_=h5I=ZBWvjQ;ZQ$;+ZKt z{o;71`6vZMCqV-zv=~R4c=;~Sd#fktGb~6}KK z$Y_$(A`2LCFWoZ005#~k<|kCq&Wvn$B~Jc!&@M-tx&0;R)y~y`3v~=<*LRCD>Z&JJ z^u6bf!dO0%v;=unBUxTe9452qVkrD|^j5H(5Tas^T_BH!Yd%6;N)#&uCnk=#e@L)5 z_SY(OpnYlP%PMq>%_^GChAH4Z>w`Qy{A71*;YQfR!cf7TGZK9(5jRauXR7nFMh>}q zH;Io343zr)d%xgE=a)7z=C*A}?ZzSG3j2zX9x+$E7UBd|(Cb@;IL;t@P{{hkEUBQ3IGBr)@spyITvtLGk%h63f8nPe$ZAS)xu8@_9rz?vJ3-zT&dc!~hQw2b0?K%3LayICQNl}ia zJ5Iy*p)nd(n^|g;m0>lFKEc}~>Qoe4D8?IkQq}zSmM{TH3brWbqTEGIal{nZ(Gah~ zlRyu+cdGWwPE`37Ge-WCI@IV9+Y=P@4%P~9@mv#~xCr3&9xJA#+FOb7cWh?Lb#!QR zqu4O3cP_Gid@9HSr_mj$NKz@4@w3faM#;vnl-yY6NmB%jvVZ~5+|P^}EUa?pQJWTu zQX%pq%v=LS=NoJ0!63EciPZz*@zG>C^jfEiq*zA2v$ZCC_2;x0-`uK~oV=RhpYJQc zGW0c+li3T>@#KW+0+K%1ss~qzvygK$K*3nSR_dR9RsC?*RO^DW2KZ}VCgSmU*Kq$` zS^sV^3%ix`fswy`i{<_HjpW}(?7!F#lbTRosEb&>TXDvlQ?i#d3_&;xaiIPAVL1De z{001R_LyZGwh2Tu)~*12NL9~OKugPG(?hqN1=v|agqqcvf3xP=?RCehn<-zJCq=jFZ0{x=iBB}_gU9dS9s{A$F{-HiuMUl@Q*>=g5`1OH>@|#X5E{* z@2m934^qK@BK~L^^ceIcuU?@Z8uX;D5}+QM_$tS}SM+}jd`R>7=3nZSzh(4)41LJ1 z@RdEZ_iyTd?w{B7e++)ejQEDR#OaEKJ(9zDi~~MkV70!5`3EUuil`%n8VX86#-9wL zUHkR-jSC#eSMXzbW()lSM!VMv_b%&)S4MG)2Ij?_G>8H=Qb3ytGs^;QzUS8Uhq~uR z3TJ={XTYLl05eFFEG(sDz?0pzXL6BM$b&bfke3s}=3p^IF-0~>0hVFNY{~{0&{=TD zZYyzSiT2!~ap0lLpTUB?&qznXgr7=G1rl!zFxI7DT)P+D!LU6t~MLpz7SvwYvKU%Y}r*lH) z3VOc*%9&|Z#E?g3fp?b-?ZsINt&L?Q>HW%*e(Pq1-QbSXskO5gD*|H)4xH$%oBIZ<`Ilpr8vQQ2#^$N%PrhbH zs|n~CzedP-chOfYgFqodJ{MXZJ09jBkA$@&Oj((arFuuv@=hZ!8ZhwqBNbe^v&Hlt z3JPneZ|K2;B|Bm-9Kv3|Mi2$|w#(ER%w5~vp>-nZ%+& zVKmzm^3geCVmTnyMU)7)Vfhzv2Bc^#@R2#?-K>&++Bs(pu5b>ylwu|2HkFFRVyuPQ z;i8x!!7dIOYgok{wsL_K>~IbgH4Qa}nxiTvI|_VA*FlteeK*12wPKBdRnUpRpKeS! zVUMG8*3LzYGve&}CgM^93GtVC^;9Mn@O9Wy;)LVjyH>lSA3oY$$7SbL4J^yz9rDDe zu%UF)9s2lPvc=05RO>{O-$i7_?2cAYj%Qmd>`R;YQ>F;Pd!XGUCL5aKxXdc-TbsmF z(3Q->sc4f^6e>l6yP8tE(pD9zaSPD9l_i~%HH#Oh22+}}HHoCmX7iFO7DV68q>e`B zs039j?fErHq%IaTB4c8XF+eGl0>9jg0aeA_zxX>Br0J2FjxX(}NY#_Khv;Q5iVN+ru=LH=A{?WML@_hWFF9i3?m7J)FBG zYNznAsRM6pM4|QbK)O7*9#{GIYQEdZ7e~*L8-{UX&7ci&5J5pjtmPA*&Q{D=s5nCr z$8~X+K%jUKrtzz}lA!>jUMw34{8qE?ff6g^PWZEQh%6z0nW@fYo{Y7l5i{3BxW1ZT zY~tP?i+dx?kTBwyS0XW|Ec29zWTa`=UMZH~twC(+&5)y_#4xlgUfTp+k8>PxIVG6> zgSisq5-necqhjHjvL>lFMjo`)28&i|pun@v#3Peoestv)GwlQ<)<45$v3FiWdZTTH zw)HS?Kmdk;13Z8+G9)qN>jY00P>C88IoD<8pV^;~Pb>=|TKMc!F*@zVk-v20M)c_Q zfxcBS%DK$6LzKe1v_3q9KJdaCaRHSaVJzDgOYoRkWQ>QbZkpqOvDSAD4i+*_P+c}9 zXgA%XBHb~UV_3>OXU1qTbu-F{Y|2m$EjH;Rq*&sLId@QUwFrthws;Y7KIUeAL5vu9 zP$w>3pOmC5gE*;}DPW^`gOkvTivwB1&@lP680Zsn#t*JB-61H&Mh`R(-tw}#bA%U#x6&m~qi_9;xZFIQG zM;S0ad&V^cm2uB&+G-0aI%fViT#IG96luH)+sfC(?@5LSyGO4&lOUYqLGx6lZI<@Ua?Z(wD?J>|VBg z60{@^31<`gtxmCy{%eWG%?=K%7>hwXMe(Fgs`wTf0kf=@`n71E-DKaRAQ1f^bi zZLzs1>1UZ1Z-Re&Z*?4#0+?Q7N=;1|!NyJX-0t_#BnZj$z}1AbvKu&<8>NvtJ(WhikMG>P&m6XJF;_Emw>E)MJ=vu_=^D9N zs5f#z%`q0tV0Ir;D(B{ODvU~4YkGKI?jPF>oB7M_uxMzRX|bx;z)5<<y&IBQzBY?AlPUekDD_{DzmfnL} z6u_&e$Smq3sb>Tb_W)_h%;$9<<_9mJJFgtxtUVXUU!u3@-&l z=QB;O89VRv&K{l)=S12QqS0w$RI<*H zy8E|e(T@nV8G+(w>A_OG-0>TC#9WdnmC4@kLDOi@JR#FoWy_#mk4vTMCuOMAcNnbZ zB9y8zf1rIC^C?wN=w~IHcE1XKUUHH818+bitZ8I^+6XJ<;e14esMVl2ZsRDba8Uh6 zf(Lf_g;Toex|ajCo#Nr) z_7Ll3B3xHnaq47PB5pUA215Ws{s5%~87LB43|BR2sL+xz&M>UZ)DC|(gnE~RP?wWA z{v>lRw#;wo$vt~N!3w!MPu6rF-J;}g~caw*V0(Vvw>cufd>z1B%WX*gP^8*lT z*+5l;RUL-{xZE?-=T2<^ZAJkl$hmT&YevcbOlO9h-z2+5snsTKMnyS@wZ8rr+E+CWXMWnDvMRs2Qj^(hHZY z@Cj<5ax)Ao--}ZQn4%2I4HVN&6h|4aOTCGVCv~#fBpcmN*OgZNY6UVp4VztP+UN+Y~eGv~N zRrM`K{l!S?mg;NWr9u8$;iXRg>ZOhyGdonW0_HP0r=P_pI}g5c32w8_ZK80=nIYny zZ=}%ulwCL7nXPn994di+ra>xp-k88G^Bg6H-;2qYkdC@6J^Donel&M#+Ur-~ z3o~$|RE6(S)1#9R`O8tL^esKdrHI}{=Du1RMJB8u>L8xraQy;S&@0Xx?ECqa+!f>5Hw{Q*~`BYeUV z5BBq#zKj!W`ah8Y0@DMyL}0=a=2S%x!i^5fAbGy>hv^N&J{gMbr8i3^1_ z&hq22CTs@24fBt}h!cY|4)F5=@RLK2u)`TA`0n z=EyyZp-;Wp=RX*?{2d|XRxRc_eEHVvqWy0Z+JC&7(4_|TALJ2mLFAD}iU@3^Crf@J zO|7+vW?)MxFoA*={Wa%=ud8{cyT*cjOSZ1{Z{1gKrk?FNIrq44Ag=_kY91a}(o7(U z68rKrPE)CIPm^vvZd=|@lkX4H1irv+@O&)#>{H7m5usT4PzDJ2CO@Ng9714Vuozf520v4FI75!GboGD6?~sM0V(A+EOx|G)S;pGb|CzW$8`6rkY49_3=SRpB z7O(zu+zv@dEEcc9bJ7lT$TY|^aTtBzGgVk^;4^uc9mq4CpA?W6eLioFBGXu#H3f3Z zlhx}_mpXxWwLxae7RCbWYwIL+_=&Mb5Ygd zLPjCE$~~4-zBtwSApt0x_+Y4(?3C@ZMMYyGWDBjb@S(P>(SiA5gNDZCaQ32;kgO33 zMv+|A`{NmXx8?L4Ho1;yD9+M}`Bh9JQxgp5=@M}jU^$AUslfx`shNW!qI|YFHp#@O zs0^nABB;rDNA3wrNy=YEIkFRsWIOtc1F)l`67JgJ_>*Q#PCjPoG)Iv%^m3=r)sEV1 z6pF;tXWp}b-T)s5EY5XbN4Cl~-%C0$?7ZX)$BtI9>Y$W$i(<5t>n9Z#v($u>sjdv6 z20A&)q~Twj&WSM-q-ah-rP~Ucmy~Nn)s%0{8Eom(lE>E-Aj@4{8I~g!DiX8NeWZU1 z%fMAEQ$0iDS?qYB9cijd+C|5q-D~7W91+zlYLH_*SB~H4Z>i6@TwxJ(NA2}QB)XLM z@6J3l>K#j(lzD~bIqF9m9L&6W7aCJ4>M;WkFL4u{_LU1Ogly?uOvLTr0Bod^9FL{hv5Wz{4-0m<)BqMQ&&|=tytny$k zq$IK9!GsF%SjK8`CZ9B;!Kgd-R(2<2(TN_qZdPXGBp}rv&QOL-Rz>a9i#8^=dw$Q) zWW+lHa}FrVV=w3eUfu)u2WboT2e%z03bFOazlX*hLh>(cli7B?hg$bH0{(-E$Ppvp zPn3m-DJs29Dhri0lnv}=AgqsS26{R41Ne!U&Yr;7A2b1&k^2E2Sqpm@aP57j7S{irLp*m;F=@fWKZIq{HEyR)ycXH zJ?H@`_Yt~LVCclPzM-H5wpx<7MwBW7RHcdfUS-7+p9N$Eoo=?hn5YKdD9;^@e6KWp-H)IzVOTTUn3dgl;5g_{efCV2O;hHw6(ok91!dr~un^JD4(lN*_yn)6oZO|{4i7UZe zoPnazD+^cEdRblA;vb#kF+*bM^wUMGY4c{y=FOKq=UiP->(=uX^vW`_(PUlAJb!W- zTLQ_%2%R#hu&QxoEQD5=*Eq72tEmvNaSNZCp#`!lT`$VopL&R#!Ur7_Ul2E^ml^mn z)4H|suFLmk#CfB*j8cg%afy~CsuG3Z5xcBKP&ZF$P@WENHgE1Oa5Y=mO?ixNsxM4- zaaPB`e^GE;y82f0HOca$W8zd5%o9nHs!5wxk;YU}fA2!hD(urXEh3GnK(|cp%m^G# z{#x3Z;XImLy|h2ZtZHlE_G+==qUb6nCMzezZ%}IipaQc&&==YiwUqy0+qL?Qg;Q?z z8x7}%-DN-&SSGt(Pu^;DPw&6?9)F1wHZT*hfBkiazcy9;|9l1Rj6<>>`U zw<(=8T(xn9K=w&Nz(GNg@p=%$y28^kswW>vb^6j6IPsZwe?GsX^|H0tOzh}FJ&m^o zU;{uxLSbEC;7nr;vJC=Yea5-N$THcNUm0LD&tnk->ny~ML=^z6OmIyxNGW}{abek2G~psdaU z@ABt8^F#^$5hT>JJ5L1DLw#2LT>JcVrDIK%nlz9c|Fpc%tH06*s|2=Zhy{Z{3!wrK zqk|sOYjWB<0Q!(?INM@OAlMzo`)t;cesZN7+r7ieEP9e~6Bz5g)XG5w@;&-4^Te0o z;Zo}~mIDkf z`e_-2QwqW;MB0UmDHi4&L`X&_Kpi#5XmofV?32Os#QC``L zI5eBa)mr-1+==<;zXoAjjv6A5QkW(@qz+)G=*8Ya|M?AhK9Yb;fqnZHiSX^4=>O9j z`bXAEvD%3iiW%Z(HI#J&9jl*av*j6FIGOnckvy6JHL|dPP2ZApV&}kO+`weO?=Mia zw%OVh2@xmR{8}#eb}#f9`GMq}!<)TIvrMiKZ&?}YYX|g^%5eR*X^oZQ17jh^t5J_QJMU9%2KO7hb;eY_| zo=43QMS@R?de0$)Op*|?J~ zpVT@>90m$Tkdg#n`e7(g<^oR(C(tu|Eh!@01F9I#Ly?_b!d^w?Ds|hGE#H1DOgv3Z ze&B9!Psi!o~-AsJhSWi%+R6@{3)1ww$0x|<+j7_ar#C=t^Y@X%^xdEL7?$T?s zzM#}lV0KCV_dVxBwjj|`B(tWIB!dPNXvPh*gti$EGi;wxMj>{}6?Fx(3-80W*7V2z zc|;j?kOD*ImXV)AgPGc%9UJ-XR(4cb$|3WkYYgif%D%)h5@mK4@QVuAtXZ-?4w0(OwmLG^ zLG354B12D9KKz*xkUsnRPy<-FhIKG}CtiGMZc=MZ~Dw*anU=O#_k@`Tynpw_nRIi|2kZg z&uNVgOI-`zSr6XBp)hcn9p|Jo!K$iL+aSGAarZ2X=vNN&sgJ3JjEF%n%j0Z2{KW`Fyaw5&90(C#1H{mzR8~yyI{5wU`d;dPD>CyEpp6d(xCw`g~_d zM+$qan#44`Hqd3xpWw26c((`wqlS;)EJoA=OjMh=#g{>r=c<`BSD1dJT91Fmp+Y=A zVU_jlA>=**k7@p?K}vE_(H0}h?aLy1E;2}Rd)+{9?eC+lZ%c-^Eg#H2+a5!A(?!2? z+WN8dbk?XI_jWm6PCH>3KRIHt9ye&18Ly;ah^5PA$q|Xu*j8?cMb`69qdaEPdy09a z1ALGvJ8XZeYFe78QICuR6l*2j3J4jfJdzc}G_*EMaH2m{1mf@i zQg}s}+XJ8i_G#`I-?Hy?Os6KErjIcEyw8L3h|q<<-5{dZlTJ3UK*3RCtFl%hmDyM} zV+wqXxmty6lwp+yXC@l$HH@Zf6`QyYRV+8X^IJ`D*l8^Jeb%36z_VYN#t_D_XOi;~ zUYE{2fsU2yAW0x7B^oD(FBFWM2kX0WBpP*OrO=Qoa?$#XgH_K)L!#ztCr0j;#}fsk zf8rFPzci8vBA4IGPh?+@ckMe%3oRoFiv!wY;H*!@4W)+J3P8m^w+@4CRMMmnYv$Ql zX?|B>1uJGJa|$>Le|AkBI5vz;I2xN2yA2fI#QbdVEb!P>9zrpjJ1Z2|ssEni2OdDl z7@j20gP>9sRM0;a)+3IAv^fDWLcJe%T?H|`gF=9qU{C%Aub0alS~nc-o~2K|=I`r= z-1p8vmgyc?3sNkn!M{)#)Fqk(zmQ57@h`xVnkfo$@GHDgUsP4fe+vr!Z#9h@ippO# z&2Nd4(iRzkeDdaE)OjqMyfSgSl}uzPRf%e1%Pd(02g|geQP7=izP?KO&X!|njrQ|^ z@5{H#$Ccy3m(1DN;u$4VfOF=z+ibh5#_61`+&`T#`p{ZjAq>TPJezaZE%0Dh$8COY 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¸S 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

-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 z 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 Xkj)z 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찏*9!0TW&%yl*U0t#3j_d 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%0D})nih^4u2Qj{#D=h1gvV3S(xVt?wEJyRQl7@z`W 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%0DFqPZ$sCR$* z)-VtR{f+f_lN^qBJL%ik_{P}U;GbBm!^M(=QH_P!+6R&sl2GA+%gxIffmQ^nb=$GC zB3%`MI`!@{tkmQ>1D192Yq@Z^QzM!>dFgCxsbmQ1WRg~q28$QQ-n8;9D?&42j%8Td zEHE?v@7==mW%Z%2=YQ7d3$}HZ*2a+zkEGT&632bw-Vbrr)7VxH_g}QxW-u|-Brn__ zqzXEe60kV;0Mis00!N>h&p2vj(lju17TbldtbJ*!u zaK^~bJ|$KLex;ZjT_`4A#HUXvt6@$1kgG@8^N<%PX(a>{@DnvTZn&lcF}HZ)2(~YX z9@(B^PmgC46hm#@XvWw4&tc8+k%8r@r)k51G%6P>c!aMSXBtpWELZFl%OH{TE)01lb;h<8H z>mhr1>RiG3ZQnFOaA0Tt)D4ltVYFsRv}XA z;zw7LH@gzQ?=yN82?M?NCo-o@2cj98X@F`$(0Aj!J(H44Y1#%#&vL1-N$4a|tN3R` zph$Gef@p;&ASX-Jv@T&KSA?<7Egukl5h;b|r%Iu|}zZan`jWn^#3D}#h zsM^;*s^?kQpRlJeCe-?`=fa4yi|QD#aLd3@^&bK&e>oTa(@bTwBwA2d5BD}x$#obA zV^dIFhqh+H!J&$l5t*eG^s}?3`wxO1a(VeGYdc#`qE+iGf=QR}R!k}!3>Kr(CGF@mHNf* zQ;gY4H@Mo*S-?mvX}r6yfts}2PcG~JLm%%WoN`{DZzN6m&?+lj7*;uR?QUyCs1ADu zZF8@KOKWn5W(y;8x)#x)g^OZ1bFK73F*qxfU|30Zd_XXi{D;9FK!}8$aS8{=gaC zISyO5HVrkjau$uLbB=zdHXUH5sx_|obk%V|YGvn6>cKu0KDXNpCVO#Q-E9k_Z4Vp? z9Bab9`tSU(+BUxu^_Z zk($B06c3c=y;<5?>rK@X@y6~R_K-rre&O<*4^kibN!z&~1y zM_Zzby@m%mkut&6ymN_%{OVhX=ldGj2F{rPzE+fL?o$uv(C-Gx@B+i0Zv7}5tpdI9 zu5*F}R;TF$eZqZ=Cb_9Ucu>+;?R;ROij*Sr?5-+hnoYX@xN4L+*^%1#Hc_2v8vzql z%>D)zFj1v`z{&M-`t+`u?`@*$UMb(EHDuDYLW$KS6UJiqq!;+=W!3sFl<*QE2Naq7 zb-Xo}`JtBa(t>>D{%Ca z_^qi0W?_V?a;C89hw9--Ny!D(4%I0s(E0H@f{>k-DX4;>j*l&FpHdc6T->}o!7BaS zp`k{GlEnr3+@WDqc8o$&4L?#dDH)a`ebqE`g!NsyDF$F@^HzsJ+(Ao5xyRSn%x2h% z@M-eX^hiBUlKrr^kf3!kq=*PBWYc@Ika}a{tm|2lzO*-CyhR$vNsi+;AZkBhe=l5c zb{cjtxMc;;TX`_+FwXFjCPkC8qbFho4U5R&%7pD`u93i3tW?E)qAX8?YJubzMIDvzH#( z);0;7)uE!lkf?1EOL-5d`&oX9gF+-(Bx>ogFd*HlDq!I1lY$9mM8KTQ;A7bYs}g~{ z+raPd6SPRwWvnj*SGmBB>-#b=;x8dbeM{&mNXB@BO=*UJ_!!L-WBQHt%aotO`>Lq> z)eZE2!ck)Px6L#-%Rxl1+A?d44wZ` zd*Tr_{-B`<(Ot=b;|f z+x)6l%{gky7=gfN)y8rN7Sz%8H6B1KAiy7_O^7NqzC03F8w3#)AJP&{y97AHMua6{ z)k%&oP+UqI>cuFQWNMOVf3rF#D{>%XWmXH*tREn9V{%6hGtwQ9_LL0mV<}-tOq~5P zhp;52R@0HbBr|1d+my)OeK$zV-uwi}koAmLoohzkI z*UAOngWx}MkN@4y{rw5`&+1fG-B?EjNko)3Z4V`$S^ZKEvbAjR^5T%9s2xqqDP{Wr zu*yAoB=QYdnt#I3fy-dM1XibhD#ab!r$Is+xxc><;9;8aYCq1N+VFV$3AJmo$dNrj zg=@c`7Nx*J{U|qZ{3tRM128(=AIwm@Eiv6*cEmIoI{nrh)sFoY7xv>y!e;`Sb~=Nd zK}Ur`43kIoAwL8v3U3hg>~aWc0YxR{`cdTS2n&X3$8~G(N^=*xCHfS?qvJ`6eauX^ zTodeEH(kk1bH(`#NqCg8(xUnMPw*zElOVF*(qtocE(*+(rAVX4n-=YFT0_QGbCY~` zaa0wo51iS!KinV!Xr1S?WI`=gps78u6)EviMGNUK)*ay7ZN_RixtEeyPt5&GnL-5G zk$BtyXvMdK+jUcb%bHBHJ)SGtF;c=-X={R*%BA~IS7Xer85qq4vl3xcxi_+@KhGy)B9CLOAXIQ zi$0m)HrH_+#->futyRiZJcUkd6Q1IcSTlKP!DqNW(gA-U@4G?O&tGD#3BhYXepgqR zfRck)Xq|a--uaAgE}zq7#I;<~T37vEo6M$!!{qx?~F^DD>rehb*_JbPk8k)?j3*V0cMB2-0e*0v$tfxhfK6G7aka6wW~ zqFI6%BNV!b#Rn0F5!0ddU}ij>v7?xUOrXtlZMfxHt}+}0p0Rt!ADQ)yJmEg2`XPMb zi8C`0_KI9RB8t!)#%w~2vr7t-xs`vKD;?v6G$XAgB}=qA1s{c&PXdvDfq6lwk$4r~ z?_>K8*_#tBPdob0`~*fZHwDaS40bG4Ix41*J0nqL;awwsNZt6;(_dk z85cQ9T<;tEVwc^}AOThOHtgxH;epEqx>Ya4Wp8R=+!eyM)i8K6GqgQFK{ZZYRfB!~ z8yCW_yMFg$%)|}oA?1Mg{r61be|y(|4}8jc3jNIJ0%5T*^1vs}PqEmz+qx6FVX<3b zR8onUT2moWiQyJ{h;IhKH_hWN(v2jJ4z`lC)N(0TtHAN$cJBA{=L59QFo>v%36W#~ zThK~PG$Xyx>|kJ^fo*|446=Hl=`&jT#s}Cq$4-^G9B!*)WH2ywJ433%WavaJimwtw z=4-}}&Os4t?iUDBb>Gm{pY1;l6SIF@v_->zu^w;Uh;|up@iXVNvsT5gojHqH@Fo+l zy4}@@NuM*9vG)6JK*qJ2JVL=!&0Nxca9ntv6y;S;yDvq(s$L(Whv9Wmu_~Dl7N4&-XRce$aKT^)o*)#=wcYd|SntP+arwm`yhhTdBW`-W- z&1teX4>XvkC!#Jh;6sMRrWYaBBO`~%W5p|w2b2Z83;VMckdqP>bUE4~LXKNj3Nl;n zbL9CDNnrpr4ZVU&)Ds=4s1({b>^uks4m&9V$@_T4pTBkH|2jfrW-F^FV4#x&9wXsz znZv)1P|nK5)y!Ve!OH%h!OblGpY0gz9H$CR9M*IvA|7_Sx+g89t7oLhQY^E6pGdZq zuNh9oZ|ZeZM6iAl2FVu=g=Mi#W;?tJ_O=kcgFN9hEYce=BJjC^<#Ber*c}uOSM*z^ z6TRv8`kEObUdW1)rTfWtbX)oOLP@T!wj}8YVEFAx#eMjRhQihRZDap+F)Z2-)CR!~ z3xOS`jCUr~e@qNn3=L&GReDKGcIa*+fUR(i-|ujKD2`APsYpj@GjS5L0{W`o$E?_E zfa1+4WH-Nm+~-k)R^5r7))(X)#A1sTD)SZc&?l9n$|HYJugSlF4L~1PjoM*6{NAAG z3G8>_n_s(@RHE{R2+R@wDzN>oVE^Z?{VlMm`KSPMgKv6Cbz{!;Bq`d~eQDa0qA<;Z zAT}gTNvPm>VkjJpMhI|5T=tykzW#Ckpl>D32r)78&*^Ob6c+e1YxK2Ut`^SMQ(k#H z0>_)ZuRku4-Z|`AV2FAu3}Fvr$d%vh`C+u)1O;!<^0MHNj;92pqm`-Y4&@*-cwqQq z56VGXZJKOpVQh_pvy7y~Yue_fhY<^!e}5rvfW=h1Z>&_PLoZw?^L>g@n4lFLfn_qF zepK$$01e7+)R~81G^g)OXlj8STm1P_F?L9*q_UhT$T-Vm^bz19`xz^i0p>A7PG`D7 z1LCQ$p7(>c<{0xt$0c-(#Q9_L(bXdhO-`zOcMLN0E|QO9tkS@`ekxG2o)7;fM3p}MT9-Q)~DJPPki{#-<4?$+EV z@26s(thGPU{V0IIp+IwM2MsT_v7@6PDvnmY%+S6*AV*!@It^T3vj8qUt~CoOl#L_r)#xSbKG#_+q&e zZ&ikk2_Yp_?i^s1J}?_#@&RG6@eF%Os?kXujYlTL+*@5}_ImvdTN-qpz-WZa%4HVDA$Zo)jKt22=J!U*`WLOk_IIo})mLk~`aYxjZ zBDe1Wysz6}cV@6s5oxwr5*HSd+C9!a)HUP=VO}N2bfTzjPit8!3ask^`>R4RXm61Z z=M|sWgYzLo)FaEZ8Vcs~$=L7yIaV3+$kl8j=t}(My@g3*(tt%vdPOj%Z z45P*^>vf2lZbcCGV5bFRRBvFukPT2);orHXU;adHs0Y;!=z+n3f%L!iC%*^Jq`&41 zN8ZY^CYpg=7W52smS@pQ4zbjJ$;5KB-gIogl+Tu}?yG?VhFE@qf~u}%$ub{34+!la ze!e2jyj=fdz;Is*5bBE0Vrpt@935^)*nsLzejzi85+OQ3_z`>!aPGm;y0diV)?L9- z1!c|qVa3@pjM&|r2UCD5;?ocxXu*;DNAfa&4L4Cab_QP-k)#`a;KW#iavTknBEQ_$0!L&^f#h=};kwc;mW zGzF-8W;hRm#snl1dKFI6%o86k(GZhBE**tb21$a(MUg&952L)B>zpi`FXD(MxQ(+n79txZ%yAm+4zF(4-T zl+vEF+3))OoQA;@>{9a4N#cUwx9nGrr?XqtYkJuQR8&VIck}CbhaR8f?arCpw-zu% z*eu>BmXZVd?WLPsM2PEi?r^QWK@pI?Fn|h1&f#Rnf`uh0;15GLU5wBGEcneR)Y^|xua$8}^g&ZFU$X{FPn z@QeWke#=e-0lC7`an&s4%5t(TC)I5D3UQZr#p$ljn+-R(StW^V z1b~TYz12=jb@1g;HO7w1CjY6b!fLVJszRyiy{}h9sOi7$LSN?&sdC!Ej>oVsE?xaCRvfawSX0~d0Z;ah|TVD=AC<5%Y5 z3zucY?nWc<0e*yHAw*MNAx^qYLTzG4?d2%G6Vx zc!+zLqI+Nc1jw{@L%kMK!q2xN2}Gn^;dD_F9UAm4UuIktc&vC%V(rw`3bGh*K%8Od z1wjp^N&_)wJg0(oY6Y)cK)nAGo|0!ni4|6n00O3Wue5l-I9Q9tC>N}mqtbv5YDTG2gl{e||5t?6muH+0 zkS_tOd^+in*}&~M5CF%1gUG(u5ym7>1LYKBW*-;%Si>wsvE7M9KJ{7AE9gQ^I~@9K zRd*i=UxDrpEHZD-4iTH9tH)Wv2JcIdj=AwCK#vcK$dk)6gd%)m05S!zq2m3I@tm=;SS8cW)8T->d+!hlO+J61 z_vQq;g#XbU{LO=J{bGX~&MV4N$uc9#Br>xyP+^kT!VU6DCZ@*NawYlY!YR)!?|+F` zDh3DzsJc!!G55vyZQt1+KXmc)AN%_C27q$+86o?NQP@HflVFPB!{{e<*-EdbB_!2} z5`X7tEJGuAplexBzLb|`NU!8*Hr`a(`m_cRhXe0X8DKrZ3DOwbMuw*79Al?314OtO zZ_PDR_9cEDN&S?5EZ%Ixr)u-DL%XFzz*`(=*$JcPDa1sPQzwJA;`>QJtY%rf9;Gz( z8q5^O^Gr3S=_oYHU}<|Q%3xBc9*&i%DUcU#7=#o&!wPm=f7M*Y1G?X?y0)U!ym`^O zsCq{!_#XXEbfYVWONXn|w}n}*u1zzT4M_=KTt}OJoyUUiX4YxaKAi|01jq_U+UW~q zh1;xRY^>$xuL2Wk=Ss+a0L#_z%CzRQ9n7t4%|skb zy$o0knE%n5Zl?(3uvJ9P4if>XG*&|ff6oZ{ss2pO#CQ%221X2(5kHf(8M8h<1rVC| zrGVx3uh(m+KWdE_^4Csp4q<$FP`cXc?3gveh)DM5WYvQAJ%1 zxyg)61-(5KScW~m4o~NM^Tw??pXfK2;Ctdy5MjI6s*I9&hMBp}plfe=)hy^dn?;Jl zK||9Wh@&C_D)J{t62Cofdq?1F`AlG$b8watf8~|yiLYma>r4QGb{R(Tk%4a1NV*SJ z9pkWGqWmZB((O<;Ukd_Dc2?OD49OdC+{Qt2_4&%O$sv|bV0{NS#;)6ItK$}w>!V5D zbqWXxTx24`k5B0BBa_=KjRG#gWZUshA&th_V6y9QQYvU9Ni#z98udRYcny`J+VP_i zMWxnJ;F_%?Qq+?~im?QK=dAs80@#LG0R|B7-ZjAehgdI8$YavF&cc98KtR~ zd=HGPG%vI7^DpbW9aur&b>exbuD2dKpSvA0c4}XIaX#lfDg_Ze(5*%X#z3JgbcJJY0+2JK%h6yZkkJ;)^Y?@2AySbSrG;@sxGO%3$-tW! zb5j5oSclE{hZV6|N6=^oI`Zw|pTEr+1z5}k#kmI%736rU+8I$>FYRZxCkuaNzh~nH zms64A0$|e$Ab4f6LsKy1sv;yCWl_cN5E40Lgn$O+zP!Ew{NZF1NxMeR ztQMdpM}_W`A#v4PJ}b`K0LaLm`y+d96y-`v6$jVkxagxig=-+RQwoB~vJJB3yENgG3Qj%9N3ndvi;m#pcSF3OJe4D3@Bx#tP%vTo3(}y@D&XC28L7FAI|E_t)XM7%=m|H*>jDk)sp>HqNg>o548A4ZuzH~ zQ)aL%9!?`NnK=ZeZ$b4BEhV8O(OQ%rS2moM)6cEH+B$pl8})BF$P2hB*f6b4>L zRgyUmfcDH;XR+;^6DhrquIO4d<#)n?BeT{oT`6X>c6m$ZP3KqyjU|hx$T49iG)c8u zmtyIXQWL78ncQXt#b%=5?NwP}BTjw(O_L86t@<^iuBBK6k6#!g`Lo?q4Yk6`M^#QQ zmiJwOvRf!9OgLtmSq{rd1&=b}YHTUYO-fUX!;1+xMwa6afec;!FBG~ZNh5Afcf66y zWTi628#Q{$0vXB&iB&($6%2Vq={%{YG8zz@%q$%%&KN`>Lnd~h>3D3r6Q7r_947jM zk6Act>{AOgH-ETHxiEdBHx+jlFXL)R51KO=+h@_UM8(fvF{>jB--sp2&d=fc`tFbw z1+VrhpnRd)rkl%UO_gzu(`XWN!tC(o9=2&!qVWeee-K1|PRzi<-0XFE$u;JCKPIKp zeG1}narSOWcKaeVoT->2k!$!>^g#ubhqfuk=8u77A;Hqo&U^NoCN3)jL7G+rU7SJV^0^QwLiVNS z6O>}L>DDpl-9$c}Cd|>&FPxj|2wL0*sbKX5h>E;oP;BX2VN!ryWwB}wm@BTIyJ?=Y zj_;CgTBTUbiNICY&5rXljf$+8J2sj+Eu&Dye#1=u4A0r-P=HXeVHJ~H6#ekxokIM~KAWo~TMpqw~fZ`IC+UyP6< zbEB)+AWJyp}lQF1Q}qG{hPKa#LQ;1-nFxiRo^O znF1?zRJU}dss$JFpZ|b5Drt_bzdBg{RO$XJ@%5*Z{u|W!yVlc1EhhVMw3$OJajX<{ zO4N4TTAExbo(ZmhWiaWfI8i(R0;CVW_wiY9TVjg$(e?8VcWlikLt=D$h5XYJyiP ziEMMGr`P<=U9@^R>nKEl;p6OH9T#Vg+D4O}dKTWgD@)#o#;a%~`mXGm{U@pf50uNrD`?)8&oqjB{$f2?d?we4}uyBl8o&ykW=$fur*>uLuPwjlr6q$-yW; z9X><93GZtXNPZos6Y+B-GewAe7YPyT=yx*{LjOA_&adcN_6aKA7I<(Rz(M8z0pGCv zbM#K>7e_y`--O1G@+fLzSXl2Mnfcwn@QpND1U3-gfHq?m$jXTJ&wQQz=y?P6SQN8B zN+NOar8{Shi_O8}z2MF^i0&?ZBsi=SJ|*%=YU$%<8`RZ>i z-!|l0Yk$5kTt-V2j{_lXsbe68P#Q#>Cv{ImsSo!9?8jRXgumBD6WuE+S)Rp(Kb=~2 zztIJJ?I>L9(XclSAbB!09ut7NiZTPq`?R{T1eX4Nk`UEy!b-md=vELxnaeU!x z(Np_l(xQjWC7{#)mNl^XqiP*tCpv$iI!-6X>P>#IfMxPr4KWnbm!wkB;Q^5!5y5UJ zlO;z=IC}0EYIR8QG^61&aWCyRMLOiLt8-+Kp9rAD#A>ne(J`mu1R-8X%?X0t;i1h& z5%nZA`&ffah!DRhGZhlUirzztJ4oFVVs#G`a?yJ$jCv}==c3}|VJ6N{dt%N+9(m1m z5oeP1^O7Ej<1n$9KF93Ujn|De$)KS3d8KvOg%3J}Ja+SFNRuBnsno|0De8 zRsQ?Mb9**Y?ecV6WwCF`ZnC_&b%ZQ~zqL7ekdjK^i&{^E&5#j`y^GY=!dE%;d)QvCW#1q@JYK%t0WdHAUK=ocD4 zhB*t>?=6LZqlA;^XgkCSfUtr)dPL7-sk*VfwI>g32DPL#=3HK?F`~|j=BwYG;rYJb z6vM>bGsqeD!aZ<{G3|W6YZK>i!!QEkJ8~=FZ>Y(e8rRVL?BlbPn?`OPC-{?E`E{@! ztcZ1(dwP$51R};|khu?KWTxNUsYgI9#Hi0j*t$&n!!kCkMYejO20DUhiODM}UA7aZ zbUOEWk62DrznLb7&4;qC$x!iS;a(E&FEMPHG}-dA3Gcb3UNP?UpoT!ASXJ{VhLKswuBZ&5Ko!lreLroSpYD-h;D zmnyFH@HCfYAAwJGQGHXLqAX)`fOl!Ak%OO^b@j67bv^=J@}$G+Py<6);G&qS^L?#? z_u5y=Sl=y_yO!^#XlJ>HZe?M9qJ!~M#7ZpwK6|&cl)b2vCF!lKR@^rBnSW}|xe?!V za^95=Nh^uj3G&mcBzHIAQ74bMwiVzEd5pf5+$pK(gXJB)T`=d^UPfsXcQXEzNc%T) zjpU%@GsKFdo{Qy$bPBr|Pn?Q$SwHW*iY=)kk)#;Y78g)k`2Dg7k11BHj}k&rWHyTz zUyRW*>CcU&MoBZSvqP&FI6!Cs7c3K(`oJ~@FKJk=vO8L5`GS5g2p*PE{S~!Ud6F47 zh!(iI_}s8Vx8eN3L@pT=)^R1P!Y#Ra_f^_VGxq4odu^SJnUC(fk32U9PK*99KlpN5 zqz^qXw=hRQIfH^Z%S_|otRRjR(M6p^vh1v7EBOvci_sQsNP=l7n2Uls`A6*N>{eG*4raKC1ZqcFST$2qo3 zp5`W>KY#8#TpZPszmvRRZ4=!hYB&RYg@d;(Mu!^SUZ~H^YYX^qYI{#pQ1k#b*0{U z7?wfYK!Y?T-t*BYso^(^)Wq~L9G+n>Lu>i*0C+b_SsP_X<@B`t;B6!uEXQ|-+9Sl#`N2*9fBoTle{hzC;;tl3k&dgune!%*}qIsQ)#z`Tqf( zu}J+5on6ZUdy7YU|5-|?qGtdqaSm+b3gads14{{f<~pny^26*ue{mIJy@0$Z&E?3` z_7U-Ycl4M!e!kg!xcWySK28i;N&-b#W{|Q)bJd)L!BFyZO`rg1j|I10G_lL2H^Pz~ z$D*}bWd+BKUlT#)MW$bOIhHJVqDrUTvjw;jPk_Q_HQnU#hOf2+qF!5#@X5Q6>D888 zUtF3GynB>9=$qHCTwiqZjH?Ss3*URSC`?SKP-w5b)$Y0V?i3_7W#`Rq&iO6dN%ymo z!ze|7vZ8)>A|{E>4izPbc5Xy;{=!@O1!XW(Vn&gmXiKr#d%^pr0z!os|J!isowbg9 z_|lOCryjleLf7*?7#tH;qvI=w^P~a#sSB!5omfDBRk1>B8QU3sES)O`k@-o@S71Tm zd;Pt2f;@>B6mdh7vgg0mIBCN``U4WUm#Gqizedfz+r(ZIA{8 zWSNCsVA2U2cy>TK{C5t{7EBIy7EFJkYIQSbmw)LpbI5t9HzMYBjMR1vH_4U(A$&%C@l&&#$D)wV@ojN}0Br8IaLATI%)zEfL(4s2o z{TH%{rE4;W;xDB!l&*9?7>DG~luge+t!nmf1vuw+lPl~mEvnaegh}P4!`Y?2d=`km z>jRrLJVex2r~$0`wPmvGSB}U{`ul?WfxhoU<_h>8aX{!YvUYnCD8VoI`59sVH`0h- zKqxu_&uIggRFwkOS&09Oefb>##j4r;DzX2A*#qv?7Cj~T+S&AB?i9~4&jSzB!&P3u+Y?_P zA2Luf(+&eToB(lM0d1&0gnxw5Rcnk4hcfS*zbjgytI85q0?nWWF=13Cc7r0Aw%SQs zI2u+@E3kZ+gk++pEeKPTzndGS)IL$xMpV#>&~E$b5ncyYP~!$dw49o7nP=7?jaqMEvtBH-Ar(VncG3TRMQZeTtx?7xPnrtDMt?wJ*JA4gbBl14e0?sFlCzV zH|Nd$P)nOmw>e?!RA#ikoE=kh1J%zW11|RfR{BJSQ;643eOZh5?So0{c!lF&UFw=A z(m>oM5iC?8!ALLb-Vfy^yHJ2lTaBU4K>EkhpHC!L>r1R2#m8~Mwd}sJ4%o(Bi74jn zdh!V3zLkCNIGo$`f>NO<^s&&zMPbYkTAd^Z=-SrnHR!;d1gRt4^f$gBnrX9rw*^*8 zZU|^`d%|g8E~KNa)&`FtOF2v(qt`EP7wh6_2gK}o-pe{!nEssRH+Psxc#!Hv$5>?7 ztmCN4uQ9@KgLrT0ID1nGQ@cztqsh0>e?^$yh{JrP$3#6RqLI9#)kwxHhU&VO1#J9koOh01x9V5FSm@=L1qY<#^#(n^<@o(Z7 zJEKv7d>$Rh?CN`knjVvxG?SwG=oA2*Esoo414qsD zuFUNz>#+JIwS5>*%Zip>o~H~V*RF1}PqZ)5$)@C@Pb|O0%TlQp*+z89koo&QCq85L z*+_XWvw*V*v3|-Ut;-RVsEeF6nPGs~a+yd@vF~`r4~b_kc|Tx?CL{QQA0&w_^Imk9 zreE?s$;Xu}MFnP8F=&Y7L5+qFXq+*h7n6dsSihcsyd}juq=2ar4Ehe$P_Tonw*Xca zVNaz`I;`MW5Q)tv;VX*Nu|DW^2?J1IPHL0d(0{_g73Xobq40nYdJ#8Rjp+K+b;;55M?`IsWCe7V7r@u-f9V+h>j1}aS%v{jKPWk16!<111ABn} zRV)8hXkmH+dnzjA%Te9`OyJYjd3@*RdFAu)SNZ{dgq7ShS&Ep-1Wkwk(2H7XHLZ@! zC|w9YbNVyssGgUw#>10d_Z)N0w^9uL)nAf3s&*@-9Kmhc)~L{KwF5U@ym`kFtFZKq zqK;pIv>{p1F259aS_otv+Fk>y&IqQuTw>S*XHC1heiUTRTv?#C>Wg0(Z}HtYSi z&BXgy|5Dufj(%|L35?+D{tnN@7mHW>X}gBMb5LSL*Qhx9{jF12$|VTXaQRD0WdL zOpOvJq-v&>=OqKFudee_QZse?A=v>zFy*m{!bw3HK@d`npk8wDwn9lDf50cjSGiel zpqW9y^|u@e&|FbVBP)9mFGnL67g6AVq|N`vW;C)8x!-MekuWyTRWTDbcB*%guy*Do z3lUN`)++RuH`edy2~bwIc80;5rH7=<*O!2lhBSx7B%Xq0jSNDNVtx0A<+UH7`@Dcw z2LcxfaQzEF{M~YCdvk~Xjp1x$A+G<0;THPZg8$KOYM|Zf|F-*(g{2Ne8uAajAC8XR zoPhTJvi)zs=a=0Mre-Q;t}g!@gUQH3r2b~Gzl^n`wKU6rv=knaGJ)`48~mRQHPw%| zjRP9l1YB6a^|uWM8fx+nE6t)l0A&=>A$yM%4rU})I&L75x`NcP!bAq~x`s8it(A?D zyE5UBb_>K%bR*a%GDhy)q3Q-TNt6^}!NLmqBbdJxmoY84ct!JSy6-09F9vJoM6o%P!g zB_h)QdzJdkvbHc4XnH?z{jJmUpL=a0VPxX!;OzB}FL8^K1%3%OWbcmTfyu#q7~Cx= zh(o?wfntPbNG}T@Ei(l>RDUWA>PE2;no*a#G24sZ!Q-853GAwv_m?tGse3CH^T2W56Qmi#KY8v$AW{?;`0#|QllA*yaD z1GNzK%37O9V5=cuX`?)8Xc9p6K@ve})#{)likLExNik*CBZa@H+|vnJ1kT~4V&&Wx z;Xha{C~GTE4YXfO@Sa~>xcR^R_=@luIXBu;RC$mXAYwUGCpF+ExCy;a$+ZK!&$+XM z!V;_`7;}56hjP$1qJajg3`!~9L`-8SGsu1g=SjR<5QqcWYwdsq4_LL`)>iqNWizg7 zZp2zbpXf&0YaPQ1KHOlwOlWa4?30e;yD68P*{Y7MebCL3!LFE83%;RsTmvfDY-#f} zoUN`oukMU~F;>GWMq{GqQ%S=!rK^HzM`u&xgsOEHYqSPG=80f9zDZd9aX!NH zupH2NRKmTkQ1?Od?1M^sUE_pL3*`L6^aDfp_ZQH8h>nliCy9MQ#i5M4$jnrGFs!IY zx2htbexR7-^l6-6@GEik>fwuf$>(FU{y+VbE3DiEn-elkPTZe~hER*S;CMh}QFDV} ziCiinMboovhDR~rqsRRhS12q2jydk-Up&QercVYpI2Ws|@RsR5aH;B8V8^di7H!W9 zx$g0TBp}P~D^FBG>SgvJq}3^atN}8xCwsJds+* zBEdqx6JPO?XgDsxM9xhjr5_5gPbq(7U(tZ<0C+--s_;{ZDV0TRo;pi0nNpc%i#%#M z{Xm`~n!CqfVET^on)?_jwU3-go1DEmkg+wM<9ov{2^~FnW+Kho3gABpp9fZ*%@ zX;%F6-u(@L{i|8g#wImQTT2_LhQK7z%~6O>N}{QHuU?9%REl@N{!<;Od>Ab#L`2)M zAWb3H<%HDw{FWPj{OVz_LzMSU-lTR6Ka#4 zUrYAd1)I;}>{Na9^R`t0ZX-DL>&ZK%RZW2Kez#w`I$92H zJNgH6qlYdsJl-1{>Ugni92sPNei?-E;Y5W_TP5G*{a!5AVl3a#*8hrX5_WlZP0X|# zGEo_nEfMM$*l*VT_*btYzo9Y++4&GkVL$>n5P}uHMveXj!B~a%h5v$Jnt%4SXkUYk z(f|*u4!C~jUHmo2_AA2vU$6g%5Q1C6C9pLKeK_x&lk1o@OWPXdhusF0hTkIeJalLu zDM^IjXr_tWGNudos|G~3km7y&ds^Ow;1eK$g}|}1|I8PjeVlJjb<{EQirh?S{1yZj=GEu#P$OkYeon7>Z;{6%v)*aC%D z$w;s2TV=G>2MGB9>A{?0f^#Rwdg11VEBVA5H|_IsqKZ_)eL%W!s^>tel1rieVFSLT zNQ`2QWkA>@G5820B=s2kJKofg1UP9bxfQW3Q@n50>3z0`8>=q? zP~{5>Yxgej5;Zye$v;_jfjwnvH1-MKv}X*fZ(xSOm=9!c;7Uc(5}S46nXjVR83JMN zT&pejj!$nON`sgzGvdTgU~hh-Yx$KUdWKCWDh5KDW8nH*^W7hR@IUF7-Tsn)LJvK* za^=wUgrplX?&B;GLk=yjPdo0Qmv-eE9LlTI@_dIxK^Yttu>jBJ3wGzZef7>98X{CE zo>?)~yq0VHvWZk~giZtJ6j6dPS#`MOip{2QOhdq7Hv)MWt3)=B#|QlcP2&A*aH_`= z2aVg1Lmczuk3r{|gJs7;LfMNyOhZiH_b+Xir@+7@VQxc!FBxs zmTk4+a#(?Xu4CZh0DkTNgF*iZ;1rEaY>X_-nAGfT>>WJp#qCWTOs(uK{( z!Qrv7EGXC5R4mD1Onp)TtsE09M1$_F>mF{lV4i08{G`=wiGC0Eq%;?!g|sFM=EC%_ z?Q-Qf4P^c40$CLw8s^8eoiv^sOo~N!=B3veJ=bNfH!hSK#SbNwLxicYu9lSIDw%-^ zJ6lWjIc^A|19eXvEP(!QBY;+kxUA@GNG41D3ShS%2%0ew$aPU1<_+Q`u+0}UWJUbg zg}7?fIdD(5U4Kr&>VMIuzk|Si9@UfZP)NalTB#TMm8)n?&;h^x3L#zxi7-A%5w?H( z{X@=;@SsUB%2TLsGiSAe*Pa9lmUYid`p=4Gu^LkC$e-3mP-zXiL}0~!igQY8{<>i5 zFF5SMx9r1~V(!7^l?E)THH!v`9rz^GfufU#thBZje4#%E2B`iHI>+g2qPl^gvl5t+ zS7mwS&apQiVvX2g+fy;NasW9&`rbTX6jX3}in z9^b=fikS$TqGqdwXmy&*XN)ta&@4TPv~H5fhcSbNz88_r-BuB>T_xF}R@7jGKAwFh z>&0=#vYfb55ap^R4j^f0bKqxhYA{M~sygN*24m!s@@dU69&!>u5tH2j@sISgL$04T zmKh3f8=YMlmJlc0VVf+jJ$E@2U{G8~vzjrqclVY66ch$Vv&vzJD_(}{z*LnkH`3AM z?5VE%Tc%X+hfdJRFQEpasXJ+-??ORdeq2fxP6fi@4lo_ytUe1w37FOCnsI|aJm0k9KLNEieeV-I zhszE#df+7+W7(q}j?on#v(X z+IyD?h|WkqaS8$FV6k_=d|+>t234QWUOP~sFN$o+UYBE$9H&=uCEn?|eji36{(|ZQ zeL?!T$i){A*OMV%#vDCjKza{;aEk?fDYA^lL?R%pun$qZgR=bt0z{w(&WuQa?~nv- zXN-4)`Uij{mT5Es=8zjz@GAu=F?8G;>^G(ushK$+7ozKnBBpr-MX+9BiYa-4fFRPK zSd@1R^hEhHGYU~+`X!QCGaC97K7Bq(`H(O!SfcNX9^MVKk5&l8{PYS0%81CHN2a|a z3uOt>A~K0U2AAO0hr+f|rILFSLEH&^1jnhjE5H2%5?g$7unq;fS zvW_gMF#4;6$5vBy)#4QvozzPBPsMmbY2%WxRsVeuKvuzE#<+N-ua+f2pFuFW8aN=L0beMxXo9 zjsi@x?)MMcB&$D@u%eE`p*oJAVz$>x{m(o}RT)E6(#~tD)W?DMO}~G0-(SZ7s)?;wMxSxI(RX`l zupvk!ypo;FI1af(dz4e5knG;RlP4LZLPo1g^ARbZ$q?e-B?psNop3{Wl>oBqImpQS zh?T=tC}c>G<`0Gl6*C?_6Gr{U?(qv@IO5H^F#``451428GmH5bg#O*B$EMh*EC`_k zb}ktxzze>p-@ukP(I_(N(-cCeelkQsmh3eZiO^)QqJm7!E9?bzg~Z8G`a#O}N?ox^ub;7+lLL3++P{ za@HAD3qu?NQ^=X4cwRP1eMAaX%;0Sq`Z9C6W|r|(@?!Hs!a=Mpo#vgen@y$_>*rq0 zO;t6Rqig8~CYD7J8fQ8jYKpPn7L&}5V%-=?9lGW|M3bPr2bsj)uv$r(VkqX;lXa;G zew}7ji!I#$R*34>FV$XAS$uFb7NI=X)HbcUOl_x4E~ml8kKD(=<}epDpBuAT>IQzR zNW`kTKyS}Nu3+q3S?fCWRcgDz%96?Lvbm>J^&J>t;PE$@J(z040B0Dz6U>Cvn|Brz zuB4QE@Oj_z)8(z6Wj!N!05unro7_PF?%A-|cz6U^?(jR%BMN>I`F>DBSt(SzOXzNzy5T*d~{*IA#+Y}dKog?&1W62Bkww9{MBew}Ab%!Dn)q-_mT zR^r&dE$J@rnwIC$+ZQoz7SJnYzJKkc!p8N2YH#X!vjl-0v&Z2opQt?402R1bInU1{ z3mK(LGDn@NP_*LzPzl|Q(;f2FqE7Ed@=)#Ewskd2$dIUqz-Re0+~OKR=uXR!V1Gcw zsGtX&gs2a)V4p$@0pBeI?u#LiOebeIl#|aefL(X*`(9z=n*6JveRA@% z=`Q^p%X5y4Afm<5-T4dHXBI?N>d`?IQFU=do5HH-B#pWPLm-`c&}Qpau4qEX*I>$T zz+vY48ml!M?r*5V7fnlc^=!fA`oLO)SRQeu0tuXM4P@LFG51fBlxko>=gbGB(WXX} zPOo>w9;eI=5T*Hz#F9l&C6A`w`=VB&ra>}K_N%v(h|9=x{|D&-Qg#HVa@ZCQAhEP4 zh!5`fM9R?@mw?lD1S(>wrpulWdYv1^>eZKvIKoDN>O>N!Y~EQXKNdw?2xnFUVwGzl zL^Rr|^x2roL@{&j{di%JKF}Sp!2zPENdR_}gTMf^GU-oTVeO9DKf zEZ`#kPw4lLGy-r&2Kcf?&z_P@F0F5|s-%qCWf&_^im!%l(T5F+fDq>YrKgCBW)-sA zt9%0nKGX>8Sg^tn*K>d9HZym(_`gX6^wDzJSyT4$gjvfRoB z$y?9iS#B4q*VJore_WmcU)(aK^nxa=GN+!I&sobbA+s~XB&lJ=X4-ENs^yx-74bNZ;E#ePz@Ywc1A1W3f68yN2JT@i4* z4D#iL3QsG(k(nZgkjqN1uvZhAV@1`}iO-GZQ(HQP!NJBC<-Q8}q{?R@SAelUqfBDv z_T_xVecu)C7;Vf|;Mig7ztrcHD{poY)XfW6H&Q)Pzyo{<;9` zyhF~nsqjhOxuNJhrmGQ&9 zAL1vDC4`yUx_w)$nZ@L<=;zMh*lm+S`F*9AMiG^)R*iST4%VyJ+DOun#0*q&ihEPA zy3-QAeF@jGcM+=}K#>p|U>spL=RT_cjFMc$orazEcF}yOWq#0K@SYNI4BtpL@guqF z<8reVT=$9ckh~tI$62$&VJ`lP`6@vLag~+(Og5tUd6bb4In9UOb|DFUUFS(Rk`FUh z!MRu=q%%Phw6R6I=u}piMQ&kFQdc(e%`QvKOABnkT0inFf#+DT~$<~F7D(LOy(#Yu0E{b!scbd zt}XSQQtQ=%pB`qxq^Pm|CfQNxFxZrmuOew6`NV=n*rw{6w0!ck=?yP?$F9M0Nd9~+ zHH)*MR|4<%fX$AEOO0te@wRnqMs~F&KmI+PUPSuV#Ga;a!XQQ;-oV})VZ8tBWp;;%J#J1J=a4RF_1fDhf@?cBc*4{--)J0n*)D;MBT z6U%=99x(}9z$}3}(%YEXX=fAg3-Rbw7Xft81tk~cDMp6ShqV1Ug_13#W|V`K&XSpO*NI^ zFi_10BF2z6220MALR9WGDBrmFN95vnNGou7rld*AHFY1zTMPKyzwSDJmDE}rFc4`2 zkq(ys{jUG{GMoaGLk5oKy}>7$4lq)JAr_?usZNVwRxh=L7=!AE%VU!+qL-H>ja%Wu zWw94s9MP=P8>Xl+DCkuRR8&68ii;pyiQvyShD#Sk-MWS!RvNnX8p1TSsJx=Aj#!j^0+Vtx%xZaaep z@VH9pbPhPT#kL=*n6u`WjRZA&TXcg>szculLp#Ne&KEdLq&87qi5AXK;irlff7!!x z!W|QgQ!~XRkCGTc5uw3JNlbOYt5hb|>)U~_YCK=8XxWPtX>u*r_88B`$&%Q`ep##6 zHFiH#+_(K|Crm(9yyMk)rdJUe$4Es|Y77U2EcJqDHx7tBLT)*jFDf3;x0qnBGQVjL ze_JZk9OXm9dB`y;%jh^&kkfag>nzyi$1h6{E!h>3oh566kWN^V;~3Lf1lh;?$-e7?VZkuQsEW!+GN`HqR_s~y{fn$MTWj__mV6P7 zLUe;#wyWn-jaJRMt(^9-7Seqj>|uv&YII^`*g)aw-Hme!Px74kd_$;&Zd0G3M57W^ zWTh!50iQA)ta}skIJRDv!(uWeGoUeS+2EJaz=PlVu3t%E?dGBUl6*u>(yJ1;=@{v| zv_rZ%qsPn-6c6~`yZ!369k;FD(>>$>F_so-9@6Z0gEDN71WEgMKUqwUP)NjvL@1h3 zg=R299~9gQbx{^H92gQz&-Amtl+xB%c0@@HO;}he@g@NhZnynd9=b94p&d zZZU`8CYJT!YrVQdL;*3@%3A!ZWI;m&zKu;42L2H&10Uq~ce9%WTVYK(t73*9`VV{7 zw6brfUDrdkc;6uMEz-k##VtQHncR z&q;uv3fT(>ACA?)EA$Nfk}3$BcnS~pXV9Bpbd`ksnep8c|H!h3ld?h+E~7LihU45Q zCOOzgq*$MKdogDr#|ne}IEcN3BrR}kZ{U9o1cNB;=w86ks}BqY|9=9(pRVdD%Ky(0 z<`?_7R*A;ijQM>DQaU`uxO+~cea2|rwV_7*XGNam(=5V~gxLK_5i;0UGX#(OY?oY% zL$5!iO3qAVLW4YkhA^sACPE=%NQuy?sI)YiMDZJoR%>9#EGw0m_T9#)Q!pf#sdlG9 z+V@SyI21J+rDt7FeT8mmB#?NjIBM>ah>HuYV2Oq(XGbIkM5@knjaC_k&l;&5wXt#0 zC8tc<&bEcKmMyDndrjUNNYwn^Y9lPiB4p-KuPb9>KNj~Bi*oR1zg)Q}naB^4vcega zL94S>8R>~Y<6yHRk*wlf=gRAq+WLScVB4t-=Ep=DrCPTPLn@0zo~KZ?m=x82Dv>1l zKE)!z;t;(#(KDJ>=*6o(Nj3*_cKuORkg?x@*!FOc`WEjJBu?dpW?k&T>Ko7)eHZDf z34sD}8%7a4d%TBe_Hc@D*JYQVB758&@kJ!U*gZaRx{G-B<6`L)(Ki)he&m!lalr~b|${JPU4`eiMXk1WQmYuhz@+EO=A zdMbnIP@{*S3qa$inL<@MaSUnRS$J8A^%HEzA#*f)*Xir7Vwr#I*4o^-k4xit*IBlf zJ{lCGMVqPFkRU_^H;Eo;MW3O`q(nZ32T7GE5+wWe9K}>;;t;I(>6i_N5t|un_LdZ# zdDY{YTph0}f45IOC+`Jkz6&G&^PVg3VP2#gNW-xqC>lt`ZeYbmpnC^jCjTxl4h(|G z^Emej?-=lkzi1BI9a9-x5|{b2Xn$?|hSc4)=k(mar$n4gy83+BgMu&4OU@Xgpjg$p z@YIAs8`-vad)~XR&`j>kHYdHP0mD<*ba2chs7&DM>Z*pj61e0Efz|JcZK5pdA7puC zz~oxPrk~J`O;q_&WC}=&*dG5Kh2Tk{J^U-NHvA_F;eS4bKPT9~Pzaikij?Xh#y0xe z=x15TRS?kNotUJn?8R*M>?^Jt@p2ql+Wyk7p#H@t?_+VBU-!A*DC1l>HUOlep}uV% z9v4$ApQk=$OdI^s@f>GJ#ThjTU9(*gZ39iJt8vA|pTJZJOt2hM-%Nd}LpV^oqCR(6 zJ?e@}cTGi^5k+T#7&1kZfw$IG8G;*(wc!D33?VC-dsG>TyNc?`_h_(AVf(W?^>$!M zI?hqqd@9T6idGI))*+-Y&Oj8HL%vlt9BdlK7u55>z9%Z7v*7UptuEAN(C}%v!3v|wnTZN_@}>P0liY|N zFBFT1ol?YMge>J3g|IJ^eIw(vbj!4kzLFp9ss#=Zn)kHjWob%OqPNCcDHnmjwVyry zsve29;S`EOtWw@yG!s*e;so!1sY%Z?<$f1m(+-D0A?@ZlL+h1Rv+EZ<3A6|4BOP2a z38LF52JrwJTVcK^Ym4%M_3Nr=SI>8Hqi$%cHAX?egutfK^R>T;v{^GlL%5EKq_U*m z9K_UKp&R|+WQ0Wf%{E%^uU#b5j#8u+)C z(UP z-z!_>@^d;mUm}_u3Bk*nIx?C8`nr^@P!&x@&w(z(^vpl%SAMm=36Ld*Sjy7n|JVoS z*Elmj8YhILC#UfBPIeEl4CQ@V`e_b7`toCU$OBbD`|BS6CE_pgVASViX}2YE2B(HV%~$M(rRA3d&D{0Mwxw-#|dw2DGs#QS5;5RGInVb?7Qh_^4s z1i!cYm@ql;3*Vqz1Cj^Rlm8?S%zlvvuVCL5U}bvq?|<-bu8o#U5(s_&37aDC-t_<; z3C1q{jL77d!B6hix9CivrR*kkNzb0n{6TF*zoCbMT7b1LpX}PIQi? zGovi#Li#lm1eB0r$R2*5B_EH`6N~c$#1N3PuzSV)y_?w-J-RFq7?%Gdd+=WZ!k-fD zr+-Vd`;%ctixec3RLDV6VsjK38<>slHOeE_R}sht(o?u@7o6w0<6UybF4tb5deBgbqph}dp|%iD1An0T^xb5V)1_NQ z!o_Wp2{_mzGFksZ66DD4A=1Z$*6;6rR+*kz>jkJlIeQzMoH!V-|KiMNP`x4h#rj!; zznIM@Qu4gN(KnNcN422owHLeR+rk&HW7~^dfS0kp3~~vPRJbr|9la4~7Bcf{VqFYa ze}DQ<_lxz89i$;_Yl#%QB_^}tO-9ySLY5)dE&2`l_?bE#TD%p8Z|9c7*?ITAiqD;M z)&g^qj#V0z^Y76G8O00+)`i2eN_p1Fuq}?LHbstBUU0@(RtLA&fXsm?1|c)2fv1>d zUxotfm=^7jion1_=fh?X>fkq$FX&Ivzc>D> zTR+?t7GO2fH$*{vE2Fo6ZV#QKO346GFM87i{?t(`-5xF`({Th;uu^ zGy|Ft{P}OSDzTyrs7Sx+))wVYKMH(r8Bu#q9A3@bDp>1FAgVbZsEu$^z4g0c<9}2w zDrvcAgQ}nZLD8GDCgdQpeFp_Z7O&GFYmktlaSq9n7Z=t1K>YR@m;X0a+WsD&_szik zDhkZ6O#jC_%UyYi#$s@p>ur<>i=GUx%lAb#!p{?>giII;1Z2{(Riy3PdoZ z;f#@i<{y$^rl| zYU-#mQcVd9ZZb9j6y*#FPaLd>-e6wF8~}Id9Kj-o9i=;+QP(njrv()6z zI{76otNB!?#Nw+$gd=mnetU_SWR!!j^d00dWBR>h0-MdLdHq0nYO)B+{df&7yxEpT z8m9R8?#IX3MH=(wszbh&np7za=XR-eTZ;P3J#XUhobqLC{0tYDQ%u=GfzB3*E@z3| zZ`k@U517Nz^x9}Y8P&R?tgyV$PSedKe}L8Rs!D%BtMM@Xq6Sn`F~{6>``Rc|O`=r) z(TAG-8g5Xs(sG4BtLxjEyxMTBky*vhQvGbc zY0^gi>knXy!aDtQRCa)2`f0f=^91z;%rpMv1P$ATGMUcs1R8PWaKGl1|7_!!c@ba%ym$H-?n|kx1G*2Y z6!LSCk;cvGGxn$R1nDoQ@gI_h-%tN=beWZX&R}tV_5ED9u z?S@;Ju|%-(F;pP*kHnl6}f+lVJrg1_JX52fA;VQg9>Gv`0nTe>YY5; zqg4HB<=qi7Omf<|{#6c98PdR);Ufl2-o91wvwi%LpS*oTBlz-I<1O#@LY&@XfJQ3` zBVsB|e@M4gr;rXnfX@wl2n7=I6~7bm6=0H*?!c(442%Q+`xx-2M4F=f%j6C<8|ZQO zhucm8xv-bz9hyl&mn1Qj(jJZ01Vq2Elpf>TFN-?_|3Ct>FQLc`P*QdaNp=?IhpsdJ zzCGQboJ0Ds*vd+x@v%l&G!0b~iF0)&MtXw~AG!17bCJ$+JM|Y_dE^>x)ut0S4Bb=K zTbstGD#P$An=ZJMH#o$C#*`{Ic1OW>bl)-s6LdjHFdRY4m2B_};f$W>sI@RkDa=2A z=d9+LqV@3c^B)JVW>FTkzSoa}$^D`lv2@tWW*q}#5+qCiQ-TC15f9yMN_YiHOm?s& zmd^Hc%vfTSJ`pTbFu?U2H{3U*p$%6-xiI&v5;X^wEELnyCT@FWdeAJ!QVO|bC&v`S ze(;>~lTsUSnR|jl^?g`JLil`$AgpUdtX9sv3eAW+u}>%t5lF;6*tLWT@o6E4ew;D! zZ6DJ^Vg_J@QD#7Zwd#ROfw)ol6@oNKQ~(wD9#%e4GL#vVR4(#8juJqTK!UR8H#($~ zBZ%7oc!0eS@7|I8TOhY{bg(zGca<{zbLfr%_V=R*A@YgPXVC@=Dk>=f#M- z@qfbWgPJ-%8mWT^9c9H`K^lOW|7t4_RTwn80GFE{d6T z7Nt%yMbk`*!eZfRII4}Z>8>!A6HOvA9b`osuBNzjC+^IoMa#Zj47D+dEJy307Q)Uk zZPXu#0Th|pCK1)m*JW3-OjZ+Qf#wtiLADk`o{9N9Yuf}Ko6+WK#ByD!IckJcGck-* z#w+Y})dQ1R>SiOEG%(a@Gu78$7hEr}N9f!WjChFjHDywjTCx+F==e6M5*W^)qPoIx z;;PzmRKqZ}N*gGl=&QVPMfOuHWVo4{twjBmmPKCXjZH!uwpe5Nj^-SLO`y9MqrYP{ z#AdrritSKo$`8uL>Ws0thJ%Z&4|}t4+V8=S>dCUWE=6@bbr4d|yW_=Tec6*Fny!cG zWSesSG71_S<~dZ4(2X0GU}`ztc8j)x6g!2^g}(%SK77@h2uNa;-pk^O&PRx9!(EWo7U3sEU;-7_a*|d&=AxwRNWZ$P6h2lj0Fn>Yeyr@yeK!8sD8qXtvRiG z62n9)Z@>O+0LSv0j?okNU4{T3vfsW>F?kUMQ7L%|0})YW1K=M*iYou$WB!LRzY)WK z8}kDt3HJT-AXjB>V{cSxu1{B^j3RIR9_G76^1qq(i~R^yrSs=mKSGkejhyhE8HdbOY&Y2HT1LH{7_3o3wD5DXopQBmLpwIxgKgrc&NSE`UqqGCn_dX zUs?{Q@5VV5 zMq_B(euIakr&Z@4>Mc4^m#Z}oHuw_k7FUX&ls;6H+{pY~k7F7_KMoJmw0p9hlfN+jd z2-V><(RO&aE^8gOEO!^Dv)0tNhr{EM5ONyb$dV5Ro!5JH@9c}jztRI9lwm=#d^gTv{-8|Ff^JgX~s_12X^8@k#cp+6&fb& z;a|AW?z|uMzjMMB%QpJl^vTUxHPR-w(;D(uz-DChVPli-02KGE-PzgkSloXnbwJy8Ce2u6=vvaETtaj@bY?0!lgUo6!0)@kt+p`g%KH3R9$zBPnIfP=L=_@6HlA*VgYTa-L%v zulo7OfCdm^hdB$?7DF!@RJ>?18A^@$M8mJ!}XYYRyhC{4pB^n@Vp1g(_V&!}A zR}p~n(~5P5kR@#)`N#C^bA(JPDvN9(dB%+7J3#u1n(n~`m78LnkYjUD3KLcim+49$;$nC)bQ*=KZxg^7M(qpfP1Z^F?b zs$U-9{>s@HIV;1lfW3Qn0<3`ve-F+790>T!=c)Fr@{6gZ_p)uUwSHGD3=TdF7(#Ax z$ZP7-PM9srZ$jN@Bel_$Y;bCXnho=NLwN&#MXQD=k>z<(v3O!|D_L-1$AR)%H7CFS z;tM2gdT%=(Pjk24-Z_E`Otu9|VX1g33^c)FY^GhmHz%E%xH6tm80!iFhY(11!Y6pN zYNs}u3$yX3B^qg&WCnRy4dWzP@oVePEx!8BHWb)_hh*!X};>*o2y-aK|$*_)u zC8>s$(9wYgLr%?H*H(w2IT2Sc^hF-DHhqznwGEt$coU6+GEQ*q<<#x=@ zmLgw@?S%@vuq#s#^(Z_}>?SweOz~}v-7U&ew$%-VK}*7a-C~3zWnw*4@rqg)Ss8jh zT+z3hwg!8x$-II5U^g}h*ux3dY`i$XAaSgkX98?VYXISsz|vfmvI3XkxPf-gJD}^T zHUz^sy{PCQoGDIjt~y|6O_KH>Wpt?^>sM6l;{zv;oC>tY8Y|BNWYF4}&$;Ui@Iid{ z<--&g?FR~n30H^a=SACnWQn@1hw5;TuB}CI*}YliT&h)rAU&g89oB%Z*|7oN+SUPg z`l8_odQawCy6y9lw+*zcpbyq==~DuayFuPsU2J3N%*4*g43#07#jrN$t0{3Oui_>j zxBlLa2S(p=o=ifwVbsb(Gg>8)x!#?^_1#QsI#sf_Rd4S{k>tjFBDaTEgXIQud&|Y? zXnqal%+xg9u~#N}ZgUFlCfkGAksYp#PN-}!*0eObEMKXPx0VdhefWALn{$Ez^ZZfq zRzW1n-od|zKs9}1GLdYFAE*vEsNSD72h1x z`-HN7c$c7Z32?v9KjS1M^A`M@tmVJvgINr`$4k4IJv*xK34i-YKl>B+>nH=*`Abvj zeZ;cT(~_8S{9VXB5q^*WGeU<8ZWF@$`}f>G&OQ;OU1hqgf8gMjgct~OtQPyRQ`2`l ztAr!6s01|OY<7IW>Ox?|^oMo;SEjvzt@&^i%?tF(^!4fO!-LTvB*=4#qXjw{j+yhw zxA3%i*nX|_^ z_lotlz1w%XdshlSyYb4L!1YRlded!T5%1**^sb;I7P`z6*$qh|(eN;!6T2hi2{S?E z8s+y5e{1&ZLXL`GVNqc0bH0L_;l9x=GJl5ObhDMf-RN=LXM&){H1=usYR_&bolRpbDUVg2h?@IOdS{YjC7R1y*$tvls-Bz?**+UgJK z^Z!wigBWaoK{B7v7)6H`Rf`g86}^tcFfEYaWTualQrG8WvA3U$ofXGP@y2)9jb>}G z@{aR$qhLZR4SdM95};xP<>y1JfmToz4oG?bj1qSrr@jc<^W z)GJ6xe-dg{eI`~rK#M?XqiXo58)8}@-iGvW=!7ot*St{5J6s+B%m-n>hw}Hl;Avv! z=n9mY5;b!*va*#kb8!KVk^R?O``?Ij5Re2b|M}K#Bj#)^BxUZOBV#RPY#!@i?c`+4 zt=RfEY8RqF)d;9)*hJVVSX#kMv@sK7L(oLn-*5qpSzclv;NpXU&+mi(;tI+dLdv3I zq6Si;V)Cj|s#^b-7f}4D`{(s%1t_+e#79-ibd^R`8iZR&lK!ob1S@dy_Ww=t0^MaV*kBp`kU?N`K@RwHAwGmGzl;5HSi7WjVo;| zwPF0*^>YH(@BZJ`fBEQk1PiR1ei2q^zx@YEDJcJAxBcS(pHG<7hNbn(u`ou5O{L>p zHL;}|5@eC;@knS9xxVr|=}^?{sIwB-Ka9eZ#e^JP02z_T_AUJH7HaKq%r~!O0Es|d>?ok2YF7Q z5x^XCfo61xgZ)q#<&t0#3QaCW`bFlFTCG0QB-df3pQCVO;>QaCHHRZDO;@^GOrv}X zX!RRR+2tboEKrA_)i6Ma2i6K$!E+my1hfhILG7aa^#gpKnRH{wwS)dt`8}NZBNOGzX7BESR}AEtf=H2Gn0 ze!8@0qCvYSHp~k*a)MYC<0A5?vm@V84EUbXWp>W|u2M&1$s*y`9|xWBvPG^&L#I&` z3*7aU{Y%9BO4N{xSyXZq6!dAT%%7GKno-3D*)e0W+FV=*=tTB3#WCLJjPfRgi!CM_ zY9}D=X^Lg{=ht|-(K(0XOMpnl;z%+r;)?s3kyMep(IFjb1_K4_>0PqJqON!@IK49A zPgPE=CCT6#`Z)8%OpCadosvvIvj#%%$1hE(o%Ev0ZE!yq$c%iz{k-E9i*SuJN_MA& zm9Tv zihs(YZ_^FcTh|Zlti|0$PIo`CqXKhd&Xlbn2!wI&f(m@ek|s5|mF1;CeDkC6(Lq!G z{FqU_P&nO4o;Z0oiW=BJ9huZQenQYF5kHW8nZL7T)gLsXaF-R9U4qw zV8cGc*8~bI-rKEl(=tSnOG3LDV;3bR&H4I}?Yy+U(b=Yb1}HqKXx@Iv=@q9R0aFSP z_EQ_6KTjjyQ6uXmn6Q}Cb@&Ex{s3cnYD@bBv+V92&vUdxkv{ZL1Z@0gZ9P8CS7ED; zUS__hUxf#X%J0o}xnrgUvcXKY)HfF5=-;-ySJ$+xcD)qRzB?Pp6k3ZNUk-*L&&pNr z|K=_r{7Bc-Mo_>Dx_0RWc8pHVi$L@>)b5$R%HIP*8Xawel&BEv9MIZLY7@N3Oubhy zE32}xh)dkz=y(JFP>adX88;!-+7vb+cBry{ji+k1ZP;0sgvL9qTpvHA0)2 zDNtx(2rMJs^4vMe*9F32X#EFaaO1pUQa#xcM0Ghwltl||(bN4W&}nzgH*q+tYKkv_ z*rmXS6s91;H2&Xh&4~9Bc1?kKVg@+Q^LN4SPkc*EqQSqsaQ<*JJF5jMv<;VKL6T59 zAP0qtwKBVeGk?XDD0EO$B-Oin|D-tQllg^t{th zyi$EMnv%NMIJKrqU5#O|(8Zelijkzgx6t6-I$Wcz-dqJLmNCV&d{Qp6==T@8VAY!w z(ULoXGQ|Vy?Nv9xt3$h~+RSI!Etobv7re$V*PSn!D9iYq#!Jt6!f`3TyWT^HuiH&Y*UYZhR>%5c4qMz*S!&SplYQl|fxD-_Icnqdn5 z-saB6KwVxXYvV`@=)b*y{I4{_KG%LUTnFNhO+aYlFQ&7=N<+@g*44_<7U;owe!+k9VXs@2nLd4>fQ5=PDr}kx$0M72+=seM#g_AoQ^@TBJ!Zx z4_9R7OHOM~J!U9$WZtW{8Rz8$X=+ zCa93vp(ab;9&3aqh2h#Jzux}pEB&h>J<+OC)oDEY^zP#am(&9 z(FO$_YX(Pmr!rGG5tfH45ZuW-chfCPuTf%ttT`<(+2WA(A7qF5f|N7K%&$=&#DMAT z#dVAw>itd4H=>ie2l?gsR4Owd{g7;>jt=eqsyXuZL2wvKR1KDdd=CfBDZ1c zS=C|Mvg`q#d+_m2*F2jt4*I0pGR^?Eo6tl}4BwTDLc2(^u0Xo2wjlgcjnoL2o#hLy zQ&^%>97kuzh?o<6bLC(U;9H(Bvd0i&RBP{C4`7~R&E4jpWm0$%YH+QDOttmq9f`j| z_l{plJ{i1oX^>xD7FxsQ=cL&KE)i7UnzIZ@csZpX?hxRc#3!G0C0T*nCCj`?@D`T#}#0m!0Bi5!WLJ4Ky~rwZ;>c1gSN(~5 z2-WE5retR3vENfWdH7{VTrtZVZsh2YMNohRTG>_Le4wdROZ4*oxH3*%+$QV?tS!o} z(oo3NQg;qAx|lbK;CsEi6vgYs`M9EJ7R~$vfs9i&_&f-~ zJ+zNhyHMM>GV;Et+|oEIzDd-z3Sbfk8gjStjb0J+V*nCyJmhe|bqo)R!iU1KmW7y~ zzfnBxb7%rFz~rL_j1~XuIPsT^v;ic35CK2!l17$QPal2xhwq4wfEA1wYBD&GW}LzGIYJ44k$O=Rp5mGr(M zSQTbjoAf!xN~2hz?&fZ4i}Y?zc;ZoL>R7jA22HUICr>U6)q%dlo>gN>+s+;ucg)?9 zC$8W`mdB_lP`!hW-ns` z$Q~;ms+DAR`ANr%>fa<(iY^=0>F~JcVO8v)mlK3*0bY18nv3-zW_UE1MvOXQ6lw}> z`J(}*p_FazeEyi8X825|_Gda9H?~{#H)$L%((y_^vkRR-GTb{q+zYpd%`>|7@~H5* zY1m==&wkqZlvOikZx~Dul)q18O>auQD3Qkc{?V9VnjEnZRx*ph(EJ6i-eQP=h#=xS zN4?U3@tyoqy)8^qzhDxU6|)qJPVjsXtnm>;B3mwEt$knsT2;%T3adxME3S!;LkRLH0v~z0eb@qX%!S8NTABRj&ibZKh^fSJY~OK zU2pw-pFLU-s}Fn1=%_x(g@=^A0&G!X)15~eRgh|UsoH5^)}M2FM z=C3qa3-zlz03?aK#8Ge5;X!Y(3BW5dmCR5Pv}4$RO9N4H8OOCORcM&k{)IF9W*+AYN6YKf!uw z$ot4^JwU6^IwtL*N5bkEuf@B!E5XKUeficF%mv61S6<0Y6IEN!nPiIV#MRp8gx`$^ zfX514QH=6^IXn^(7^O1BOl<7AUv(GlnYw<5fc12v5{iV(S`~5-)i`3&H`Z=+(j|c# z(7$-a5f%y};?46BZ`Eo?HB_MkXFf7YA*5sdBK2Dyjbd>=9m--w=fTOi`Xzp&zKWVD zAjxOB_anAiNO@hYyJ)WEaoX2`;}#7%i_oiR`<_x!cq&;Pw~%(+zT{ZGj2>G&>%Nk= z?Cg5Ildce7>l)4+o%|jL`<-{f`FdzX(-jU3YxDYOCA3W0cJcyX0cNn=BCn|?I+O3m zg-hH>-RsZ#A5scq{W^(ZJFvUYzZ^5=BO~~aN-{NlAkmDAhM&z^mT@4xF4r%uCG}fK zpYslRa|55II&vVr7x(l~<5$u(7fFp$C>j?2GCEU+x>Cb=gdzMsblUq*$N9Mn%?x^3T8|A3n;Ug2+HT zGIZ?g_+l1W=ERe=nS@Qi>>5hsO1SlwrZ*iJ?2ap>WP;B7-F8>F=hHO`M{|kLC5916 z$*(aAf5kcC_sSXn)9q4ORm8#B*htaY%E8&n^`C;H|3hEE-#}a#f4yD$D~7xHD=8Zb zDw+E$nM;xV-*1<+2{rS-rwo%^Z$HuXJ^3!SB<{Tca%`6vi7P{Q;C@KuqLHOYUW&0K%qljrOr9o#ZUtBcSdbM=K{$5UcshItDIR&Uckg!GKTuMLR7;KL zeeE|?f|vIv6&EZStnu-N%M)uBKh8HSfP=U z*yx5h*A zS+jnqc`V!9_J}&)OwMircL$T$4pxlpw!d)d8GDVTX(}VKgS&G7Fy$axJfhfAru3{T z;zu7Bo_A#aCsy@jII={ghU2kptD`m6@oYdzJgYXI9KS_6E-CWlHyHAAn+ff`t0Qm9 z(^j~zMV{oRPco=ek%N2l2l#3%%Xs5$ff!=6lZr^joEls9)M-*y5Gx81v!=e0tic*O zap~R_iB?z~`IDOc)FL`$bQ&CLbPgx&Rnf4^rn)0E%=&#^(pNisiZ9?x*-Oi*Y{5dx zGOJRb7{}Sex}tUJ3N$U^CwG&LshOV;6OEixK-f)Tcgz4NVF*Nf?Cec-XT9n^@`DWb^KWY4NDQ&s}`ESqGf1 zGL;wydgR2*4l%p+Y{Hs$a&BJfdf72`_d8D`lHup;H1U|}Qj5YDX-=dp`Q)eEA_ zXqsSJK;M!cTG(h?a7A^5pApdqI~~z?*6Ww(3%1mwP!6o~ zXHi(ciV@yn%87+vU!g#H%;EaO?!5o9alaiM78(Czwo4A3xMS8%42MXEBScVj=-oZ9 zWG)=pXAU|p$5;OSEynXFG&&X{BLcdp9u(ATziirpN%uK!3}nnDQ(`yMS0Tfy8fw*&^!R?#_ghzWPqM&5*Zh=3Nc zb|F;4h~fIM34R(#hn#S{1u=}@T3hzlcOSzdk2am-PX*j_yngguBdm|vd?0gsP$as_ zjZ%V;_6YxdpzEi`o2>&d>LUVcl;1BAzlE~D6r6Lvlqvu}=kz#QtD6=lXq$u7yERXi zA?N9lK}ZU9wA|uTmh@8RPO5=6Oi}oGVUgyp#mKB4tAkV7mjc<3|L8W%-d6nQl(em} zOo$zDO4=Q@2=xqk40Pc_C1^2auNkg%gPnTGrck{5<5H1X>F5zC4RVNlbHV(>WX6^rjYp$CVIS1F}@(lQQUNZ z-H&zg=DB=1@%T@3TWu^%pA0hAYszS2=&0$;=U#jg{ch>eSuT4|lR|1azbQz*???U_ zQ5P@3kny>#khkVa%{6(a^N}OoB3z+J|}7aI6kWfwTh6RDw&1>yNQCk~R;D z-nvT({cKczMMRZ5+#(vAy*fy+6wGF|mMIPx)x&2opXNAAVuWgxih)jatJLl^m#JmRa<;eZEdWIV@1ky4NsVJS;e) z#DIOKSA5wQy50)|VZ8h1+j;est+T-a z&7n`M4r$g2R902g^Reng4g*L1ynXSvq|Q1AkL}VO6Y3X)oIRBMgO`Tc)+#4dLEzjSKZ8^V{3}i@anC{Bwkv%wrCNwY21n9ljUD7#;5d9Y`|SMN zBJB++rnoX*oLydVyHu->$4#dMgU`p4g%-I?{r85vU0e*JxmL$d!2{(~9Oue0FCSov z?!-0|_&(J_&?k!MBp+tw-q`2f>F4k5z^h&R$+dwe+`~Al7j5Xxh}hd1K$@lDc4BW= zm1sL$z0dsFyHq}N%yQ(cyl+$7paW}eo@umWsj_z^&f^!t)jx|emC}8_q^iw6JU<7R z+L^A1ov$?u_g70U=sF-BmMpOnxm-E22?RojY1fdpI5%?#q>$6EACVMs!fnBoVM`sk zn{q-TA*;JbY8CA>JTk?k46j}4NBZz6}j38X1G#`?8RW97jJ(j#RIT@Eq2SiFv8&SLa{9A`vH zg3E5hASx1Q&3!+N`1nByBtqrw(14TW(Uob!w)M-yZ?ca=LA`_@fk9jp7#02(5#cX^ z{GYR%b9x$fbkDQ=)wGpr45=M#L5X>UjLaR!!t8jaW^QIU)o(y$I$MR zXNFt09XWM1xc2xQnRH61AxoW+g2y9`;A$KY($I9*I)$l2dP$@(;!knkvfn1nUASFE z!!f_q#xjnuR-H&1%Z+j?bF(9wNWv{=udeKlxlw;H316;iG2>P*v_`M7?xMv^1cjfq z(JL9ObSb5(q~RmDEqvtM=U(a=4lC5+y-P*25@ub0 z!uxczVzgZZP~isQtlop2vF0o#iM~~8(4BQu!eTgHjrmAP7pw%k(-4WR-a=#Dj@=*L z5G~GFVuHKksyhk?hk`v1OQh061q0yANYr7Jz6Cd-_3>~WN+&wiq+)=;8W3qQnKS|j z5_3%=s+zA)CGw2c(Iiww6^Vhb%>+4;iC7fO2<&!Y$fGK~gaEOV&-{lbRx9${F{J;&((W9=*Bvf7%r4Z53~ke2S2lI|`Mq+7Z>ByLi= zJEXh2yIUlrM8X0T>3H|;Ii8~)PrN?=59_zT&di=QYt5|dnxXoQL{yvR$HJh!L=(ld zgAmp_@FtQz@lg>9%e1_k62>EqPZ{7zy7>f01N)`mcR8hju0>*Cd$9^L!gI8F+gL*k zZPoBGBy$P*xKOusS`G0YtN{iiyv1HW()XTaAi@T_pjV9fcs!4#v^~->jm;AYzmSN? z`l?_({v;9E-Owf+h|&v|M|2q)4{^+R#gf5HC>d!ABdOSdkubi(>3thU{;+-xHZU9gnoPP`fs@n}7e-J~Ht8IAJPO{J39;yeOjVe$|5agu+c7~S8 zdyeiMRzAxWKsU+i^%kyG%wd%aN`SQb0;Nl~_?8#)*a%j3bhx#G6>6V2+7AAlttiX! zM&X2KG!*p{e!8{Qs!Y-HtUSLvu@+|9B3h;CCkDh_0EdXqF9*T*4h0UrU1r{#0xR0v z7lY9&FslpeVL+L1ThVg?_HexsH5e!pb{Dxqw-hf(*czw+Wx`%b$+@Sx-z@q=5MxrVtp(`Y-DyA$iq$>7hP?)ZesHn1-$}fT9fEiYr-&y-P7Q4o>(4d17r2!Z+ik|s>#{`Nm=VrX00QB&{*M zF%dZ-T}d|sdvhb;FNo;MiHS)50zM-fu(tS*f5M^Cw6&zB!mw4sSXs$L+Ox96p|zr< z2KJ}r^hbb3_x?>I)+t-~|D=(klYynV;s2x&^*?CjDQK=NZ({#{piyHpA^U&Q2&lH( z8$13_8lnA@MnJ_~>9N%RfktTw;sTJc1<~rqO8Zx@`|4@BvQjFlzv6CWKUCTw;TLeX zui{IzMw;5f{nXC{0YAI>Z+;d>SY-%#E%@294MYb~5iwn1DfusqRCysev0qSuR8g3; zgIfFkeJ<_QnfrqGd#CtU`W84=hGr)EW+wPoCZ^`&e|mNh-NsY|o=Yfhv)x9FGJ*b> z1bX31ar*~M`=a>cj=!5d`BedV1zklc#b3gN>*Ievd(si``;x0>OQ|?|q5C=tZMAdmAPp^>s;E%Kph$iAv%3=?MWMy?#m4$xk=9JA%?*A>XZDQ|5xp=&+!xc7i3yULWKWc?eFWSUhe|fA94>Q1J;js zCtwQznFOH0FAf|AIuU$3y!VUm6zD?o2Mb9)Mcr|BVauD>v5cTjc(#KVI?*bTz)vfE<2)QKbM}MgHGh#dV^!9KyhY1RnCA zNG&a-F7zc)5EfGTm9sV*kj?T(!4nOW3|oO@p(NI@61a;0WTP?zvYY&y>=_Lay8o0c z$Qauj7~9)8sB`>JdzIuT$%4ycCFRFT-gZgm|GZuQQ?fud<<$3gL^4RYl>LrM_ABl~ ziuyf~?2FGweoH0$8z1^lL^AM6quM{oF9#(0LK0%S$_i@0&i$2aGn?=y@>f{cR_3-? zct-h{1zRZoJmCK)`E|mCqI?10|GT79PEA%-3P?MFeITc(APMj8x!@>iX%F_8K!0cD|An85`By9dGcgsga+biKah)~r39=;XjUVi6cl03XpVC+r5fMdT zFUqS50Tm!Ad2xkb@o1>Orm>!tH4cKnPSg#~1?oQqnW;do_mi{fKc%tW!L-l*$?A|i z>Q~cO;AZ}#Z+|(3GIJ~b*0;a4`p>gJmYo^Ae~RKNiZXJ#EdR?%N($KX+a6GmDB@}B z+hEhG|IerBe~RLM(U}|nDnIN0B7gRczms3-|3H4ZE@0VMf2|#SF?waL!yk11zqy0`r%nnbp?%!@fEM&O|4O7#)i*UYHu{4} z_gl354Wo+Y70aGaT&4Sl2DhzFNMoPgFN7Z|AXt)#f3W^xLY#9$oY>C9M@1;q%bQo! zb~#5Mi9T(OwI)~WP2Bb+cvOp?H7|Vo5+8;XOgb){hUrPg@x)%(MSq^aBF?TN&oO3g zOu2i=%9z$=pnu9$+RUh4wKU@6L!J!r9gvk%s^f)e-=r`j<-S z_vZQ*A@m(aRarPIUb$1*5;^2-rB_kmyMi%NJpsylxEJVNpYtjd zmpU=NBl1(m=2K9xSiFA6cJAF?bDVK{IW&QK^HD!41`IQ$J|QL<JoL zXi{7|6VXxoEiH`kbt_y32eNMY(UwYIxCZUGwSHcC(WZX2@pb^Ddip8`ljUl^9CL(h zC3bS`Ra+!B?t6i?5n7)M#cqj{Bqlrb%wRc|612B=zc|wV3GnYMPjZPsPI1icUQD_-*z{x@~X}#8dL5c}3^Rut9*gy1|RLYFGfD@R(;{V!Mb0OIz!K z8+^k&J6t?w2OYSkJs)>TN9C%Q&gns`Dq*W8h;f$TS!lxUq{Zjw=x;x9c-f`hi+`UG z!x-gl6N~arGAcT|pJN64KyC(lqRKkXbSWsMvRFa{Q8S@=!rZbK(VSn#*uA*jnR6ba&W)0H8X;VXPrn^hBJ0%XmpsgwiNtZc#*u4Bh6sTVlKqT zoJzx%y}0Gubwc(T)pRvAvJxc&ueEv}KAp806TdmZ(ZLQAqA>XJ^JELzXy=ZNRyyMd zJ%yxr>62@gBar48%fq9`$AR~Xac1mIkL6Gqm(F)NxCJY;Li-BP-ao1>P?9W(%vcOz z%|W>qctLccu))@k;UP<^ci-1)ez^&)Qzqe%{aq!x(>W?>Db$fZQ+JhVk#=uX9uDd7 z+{M*^S(CrOHF+%-srao((q$owHS~aU+Yc*&{2NTdJc4f-9|rG;btGFwS*D|%<%=OX zOeF5S%HBK$)4-O$^uHk3y3^6!wuXzcu5*x)6~32U28X&NaUQd3ZQlmFgC;9QB^AnT zju7JJtFp39?LMy%HMCF;kB9p1#yLS4RuE+wcHP)5vHc82Lt&K_jQ*XHKKa98(&h(8 zc9a+-75u1^BSWHD+qm1e58-3m`0wYC+Y)=FU3*$e=(${9vMIv91;2+s6Kx%Sp}X@8 zu43JZuA5K{K&c+adfA|x-h1yMNuZxIupDC%I}bGfy^eVL=(_57wg$1@XHrO~1#WhV zJh0OTMI0{f1KN)S$y$BEOIslD;{e#0e~V_{p_}$(x&=W49R;bsG4&JGC)1e3+W>SE z38_Zhp}Gly2ry-!V9Ezz>bLEn?nH)uaEyU3;yto;nb2lX)(2`sq)|rd*M< z;?y2o$Ah%b9*}eHsB}`e)v;$6)p)H~igl4;K}!u{IAg!d&dLh*f`%PL!zxI7HSEH` zOCeb|mQmD_zr7<~V|9O$WkJ-x=lO}FxcL&YtGT|JvXelp$#OjC)a72L4_k%e+R8=} zKLtD#;ybEk@uNXePQ&u*#$NSZA@KXhdn8P2#0pFjyMzXoH&_)cUUT(|k0L0e$39JZ zrv8Ck0Q{_qCnT=!LGKxw_#i$jdQ2!j`Wad#?8A#6vK$xzx5s0^4@>(APW6WqTgBM! z+fyiBZPf)+4C{(A)j9V4Y&{KiTrH;}^Gmba&|+tZOSOU&Ad0%sLc7#(JBwxlPJ#fJ zD|j8R^*S+y!6`#jJ~tE}J(cdqUJ#AosmeFjdUp0whhSua6K#)`#4cv87`XDgH90|Rf5|bH5NnvapU-8yvv>%R8MsH`?#1Rcbeqk6^$eX##nY^+&*@Z<8brj z4}|_0#Jc)$(ku*aOAn2?35i!WplSs+7HbUN+iBD9yh}qB=mO1n#9)&EX0i$G#C(v@mW?P918;vEUI8e$$Chu zHP}9YhN|`BWA4qflws`pMKDXYG^Q%_IX`lfWVKRz%$SU5*oG;DovHG{$5}QJq`ipC zqUDepl^%>~D}wkMPKaQ7 ziVh7-Le1nQn>|$0dD!eU`)DO@I${qj_TEjNY`gAM>W(CoN=pAk0`yT<+!@=cF0l~C zS(hwuConU=MGJDnMXGY$P9-p-v5T>4Q1m`OGv-$eJz|K@kB0>voNpuV#WLh|B=TZ! z-N}7Ke%^HpUOSr0Sbw`DBV@CZY546O!6ywN?o{*W*TKb&+L-D>n=kz=PY=Br7V}-s zJ*jgo@zqdG@2&uSD?kxLgo~>rTZcdY=J7`G^O?bx#)AbJ_h3sCosm#QZq5$+tgu32@yxzi{0N2jF!* zupnIbxocm0wgXTXPcx@i4NKY~z;%~q)AkAd01KMR%xXd5h;>DHebXI7A?pI*x{E-u zx!=*e%}=nIjRE1hW1WJt!s!cL7070iK1MU4-ITI@hkl|9vW6g4%K)V6bp4a7!5cTl zy`iZt!HLizdA?6EkjA))^Cu#eLy$f|N%c%U(4jadDa(a&GUGg>LNSeNTHj&XQ9yc& z+?w7}Q5kf7m2S3iOtz2ls1M5UTG6kEeOmrpZyR1Vo1>Vj{*9|d@>9xsI4K2DDgti% z`+|}aT)H;{(OsXQJrSk8VzXIJ_G|`;)u&ruz94O~CqO5_|NdMD&D{`gIpl1*4vxFlS7=*pq6x(=ANfume(6`0NDcXq?8aOY7S zwU8B1^lIS4Ow#DI(|u8jXniq>Ikkca|aa zfDim}qzleH^7o*-o9!DPI$nagF$3nbLM2Zb3lV5-4&&nRH!8##!aOo5XvmlH?iE~D zFInB;*+AMAKzGWB%R zK>>~{+nYSLc1|3lO#NnF$e@S??hkml4h&;rNJ2&p{7quu``s(nmki@~e*5p~Sfqjs z(4(MlmE!4c=G>JM>hu@R;2}M<3XqUtMeDdnl|4+1OJdMRztA8Go%AQ}M7=9ts5Z2-_&amcs4Q@Hgc|{CyvA^GXubK>6K>hWY_GApwE6@5OIk-? z##K$Z3Ym>s<~Q+5CmgtvPCh|{o5C{7mgBC8k3Q-fq(~ouH4Y!&I!_N+(QKoASU5fC zSod5Z!uBe1V*30<)7tX&Z1E&(Q&S6r_J3-E#W$zEs8d=t?ud2B z^i$=dl1B#X$@tc1aM)u z2HN3aBH%Ock`Bj(kNBO``#HD{h>X;R2NSRnjgrwiZey{pYjYV08|Xw;zXtT!Z5fZA70Pjp`yn81cEBivuW$`13OyET3r$!aPs8fE+W%=*xa zxsU_fw8GdXEMgNg&{R$Hy?zpCcU-(QKUpm@(^BR%ltXp1X|lM(cQ9PC;3tC6K71Y) zC-5{Fsi*^WjwuCOPnS9Pdx8QHlWmg02^8ok{=nUi$|i;pm{!h zhqu_k>rDa*f8Qi9F?=x}XWVST(Y1^H&@#nU-ru74P6ZNWCY$U!1>q1t7YuQ*YO{8X zBk;S(&rZb}HGKtzu;=&7w$*JOi}3F57IA^|(BGe}R_B2(!$JH-4{Xi)6X# zWS?wimMmE@NGY?p3FF?0dQpiK3} zXeCv&?Spg=EN($fr0E1hc1tbQEY$&q(j7Pbu>Oh3kN0NXBE zBmvHwtPA8jKJhkM~*os^_?v9p<^U5Puzmg{c3)8Ca83rxrRubp^aLMg5VjP z*x+;SR~`wi4VO^y;qNt~;0G8hJ6I&V&6*c=6c(~1+mA$K&B~WXxxLc4%{v@@Bl7t1 zVM(hO-H5df2#}qwHri1;*q_gxl4}Ydui+ln99V_CJUyOJT(H6AHE33b(ZcLnPhCC*z$o?LI1?l0zO!#j9L+@e75v33H>U{v>1@D7hM z+{U&+fFMoKk2Djq*1Ab+Alf4UXZJq`vG0y;AXx%(uXSr8MOvDhXmzecZMI|5jK`>)*2d(-^HlPBlmK1XsD0~7H0POorRQ@ z4;n6USIkbzZzcag{-8Cc?QMX+oV2Zb=@9o7S7x8NNnijdFd&mOr8 z8NuoMS(0Frg;b*J!yTB%^>KZF*+NooREKo7@CVjkU`qD-)(-lHkS4mnGfRFur~m(& zTL7<+-@%k5l?-(34D5jhx;npiRVet$0~3H!sxHn^W?&Ggd*I)V-yPN1VxBpWoT{6X$uWSKo0PcqN=X>Q}U(O(^Sl63j4lM3(}AdwR$~06T&HzSq__y6D?GnCV*@ z8~x#6-(Jd`RJ9Z^g|M!`I`!H(*$gf>p`n+`lsoCLln|&TE#fgSdPHh!W1BS=o3+ur z5jr~Ob71i0kob~Ma>Gp*?*{4|>6;v-?WLWLC);f8b!2wj9Mw}1XCfL*5|!+ZLn6pG zX1yP`FA2tsd}-uHwqC?65Ig1nkPF#?wL1y7W1_Eets60VBM&jGn~e?}9B>zY1S#T~ zo9Y_U}KaYS!>FZ?Kw}*G2|y+4Ekza_$$ng z2L^+)Gj;jY8WO5PNH%z$b&KjKDy@2NPSgCjS7`Rhv$9YxF;?gr!|b3%Kf10{CfR)9w%rG_Buk@Cd#^tHvzr>^$X(S_Xrye`w)B z_})8vyOj)>p~$qa+S2Pbx^bc2o!F=h3r6C8H8?T zthAFbUE6i#$+8k(u6T5OwrO#`VADRaLUB~AM`h@|O-akcL;Gmq|Fy0zaZWm#V% z^oqDS5M|iQVxsYa4Erb{G}bXf*_c)=GI#9d!sGZjq?zy!6zpnJSf;E8NG11ksS}~y zjGr1N&ArriT(B0sVB&99lqvmJs^Q=$Kotb4YNf zZXu}A!Ug9tC8HTI#MNT@bt+8h-sHI*K3>>57=C~Fz%ms_x`-Xs)Mer|@AkV4CZ8+s z^P75THlplVy1h4G=oBMKqkFv=iCkGm=g4*VHn)|~4ME!me#FEfNxg>c9%LkBdeWlE zXV9`?NnI*8C!j_Vk_>I>o_lMW!i^S;x^mZHqbe}b%ZYWw_8$?t__}XQLe8Gri+HNeryb;ciacWTqPr7_^G(@l~U|;NJ296Mr&|DRaq)dkK{gvUhfOyi4udeqk8;;C|lW=sWN#DxGF;d_4mgSaS!=N zR5`jq?FhN&nrLr^XVr@Bj_f^oj5S+>Y-c6+G*oNLt>dA0RyZ(m>WCOZ8Y>OcMH1!; z1{CGk>PDE|@f`K7MCMDY5lR+VYEhf(iz?{uHCAER?hSW+k~bR~1xc9+*Z39&Y@0<- z2KxqRdCr5K@k9K$;hC5xCNa{JiOEj{GV(k1Ewd_gyRB*wf~8zTpy9(@?~(=(-IT#d zs0k7Pm-|h}3mNacp))a~x3s5a&7~JlAY%d7D=Wk`1?{Nw(CCSETTGJI>Nwm*N}qQf z-5sj6o|Z|gAx#bLdeF;_FX!EYREO`RzboBc>G-LwcsDeUMHVLPo?7WCs+yOWXLiG| zvht7`hoXUiboR%GZTb$Zs2J2&nMO*W#foi0k-Mg5L}j^1$}Ez27+d}+(o-gLbK>`B zVa{0Cf<5icsirbuQa0syPR)#Kn_nANitHZZR)ngM+t1ak z#c?C!Jw{eMRpKVO>UeA_*4v?*PNYe&_C_C7qaI*myO3{BBQH27Q{ZOMQD^3yvC($q zZoOymyf4zRj+)->BXlZwOkVF0(SYnKNNkemgoH*Z#AP{{0HEP0NP&m(C1h zAMuvo`O+4jLseWLI>9#KGnyQ$c8A$^seGIm+c~P?0{i@Vy@hPW`Q?>DdmtZS1h(VP zZ&=@N#qY9`KYBRJXyxUpAI-B)yRiWMONPU+5OQ<0l6j0+Unb3bgd`=nUcLgVheYYB zezi~UtfX%rr?q*EpI*3M->?mrg~Gtl4~Poa!?y6$*cOrQ1_#K&YatovvU%``oK4%O z6wg@~KX7j-;dqLowrDt1-7=qGJ_`#Co(!2{Syln-ak@;9V3on#V_WbkOT#INDCYp7 z`0N|J-nx*jV;GowoL`>6>paos1aA>ZnEl4zu<guVAt|UG7_vv|A1mNwlkST0Q?9e<-@Om%Vbb%FJ?4Q98b~;agf7@aa@Il= zBB>r`&W(2l{5P?spo_St?Tl1=t6~IkN)Xtg??JmkTOd7V0-=^=%pBt>Z;##V*Z`04 zFYQ2)57by7Rq+ov_<4Z~b$AS;@N;aGlBHSQcTuCkZuHFbmoT8vfuOPC##%Z9BLW6* zFADHgi0vJRM=y&k*|1Cw#LsKJ^*npaKT zA7wCsxNG<$8`(=U*2P_EsUio|Q=Ijj#>xwtK^0_Z#MiuosKIT**)(vXgX|%f zl9mY-;3u@)x^aWyKmG_+^WXnNeDsKXw<6GYmL_pJ3|AGcVsIEIhr*hJvRfPzNgP>g zT2LkRMnSgrq>FuaNdHbZ?0$Cmj34kGQJI|VaJ6^Aww)F^(cp4Jg1Tr>Py0!@9~jwE zT%QhMN$Ev&6YMhRoM2 z2L^N#@40_!c2>VbQ2lhd?oyAs`$SYG2;7PST^!DTM@Hj$bYEzMTIuc}sltnE(?Rf# zMw?cm1hWaLMZ!eky-#CG8}~=|Gclf-$(K(*vY5QbxKBHAj$vANaf|jr1}Xn7mI^() zZlimc+p4GV(>;xG}*y`d-J7k&ofFeb=jz#z-9 ziyX(xi)BZz)!B`W-osHofK}doyO50JJ{4QjbO%Wtbrl8Mebhpc-`VEqh5f&!kI_OX z`7aml4-P32Yoij7-v+o-Xl%E&y9c`mJG(m(jDT^*-|MrUcf$q3eDMVq=}+|mh=a;v z5DME*H26*Y=heMw)2iYyKN-OZ0MH%(nh68E!Ke}lckPc{o=kD}YyOLM8&i_*UsA@= z$#ER zCvAsJlKuDg1pme0`CDpE5VU0=uqc7`*VExQp+&`nL}dZ4*RPmd@yQ>JP5-p`Z-R%F z?CX=N7UHX3|$U%bgt(=VO3 zh0;)CU;BZ>hFzrwyph1>cnF4|M73FLYLp7K}Vh}6bB{YO1eBAszI z2!88=WP3*87Y6+xnHAzYEcrt`37ME8NL~88rXzGn?PiwXu8PsxWH-|UeO-2SY^gAW zY6r1(N$_*Ccpr*m6Y4w+a|1CR^%UlFm+oF=BxD-%Jly=!?plsiY*of|tu2pApePNR zUvNP3fM>B`&=P+>Y#biv`0f$d(_2DglV8cph;&cVDVQaij$X z@uMHb#G^ITPTKOk<$U^zWRYWeD@l|}Wa$X0=s}zTUuHUH#4Sp8S-WMSm~1I5Wb+BN z#V$MCW9|?BpgPsz=BgMRX!C6c!Wq|2bdj`IHx}7PZTWi1BL-Z%?cmZ0snG74NCnB~ zs@wAQv4KB?ybTdD0LoHwAqG>!Q8O=ukx>q#uQD83eT&xb1_c5zoHEwOxBJEFNeF4P zx>@e=GR-n@&F=(Qi#UbU7cSLr;bTXY(Nokc>&)4JU$y9nL32FA5a$cA3KLK#PfzdO z-AF8Zhq0dg*e!)nIjJ5a=%J&2=sAB6X{i_?wig1P_3%qG|eyk~a~b8#2yIll&OGrxwPGj!NM2k8k;`auO;Le^dP zj;>>z&uzNv=fRV2cuz17Fb?HrE0hDo*_$8L^J5YCRXC{jD8-+GB0Q3rFm8%fZu6hG zIHC<5n^EgeYy#6^r?AZPJ)=?AHgz0Qvy@LeQB-j7U6^EYA3S54u2v&&!_27ZBd<^@ zZtHnpLX?F|#V;7JjDQy2kXTvq$P2EZ-bv%~R(NpS%ad;gxJqFWFcmka{tA1y}4VlAeEyM-sj%w|Qh#15ju3g*C-F(&@jffuDj zqWhD?lf-x1RXvjRS4P|2&OKgS-*D~MzJrp&p*l&M{eEMy?`fEpUu-H_Bs>;I@u_&e zE`904&NpJl!-w$B4Y=sEw=cWY>j=jEbT+eZPWXo*qH@f_AG^oHT_y(~yS62S3}diN z6=`BknHyWsa4A2F*?x7(ssrloxsL5}#cvILR1uz5Pz4uclRHYSvKAfb)R|WaY6|xe zF(!7nw@v_JdRUhnvT)#%WwXZgqH}KHgYB}3bwd5>Lifka`bq^M!fz%-Kn$i;c(M=( z^&6b~+kQQN9x2}#?7Oh`ZPQ@`py{x(Bs2ujts07JEqz0VL{bY)Y?eE~5Woik8gAFxhxn410$u*emvRh^hn^G^V7hLF40X_Y+M;-|ER4Z>v^$+@xD1%AWb(4j%z=fI>FR6!9`d7b zAr^j~+EF&a0}rXTdV9|0M@LQsg~BS2NpT)Io=MV&Z5$XvXRfJK^%{9niWu7V0-d=` z%_8z^LKNK@(DBoo(23y3(4E-ZMqxp3U_QrLBe6+dmAk>Tkj&u7m?nbc&s&Ds&C#XZ zX$NXxL^3x{9Z4HKip?s)S6|IVwlmj9U!x5u=$Hwd)(zag#o}hm!pk3J&JD zG`sIXLEUItecUFN&c`O#`2>Va)R)imnb_E)dqeBX17q;l$MGNfQDyLtaBM^*^2SM- zBI{FNNg02H0dNHGMNw%Ku&$OKz9dO3R}V}ZBDg!c9h~aGoWcGnZ-Y!Hy6PEO#0?Qs zxw#NW`()F=;c5U#;6MT50b^KuYxVuSUzs>*Y4AAsJV zHkEB~a)QRi`g1Og^0kt9dp~q6zwDV*|Fp%rqp7($3cG&pnK~#~T>wD7+ib`jqbVur?8dy2fAVzhDte80X zow~C(!AF6i5!~|W$|hTZ>lYy}=Rs5){sWFv=v8U(WUZx-w{71l-cIDmSVm0md~UY&wbe65PlwX+wf}mrlMSPxO^YAMxQlB z(2SkGN^_gKsQra{M!|;Ig!^Um<3f(KPlSTWmqxc3h_-E@jaf9?NGts2B2-4!2S(2)1BG;g5ips8&0%M2hLWgj%k8ip?25kCL1$LeQBz>& znI*Jc9@5ipR(Gh6#%He7WUK6_ouAJYeFmPr;%Y3oH7&4=xPm+Q>YQ86H|TwiKBpd6 z(F#AiG-W{uH*^|jvgmRT-d>nd+o@?GRJ|2g7Ub-E>2F>wqVl}jeHbBhlivdkGvz&w zLqxmgyV~RTxyJgq+c`qQR$jrJRmjj0)Bn!u|X0ONtNxV_S(W$r4u74;wM%lt(53zXpYS#Az5P_^5Q@M?Pb$t_|pqh+Gv81;t4 zi$qdVB5^o)ytgmbjAIj@1u(!bVK~F}W>~u*`_0z9N=}(!ts}^tnUX89dfX6UHFu7U zf(0);puUtt1trAsfD}zy-v5;K4HCI&U$N;9vY$V3qiQ=Z@7$w-T=y}~+LHREyyH0i zvTSlyuS5FbqXz|=!`f%_$9}?6;}<;9 z>qVKygoJhxC>W0XX-!{qKHy z1pNijtqsg<2YJgo>&Lz(L90_sQADfLpTX!Wj%Pv)j=>Mbm$tACixQ;GSpc zI#9X6b$rxIh0nNaHeeROZHV80*Fku|PF8%!>0ySz97~|NIS={$iU1b6`{iIexdFmy ze1TZ}c_$-gCWTB3jY(VoY=-T!c&MH#*{QLDP?t|d$$?rkDn()&<5&-RK_cgk+Ldim zFn3vMd$XiDqaRIan{cOq7LBEt%#Cn|yFY^%DV&E25G)K`bUtl~HCb-G7Zz~J-FfkR zF=kh_H>p(u6P0hi7H;E02Tf#*8N^eQVSdSOlYld3ETOnH__oZl`+vRKy8G7 zK7h5l>$Gk+a$wPqE|Ce=B7BI%oF*{IPWNF9I~{vnx;q6x|iFRS!n=s%`l-%RWhaI(f zaKo6V{^5~b0>;ytR@m+L6+BaXw~?Bc@tQ(a=r=F#q?jaGS^2QPZ|uV1gb@kq(68rL z#57;PpV!pll50`FlSM4gblFL*c<;Sq=w$K{O518d1yN48S?U3nAgjQ3?izNBw_k}YLklw4AC2u-V zM@~k2!o21Rm?st)1F7wBIF`l+itC`9tYlCwF~_x=BNIy+X{z4*c-LN#$MqxpiEi-x zWYMf`VQBeV$I@)xMG@aA-7cy252iu}Gkk5een&;5OOU|P~roxG%?K^g3$DvEF38 zftETZOF)pAmgm8Pq^x_5+Zpe#GCU?S9PW3l2;6u_hAn(U2@g?dPy>k+%#A9;M?WGt zs1aQ?O!D%r`iP#SPWlUZwVJnT?`IoZW=c$Qi_;ep+-4Z<$OhI{*$DDmCP)f*G5nJn z=qQ#IuT|_dXnDap`Y+Ud);$j{_602#BT96&z|PBN^~;EfmF^GLneKDv%fJ?j-0e#^ ze?T7p(m9sGj)Om|>DgZEO4=>xSfr5XyL52+!s5zZ_|LH|^;EiW$dHPns}Wz->uF*4 z=)=t)dT7@;-U^-Pc-3#LLGTf`?aYm5{0cm`c^<~k8`)p;>3T&vV z&KYzk+Ow|4GDqIK!-a@g1v?Bd#KxUQTiEpEtv$!L*5NPKU(^PP!GD?}d}FX6KpBn~ z8R9C-9Q$7IornnwSFjP=1R772ca)pv8`5>_BHtHJuB%!?ZN4wgT75=&2C19${%zgl z>lmc(5)9Qp>n34>f=x7Vu2O#0zFYypw{l2?W=TRDoZwaLNGXcOd_U57K4Idc)_gKe zE0bCJF_+$hQwADC@e^~+u7KB;qr&mU+2v~j-<$NsX2KN+cf1hJ)LfafHZU0J8gsfM zON6Q)sW4MNomWfiRE$bkCoyOw%@u$4KL3$5G&3!O;mz=p#;5SuF18Q4p83(hWRh~) zr)A&Es8exw=E#ej5Wpvx+aBb}(B9}lx=M<#>V@;CB1|^jmu9mPf39Q1O%xF)HcjSV zDx0z7mre6%i+IcuiHah+dli037GtYdKS|Oro04>Nb2vOXl?`_$Z92~(%w3Ca{AEGo zu%>|-MQ?SJ^&4}x*lEn}dRCf`ZdTSY$DXIrO{EN*q-Uy>4U}->V`>uqdu3MeJS_G` zz3)<}1G$T!4Tfq}*pbW3RBRP`*cb6MQCKNf(E5xx+j_0w!|9TyY>8`-ocJmbEs9i8 zkWu#)d&r}5z{;AKdog@erIzA7ghUp>B*ocy3(6u!yt+@@BWIc>8*z>z)MXxLOX0u9m3o;UTbni}(MugtQh?4eoIh;Rjfi07Z z`-8&Xm)9)XNOR-tIOJ{Vhpik_4pN@gySsFftL%2Q8P9w^1GrzWsXLXCQTNrx{oa;4 zr1`qwsu8DEknq?pey;Bfqg}Mf(OrLNw)CXo#;OGF^AJW{oC59coGIdcn;ibLJ6E^j zTqjUnIh9_1x|1;hXW16SMZ_TZQtUI17&S%ijM9=^)lJvM0j#v>QB%8dVHUi!kY;p8M12OmK z2%E24^qYxa9130Xw^*>!2C5lLOMG2>MBBP_Qd}u1g9#-`K%DD3jx%wB776`prfwvZ zgeN!d5APS-Chs1OZH}FvzI=a^Z;eMhc!YMi(5+CyOtdj{k^+j(3NG$6aT#sAdC}~6 zu=-^(`mon|0%o^!f|CinK^j#sr1xW>tp(!UchVtt?K(1fPcfJR>jRxLRm`zq-y)up z_QeDyjpCk`kT0hTUk)7>QLR|5Z+a$&t$#ApBb2b4xFceV8wYZ`LoDP?UUR*U6AoVj z!^RS{%e8}e!q(r&9ie53nq=XfR$ot@$E5{zEl&8uyGKh_mCIhlS-k5Qwuo(OoEeH|MyB=?TdkSf84gE#KG&W%*Ek8Wdm3{$7zLE}ix7w@ zRb>sNyG&`D?U+QVk8yB&N>=ec?aB5MR{7=bpQ0eg_J6-dlxg} zP*A=80=T9lCl#87<~EJNMAc`)(?*As$dhDwP&b~$gcZ~7Yc;PLYB>4f7WF+rnH3w= zW#dh}@!0-^_7bYFP5NXzO9VmI4hF}V6&v{?%Y_J}m^7{tUX&ulwppc!C#yTe#_X%l zUww>Faallj>?(RR)y5uC(wMK8{>meqB|Jm_qLX$jkl`sO)0{@I<4u$X%~j>$>h}1SiUKa(WgZt?8xdo zfCD3S+&w)b8ldjyj%k!~S%{(;;0#6L+A^KN+;n>+Zl*HZTV}^fERgF6eHR52XMk{+ z5RsbhB)&&H@AeDPDteia*)ENhWsGX4T!tPY28s&sx_fDEOL%>)z`^60__EIdmKflw z`b(90`#VSO4s&|^i>#;x$tn#W-t^s>Cf?1eIkz|32`(k2BGa;aImovp?(X1db|ZC* ztrA=_~6XeWCluGIB|xYcSH6T>pZtaNA0 z%thtUN3G;UNZ1YUUm9`Be_HNdkZj0IZFueV+0qqHwP`@!_t{v6zTRQW^DY#F9Xprj zA$9i?LMl!rcHXkdu5#Kl6lAOjAIiTC8h?ApBprv2Y!;-aKtik*(Lfc^DBS52P=5QE zA%Gy*ZCYkOH_S|f7i`0C2j_$RgepUmFr^@Yl6H>$J$5s(p`=I12iiEt4Q$WIsaRL| zRR<_k@1Xl-YS~2D+rIQzNXqT3OHd0i>jWuE`|XDpH~aY~c+7{Oa5MZm#A)|&yTelU zKmQb-~!s5bY7rPM)^cCaBLOaGQz=mQkJ6;Kn=Rvz(yKj8EO^ zpCt)dayyaV{jQzCCsKirmN5LOg$b?^BWg&} z?tx~=y(9wGjnt=5pu3uwufCyYLGH0s<{_y6j3oL#TKw!9Tax+}NtAMCFsnsQtsAEZ z!fuOCHk8dLaKQI2@gv(6BhEs_PA`d-Mr)|*d3mp6``x>y<1Z9*7JC*+NilRG9EJF%TdT7R&EIqA&nRB*{uRdXgx!^mvC+q_yZX`&>?(W*OIK ziAef1)=e|McBDz22Er8`P_h&HXz2|PsxuvRKQ}xx8R!oj5j(z8dP%uKc3QjpA+=ns41{&Fx>v!HkUu?V<>qrw1wkGKx3EUtMHZ*~^%al5mtyLr>xqy|@bHkv)(Lu)- z1d-E8o=Gkfi-H6_iPR5%C`-s#PTz*KgN^{!&mj^@YGP_YKlLxq++TWuJ^W>OIxD$9 zFtziyE^&Xn8hh&%S`=EeetA3ot(lq8_g&b?6rcJit3S4fCz#X&+Jg!GQ-^4XH$L|Q zD;5Cid;}IXu>Sh|t>gsEWKn>;Vtxmu4TnH!K><_(_?c_nd5CrlP_0iY#Ilt?!ti0;)JC{#0TRdSi_kyy`G2f^bwHNs^0r7wyfjF6ceiwRcT1;q z2+|p}LULxkuwL`CIQWYOu7!I%6%5`5O}C-06y){nP5K}`Gy^c(m30nOH`bp|!QFANh53-df9v7y>K+yiMh z!qw~mcc{0f&pvSqQ)bpEjqQn1bEoN~hKQ<5aHr{RqJmoASEtnGV=b=wszOB}P2`!B zvIRvR3M5d_t*=vcx=a<&_{h^OG#;^MZ>pWvfUugzcR~B>M`GUj;w+6Rq4W!C^D-f% z;~V64)XqovZI*9*eBikf^C zVKEc=nX@Y;cWStMqq=8SiMC@@`EwLHc4c|YfP{wPA?Q^2x%>gV@TGCCd**xluzAP6 zgr}TA0`LSD#-jOHayTksLp9YFj=KrAc0=r#d0jQ(#R)er`+TvfksHDSrld3@rm>Qq z7d(BgjoX+gC{*)S7Wqw1#aTn&C~dN~*shh21xU&_#U#J#EVz1SJA1P>F4G1|Q-&!6 zjeEjw;(4Sk7*PJ#JENIJ=%xshbe*(;BwLyDw`#JpL?PKTf4M^6CzQ3yCtx6-?C#&H zE1|zaKIcMY$5Coq?&3gp&RJH9P|mZ(uzJ2)nY%~mkrZ7R!^^ra^ub=HY^BHuB}W%R zeNvaT_q~iHDADH%nI60W);_gw2aRk-i5bghCs`&gBp6-oV(bcLXnE{>jpiXgNgHzb z9*G8#5=j$hi*ng}aCNKb^5Av^wNaQ&J-ldbP4xHQoXG zUjxtgl@JofUJMb+J|9tDwDNvqo6oMTeW=!I79A5pv z#qw=4tXy=6fFN-=QY>0oEOVV&SdHEzDsoVa7C%r_oYs{@vo5{FX$~#q2XU%Arc1Zr5~nwQ6%` zWXg1%8_P~skV<)#0*XdzR~2IRbR>J6^Vl4wu$&}g`!`HkqnzlU(-&z36cL99`{|;4 z%&Nz{^9>d5E}XubX{eUz$I78=d25v?7cW)Xvx^}7TrTS)g6PiMha62geyp{7^I0ah z9~94J=&o6&KA%W+y5deGDYuskgu#Su^Yq8Zd_+q!$G{Nm_bO^v1;Y+07W-W3#OMz0;2R-U()-?pLp7c7(si={Z2 z?2Ms?1(l1@C3Zx=LWkLX?H#Nj*YfH`q#O#W>L<9 zXBwAiXp}*I#%Bm?;7{L1n|}y*zx*Kwje+Q|(*&F`0dQ*>|8s|YN3WH>mrUrrOXC}V z;;CX&`pm;hnQ2EA*;-!cP3u-ofGLdcEWBjsI*+@8f(WA51O9kU$=#0%qk5*Mu3kKM zb14^5GaL^d6%RYf zQ^uw2Aqumk4X$IhR!dpfK8!QNtO=9aA^S#{4pG~{p*tY+Y_5H7bF|e-SkCh950^@JATVUTpTU5T|-!Sp~?=)8Of7-Zk zZ%Cy--*6OQL=tc~f%A7vtRyM}?5k1(RJcVI^;INgMFBDH|J5u&vRLu&ct5&0$|%?@ z84%{SGVlz}e_QNrF7XQ^D}D$5Pyp}``6uA7c~IYXpT{HuhvOfNRQdm9BOttQ_-|}f zkoX4^OMf@_2g)k{-@ZrCFN_0f2zC#)A^AXJz+wngCi($_!q4lXN+wS&Y>j1~8JqmINcbm3!CycCSrH9M z!msiJgAaxP8fh>}chfF;N@(%@XvgHY(T)ynNU37l7nS`{m3wov=n?`$U4wboz+gw_ z#L4bO(z6G0L~nAzySPE=qjpL!5%ZnW-(kUB%2=hpi9~r(ly~ee2c3+9#Wx8vY~Fw)=fvpnmF7b`;pU!9-f2CbZls}fmisL z>rFEKI&-IDdq5CZq;|5IIWn2>e2OIxr|n0C-iN`8+BGGGGZu<~p4Lc3a1$<5H`jTt zau-T3@8YJL&r95wqeD!=l>V)RN-lgX;t^|Z0lgq`vobQV;ED1zb_yvn8tDw?qWYM) zuGbwDxblXUZto0$5)@6ivz`-8>efvc1|Eod@kK96tcJirtI3aoqqV{O0It}%S`p&vWi3Ln zz7KLtD313JWskNVD~w#=#@PW5DR6#*7{7(-_pOT;-&z+BL?~|8Fm&qC?6>Jx;BV+) z6QrI+zr$2|sx(gcN9RJ617Xng!(cQ22!;=xDO&tf38oxOWf{sm2%1fFN7tU=O4^2T zwF+RfxE{l>xgzqQW>Lu+aO}4*V_y@{7d!J0t&k8~v^V zQf*OR?Wd-KcBG{A#wT=91g_v!si*+ni}$ZBO2%Scgpj^aUC{`b`HW#DV5A(0b7k60 zC{YG(tnM8&cy6XIoqYP-_L(0Hw3-k+fr-Qvoc(~?UYgWCEsVzt|aRU`D1Wi~z*OgkgchP}~ z!9cPTZdBQcz?%i69_gAqbt1ZyvpH)f%mpu85NXeveiMl$XEEttN)u$UJFTrcfv#q~{1y6?P6Fx=N%fR4Kx?W+aVJ_|ja<{kp_YWao~;1TAQQqAHT8k4sB**Tzqs z^*I^7n*T6+&akvR;#URviKrC8^%H5HkaN~)(vdML5t`g7nrHqte%{1c_PvXG%nvj1 z>e;259uVmEK1V%>r9VbL;0RJ9k+=`(I?)9+I^+47J)jy@t~>e7S@)b zjPsq`v8#Os?t-8J+*;m82lN@-Bkg_yTQT3Nx-(Oy7oIH@mit!vT5RU{RyYb`>*A@ z4=eH{_q}^c02%xTk@$VTBK8jvkl*Ctv+_nK!xZbp6ofF*f<)_>moVcRBDmn&R0U(4 z0I64D(ao*bC^8)94lbF?j^_tlno`a468OiW`CLc>ILI z|4UGQF?PooqHf_7!!Y{Hk!Ov?c7MYD`3+Cj(~KCBako>MEH8mfi^8*;HvHCAL>)`X zfk3Je-VC#^iDb0Gu}FcG2Kt>~%qW$d@zKJ5gm-suRq&)Ic>OfA_lrZ{C^bx5@6u%v z^5pi~yIOO4J1;rR?JRN@4fN!swmtJiGIp*Y#F&$d{1k5Vycze6S3Cq8@T8qg61Z46{K_&p6Vmz69>>ghb(`-zd@| z#GC-Jz*9kzMWmYviSOkJ@6mQf`df59z;oNc`MLJQZ+PyvhvJ83#S6vd`)0*$r0wur z<*|5P3X)(UV%hUa=yAP=T?){z9|6MtaW#QBzIUpE{C_knavB#sMjAFfmwUN3TU+>B z9?XhUfnia>Y;!W(8=G`jqzWKdp`gLI!$899LbxNzlnwgYTn3zqdc4-PD#~q0oQHc? zYsCg#0lrY52_x1|loV!wA2nbfB#@<)hOE$Wp?F&JykgV7|L0nmu9PhghL=$N z1%zsknaI_cO7#qelF(=THM-6o<*t5;>~?li(qdO60wj;X?rYP~uJ1&-?;Qc%maCuu zIH4YBRQ#OA{WnK^*Q9ta)un(IbeD!;0rj$|)VUT%HW$UN7`m1wTd8o|CPWt6mz9Hb zZaqVXk}?O5p#3F^d@MI@=;RRBMdlsPM9XJ_x6d9#j>Ri>6hR=vLt1Ib4~bc_D_4;{ z)$T^{XRWp#aT%O79c_Bz1mbfEm*xqT={>{CeYV`#>fFQY8h`qbht(+QdJIPR%jDV8 zW%#N@8gD6^0i{d5=nz89wD&xfVIHVg(?QTmSDCi2-Y^})eb28b$}O6a)l2pB>D9g? z$y><;k%7pyXbR1D0)c*wurQUuy6A8kDvCX^p(Z5-1=+*p7Z=I8e9SF4N#wIxVAg5K zG4my9xsn7L*@z}c<3!skc~uV+_HdVW&@lQ2u2_=24k1>-`rKenQ1hfRV;HuhkPaxA zZLV~QlRl|<3Hq+uc8&_mn1%9#S|*(Gx(}y{6D^dJnT7f2`F@!DEH``Fa<77r37nrd zWWV>!f7X{c$eDaS*c^YkcoPrEX#6Gt67lz@1Y!9P{fK6uh4Dv20_D$!gss^fA%*x0 zCtmAtP&i0NU=ZX4M*>Fz4hK#X-ScBQssPP;Sqc~f3w&*dYo5tEbn(^KVH3G(5drRX3d z44XR}VVYLPclJ?Zl3^9LGu}NTX;jcl8Gar#R@WH1_DRT7{$1PgFqK6uyMkA2C?)mWA0@U8Ozk3c}!Lp|aJ79XNk|tU9w2=rw_diVmQqa{mGw|JwZTVPuA? zjXJ70niu&qoJ3WL2NC9~<(9J#z&z;`SbZd@kwL*WZF`!D7L7>k+sukzsP^Cboa3%< zan*W_Io>GZeX*o~SVnAhC9<#jtd5 zz}nJl&i0YzZ&bw6)_-m6=t^ zyZ*x=Sr&2f_p~EvonG&&ZlX|@(WK9z7~;Eyh@NR{8!;mWwmmMhKwi(yCA^jkmE>w# zd<{z6T@8g)?*qkIk}CG72q*OO9@L?DLnI6pFG8;f3J)99E%?B zQSK_t2Ikeogk$cyrvj9H`t8=?N_5abeGXynD%A!X?Mg}z#1*5VH$EKLvwEc>9T`mx=-Yj&s&|!weA7-~B(v6@bUT51_6sSN2Dn?k=zgM;j zqHbC#;lQ>etawMIE@-&*^-j;sJRvSS$Ymd=F-efd)njN&s47SY;dC^aU%U+tO11U* zyhU}sDdF=NIbRvwzDqe| zj5@>Wie76|LU!O(-Pe{_5BxacYjyNA7VLqw>Knwyd}cxFadn+LpW3$3D}?>FX2JF4 zZgCM*0wmt{anz=**}_j~K5yxyG$v>9)g~P=#=k!DgvTXXjuK6%YL7#7uW;JULNZ=J zQ{2pg-o49qY{Kpm{G6>85c9+-;TVp&$m`A1OW3~#tiAkY2{4RHR;}~O8YoIbk zkG;@k%9?90(q1d~?O_7GjlccNkc!y!u3O7>l-=5T(nN_!bJ!cb?kq(nIMqM`Fvv9O z+VWE3NIdi=Xw-C>iyG;H5~VakjTxRs)1CB8ni-2g962Vp+UbX}!< z;`tB^EPwp%A&3hOx-mU?;3$8b*Uei|NCWrHYh{MRQ$lzuY3Qc-S2)3w{x_52NAQ33 zEV-GjoE+d;L;&>g{-3YnAJAyRztCveztE^AQcFQVvED;Kk&cWJ6d~|DnvKDTxz0iP zu#I}_5rpW-SH-aun%Ll111%Tn17BKCmK=u{t|#DpbW3^(Nr;HBM5#lo!zmMu`V2(< zh>2*3C=3$>51z--d|>mS7e3Azn|YUNX;GV9+mda8qZ-uLYLWH^@imO{?nJQgl+?MRy$vWP==eT4< zdB;HGU!WZ+E2$i~CS&C1q-yB@j?kY-jAH#R%M_hB>q_+EVGBD^>?32TC zWLwvOfYH{MZgAd;&niwO`(n;uj>hr2ABpG@jkTt%9sYoUGz(wHm;#Q%1w!!2f9I$_ z(CV95S@})@q@d;1Vzi=Q*tNRF2Z*Hjla#5@6!1{O!Rq7fc@|2u^N&gHBvEBq#Sm{F zc*omQPT8#x>zTT^X1>^5dhg}c;{9M&n9r9}O@*?LtRl2VQG*~bLUC55{Eb1{tJo2!lV8|kVkH!cpw7$sQ2OB%BkNKnp>MR)oIu|8&_HPjS_((JrlE}1bAuhSyu z;Z9zCs_Ob>W3^;LD3f0@ogbcv^*P$xr_FLgA31xQXtQ2&Qb@ghHGTjmB=0j)oQ#;v zYPN<;$4hdG8Sl=Fin1jdHr*>D^B#>|LOc?GbVsQezEo=-z%bu0dN)d;b=9PG)D+&4D5X zx$AU>zT|{?inLRSkA~8`0t%*(t^(CQl@gF}Wq@jO8JkwDoP?@Z=q>Chma)^jPoicwijkYO7MfCu zeO(O~nV)zDS~k}&vPSg5PCr(JlSsVZ67~k4x057y(2S-r)Ir~~GStD?#9@YFr0k34 z{1DF+uKmVU^qD$e6;Q!$l{?#9^Eo zO;;*xSNhQjlIO={devP`T?`gc*NNT^Dbz}*-il>Lnf+7ds>4{EgASo*^jh!WY@64@ zv>@;F@NUc=IUwOPAHV4>TEUzrlc7%Tl!O#VR<;w`;~sr)XZef}@`7<_l!uF*R{-oZ zRN%Z8b8AXH%W&RmDR@uRfvEL@#V)pLR-hu-qC?<7IfR5NUIJ@W7 z6Wy|u#DR>>#tya_1I)-77jHVVsBDx%3uA27PpjFgIXlHCTRYi+6wMxd7_~%+%W;At zCimUaH7Me#lFC@)ZEg})ywYd&h{!3cVR2ss?62Zm7@dS+Gx9uv=aXn6Q4>@`G`VaA zUJteXFOA2DGV2>iAs*r!mL|Huuep1ShaD!lRUjVT2^k9)K;~vUOAxG5e6W0fgq7n} zuEzYP>_jH*iGeq(PRD+yru?kf6<>!kDvr6v%jS*3^e%UKGO=R2vVvXnbaFN_$Lxob z5pL*x>cfk|r4L=H8d`9M*SX_bU8eSQc87N| zm@#&tOvzJFY>Gi02V&8pI>-*yF)5; zn?A%Ix9^UYG=QoaACzQyYbe;26GZl~#)cb=j53pXnOS3kdDy(zM61>c3ws5_^p@DvBUSG`8j+|{9xx-qn~pdu5SDCNE}c8 zN||rM{jAOjLD`#4=I(5HoL@(qvQlsMu}z7ufe0MiDI*%fiVQ;rZ<;&oO8#v37p6G88Uqvv76beca-33cvNM$ics7Oc#`BLf@ zT=1g(!0JckB~_9Iyo(MXUH*Un0RPmxf5W-}&0i6TR~=AaW~bq29`f4~ePLHx$9m5b zXJiF<;r&LmWZ6Z>E zFARkPlwLJqxM0#i4kK9zLzy;ip!db5`f29hO0P%awN_J@#4l^DuEjyCLPxQJ=5}4A z97(U?dh|tL6Oqj{zQQoZ%gd*#@|E{{8W-A3jCp!It^G2~7R=aO{)n95dULVj%)Hkl z@=g%ys+_t6bcRQ89W;V0rd5_7?iT?hh9yByfpv70r8F$WA3Q}I5#eeEc<-916hsnzc7%)>YAxS6OuA<|J5eql?EE~3 zL8c2mz(IG;R1$u0yv7cDCsiY>EBUVN0C~8&^r1s?N02(Uw)6=SJz<3MMLB6%a?E;a1X^st9t%voMD4^=8vo*Uepy z-P<`VYZORWD0dd_jD&7hNw69wK zG`zMb-rtjytAQi%Uj*Bacvm;F;@eQ)=en9P$*gwGe4pI3Mi?ck1C(8P35&GYyq?xn zf5a8x5G*HqPR{!4NRJi*`3F`qkSJh8j6{RDN&RV=44%)zaiGT>oC&QQd&)THVc3s|sgbZjGhm5G}gsyK8M>PK3^+5~&5YYgQIfAGfu4LO}T8yH)(i$X*B-dk&mm_2BHR-9>GU?{V(;wcLo`8~IpY6 zvVJEMQ&Ckwohg}7p%Gtnezs2yXU`;+$JRl-i8ze*%r1VN*coEMd$0g4k;lSGwA?z- z2#w&pq(#qpbM&Ld19ATyhW;|2CDpd7q zk<0*Fg%0A!Af#o`$He;OL?*v@4Y8iH$Z)1b^n4GLag=u^tVRl*0pXG|lJyL$z5y>m zfgQ#uY$O>LiK=n!s;7^dW73gzaRa2tVc-98fw3j|wCz@DQBYd2p6 z17nM5lpQXrg@_Nbl3krX%BnHYZ%Ml|pQj9fO4loL+NR>%m-@*z@fNBbh+!tQKGt?I zV)H*tu4Pw7S4@0cy3OSvIehfg%duZek5T=LHPJKdG^&`E?q#l8TO@@Y&Q~9bb;2^(;!+7=FVW>~ zy#V38w8EE{x2)Q3a7xT>nqFwINztR*Afu&pgLh|l=l%Vu! zWv8&wVROWytd3eDK24eCd|Q_U0RxOyx{FD|ce4}cU7!1(609x@8>=S+2o_HwYlUJi z5$EzrDS%)d$R4|w$>NvuW7B`s>n4+*6FcW4QbuhupY?6tPtkdYK0+$i1YK6ZV?G$2 z61z_WenzMVcHCf(-M0fl=2~ez4mZVuMS_YqpnYlPCbP4QlG97(lO z(xrR(=xm!W74;)tky4g}!dm;CUdn8+Z?N9Hg$;d;_!SJO-et&93(n$QIJl0S9JXF8 zUY~tEf?0uh1S8ScjV#RW``Z-1+;3C-5Kr~%p2x40ues3;ZC3-e+5H{530n)c9W8(9 z1vf^X)8UH2jaMQ_JZv@-{3OBDf#MId_b_Gj6gsyXL`pnVIG`iF*gjeAujx4Ajm+RY zo+`7c+g!d5pT?qkdPXsFs)=oq_j>;1&Z@hS-!6qTA1#j+aW7L{_uD8xF3i71`J?Vf z`B4iD@trTg2w;XJJlyo;*lue!z19Z z{Nm;O@lO2#nnoz<0;B*;FTLL<7)N^pVH zqC!7dCS^H;CD`G~M%2zcZ( zkUaciVCQcy-8ZlN0YejFfh{2d07GC^?fH=(te>lkPZG9{rA$CQV}}8BBbh9ZMQXg9 zaMLzV!>EXn(<=C-!n+B-em_X-;gs{cTQ0NV!I_I*3Lo+!0H?s}N@-F}|2> zt*=4-shv@n{mQj2bu*3Qy(WERnopp`iKTE6u~p((`xHoV%{4lTf*ww@0#nPv$Yepe z?pL3oC+w~f&g`FX;AaJ{8dn^>lDf#ucWsXjUC2|7oTg?Cl|EI?xufcr`UqcQe;GQ- z5`D;=NFn3PoSSabOnAl`v%Tl79d1IFxEy18X=2V=l>+Me7?Ayb$h7kA8V%J3D$WSA zF6;*^h5*-7a}Pl4fb**k`;TGtH_$29at}J2<*k%C)G^F-LG|34_R7?vW+67vR5nVf zgr`%uo(~A5!i6zj`hUEw|Axpq;)zTRKrloxdCl%i5}lq6-1Bnw3zS|kQq<||>iRmh z0cQs3uN{Rfa^2_`8u^otF?biWFkVde%emP^kPK2EAvHfHN?xMTbnARNJ8S0N`0*|y zSpX9qs=GNpeUkV)@4Qyg2`$h-)CV+vyqs`u%6Q6yKn0j(Hd)WZDJlKhv?0t~!?-F< z%X?O-kcZssv-Dc8!p&3hv(pq~)Q6Ic*M=_V?hTGvDGejH*UJRn50g8L&~uYj?NJF3 zS5a&WSr-$#bdXNQn~}OHjy)86@I0wshTrHYRfMB+UCVUnLS_|XzAN!lMYp;X>PR9g zAt_#=LEj|vLc?*W&tI{EOapl>&Ao*Vx_mxI|9YS)@bviIh7x&;?DQuGy+Ia;$DwLt zn#Mp!@&e0qT!x{=dJ|I&~k%B`{CZ0j9xx&D=_xbt$wxstv5C@kia4 za}r6Q;^+?!dpWAnq@il6vj|;7-7xLpHT=u$CZaW#Xq03vRMc<2s&@4!1@JPs)2w0i zvdj1-??c9T;y_Iq!}()=;7!q^T8JzmY%x_m$IYP)UlKgL8QIGbc7A&fxj5?>iS&qy z*#N6n*Xy0#F6oBYK?q}ppgH_!%?%?%K6Lk%K$j-O`QZn49gtO%^#Zu+hh=_rkv2M? z>cd?*->vU~>lm$MSl}-E6g4#0R`Q9jC_BW+-7TI@I!D^eP`b4r(cwGnt?)$dCaWFt z_96~N;eci$kEYE|aavrHRy&VilbC6)S_VzY2N6RMIooM9uKpH|lQ7gbtKlH)8^L{m%|#OQ$t1UtqTwFiE|UTgeO3 zHF(B4+bK)9%`Hy(fy72@2T9nu;E`=`P&^Jwew|Lbm2DQp*_KJl^o4uOdBTjYI4i$d;UK(^+%12q!mF&h~M z%?>@rXfvMG(CHz8y&|CH{}r*1A*?aC#W!mzSaFZbZ+oPr#omY-vk-`yCt2O>IjUQANYU}ITc6v4EnwZY zL1P6&od@5@e$(c`Z=6;KWJ-wuWFclhS?iEWIw`4+NIzXj4+w`WEnczc)>>WVx`jNi zu0~x;cAh*vqe!-b(MUt4IuRsp8<*4%Sb~iD^%T+lwH*<2H&60?J~a*$2-=+rCl%L( zIWAS`MzPc8={u)qy6)PS@HzzSMA=S!B?#l zuc3PHxSA)Jj2gguqywB^@%8?6+>g)hpS!o!T%b%{pn$3VpAhrDf0TaL3iuf}k6jE( z42m3z@_P#2{cqHh>@yz+(3~ISg9jAA@BG<(#-G1YL0<5;r!zvuN*)y``zG-Li;v+n z@L{Q+X$vI2q*M~o3RP03wSWma%+~C$p|y6kZ!)-4e+Yva67`JymfR>^yT90=%d5W1 z)of#MuwnDybDMq}IA)JFR>T&%bXIsTbVyw}0sI!mfKRyKlNcrl)y{GdzZlSTE9e3E z`F!EhZsa6BdN3noG7@ebEALIu&WO8~rq=UniwlEHH>Sdkc1`&@R|X!}R~d%*Y$)GF z=HgiDjBquYSf1nexaB)3yXIl(WFIp7drWI>KAf2wr7ERClhbn1tATZQ_QeR(%8Z_3 zU1mSuU~^nrVHXU4Ic#LAyse?~hRh+XSwM{?yu_A!@%Ggx&IFt$0j+9lacvg2poOMI zH4NpkK1*7ltERWKSW{cD8`&==7dLV95rKglnMq&w-I#+m-28d$gCs^tTG>zGD34&Z z?BxX^lu`7kli$%)q$nbZ#QB+4O9WE~8>$KEbl~c-RO^;vguSaO>}havqKbJ=vGReD zRmUm)mEy^w8e_Oi-z0mTbW9J8^6P1K_hCZ?skQf7pKNx?;1kXik4N91 zsk~(wfiDtyB%@VRDi1=PiFXNgf~$a6!LSfDvQc&FUa1>~Hh>;?;xK1+n{dvRPTY)N z#*k90d<>(1*F6d}Md(!aa;2+Euy~rCY)}v6u3oVELHJ?!36-5T#RNWm|9qQgJ9YZH z+KOf?PA*Ydsdn5GRlovaZO{CJYo0ugvk@4I%U#Uvs8HASx1nI&N* z*AFsTo;~6o_<(iX@ctaHoyQJh8@e^HLmxW5y^Z+1H`*I?E3%Iqzy0X*h4h?m4p}+B zdEBV%Gv3V;r=)V9#}^!vrS;gKjS*J41Pwl6p1nNGlneI$YoZfJc70_D+_`x`X#6w& z0>a|Y1m|DOu8(Dd#@=#8X6bvY_gf7cvxan{f%1XjU+jimz3kXJ| zLJu~CkQLd%FPI&N7ab1&=F()3j)8n-K? zaDyRFqow}NP7EeOgRMs6b6Tj4DX_Y$JiAozRlAw;Qo{(M0t+$kzUTvX`pe*AatfCP z=PjgcW#=yDMVp|SwRKTxJSg{(gSdpLr`!CdYuFsJL*+WF=_i?l+S*x-bPM)hQmE!T zv0%h)*jz1_md2xMh0ij#agsvc$e}SA=RlL7^swfDLOz>e9>2Vfpnk9Nq~R@8F;0SW z(5K}lLKX_BGwsW`cM9pJLJF_))dcnl1>*K5^n=~-6cR1?gRnyFwM_Ui1MYWK(jY=F zw&R>KMIUlW_J=!^dq%a_AX3B}8%B}42R*8uBjHN&VSytdcUnj{4EJ^fdbM3d@-o0pQi%-J~@Lo zIfJqNzfnfM%Ltl(&j|PwwZ6hBg`r3@pPYnZVTl-Ur+@WN$2~JN&4uY2R2M*}?_;2r zlE620z}{#Hj^E13+SM3nT_V*LC`dncwFJ z3944EDC%fSNi)%g@jfDBr-tEbm`@oi&SSboVym&?$z+vEw~e?#>bPX!R>_mc%BSkl zE_C6}rD|=HHCMTf&*?$yV3a9{t_QqPFV4AKhf}=ou1^>qOt_I6q0N|h293P5L(uQ5 z_M}QoAv6tiqYuVed%|D@#?cdt+$)MDt?{_&EvYBnYGSydPLiGWJJdYn$`N|e?Z zd#x4m7}SB(fM;YSESGHgYOA25sY+d$q`I)}H;Y$K$y+4H-#GY=Fhgtr%!&=H=8$z> zs4S!jX_^K1pcs+k`#SWxRY&Ho62Km=SlxOTSE4sJc|yi~o(vg;>HcKeduoDgi8_x1 zccD7eFTg^zVV`kP0vBvhqh>CWa-dkXMS_0YS&wRJ+Pca*P0prNhdE-tOlZt*SlWX9xo=dAd;7Re z(@nhLDy0+sT{6xvlLW$NjdvurPgWsI;h$F_ZcVQgba3TP-b|u-21JorQ_glnLK3V9 zLmEB3fT3qe-&rkP;ZX=xS4&hkqnvyV{bksWMLA9#J^W)%z%^`ZFF2(3rC^7ujO3+a zhkR)lThPGE@$tMGtCqKZtAnc#X-yMrY6hQw%Mz&5*tF)#;z@5x1iBbNNl?^D5W0f+ zQ2z5aZ_n&z?OcvwVOL=BbNZsODF!ELO{-tcj9oVTgN*g9-k^>71nYTw5m$oIl(#?Mvt%`$AiI(cDqop%4XDY^R8kE z=r-Sa6@fU~3zDk(%p+%ZeMSl73FEZNiY;Sl40t$0ekm1yiouDpOwNuBRf06#9X$|3%g+PzKZM`H<|t;(!iiE8r-hIkt4nDrwlW(tPb zwbF(;q}qyEo}5@s=!O5GV}PFFWe1$dt=w0C^Bwq{M7IuHxdEba{XLeWD*s$ik0wP;Tk3sU89iTKM}q`mqX2G znS&V@!wKfFbIJKYKA(;0!+-?ai`1R}(pKk*msrvy_21G2<&qRESK!G~0&a)@{ATzr zTS!p)R+{4lr$aA+g)O)gkqvMe+j?x2W6c^PFj`LrnVR={G!G5r{U$_gtrPJuH{A7A zx44iJ&-Tz@y5q(NE>}LjvQw{)&a5-srt8VPLh+Q`I!Q+)pg) zoAKOqvGT$cOx8&h$a(KnJFzet^PjHRvZXiOnb)*?_@F)yK*4;xWwvPh{1x#~--}S` zYAIQyc~!lR%yxbRhDSi%8(YAyEA+~*FTBdnxcxmudVNkL@>fAg!!rg^)l6h8;bg_> zXavgluaFEuNA`Z-FZsR4tBT}F{oC*e?3^2 zIo-{tz_gDEylmFr-?j$@MTF7BR$@>uWXJ>yA-NJ5ox#3vrMyr0zPR;JGsGn1ic8?@ z)vcsv;d`=hkOQOeZ;#v9SveCkBQqly6U*pSIBhtH7E~he82pC<7dBi_WirHr2RN|* zHaGgKoqwhuYF23l|^YSW_14>DOMzz=+J@z6uGX>SXoz& z$;s=lw>;@ban&r@Bp+J2KDHftJK-)@!5~SzGB&+PKWQCtANJr)^S-@4Lwqo@CXV$2 z6Xh+2aW^BaDT&~dK#U$Mm3Pj~q(-2RDCEWvOjN5u;bP6SaaZVA%E54h#ZSMaYLFYt z7>V`83bE6Cbbj4UOJ{`eEO@RtAPuY;tKBc4&iK@T(nnPAs+My*`#?r)kfP5dyK*YODn@gR1Y#tUUZB_Y`xC3cVfxc6z#ke zKTSUfXLb|%dII_Y;}{61XQrBO^ELZ6z``VVLyVn!$VPhr#gVn=M9hAATvpmOv??## z3}QmU9FaRlCL&67o6YlhU$)2;vnbQC-dTFUj{BycZ?(jNYre8$VsU<5&550hy_xfa z{)|Oi<^t=?`<+Q(y58p56_FAfqojP1Bk%oJ9NF>W^an$dtHOpnr2W7X1m>)QmD zg5@$B9kEiAmb^V`r&3`kyDes{YhG`Hwh@mcQRguCl@H^|*F*vJ0*BR7sX;PI)bU=R zA*2LG^)YiC53-IJ_A97K&eUQj&_QT&oV!g6&L?ntDY~lDh~DgG>73Mr-IUVz#i;FN zIoNPn2hEf=Q+`S{b76_@!CM~E&k|r{-wSPRd!9t6tPh?)6P#LueeNa->b= zlpt4%mHC47#h_htr%K-xQt2-GI#%|mo(?nY+Pm}*N(`muw9maFMR!OqR3f8u7!B>m zw@P!KC$$Qk_G+5$q2%YT^N)|93k@$lRmCSQ=Xz5;fJHa=j@VT(4w)b~i5g_qV!(?q z;6U`|&D+i8GE81m$8g+MmnFIGuVR*gIJMHB&498TQQDLj+s}e$s+yLSz#^=c(xRK8 zUwgX%dUEk7@*Og-rfkQN+K!sf3x-fbp6jRTuat_WWRyJKe?6c744y!RO%NWQ(Q#MX zylQ?Pm)`N@yhE%E9UCjM!_T^!HUz(yAQ#QqQy7oHxfk5cds$Gclz{6X1PVIusX01M345lRHN@c0GL;?2?b^h+oPH-Q5kZ5;7C_sZ8T2Jh2=}F1B>6oE; zb{AC%DSNbh?%&kF{RY1S@0`YJd+p5?rAo!y<81rxx=3<~gLjk=`$1irq;3k(UdsN@ z1vaaoN0tX3{#cTb>s>+J11~Z=aL@hEFY>RoWQL-(B_L?+Z4*alj?+Xp%js-0aUEM< zY5%dv8hZ6R(}9_}Fy<|yfhT;-QeYaxkk45_RfzxNnu1$weS=u^IK%|uCC?=1BqXIhX0nS=*rh*<+eoYA1T8168`+u|&KL^3#P zW|$Y;?*iUXC&|(n59O&rh!14L6nlcdO3Q)5JHpcS<>R-!L7VcC=uln{%V5H{imkp&yU@%Qm?p+E1f*aubtF>&PQK#sn@9<+y_SXV8 zGJ+en=QU=a>6;2!U`e*RR{IpHBkVN^^1H6AY7l&y)e?LG5jiAjgM zPbU2n%`py+!Dz!i#=T@aDXfJ7vL2&Qj?vnDq1{kuQz8pEaUgHS>BJMqJkAmIR9f4feU@#|W=TQaiGyD}@>{jvJOg{XL3&rt z%lBVAZzeaYHo(p|3nJJX)zuQi?GF?eN)vy&lZ#s2$y^p)^=amv*z~RIPh61I8JvzOvir4# zHSg)qlCGW&F2MU^^T3wg<*O;>jXRIHoiRx9nR4gm?ldRpIu}D!(q}=jH=CrrSRZr} z-YiizMYv|^52jgfbhLy+Kroc0ZQlktrm`HV&~DSRCtl^M2uUlye)9%)>BKk28Apa6 zC6zRS+AS;`c7m{Q(|@TUJK<)B!WD9op?ivxk84`An@f0V8~mHIs|#gw;3)D8EE!{g z9`+;}$rPc!NVnA%uvM`A+F0Z5g6Fv>LprzHv)&SUYcAF}3Fdkw582DqfuyhMFpjV~ zzL_6yhHWBpwv9lBJZbxEysIzUVD+(xjNuCR&~3ZqY~`e1EJ}@TeZyJbOf_sKq1iTT z*}?oMIuatf!SDA$gR$%j?6?w)^7$p!+cnZ?wd)6^*ZO96uPm`jAqOSRtjRZt13sKJ z?aV2KT730Gzsa7Q5uGFmzc0)X@U-wuo&3j&fK7n40GzsAm*QfJ1VJ_U2B@tJx#E+# zZ4bb&%G!E}9ExIiE+VKI-O(jm3(tOnmU^cLza!Cpre(?dxFOJI-K#9SEcSz6#a+DO z-+q{))$0uKtI7a=m1c1!0W;~kJVdLX8_dxDKnYP9w!{~y>3qCWQzjvx6xCW6{!Fgq zBe-5>E#yt&O_;hQ?35)YZI$C)r=<9#V}(K=DTcSa7=teV=CZ%lJVr+8|nUwP0IRVK5}4#;VT>9Ia{yW zcl|*{p0Gpp^B2M-Bq3HC1W}~r=A&9sE~!)t5+FF0$-*!-HCmdv3{HJ9t17}VS)8Jp zs{tt&ww0T>m@PMs0UnizTAB@XC1DHL@i$w-U-`%&!bADQcX%V zY?HE8Q))ZpdZS{TzJNt7a3Q*A)N`mMUNQ+Ry>j7jX~m8hnX<5U(0O4f(Fpt)PF05S z0``>KuloriAFecN%#nsPUiek2a}_0ETdx>F9CGTA)Ai3iP|i8@QO=OGdiqRX zAD4ZC)cS^T;D+~$o{5vU;gSWIX-!|T+bEr@M0JQG-J3k&lo}Uu&UQdv~ z_Rp%Ir8ucWJkkRPVfN36A$;Tw)G`Wo9OMlhhq{WqoNZ@258kgT2p7i?ZzWt+8%w^1r2QsB*|%3Eyy6-hlz8;F?zsiWHR z^0wMGh=23{T^q!RiuFytWN=>M?q#}r`gnjx>*twV5t1USzxZzR(CHSGsn0wNnOeq^PF+as30LpkMVGIFnw~!># zs_vC153>Z)GU-4C2vDQHOY$Zc;p7y$Mb2m>RDjwkd#k5>idCb-gSY4@pfPn!_?`%R zhfIYJMmP+KQ2AZJm2V$4Nh~%s3AAZ;>Ut(8MRil1Bt9Yx9Y`N9$-Zf zoOKy!oZjugS%+mtpz_Z78b6kgkH!w0Hw|n8=>LM?Sye zvr?u{^8%s-ZZ`#+af3zBW(}rHG<%PH&o9J_NO67zt)Y?Ul>x>0l17Hj*O_D%q9mT3 z9O!lm`*UYAijQ*HBOFsT{>pgn<%hr(5cM<+PSmGOaJ5dVX@81j;3?>e4{k8L5(do! zlG6hXPJxFfqt%miNfi{T_4523L?!TCWin+4k>^oBQ46@?-#;wE^E>t$F?@KKs3M zqx~G-2|7gRz`W5LWy&tn!qE!A0nq}Zxf)z8E`%F`@g)s_0qL{!aas*05!ls zI+lU4u<@>vRKMkYdW7=YT-ZLpcwpT3y>Kttr56M0T;%aKsFOyT&Wjxz!SsbQ!by!Y zuvOCA(BTR^kX1qMzmGpn&xqRbO$;Ne%TOvyg8b_u*?28 zEc!#Q)ZrK*N46nGajZCyRX?C;GqmOsC&T!d z*H@2MnNJE2?Cqk+M8osOr?(E6A~IBa3M8y3Cktj&LX+uKM|wwIUUC&=FmtsqpHH5V z1;z9eaHUhiz{Nc*Q4rGyxUiXG#t#vN?K8_~BKT}aO6IGtzP=|xF~GcANcqbD5-#+@ zp{|xc*fYQ{#~-^i=*VpIS8Jljn42Auvc>)j7X8nd{|bvrAioB$Y<`_gpl@#+_k@lD z3}S93sYKsw`*m`kzT7qH9qbfUcD=-|aM^c?(bYI{H38I{oTRpNPuol0yW2@XcGTlU zYk<;e_&`J!9($U4)=686y{DP7uc@b*cEZ)@JV#dw`~wGtA+&41joOdRRp{0qo2$Gq zm!v$=z@=HtX$d)jm^HMztmMs^hMkd$C0?{A#+9nOc?XvRHp`Sj2<4M|hxJJGpFaD> zBWRd==SwaP5dC}DREsYGqW>cn&BNF`zs3cyC?tSI)#f%nmZaMlE7nC>YpBNrnpfDZ z>SIdaK9SP2yfc;uRh1v8JBW{;u$OuDx0uq7rHp!UWidxKc*k`1ZEyor|G7f28;fZ zbL7D-)NT%6?1cZ5d$cnIqr$YS5c*rKGW9SGOaMrg} zvmW*Ddp82M&hNP~#owCG9;P^fatc;FTNhb6w1&i!6;Dvll`2Hr7(r2aSbRGzPn!;x zU6z&MMiDFY7+9O!z(F1X77ooO8ZVl351|%udr9>nMX5<2vc2p5-Olk)DJv6dKUU62 z&C3b)RMA16X|%A< ztV|AX1Mj%$0ct_QG`3Px7aIYHhGVmYxDpxKs<-LO7YiY3&lSs)w%RN5D<8sE+A;r{ zDYE>@lQ^q&c&`|fS8Cub$W=UxTnJ0}&y(!vx5J98NIbKmONOoItOVYlNLA*}Gl$Mn z`BQ%+vmhUm8g`2JU5Tauzh2{DHFEZkHW=+|Pmt0>rrP3*>0`j92q?1X=#xw?F#N4Dm@KY* zt8c*Jj|y+p%M=rd<$m>b^fu*lI(v@|KGsqpPb9T1*7@QKb)ui{UvG+ zDx`RgnATH^ei%>doP*uS{b2j6aev!(nf$uO>*;-Y{ZonMpCl>c@{n38fF$(~C6>wR z)_4L(<2Lwp8`g8nl|xMUy7j5i^BhU;Pwm>B%$oH^nkE%l`UaymmcKN!glKv0kV{d5^bq&V+LItfJU*Y1QLFrQ6=%3Q2>p?9&taS zQF0bnFYT*|vgDxBN4FwrG|eTIn1QG;?LL?n-|uFEtmjK45v{R#1)Jbxs8!PH2cTyZ z+oQC?N*)x8cS98O<(=5?bH8q=EU&olE3n6|C(B!p%Fz1B;J? z)_zHBgZz6i8aa=tL}EmOmXDgROraJ*7(j}Z8c`mR9$^gCfD=LIw)o{5Zn#clqnXWV z(2n*U9-Q@JDU*<^)#3{mtU!U&c>Z!vUKxD>ag4CeXqGXe35Ew0Jqr9U>{Rc&s5}KF zUw!DXRdcFpy4pp%3;=I(H9)wk*M^GU}IJJ6N*qHcK~Qq z;1P}DW-JiOL;X-(ImC*Iibh<)VdMz5{DMe0@=FmtDyWUdpN5u<-8VNy- z_Wf@*>hTuYR=$6Wy6q0KbWSJiL%aA?;MFOXv+5MgPepBK1AcV$+e&TmSDv#X% z2x@x_fcu}C`N;jR*Idq5uibmdAoQDheh{37ibMqWv=`%#cZZTk(@+r*=Xc=yE9uZ5 zvHo$I_zxx{pdZ-7@Z`-YM(5_{!R8+3In+H!prC+VOpu0>vBVtJgZ0_Zh0}w*fTs52 z+pk_=O9mqRlps{%Fvk8s1BvQJI>T?NHFY$SnUrxgLhrxSp4TWYQ0n%pQ2!L1mio$t zRM3K&srS{ClPZ5(M_mz_CUt^P;v4ruIsK}G8RVkh>5O)BG(=gWw%WdXDe3d5t>LR1 zv)8Yu_z~7q-@u*x9@PeIU z|C3C*LASlI^h&a}mP-k=4b4kvj_*-XPNcF&M5amWvmdtWU2y>UleJIGGCT#@OvuNTKuJb^Ak#T69j7O$}seb%s1c@O*2 zFr6O<2k*GZZk_1UOTt^vHcwQ*P5=fAQZ`zd!LJBbp_xWspI}oS^Qo)k{10dav>T|uat5-FO}ZGO3|)hCcQ)Odz*06f-blk zY&ylba92GJ0|jNeMcUQf3F_XRR!a}mQhm#comW|}%RzqUjPXO2Np&A9X5}yBgp=^U zsq27=&)qALqJpB{Essu7H0$tlHz8;+QM`<#mKi)kvLTz3(Y=trIm0rV-mX_PldX{b z3d7ZJW?T=Nr`NMY6h!AanIF$YhPEcC{`eVNi1~Jf4uV(x1B!oIh&6Pb9Z&6xLuP*x z&5Ng51)R_e0+oHV8x6zHUJT?JuQ_rYQ)>?M5g1um0H82>(JStG^FbPk8Co}*GhXDj zQK1oCk{=zRIvA|mNiE6U<6_%)n9W4sKrEfJKyqiO?%fsdy!o8_6)T=iZFRxnaOVXh0lt+qp!E-;#)|V$b z7Dv4_7eZZW1i z(vU_DouMWjo`DRY(PvK&drD5>o~48;LMH$}eR<-ghXid@iG5R#QTr76niB7MEBBw0 zfY1q9ZZC8wnN<`{mV6?$OxDqp@|l*A#(7_1MD8n({p^kwhS6G;i5ZIa(|v#lM!BCY zFkCE_M6AHU6KsN?pjP@=KLR~tn2J|V*{B$w<02U!1GR@n#%vq5Jkl}P6z9$}KSav- z9QX8jiLV~0Q)p>|zHH3Z3zlc%v`P(st7wIL=y@OUraL~s-N!&gs!sG2)EiQNJ-1Kd zC8IWaf%si8RNp>6c2)=JfFD~S5%H2zz7whB*>%g?55H|)u$`M8J$6SS0NC?a{hU9! zV*dh>=CxH=rX}E~nDC!R-)w69Y>!gF`kfQ3w$c!<%6zu*1B_4+pu;k6<)^i2W1%gQ zQ#?&4c!OI^f6Aj65WheZhb+OIVKh?et40<@FN0-)em1^Tnt=gu{b%HavWz4oBd*c-441G$ zd*k`P>PtL!VgfCeHw}QyAOVN$ulm-1m6?Ad(tnWMddtqYz|s1e`rtQn`Eqe0L#vs( zUx(;RVwE5my9e z+=Z4`T1)S-1iz%Ou662hR7_-7U0^avGv*)3mNuk39ph$PaD`tb%6li27b?h35+mhI zRMvsdkuR=lsTyxYknWrFeK30&V0mAhHsr^GPzTWX^AF7BTpV^1u_E890;|;}j`z`feedEImdt-xiB7 z^Ba z+%}Z+ySQ3~I7v*b9lZgL+h?4dAM=j%4UP1S^qv}+WVd0dV`8acs`=4C{no!f4Nns< z17f@fzQ5Z0`4Q`H9sGX)(%**l^_oNQUTFTv^7JP--n|mBk!iZ!W$JEE5J^lPk^!eH?UVIhp@O&ie6O5|!MIiUViz767GxHMaP(u>T5`LWj~IJ22M z{8Aj#^u%&PBa>N(%+ZA`Q*)$Gv}lHS_=-kc)bVS379oS4Mj`XiW~57p-U$pNt;R&A zp;?&A%ai=jbT8qh1=x$1o2^))?C6Rf-YQw6u{DF~re-8>A@AP3ocyRl#<#sxn1Cdn zyuj3i2iiIS>&kCf&_yq}I;+hjOma)@)Z7|<5mcR_?il)GV81|bLvV@^Re=M+=7g!X ze>#1T$+k#&bQtjZI{kBqWF)%CpRvTm>O|x5vY=Xw~j92}<+1c=bukw&%a<4@i zp?S2~zzie@Syr;#ugQ?kcA)diyq*D0gxXz`@_N!0u{4|L4U+JRWkI<|X}vP5()3Z0 z7NAm1l;ER+6qIvkhR!?(JCQWa71b>RRnWCpJDXxr@401}C)<|7=L4mF&iNU2Me%ml zD^Z3JkgoOyoZO-Mq9HM~oCWz|t{OMh=|5Qraks6|xjnBPGIeuBTtPOux6?zJ!Eh6A z)PeR2HKA7{Zb9zUTJ!+8<1Z5Jxb2pe*<#*_4$Up0Td)z@Hj}B^&9jD1{i8<;IJs-n zgJ}!a!|hP^l@OM3NqkWn&POS=WD)}=_Dbs_cjR;4qP=BR(037cA{>p8Cof~LSNjel z&oaDD=7M3uhdvnut=oakw~?zX65gz98Fl-pX4yHKE4yx*9>vRVi$cunnrYGRR==kgPU8H;2IBVq0r>KaVqCk_zkG8yh8a@j1386~MZ2A401$U#X`|x{m@}rI zbL_3nDz}zXCkCTT*)a{;qV`XCLB$$e#)umCUAYW-M)NcDB#_}^Opk;6(%@>VK^u z-!Clyi}(yyt&6P-y9sD^890XCA0o;PH=M`B->H-^q3%;w$TYQ7z3GKT?{Pte6t-fR z>j9djimjj1K&vcIKaxE3r3?dZgi|rLP9;NAqrgGM(3+0`&C>eD?cC!X z0hGw;AVBa9OZKr@+OwCQa^2}T?)9ijU7TA?5b2DCd`1Pk1U+tI)+kU%t1sF^7qIsE zl&=Y{8!HMs%JgueYo@CC7$=dp{v5rtZNH-#2}Hi~%~zNE%_>|f-6fnpx8OrOp|c5s zwf%&hLMl0bOK)^BH?PHJvr=XiWIsZGB|$gM(_WhFNe&9^S zhnDvBg0F)%IpO$H6{Dsu2|&YCLo`|W1ECwO07sir?RlVZXWjUjQ||*eqaOn_Ca4T( zm_|J9{q1MEe@{-E1BCer_(=aeT)<_;+{W}*5^0c>_+z6qy}2Ka#|`!TBjqN-+KV8G zf>&aKaFmRc=BPKU2z*_lp~43_M{}bX;7GxL&Rj|c0P52!px9&kHPYZ-(F^;jaM*# zIq@ZP)OBK+SNHz=-8b+qM4fQ6KHm_2IOS}xUZPM>t+h*oz%tQyZe5dxL<5Z7{UopW zP#J?ny)M;W3w70pXuv@yBQb`PKh1;{;IYaOZtc!h3Lhy@ zrA&PzciZy6pJq~yWDu$BIcPx-Y-Mszut;yi&5}t$KPJRwooPcyt0-GF25Y?>3ly#p zl_aA3qOl)sd~wLAG%NL)F+v+kTWe#EwXD3y!WI7WyGrXr9Ele;?GS6L4kzt#8cfV0 z$f?sr1XNpC8l)_Q1Y2Yq4S4|~xdbvjjx-GQBBmGvFdbP%ly;c-pYWsYo?AaPK-STd z??Kj)fX-3vstru|l#`XymhEILhShNshLsANmL4@mB^k3T7LoIA4#oHjVQYpAtXjee z>^Zdcq85zcBJ0bq9!wQ!=g9k3Lu3XgXpB)JaT|1k86w(ht+5O=>t00`tp?_Biroe> zXqNYa%DPCp2NkvPN)F2KiOFvjioI0ItY!B2pY}h*(ZC80UZfiq@4$`cIVbW{K~W0! zc*!|Zu9UZ|90sq5y)uD{k)``gvNHQRuAQG8zam1V$qUW}`aaaF)!NZ|0J>RblVj); z)z!($0v`u+YZnH`MtPW{MZJk8v zu+`#!Mrpy9cgAh8f!lk@e2#NJMfn{=$>9LnIrutL%Wm!pCcN0v@cOgU%Vl>$)eW?7 zUp0g#Tvqw?7H5dEy2oD>=ibPkjC9KRM3-$DxX6;WLu2reKCDI9yz(@>`mK{DPt}wD z=*dS1oW}psXqBY(Vvm_d`TB_YfFpHk__M`)o(+Axxh2#B*_ve=0Gf#OjmMtrv_ zSf<6auAcD4pW;)W2r z!atEZDrXTZ%I8#|#LGR$*(&%*d2}l5v&`EK#~ux0(d@IG_x<*SyWP>k<&+_i6spS%5N@erIppj^D0-*UeOekTTDKSi(>!z+X)?|g8qDW7 zggNqt?A;9x^xbOw4RlLRQ}ne3ASV1nH3+lJFu+idZ6L zh14TF0yTBKBjDX@Edd>uT@EiNa6&>;N81zWWVAqSvOT75D;wwsd=me8bCRStLAKE5 z{^f)piS(Ng&7rT|^MA*heAKO-JV5F`Jf`ozKNP<~%pkd+0(^igUxo3mXrVdsx)i;Z za|u%ZIxvk#6vL?916=t~Z2mEfZ~Y=Fe5@5CJoP9-;FyW<{%iXWQ@(!CQ!I0s6p~u; z9V3#OQi8XvFr|V1fw_UsQ0|yg^c6YGXIM<888txb69AYVuaY@3*NwzJab}`?V(x4B zNEtA-M;tCeGHgEoN{9+Q#z5^Jo+1A23vPIC{l)9P1<&tP*^4M&xc2I66gNyL# z-T%OqA9_ZLvc*_Y^DO{e8SNGX;L3qtJ^3CVvuqJil_rpbZ26|}o`DEmh^9i0BCWO5`Sn(! zEOB_fabi37P)t#sc}Lj=gWI|(1@Fh~GfvXC)HGigAz;>8^A);?rgq5n=4KUwIu2Lz zUtLLVyyYpwa3oP`&tGE5#}pKqr8fs5T@rylR$)ITMn6ANoHVL};M_f)0*VS%Nl7eP z_*0qMKv)>EigLNWwlEeNsMqJ^>=v=(jH?-h^~+jgsKAeow$RQuM^Eo~0}v<0i+D27 zijBgZ%H*^N=-D&7vB$}w5nlI5s--fKo<(?7oPj^`5ip|d2jQ5F5pTs)_(ra zrCrwFmv)`9^Su#;rScwD3WR(B9shRQ1!tUoE`gAu39!o#8=zNp04h%#9 znIUv26@qZE-&zPVq#{##zzseQ_^ng^U2sb7c7HHj4^sNoa2*j0FkF}VX}E3!i!20_ z>!z8+fQBI$y8>67^#S9mCm;2kt<9 zV=Nebr9sRA=e2Hacob|htfz%uSr~8?q3LmK4%Fs`P9`o!OUcAXW;Wt*Oc24J%4uzx zu5xSKp*opnP4?1-L3?K9M6u{-MyAhuV&G_}VISv71YVcl*Sq{4 z3|xA^aJ~Q0aQ&V3SSBM1Q5?n#Wd$Zf;!Pp(3}vM{R(_X)PmxugCr48g{u zM&8P!=I;U-KIlVu1%`K;1&y9VdgI-F3D)rD)z+>5)Q#vB$|=z~?Odf|pa=_>cH=rK zj(?S*P%mXd%d>YndzM14kv_eLc!)FcA>n^Jow7rq}*udXevvevXpe zIN8F0&~%TGpo8fF#=2Ev7oFdHm#I1;%5y&7w@eecY{%ni?s4vQxA!YgoBPbeFbAEL zrlF^#rX=iQv!z2!29S&45&#Fy$_Uo`RO6~wL`u)TC?kE)QU4~2rGRT9CO0Z48ad_s zoOVqroV-Cx!nzzi$n)#i7#8yT1uJnC=H1mY4gmIdLjIp{t zHorE3v$XPMdDwd;E8QZ&rHYA{p-CqOl!%=fYXXqz0krp$WT5 zhY9zIRo?wiX+96%ak^-s(J)R+!X{5z{8y>GFjX1-#36Ny5Bf6@?K_lC5{zU@FbAAM zqU!wti5SGv(=D<{f|?m+Dz#wC_DvB5Vb zn~uZ-*{NV&R|x0T8d$}1pe5wm8u2cn-)XvE0%|<7`8DQNI3>tflEy)TjpBQ*&HOXh z3&m88#QAY^>B=QA3i~20s|?_soQ2uhOn8xW^Fp&0O{{P-dy-!uEik*$AT6;w1}Ox; z8-3SqQ`(H`tDwH(?|pj}O4w6IsgItzm`xa*#fq8ja$vh);X*!1-BV8s?~cl{)<+AU zWS3Iv&B8lUl!y`D-rkL8QCn+Hxryz~FW*a?JabpLgTswosjnmm%T5uopvP*J(`RRH zL&hvKFqj{wl5v`52!Y4R=?G~Ik8TBDS8SFnD%@R#jjPl~jZ3d=#1vz~naIZ0Vzpzo zS}(^we5>F5^7xxfo^{>p_JO`#?9YU^LHhNE)T|9!0gSd&QQ1`u(u4MP7HigdO2l_% z>leV{ZMFZt6em$jsiin*WqNtFP6%b0srnFdHdh`ltU~J|hE{cAc_GC`85*0?A*PJO zWEpjjZ8DUnH*x{iedKuQIrHha$SLu*AlY}6!ZyRiI#{JPw{6|!_@*t9b(x1eua3h! zcXrO0iXCe3&|}fP6aA)-B`|P8b0*jIg3Ww*($p?=3*XKN-|WPgbKae!=en*4Iq4Mm z$md3wz1{%#guO0y7~{3?LwkDv=KNEuEuog^T3luTKCe*k4VahZFz?k7G|$Bx@)U0a zoP0^)QPtEfMDLB{`9h9SY}KZxf5(pGl@3AkE%$er<<=|18@2$$?(Tb ze2(Mk=fi?yqE}13aPG;)nO=Tho#Dhi{LJz~_`Mu~)4kb)~;VP!DOk}ge?aVhSfFP$J zel`NydKrpDbYsoNmv{TP-us!JosaCE^z32*ezs5u2P&YR9Vw)6htz~^MEis|BsdCB z!C$j?-FWD1{T1{AD)IBVRoxb3#KUpsO}+kwl?I_$Iu~zn22$U}46mQk#fp|!zNq|j zzqRv{`TM-$1ssfhlZ~$_^A08M^GDAK&?;!Z0e+~2X} zA=w1(hk=C6uw&)W00Wrb4$#vVEVx9yo_C!Yl9SeoSpYSTq9W3qybTGtc8j2@5`W4wP_>Kl26W1u(zt3XJO;}9$29(YABfn8P?Uwaz11U(a93z8BO z4-&~o+Sz9e!~Y{bha#)2b^+c*U*IGB)3;GkT}Dt>Mpj1n=cD)sMDF4O^+E({p|&r5 z2GGtK&=Y~u+5g`DA-1nQmLVFGS&k5#IKatUzSY~?rnSS?!rtD%!$ham+b%!Lu|2CZ zi~1KU!MRtI)T}Lm@MfssC~8F{;LPC9qfH>sk};QF5B!e1rBRMlf`C8vQQZ2^e{Vnj zXhlI;IbmHnSt)TrbzLQOx&I!4i0tnX`(SJ@DAyrL9js(WCnS!2|=}pCgnX0jY{BiRmf| zE2s!7{J$gvg*ZUrFG6WH4H5OKwv#NMo~^y;r}TPV&VXcze|Q#be^uAuaDfXp}hZRJ}AIZh7kXijz5oN zX8$ryAGnYQf#Q@Lh~_`%H;V2yhKh!^e=JQS|4^Dnx8;T;kx+oOgXj8UL=#vb_OG@E zmNX->m5lqIQF{B)^H6BS%uq>Ym7nF&c(O?fBg=hds5|6)v*#px`ThIFHMK84%||og ztSE>ZR=9%`eYrvP^jSL{QACU$qn6^WSSFo?Y5yDs+Ft#L&9E?R<;F6L7WAIv+K6C= zoNX?fgXU08Y%*3UMhLi;7z{Y;;q*B19Tn!#(B<20!%)sznVrNw20^>NT3XJL&G3Oe ztnVXIX)%uISgCn6VPYCe(Z(2o#8?`6X!neOsbWD0%c%yJNh$-ar@jFts5PEtmYUhb zdqQgrRw8MF_V9Bt*Cj$f>jH8wzW`0zkqMFIN{WyKK$RxU+CU<6msNh5GRdic7n@xB z)iQRoN6VQNLWeUkAI0!iWUO-7AtX)1j3mQ3d|=v72EK{2aJql0BaQGPmV(T2nRJUn zPoWoX5O0i$B}70#Lvq)_Zmpj;>XtxQdbi%DT_(J}-hpip_oZDQ;=Y++8^}E>*sZU| zcMvyty5AmF9%N_HD^oPn(!S~DUj)aixELo$QX(s!h7{zVQls?FMNbg?&79vPM`rKT ziGQz9Y>p>+3@;IxFdIGYNDhsoi@kbrxJ|hQS}US51yGspVwYk2SrzCoNua5ansT%p zTLWSTVGJLfmn#oYl-KK2Io9u5Q?!YB6qRM;1Yvs>?(|W$l4ok@XR{)OKC4Yvpv)#p zzrl>97U6FIljb)TY(s>#9)dRC!Lyu?U1()6O3mqHdV}yiDW~}IJWYL+rkUjH^hdDe z-dcoh-6*ba$6*Wy7KpA6MMXgpYhUrf2jq@k7*Wn_NYiUkzf0~by2ZQfqSE!qGQ?nV3OlRVJ3)+>xFbgoz3xHk0XAEl36#5QiU|%9Wx<~Fcm)gl0d))5_*6;+>Fi`zb8c-O{Mb*F(E0t z_iwrpTUAE81;FWilxY1gr}Phl$B0M&i6?>d_x-wdc1}~vgqt{5?5I>|w-DwbgrsDo z@B;r>Lm_fH*y*OdTwni_B@GuHMpxBOG^4T9)@YK{)Cya$?)D<#VS1TgpP7OdX@(sr zpLXvZ(@^H`^K)wg`x)N|TfVrKUu!pRFTvOl;pBJP6T+xiYjNPanUI7>oeo3cm4bos zKjU?>ykzW>)&1l1puPZC`{)SP01O}hykGmT`{-w+f2b;du>%WKiT0;%ZYWVe$H)#r zw<}TLe~tTQI1te?J3j+a=%>Z4o|DL~u*px0TT0sLy{$FR$+HYcn+aE+hwB@>E&`oU zjsR~Ya7-(KXCNWursih6KD^2foIZwEZ$mJJW5XG}+sO@ZFR#D&`NsRgAXy(^Fi;x6 zB0%yWpQv@AKy@0}qB((voZgR+omnpT?ToDnQPsR&8U9|IX#^dCRjB`#*)6X|7z$r? zHg~6j6clAvP8JIRc`Z@B?z~5}ndq)LuflAh&#yfaQ#Yt)VpbG_cJVHCsKkVg(N+_b zvMY?a*J`s2M?8()72lFjUd(iJ)0)cawv$*gZh7s`mo|yDq7s`#cYtptIS*}oMG~(D z&M=o!P^M(sik=hQWc6N@$Qqr^ib_j$5j*hQRs$rBaWaPHXwu8~)Vg}rw?sq5JC0EO zId@%suBA&re}i@M3b(fAd{P3_X7cmRv;o8bLybxf1?1K#S_0ZF$_dE>A)y}5jw610 zK}+fUK+|NCkbK-G^-z_Sp}i zE--@2;o_T_I=eODsE{Xbti&v=(6m*SR<(-M=h2vK_85N^f?K+c9MdMGR-iTSJ37{! za|Xk=d(!X}xx~j>f&%W{gDJ5f^S%w_X9sX2!|1S`atP;^81v~x!O7299*tN+e53Vo zX0pUGXEYfC^-LOfXD^ptT#=u-yN+246K}2to3=GuegOZZX4|7VC(PID88XG^`ZXB5 z4Y8w3vh}mU2T785dY@4xa2*6R@$_st)CS%~P)F4SeCO37AH1Bde{Mf$-x6jSB^jua zsTJ!w%_D82uqT3bz?F+eAj>F=;@%)sW$;c#5FihFlRkWpu<3L%y!uT=>Ow7d*$JrFxPSxsza7Ru6l~)%fOJ-R zP@+V|qbO=PChhLj0h(d14v7VWL3^wMAc|TqO^Nwl0wuEV(RvZfHAje)urbYhc|B#A zoxANPO}vI);Pqp{Mx;_RFv3Oc4u}9y+P*T+JKnvv zTmfk~x9i9uP*gB0kYK;>3;PH9hu4}oHJ&=^qzh~#Up4! z=R5o+_JPrfA=EZfAs7;NRgxZZrd>)L4A){@qVlj%pRdA{dQM4FGG<@MDtQvRv7jV1 zYY%)kf3&>UFJBGsaY<7?Abe-Q`e!${U+&UhyO0WBo(VNSbpEsfBkZ*Hw3{syjk`j@ z5)FLg@oWQDrDIQW@{xK6ETCW;aKVs{B#ofI{_05o5fLEO96s(sbm2F##KkAZ$rZ+l zDv09jV<*)S3B=2%$j8@xB1A0MUBGthjU)1%#M78hS<~{jN}KG1UBM8t{07^x<406( zxeX^6iiii}D4{UxgG{9^nqqKC(Upfs;GFp|Y;zKBmBndb-l_{H2e$nFc7f}Ar6BmgNr| zrm&`QursQ%CBb9I&=mPXi4pyw35hZ&HWS{K-~5`DrKKAH&T%I zWi)H_NA@j+<5zy&Zy>J<@(Y64Aei@X=IY}^KC@aE8)yy0023xAoa;tMOH5`9#}N~a zebH9g=adaP#x1Vz#jyocqw)vc-|Yy-Ap12oi3bzxCvUzQ->WVuKL)Org zF_N8j5MFnt^g3p*WZKLS%@u%UcEO@}F>YyQEXa!za>tM;d)(k{DRZaD;oeusi6-G< zlqV!46AG#_kQ2k4;-p+xWdu>lT~Wq_d#tW)5}kYrPx;W&61vl66Nz>S7d5 zk((|%;x{3hyjq-Dvf+wbIMb#aLS7K;T7COrWlEM|h;!trN97W|CtIfYS!ExAm^Its z2~ks)TY?Y__Dm{9FLxCd8%QPNw5UkAze0~V9d6!80AM`>t$!As{3S&Hvo_?@`f$f) zRKY{XXhmPb=mU=^q$&JopaydIcL8Djyy4Z&hk%*ib@2gH65_fP!=L2wsecqz&1|BG zLUN_O_@897~r%E zL;SmHjh={`k%^s?#ar9ISPv=N$URG!9_>)h1Q6yS$iF~uldWEFUxgJyg9{Q)628jc zZOT-bYLr?If1vr+)i3Pp$3N_5J0H!YohNhDdfoA5JL~+t@6*!*ygtTTv2Fhk0$hf_dg270QhN$!(NTKg4I2PCY-_wZ#GxEF^zr zFXnQR`PB#=Hg5jg_F}H7C4cM#2qK2e2PJ(6S*Vm=h!(UoK#Vg+lpFF7O~_ z7T1b<#Z((%#a7S9=V6NPrh_>h3PqSGj?YYdKx~aaL7{IBHNH5GLzo~jW=?T{{}3HV zlV(0BABbWQhecipT2jzp?ore#TCT;ayyf(6NMS0xRPQdBg`mw+o}-gU;Un~~C4Bqd zf^0-^5Dc|Gu{WBA-= zgp?6JRDb60=k$mWpq7drwQK81~)^Bl_3}-L@VyR(@zL6$h9|IpU z=_n|Rp&$aGBKgpx?NZ@ARZ5<)0au@@W|pI7Ss=Q$5u-z0<;cYUSo5h)(cKo;qyI+1 z++gQ5OZ&`nf!0_{Sqq${Q3YEw4jgK|HO-P!dpgSD!bY@HqEQQ%z7I;h)>uqV-p=*p zI6V$IeBrvaImAeXU3LW5&iraX7_0VHjOx4SiZv`PZN~_>jVJ%}uI+=6Tut%&+!S`R zn}Zpmp5(De@V@aT!J5U%LAo_Ip||ne(M#X(n65i7VZ+Cpm97|nA4+#ZAkMDRp4VFAM{&P2pfyobJQyiak7yEV>O{UNncni9v!!u_E&M3vM6b zTfq50M%$o>OO5A}!dQ`8pfvLwLxp2LNu8Quard3@)r9SPwzyIX!LQV%QYG7wKx4W! z#>-(Jz}Y_EAAw_fkxZ=iM|M=+Bb zCyEnN7@=G7RGr7A))5&f^fXp&+-h{)u~iY^P6?9`M`lg4&|MP%dWCjC((CZ} zBg>vt+&RiWp9`{(H3RRR2s8}K-Yd1C=1JzXm~j>;qmh~d4U9vA{)rh6R;5Cp+Ai-w zA}cOva7SxoTP7>9_`|dfTKYOAkD$8cGk{lhv-(?}X@nZbrCrlO#J)yLgznHlM4?dw zhx|iC!pJ>Ck?JEcdk|xO6(Opkq5)A4()u}6|1YG7IN|nId?2?e0@gndxas|7t@MZI zs*;nl;qMsJ=8rK~-R4#3L?0CFEV=^`Q^~b_7fC2R2(iX$$iT+ z@oTIkSotL|@^Q~c(9uDVTYC%=Q)fa9`}!rk2p$=j2_7ytH8(r-lKyJ!cF>uO>-yJL z=@$RNEY35q?OmTvWvGWP{e!UHlJiFZ$)q3!{3Gm?KM|?+0V^x(7@_H zlDC_~mA#=nk~RydyXUZAgHmZtr-f?kFlDY;$w+uQKWj8rNfJkCe8ij}Nf4scw~<(u z()1SGA~J!m`jOV0U-BW~4)VJuRrweTb0m`2F9~E+`9oU`P>0zB3Zws=%>Vw7|EkpU zuV)>tqUE?OjP{hosUf1U+$ZxEnkq>Cge+znHkh0!t|VV(U%M_bMgEP-WHUA&VA@3Tp)SGZmqFjod}BGBN(fprnPz`PhYk$i z6oRg2D;=`1D$kN4y{FE0;hjE}{+RFXBzyKQ+<5F%QlnIH*!Ij)g&|(wg(7JfmPqln z%87GfM|peuoqs=e6SfO!R9lP*4*ci0Ej)Hcfd{xT%W-z~U@kVVeLdOQQHM}4XwE8* zxkyPFa8;24BREb|A}q8^^czvG8_P1O`Gj)v^9(UPjdl8kcoa`t<(CFA;bK+1!fQ#T z#cVKeRC3kka&cBJWd>DG*;vu#@}#h=(zy`)*4_mB6N9DSLz1C?>oMk3RuGNoPB?Kv z^BSjL9=pEMP4>jY$jK92{W2;wWWDlLgo~VeT&Hr_EuRN=17u3pMZzDic&SlSFO-VaVbWK&oGd= z%H77_sh}CZ-HKFLYj0n+i2T@oqDx3W!6w@-d@sLeCO%H&!-~s@s~a0UUyq69hVivCkY?@B8;(%alN_DE znm9%3W1l=~?=CqOuLCMcrlYSw&OO-hu@mDR%AV?$2FMwGbzz*YLCP9$2sj>DJdC|7 zBi5>}T)$j!OR3(fG^!CrJ_l1L^P>?OuX|9=fOgmu<;9&UH9q3x_|>}X=wo;|0q9M5 zbqv&)vuK{-YI0g>k7(2wvslMh_-In4({um$AA-L45ZN|?!)g4WA6~ryJktDVfa^N;_R7ZhiIem?9jIgte@+!@^2lS3=FMJluR64OdJ>lj1BCZ zOdJG^oGe@noZkN7)g2whh0w!@COk;XB-Q(Za)*+xML<15JU(C*oPR(#JisQsR$Mze z0L+e3I4CdAs3hxp>$Ky`3tFa>Fw&yFH-?l@QJqP?fz%$I1IL zMnV=K{3S%-%QLL=8#eTGoUVu&AG!CfKSrqRvCf9u?4nwbFy3cBZmW}J zI$5=DT9Fb?2sGOudUu?I{%fP>z(zMoUwS-K&kle~?q?OC|FY4alZ@n_C}>4=dFZua zk`n$PUte^CP@C7U^i8HpLm|VG9rpR%0see`V<3er)C}Aku?{?$CB^TR^$D&V=)ZB9 zU3=aCuFiET*k^GOu_NS*r)eitv`e0A8*HB$c^qV)ntL3M)kT;aa&y`lW)OAq1?)wI zp8_)S1q>D{Q%oo*KC~OHegL2qOK?Um#FP9kHF;&JfjK1yPbJwsA?AC^s6fbs{J=10 zFJQU34JzapX))<=MJyy$@UG`soeNE0t8&Jq3*Irtwn}#Q*4>*)YM^rzMTo_{Y6rJ1 zVYb@DWUQWLj#-Y_=mVQgr~#?Mi!x0DNU4I|tV6pxuIaCgHX=Gx=P?$QA&H9<*;%|p zut=lVfDA$qn-`Yqc71o5W4NVk+i!dK+xd$AWBG$SqYWv!_k3I zZrM{@@v_SiUZ5s)j;=Nn{I+no=p5Zfv_(~hlqRyvd&q;z#MO|{sH$Zbl(7PpuA(4{ z7Q!{Sb(FDl9o!oE8%Z^2xp+f)@08*5!#jQ2_wZ}552VXZV0tBsh;!04!ZhQJlVDeaJt8YE+LuXm#>X4XT&TDCvmgA&^SG;p33S(_oW#D2*V`j^j-VomMR`0r84v>LI4~RA*w)7QagE-{TYhm>W5?c)aWRL0j|t zH>d`g;j&wjo-;Ytw-}C;vG^5YSi}CMo6jP#uz%6zdOneu@-=iW0IvI0m+QZs$e*xz z@*lpgh3&SsS{CKW-kJhFXn_2I|E(gDI`)U*J%omawh>00$I1ZW-TY@)S5v2A6!0$w z3@nag>7Lsww|7rB;C2yUcsL0P!f{i8KqU5@iMZ9mL|wT-2KDdWJfSj+Ugmca<{c$U(Q6UP8M_Uku!NxWKFc1hWHQ00nNQJU=C zYqeF{t?iWQK7{PG+&-ylt$B?vBg7BmxwMUkWs{WK9zKdzpHk?FPc5#bZRsA2^h82# z8DND8&ez%KzifwOUSO$<1@Asha&5cN&SVZyAKB9=v2xBZE&f^nFAK2c59*}3vWeiG zz0*apGt|<@Id15_e+H1ob<|%Jt2^MHL{T;_=KL%mxOEr5$=Zq3!`u+ zpZgL>A^&=@>i1^vumNHG0<53u_5US|zchrR0lW_SY*|pbKWMroRxC21v=?Xvh{Rel z`0JB`PXe|4 zV<3gaP{nHCe+hT>$-b7VcBM_Z#+y2Mi$o7DCF76HpeyKO&bB5w2f*iHb_;CE5O{nr^~Od@?6~^||g^jw>W>W5jO;CV8*Z%@vd?OAc~t*j7QHCss2QW-oO^?gH~HQfB#= zZnrlF==Mt-u&?-j3B-DfZX5*=1a+V?{Idkt|0EFqe>W&wK}N3U4O*6s|Cxfw1EKDR zMt#MJ9SEZU-OM)ur>ntLPSeW!^ct!UO85XRjrRuZL194cU{<*0pyNyWVs`WKZ^`b9 z3>CC`U4a*uIP4R4b-VhJ`OGoG)P}a;y#{4Yugcmvv8ZisoT)_x$Ab~>kaKbJ?@<#+ zTNOMQ(K9lIKWW6~J0%SDWih|y~cGThBjmDL<|s`uz~EOis9@*`~Uf}-lyAG$n-E%taz zU3VojCqD07J-xQZjfF-3`3O9NsB1;o*U zW_+T2GC4fEh}4>X%U?#RFNG)f<}HGcAAv~_C#QSqyR5|fX9fN%aV1(sT6EQBJA_mG z7^ebVTABlP5#!R0{$1t<`7evZXZjkcaA zq)2$dsRduw8t=`qGj}Sa8DvPJZHbdV{PJ!IJqVdR!^C}H{oLmHWrsq}4h|-^PQRz% z-p?Ygz^inbcnQnyLY(3P`}Iws2qDrWs&x+wY2TLJz#E>Oku?A2+}Oy?l(NZ z>bm3wC7npyPT``+kVa;aRURaBdlZUkKQq1T^{j~ZunQO+l;2D6t(tY;-?X8br7 zCaZTzXQS{xrPvc|pFL~mzMU1y+#zO+xyeICNqb!SelG^GZ)c>vMW5sM28@o?s%dR4 znBuRO*pl%H3@?BV699Bb4easHHr7Ay?`KdL4GadM3Lrg^&xe>mpw#$9I6xVI1qq?O zm_!nmXB0=0(rZdF>3g$KG$(RVx>E~MEht&Zqx*iCz+^Gex(69_F*GNguk$Ep_wA3T zdtfk#F=xcQCohT!PAwmqggHD@FzU`;s_gAO6FJ}@5M?A7CSl(}V+3>Echnh_7G#0# zjFp6x$`lCXYGgb~jDxGQ2iF>7NSZ_HxRaw-qO3XUIWZz?;<)2g=g^SfjEAKcmEex- zj;RC1$}A?C=Wv9KTCSBzp<&K84YZ_22mKhxY`!dL&b*_!)6B@yDR&Nmj93611Sa3x z+6pH&B{OpfBU7EjH(Q5jttt62oj(dIG$z$szew4f)3O!Wc%9NO<0&{pck0?yj0?`> zfgyY>f;E%a?_6Pb<>WR89X6J^h?gn3b>~9n_Em?*MCqHO$qUriSICBBGI!En8kpPR zj7phMtuj~YXs9Y}2U&F;jUsEUAl|<=nb1`Q+0JF1YJH(N5ugfv4uii|5nvjGrj6Y0 z;xuv2i3|v}`saK4m>Oi+y##++T-Xo-3xrv+lj$i4pb)22?@@w4zK~E?jTKLR*dA+paamVB;OYwKoP)=z^;ohny$M34d_(nI8Qi7>zTG*b z_sclGUYWKJ+UxtIU-aS8B$Mm~t?=|+C-k}wg;R~JNqti%%HxHU@!ouO)wa!Bwuhdi zPN3O)QGq!mqj5k3a!IHS?(qFgIewmux~61x3U<~$oftEors_%XQ0&>lDv|-}A?!hv z@eH=xh?>p8@9xo14!^}RFi51&xh_DKJ9m#SrSb_KKPOWUs%|(yxAuPvD^3)ysi_g=*$xl>(XFv$WDa>yRe84DygZMuCfLai;GpSq?F9ZFblup2tXSkVPStrP7kG={$$T`R|^wSg!%a5Q33D^xO-88 zd+*S`eZJD^dGwpF&MTr?AtB}nC`E37!ZA`pYXPr?)5LawR0cM9NhPo~Wkk2U-*i9| zYhSuHg<}FXe9$nCb$E&*u-Wp(>KrwoPNRiPepput%W;dgG-#H)P&RROHIrVgc3k$* zXSJTe!#j7rrK^oZtjK2^AbE6US(e{DG>cWAhj!K#eeNL`k4{T{Oo5~AVMGe9F_`bd zXNGK8;D{3nApG&8R+*<+0$ZSJ1Mbzbvj<)K($2(d*|_YfjTS(Z`2)A}y@RvKtJzyG zh0k9(*q|Di_2SO0ONku^@;NnepfLJ`jEmM6$_+_TFq|bi`o$vB8g&J72pOmtUOK=K z*@LwuRjxR5?TslN=cGl6S0@wsZ@l*1Vt{f7S7<3wFeLpXzp%J8LYidRQAHoORw% z9cp~oL#WYftOea^e5J+Pw_BqQ5l(j`d{EeuKiU~7!5B_Hkt)@UUh*VzY|3QRK|*HB z(pJQF5{Ys}2ON=k*a+mq4XNaIRSd%#>QIqs=x~u~A<7>i(c$2#c7j7h#1m?K2t5nC z!Bt*rR>J4|sfznsI^~Y;7Y4+@7C1e$|Me60iyA?K6oC4W27kbc=g+*P?$leYRF*-l z#X%+d8ivHC%M+(KR}!J4sM#kuU|U9wkf#!V2aLZr3BRxy49gOkX+ZIBk85$*Lz+wXlD@^+%WYJFnyW zmBd;0Yr0*STF0(99w%Nke5Qll-ga~bY!s8pBI9;N&=4j>nW9H#YXRz&hx|4K@Q~+MiSwI zyCJedNBu+K=GcnzsTU>~W1!)c(&plNqe3)BnXDhb01A<+`#r^NO`#xCs-fcNZyQV( zn^Sr}D=A>)Z0cB&)x1QV49x~RyU13&_<&_7;P_r@iVrM$lQP?Mhfh?KO}9HL8?!IR z4?lN6J@-?BX^~izSs(trsRxk*oKTP{8{y4J8Z}jLUKEjO zyMo=#w>aPa3QA(LzxNyhk*o%y`ZLSupFzp5XwqArSMHfSTu4z#7@?|~p^i68-lS@m z&+-*Q61E|01F}!2p(^N`=^EmR81{A?XqdV+`}vl)$#05)D{G2t(reoJBJwF4bwjU% z_TN9Q2F^Zx-s=f97gfTyQ@5LF_((D1Ig(&zfAB?nEnuRm$cJ@}8DVfdh}4GPdERan z6X8ITT-)Zx)cxb~1>)*Aw#`9L-_t)f>^C9Ub@jTK@Zv?DiN%@VAFqH@q7Icg1?-a;~@I;8G2Eo(Yz7Y*UHVi^bUY@^Z z*Jm{)F0!d6M#jIx!`;Vcmp@%4mXm*yvA8O18B}T0J(2Gxf3bK~7Yy?vnY!qVsEDqd zwLRKBv+{)+>kdtSux&FJI}0bz364u0Lu{8 z+;mVP^O=%p??Z%%W%X&q=w~bqp;rbqaV&L4M^IO>2)TcKd3TK;zjgpuQ87T`e*Iss zqrb)AXNaAxs-*@DcRV4qN;AV@fTBg9=PzVLnsn(Z2h7Ilb|FAOHzVuRdb9SU?;~DUd!2IDAUe95 zy-c?=`iqXzb#JdceOVE#T}p{9bT7(a4&{!R*n*22bpg>%+95IafJ~HCRq$q&mF|KF zGOvPFTkwzw16rDvQbT1?jqZv7IrJ)~AQ;2;0c=tD!RnncQ<3qSDmvo}=LFMiW;vFi zZMtO?4lK~qKJSn`v}r}V72;kyp2;-{#9iY>=OdVq*QW^H17Br7qEvI&Fh;86Y#d>@ zURw7$x6-M8o^mw}-oMVOGJ<_lFEY^&X0Op89$gkQAeV(3o=8O{)nT{VpUT;ja%bCT znoFL~kGN1b2_b55Gqz3ln0-&kDo!o-JNwMm-=z^?$4#{}z^JgV{gvV9Q z0IaRp=(;JSYNS$XXX8%gO9Y+X%ryD9>AD!I5Gx9BEvE{TBgwdNw3Yc2kX)9F^EUb_ zhy5Ma%~Sba$WDDM>*R~M4U}5wk$N_uSH&tVG=Bm)uxq!3S}Ki8RzJ!S$vg)kZQ=GZ z6}zC;&75-8DkQx)bKupjjMR@pC3E}S%XmD)lNe#xmDo@Ty$i*yJcSY*QoLgXX6ASbj^ zMtK3PTW9Quv4>x^>21B)tFz*;%}{GCkc7p){spW+tHI!vZ|3w5<{F4fJO^?2N#7M@9%I*f^W1xfDUh;?#%J8`zA}|H#9Lq% z^U47E$J8=Nb<~`^1L6VIrd;ylLFGL!8PbZ_cuaHTI-T}K<2I5oVzu`tFz~Z-UT{}r zkG)Ktp5@MTfl5{>ay`Na@QqK~P{)EyiVR3@0bgev!F>dbw<*A*H|b}*FOK3u1-&SE zo9xe`2^l-{2#Mko#czky!u&`%pWv2qv7jG9I@|BvYzWK@AHms9SXieH+-{|kKo+oG zOq89y7`wTJFsx7Aog6(+p8uqKmP1-5(6iD%5xeuc%Z|^*1(C$}l|JjoP)E@Ux-KY# zQT@3=EMo9*WC;%tqtAQ7J3j{3P~$!#ku=G$J^g}Fykh6x`2m-53~(|0Z!U$OAbY^*$uj*+$r+Vt5{W^zFK@cJ z6s3@fIXaxJQ8*Bs=x8lV;Fi+ms@}Z+5Z09`u8T^^RZ7isNHO3-HftHK@J_Pso@D$x zgIr8>%6=c`J1raC&49TBDz9Qs)oo%!!!puuTfS_T;rvZOq$%Q0)7s&lw|-SI7CYPz zQ0D6M_5Lz=_SU-#qG_x8qs`ges>#d&`n?BfAtp;~Bzm?JFce{k5^cFPJhDhJnsnH* zyO`&u?+s-qJZGyP56v5M%}LP~X^i_otO(OkGKZSN)>Qi?oFo>oPciq1*4Zy1&)`}~ zdG>o0-1=UElV(YN>|t3QCE9TyrXS3ebX|KCfi`&JC(HKmFNHOEqw!{;82pQH68%gm ze#G0q-u8Q{<2CibEx!h=pWTOlfhxl8wgxs9MiMr5)+RPUp~&EQLiN|7V0?OjggID$^%nEkJD35NJ~nDQ7AoDOixYAOg~81ic8GM%uq{E zPe{)l93l)A;tG=-r7=(dq~y6#z|*j>1lU0&*a_v3#92TsRI3l+qHqPyXrtf`;9e18 z{8Av(cITpgo-qmoimyM@c7J&QqHi5s4IGRWO@7l{|9$7t@c__JKnnR*xV6`$nn94B zoD2bUF}~mkNKOXpQ$pzU@8O&DyBxM?`c_7=!rZ-hEHh`Xri5?fWN{2J3voBo{g$H( za$qDS3Khw09Q1fXLQF*68<=L4;uZGVM?+As2S%vQAY4mkM=gM(Wz{sBMOZ4uykgE- zi7tgEn50qL>a;D}>;xaH#DIXgWjY-eQf_hzI<~a*93ep}RTH3|EN3h#S2i(@nm#dT z_EZG0k)neGz9kqiLI0g=3c0;mbV|7!JVmI;Q=4$lJS=#7+FBlK@U`|k9 zgPklJnTX-b-y8Z@Eqy=T=Wg*1f$KB5-5^yJvT_NIGN)?Q~4BL$kD3reZl8 zQo3j$p*(-QNtEhf(!ivRz1$T;BtDaP33}1}E_kf~>coVgJH+k_7=aTAtP!znP^6c> zw6PNBMs|JyH0nohC-{MFHkXX+g`( z+E}Tl2w#&Ki3%YSbqk~=(lGj7GuLd?q{dv6j=CXTu6vKdd`W{N*aE)?vmf=elZ)fO z&=(MW70JxklMockdm}7LkwUhTI!SggP`_SWDre#qGTt8_cM=R9ozG=(xXC3XHp<9? zY(#>Zo}rhP6-JBVJS={$5R$^gTdK7ISEFwp-c2{;LG-I=f|CX0k9cUwULb<*W- zoF`#hvx_*VaYj12^zZhzwhk-~^Nh``EFZcE(A>Lm(6>lCZPGO(;s#=bVA!DgS0lAF zExlz&7+|O*+56>V9wl|)7=*tSm15J!^<^}bi!^A`qlRmhF>XJiVp z(fQM;i-dHK!y-$`5hM$Dr%s?(8D!@_Qd+n+De=7B6_pjhz=hEr1ePd&@keg)h>Em^ ztsBvVOgNiL6HF9xz3=4X#bplQ286Y%FRaaAUg0{F!ej?Uhx+mu zoh_qCnju3;t*IA!>Vj+_Uf)Etbu9I_h6mq_3P-IevNo5STsp;mIu{jahI1?xlS725 z#b>_YNK%2&+rWiT@S<6J4e@OwKY-xGs8?idu|quR2j%SfCpLP>l4@JVaubnT?3q>U zHsHrWm}<_kaO=xpzTRlm`%Cd*NH|Uwo#HQg9KnO-(@ydOk$`*Fn!BZ3d|N+iTiSqd zHzexU9P{J;`r@_PMR=um9x)|ft*R-aHgPV=E(H#s>P*DvbJtXf-|peI6~8?TN;br* z_?$rEHH?sfF!we$vB+v?<|e?T^h3f+U2Ku%+~kd}eM*}8#L^4a`Pv`85!jmj_~^kz zQYzW6T*c{>rRcPfYBSYsa$`e|<|pt{MTSf^hu=8Oe5@Kqxo0(@9GBB^Aw7~lM)+t|m^t~S>d2orM@Ys;-IK0+L&X$Ew}&go3W*`a@EYDS*A?3(4JG7u;HR=|+M?2uFx6xb`5_YnQ! zn&9MfMGe?Z3fT701_h^HK<;5aU1w|;-x3(+P*=ZRe%wP%HoE^IC@!)3(lNq;JB6j% zsv?=WM>glEeFElW5Y!&CLCVA_i`UB?Z3OMbUMXL^JS%rZH6w#{*B>EPYt%xi(EBnS z-}Rl56S~eS+2vz#d?KvKE>awKx|da)Q9hcAeobAx`Dq;TxyEx&7>4%Dnp6bv)BpUo z`Uy4t)G+@OH68KMURr{a2@4pQUr<{i6jU9tM@s@tR&kHta$0Pia&Uu86MCRwzWCfQ zfAIJLVi)!Si?ygAj1aGvS=CrQnW)e}rnfBw9<3@l+d)Yiqabp`7e?HOI3+nlxtW8Ncr3l%AY-Voj@|+Nr=hH0NkTLC1fOof5l1wO!}(?&ff`C`2ask_YW45 z&l?{F2}4C$OFK&i4a@k>QmGCjySmc$+}cV#@jrxQI!a+l0^g__Y83d$8tS%n{;4D5 z1n9_E{3jim=iOP45kdUVcBdjMp`aonE25hW0U>1xRRLuQIobcaJpw#2iGLTtw|=pu@65zI z3LV4D(u~4NKk9k;@yk;(f1M7F7a*jmr&ZvmU}Dhu_9wmUC7`4u{Vye*ze~3~H?+kc zk@hNp4T1o7&Cit5UtdyV0Y^s*Guvk<|Fbwmbo8I%5UfuDfrWvUN^f%Wp5TH7Bl!e0 zjm#wy6GHw_hY&`7?R37H^18GA*)FNBKPx~nigExAHG--?O5do;xFn92eeP5^JhHB_ zj<)4aC0RlT>d>&T;XRT1X2+JaJ)K6W=2VAIC!so)qb9;l%pog}%5WKwMj^1gKg4hq|G} z-?sf1K&Yaj1d!~WY@3sif>kF1X!52?B-OQFOoCFY#1)qnGNdEbuxU=oLJ{(d_(JT! zF>`O65wko|4mvKsr!AH|w@ZEJwY}mv?t1>4rTpEg_JG92Ffb+vrpZJ&Z6^aa-`hge z$I;tDcGYYGXDANWYv?I90Cf~G%L`2fUC5jAzlEQLOm12)KG8REf>zV$VUWnQUgwdoHQAL== zeGpwA`>4u6Op2i-CAGThL!XT+dG5Q>OCo#l@Q;poy`=9wL-Wb@{0bAfSMoZ{5Q))w z^yq9bRkgXHI8ye45Nfzmq=G-q^yTQC;3ie(tLx zb6(;-UlN3?%L{7GP{526ji>v40QM-g_RqMIs$sWTp1#BO24tM1mQ z^BJ9tIg1{$|j^UI~T*vM7u!@ zsYOk{Q5~dg-7rZ6R~|PGk`}INxkHs9n7Bdz%)m!-#(N7pxhW@n9X7LxA#1HVhUQmG zC8;iKhDfs)3|s!hTVI1;@a?k*27_Pe@uh=>nk$kqZj!=?XV5Hx`6A^u;FeT|Y+!z0 zqv$07xFxB;`TkNm3KpVbbpx&=OW=I|pPkKrhChGK3$_XVHZPcfWDd*=Rs>d6wKv3s z{1yHP{9>1+y(%0W;D$v+s%&j26=Z{)0ONvoK)pZ`cVF_Q5PVT<-U`RI-6BaRHk~a~ zwQRmLN5OitU8i#QeR=P2jm_*!u7HW+@9GB;glS_uDB=*!-Q%2640d4?pHyNq-~*=h z4Dy|PvpKjsS17r&@hcf+tzyyg_Y%#Ra%gy!6!+?X;Is}y;?YZ#uqb7`>|~G}w@?o$ zA%aus?hFBYWhuTU-pgbNKCsfK89a`Wd4|*EZ(dY1k%R6y9zw-z*rYlpDFA$A>k*R=&M^14d6o4C>qLH$d`_ z??vsM9q0=_5S1>ED|mlsGkD}&)N3vS-q*q>fcM>{g`}#lh(45s;NqLnQsD=|BBIT0 z>t_lT-r<~;5R|JGE6_nYF&9D+Tg!5L{^+dE6wDHzaY2eT4f1fD^5jA+fv zp!|-S-3x{#x=Y-YI^OHd_@#EDRy5kB^BYk9yA{1n+3p^ur2Un@UV3Nh^V17g`Fy@3?3DNgj zT(7=Grn97R;e#Lp+Q>SsU_bo&Xuy{^r0{>8BBa=z!qW$WLjs($|1it;_ix}|JIdLL zBhRW5yd2&|?l)yin%`XJ=S1p=VIn46R4CtE@%cUSt&=Vq;|MZ zA$3DN66HLl;WHCX$Kv_ik%AoSNE+wsXXLNkN#iM#GdIg9I*^6dVs#6>HEOYqsOya* zU*(7aXvKHr|hI3HKKlI!7a6g6z0w_3ZFxTb9)!#> zzX6wDo5p_;*JS@SxghzM%>AR^LqS4cQP#}rOhLm8vG+LI;QIRLMaRlaN5XF!6T^&g z_*SBjMg`6{m_-<5DaKpd=q$`o#$+jEd)uU2#ryXZCdK5bjLbvba1K|94h}P7^SuK@ zT|-^qeWP!#SsECb>lo`mHGWpAeBSCE-%ivE;NnmN-p~J(KmBd1ss`51f9Pr_E9yP# zApH2!Sg5m$W*lHdIE2<*F|$)>9$3cqJLi1=`Z^aRN52#VUPa&t#$o);i)BcOYlw1-GFV#+x4bo?z@tuw z47}#X@h(lceo>Uz7R>V+%n$Hrg5ZJduxJX?L6%XnfXQ8|(c^v;*VARQ-~0aL zg7%~}E$?;=F@&cmb@C*vZRxTQE~M=+gR+~|9uJm01-x8;q)&!6vn80hcWkx|VKE=SEVJ3@E?rjUQRO$5d?z`Zbx6kAu24st- zt80gRdsl=-ttV;|yivJ7bg71@1$Wq1J@~m4Xbb)b%0g11qE@nd_yt<(_TKCVd)X&&I8(>0Ci=sWTH;`yh#&Jscqk(Si4cVZ<6x*QCw_-7Jk^-IpQ>rQl z{UnxB_!<(QMQXSwzNAXd%$LIfaqaniKBN1n;JrIN>TfrFy3#~~%+)}jK5I{wgfiV&lpz$J6 z#ZIJOMO!Jp*SUU0K7KGODwBB&dtJ3ocLVO_S&klihvi~gx?WZebBZ|kM)D1~&~?!U zcee;66|bUx7&Mbj%62UyT!~nd`xJ53tLCvszcopZOrK$$+#5p8lZP(da=XNPs}&B1 z;&P8KRP8E9kg&S_R5h3f!_>J**TWA6tIHw*qdqVWMM}~k_$+mizMmHx$qZyQipw+? zu`DC^3cZ}T$Umj}IHyqxjgthceL`3G~txVU0P5IDf88YGGi+FiFEnvCGU)osaIK zvhiVuhgg}k!yJKo%)A}tqdn7Hb*l-{vzP02z0vJ$<`jlnPLvI{Umm5`Y}E(}YPF^} z+1{yIqg2FkGRC?(?vn3)dy~E9Wy{VlYabnP(@EcS%2H^={4}AzCWqY=f{rGFbfGxa zW&iQq`cyLdUaKcl&%H~e@w%}QGdca{4V>9@`)!xE&1azo)ppJ5Hsm*Or7l(VGL=Y- z*v?xR$B8y{7gVklJ8S|`236;#I}9kYU36j>Nh*j65QlgSPc64tSE5HNI@Ov2@oTDW zABvaBu9rk|u`vcarGxiWrQs{r!!1jQGL5hfX|ZP-uf1y})1fMfnMZ!a7 z2RBG^D9|?{;u-q{Gv%-aVF=%sD{M+($ILu3O+V`Nh}TA7pza%a1i9(8g;ylDkmwG( z%as&8820@Va)$iMIxbY2R*7g?X|wVTP7a`1O<2l=LZn9s8lZni_1-rw;-ly|ypH4% z+oifg?xOHpRPRru{#X2gqU^W^(h4L`jC~ieRd+EsrRBnLTYALL2P9HU3Sc5o#u?8$TF+tV}rag zlviqqNgWO7TVf6JI0u*P*W7ZW`x0T_BZMxwyH8`e)mqxeEN$jPQ<|4_R1LG{aHzeK z#Rm0x^bISDCQJay@Zig3Z4@a|3fAif-OXHudMK4(f)^0&)K_)2#4%v#p-`yWqu1|o zm#dUQ2^VHO+f4UVg=myB-w!~oD>>ks&@`Qk6`E=ZCyEx+j;jve-qW`S`=(W&{J?%G zaRFWG<%AB%hUbQ*oYbe>#<+$pllj2FBl~1}fVqdwtmI|dIMYDl>pTFuO%uK zTMMAsYHQ-?_}3EEGdTe($jsZ=J0Q3?xOz4qr%MePN*E2XF8m`A(b2$XoS|7-9=}i& z5$X76NADZcoZ5S^u2(_`W0Pw;4i}tvul_&U-YTH3E#1})E`i`~!QCeA?(XjH?ht}a z+}+(>gD1GV1`QS@cpylSJ6Wr0@2s4vRePU%@56YRZ)5h+<^THMT7v+lv&T=TN**`W z10)XxOWu;M%_$8m;Zcu%&z9e*GsPxvh$Bg+L46meXo-XAzw=I9d_}V|%Sczr#{Z*s zgtfnNEFZz>yjse*7O1dHBFW0+DO9LP`v(~8SziwNFP-_r_O#LeKOVr5@QaOJF)m{DV7 zgmz@@@qm2qyE6s+Kl(yUhn525^CZL>?~kSfD*=d0{f>N5c*4FcQ98!{I^qJ*{Y+FX z9;OIeHJXSrl2X|5Ghu`vP&MeN(CY_>L>9#Y>E^*Vg=37yWg#_2&uCSs(nv~e7gJQ& zCdU5>8Mn!HjKKJO2u%SSTv#?S#|0Bxdpq1Ohc!+m4|Y{Oe*?;wZU^`4Hz`s93p&%0 zWea)$YvK^C$;5O6u&c;Scc>v%6g8!*mmrlGV-qH=VF_jwq-5QJuS4)yY%MIt+PC{Q zLG$5mbkvo>CjA@4HY}?DJ~vRxvJWPo-1?u4>Idl_ABa)yYv{c&Dx2Up-EMTL@QLLS ze9cFv@0T<~;_Nu(PwD#(-rbgmXso%~$hJ5wup2mkXET_W`DCK@K6eR-PsrLBf~h(k z!43-MMsgDGk?Kd!!mM<6WfG;$#^CLR6mjsjEyyi!i!2KjKR!D-RdU4KCzGY|jG~5` zOH+#LH-l@02Mow@h%DvI9s1ob1UUe=b~m`AiUzL^=WVSM^1D_hFr}0ACoRawsncNA zHMfV=Or~ROc_tgZPN$(xr)#jYh?Rxxjy#+&5aj-gQ5pTgsPa9@y=cjwz0gQ7UKrJ| zUssZvLvl+6@J~hskgU4gqA6f<#g{h)dJFvoXz!!kj^v@=>bhH34|Y%nxO=xLOcT8q z!nBj84OyIjWX&ni3pN*bQG7&bfx8$9gwJWO&w~VCJ-0(wcPq%}JHfbp-LNci>reU@ zMumLK3u08}e=sVYToV-Mzx*rPewJb5SI?{YJ;2)@x%eOIH^ed z!KldpU{qm$GAcwO#b=D@ssCnF9^oKHmBBt{0sm^w};+ zB-W?78_%|;@{cGljOzOzjB0~wua3vNjL^u^=O2vfuZi9-JB^e5xU1Lygi-w;bMu!? zCRzD6zZqIf8rGvq6jcLMaQezxz&deaTQwKr^NXZa#9z=~)wMKH8rgM7|Mb)=$7j=L z%hAY-W1bC2)gN=l$gJ3SO4>|*c3uU(n9daZ({u*m z#dJm}PtLEBb_h@=foyZ6r`PD(k)LcWr+otlKpQ2%94%!bFGv|fgA;*pC}D9dA&d-| zOFqoXslNt4gNymRlO)JA^se{B0!hP^Wf2h*Yng^$aM}KpU>E9P=iK;JDY7v{99P!Z zM`G4(I$})61Te~su^W^pk#G}GqW4r6$$ThNLDgFnMPngiVWREtuYPr&c^S*5SYhD* z2vYq%mVX1Ou0eT=TF70TM7sB7C`DbcfwNR`gr-MkvWx1gsDBTsFnHjGC8Z??;$uij zL9Nt~4a-S+lEYHNGRwwsKYOkcZmQ#_;w*15K>Gzi7p1S%eX2#$ezBL?e%I zf~H+1vU+tBs4G5(p}$ztolt&Kv?BOma~h)M&ZqLNUEdJFw#LPwm#>oNW7q2GbR8a0p?SAk)a5(QEKbxN zlcD0X-SFEtc1y$`U6u3>M%Kz1j%OiFnaB=AdkyB&NRm`45A=(d2tk&owudNHWG|84 z6osHjZ}>kVy(3p5t`&rGjHxuK*M)pRT36JQOdO=<QmYNv{7#km_F!&VP$tmH!A~ zFK~>HrA};0z(_J@g^!2Rgp*;sNYR$L zzp|I)wM58v6a^~8++m`y7jB4pKXJp?H)HO|?PMsl=r+4$q-$}+Hxjigtz}twq%V-_ zX8>g{abdBDi24hps)>Q3JCZb!8Um=hn#P$eKYyriKS-NQCYWF$C^fzp`n4UeSt*UFnOXTFyLL>+JcV)^`XVq@>8eg8j#RKE|}|96loX}WW~cXqyW zetY}>S4cIw3C98hf>Z|o2~z$3s(*o0|1j%ZnW=V#2lOx_o4#LFwZ1B}EHEL;Ku?RJ zzfe(WX-DsHcTW|2m-sI2HgKk&=u7Miq?*{~$hgXKnHqD+aXGuY{`phkRcu{i2rvOT zQ`q)!*jR`1TMe=qB1V2C?x|JlR31+?#5c3bQ%xU)apU2I0>|O?xDV@J##La^5I&a| zg}S5PjF)Y);3_t6YVD{9vJffEXH0b974Sv z-f$n2BY_JvW-yg;-zPab+}03q5UJ9PyvG2xJ%=+@JwsIx5O#Umzd_}kTWS18d~?Uu zR{_cjDJmJU>V6WqZxz9dE4EmO7YA!(8lIeKEOLyVWCi;SHLh^yFzqFDuVO4aYZWo$ zNS1oQs*nNaaLuv|Q_nj8eo($wA@Tgjr4J6RRNjb25*~Dw-dncr_W*N~L#-6KBn+_t znp2Vh?IK~N3Ju15^+2mjjM`9oU@#m&N?JM8Vh6tl9^+Q+jK`ji_ZVjh5`)0a|GtrT739`d!=)Ke!p^nr- zV`ex4RILSu+F|DXfJ#I8Pvf+$726WJDn{Gwn)YSG#zKQ~IFSfWw994Az#y$DM!XH} z&uMy{Y%F$FajuKB7gE4e>LItlF$87rrccOd#w&DF24>jOv8U%nVw_y|(LcfZ7Ovhr zHgz!H$v5rZ1$1d|ah=w>Y%giX~dtsEeD%H`t@l&5B-|c+*5DCfkOguaz z&y3^k5}^0s)>Bgh>oQ6swlF&AsH1weS2#w^jF2!u>a)&H)1t%f9B|fZwsq!`*%XqE zP>Dj>=URFFe!Q)#1#9$T(~t6Ppoe>xVLhSkdR;0nt;&G(Z4aAo2nvo2Zc4l{=PJ%3 zTdneT_or5J(o!QRFCf1@3wUYM^=DReN1Z-`H8bqx(fx-Vl3M7Ped}Ae8&=;S2R8h{ z)ZjXnLxk`LITtPghjbSNzSnoh5p78r4!GUo(m^o@eF1u!*0(q}IFsovpW!0xWczQu zF66QZ@lr1YgF*~UmvPmV&;zDrq#%a+CRqk))lMB=J2_pWU}0=-E*h&^Z<8`-NuBMH z-h5y~9?_<^X||Sl#hkU)JlRqu{K<4ad$m)csd*-Jt-N9hiWzt@iD#TA$qDuWe?~){ zUKFFrqwDq&+H@JK&E-S4Ig}W1&(%lggUo4jBtL*D=3NH7T74S6`T!b+T+pH^_BRl% zYD4mKhz6jjhqQ$rIv=x`!-Hs5-al#85KajZHnmvhAGC_-g;u@$2dz^1lUDr{{)1Mr zfM^x^5XlMg3$3bs;wb7!#|mRZ_Qy>p7z!Vzlj&fZyXH7}7l`u6){Ym~n9dQGlSla- zcQ#j%{aKK%k|U3OrcsIzP%j%|tB_C&Ze=PyNF9(hXc_Dq4htK2XfgdHMDv8&#o_1O863eeaX+&YKwuwRK#!NMPRMbVXDw*ZC$Q|vU^C4k0T2z*f z&Gl%PV=6UdwTt9axwUKDZE$V~tY_Ri3^T=>HMS!VgucwzA>2fLsx6X+6ke=hmKYjs z%4yZ4<58_eIrgt?y!#gEQoVOK?W|t8gQ+KO^9DWOGRUNrE)SrdaMt>f&G_?4a~fHG z(UYb9GT)Q{sR?F7)LUUxb~9Te9dT41fIA8~XZopCYKvCk8==;G54VZ=>h_dcR?7u) z$(RwZH2O_>qUa2ILOJY|239TV(zA{Oj3@hs-e(JZ$PG&ThM8nRroMN*I=zG1raX(p z=KIUk0Kw(zd-zMpCnwL1pq=x2s9?^j5`!;zPMF9)IGJP7ROkF|{S`?xA7rE|r_Qg5 zqo`!Uyp!ru!=^)TIR!7E{(D$o4nL7y3kNS9RS2M={k!%BkTSx`#LD#_Mr$B-#IMjQ zS+3(Hbf@z+LIISybB+XVA9Kx&4o`m%WfewFE+>r;@{|!o^hF}PcsaiihGUJuJ9Dr5QjJWW)lZvgYiDDp+G9BZ${nuM4TvGQa^eq?>MHCh|gRcy8%?tKi4 zjLfJ3D~1qC&Ic~k)Y;}sp}NEN(pzr?&6|dk)p!iu&_NlGePPt&d#AgfW?NkC*tNcV z#BZ?;gN^!_DJ*||`IlNMsu|u^4zz3Wf_AOHk^Q{LLjKju|F&(Z%n71DwR~tIhOK__ zU`tJ)0Yg`cumlSrfdxN$L04fj3GUnAm%o{?t(FukRtOVLp5}~sFm&wiE}cyofVu9Z zN1+`g&4ir7W;lsZIIG0vFxkVoJ79kpxQmJ6FM>S88tMQ*J1QKX%1Fv!C(VS(!-)WZ z7lOTE!Afu@2twJld-T9t(Mi2|XPL;A>G^R(?M%{BMf)CU=HPp~p|21i54N8w!1so8 z1^a7Wz^|e|`DI8<(W!b{RKscCf3s*a>P~09bQ$zbN%H#vE`p}j$*zt-Z^Ie6Lg!&; zp#*8f<3OLv5=HR?tR%ZxHJvTnrR`N_^BTt30zl@j%5H_%&e><+i~D5yB#H?=Icj{B z#~Pb#FFqG+SOzK%!c(=WVLnt#>Rso+a?|`C`K2J)Dy? zoZ+p3EXGR_kyqn3LR6k%pq$$Ab5SC%Q)HBf(wpv@7LT;?{>a`0@2z&0D=yU{J8lNb4)F(-OfU`!?8i|$`ia@>Lkw1^nj~q zAT4=9he7Ymehd@BC`>&X>Ilh63}HxaG(o5R#Bt2eDlKJF4j3Tnwxi+l1W+hYlapmB z;pDhdR@Gx8)T39OK_2Q9Qi2ZGKiX0V_kUiWn`0}0^=%C0y50a(wl z&kCX+LbRDMSAwtL-fdT7;Tya?g0Ue{vF4d->UptaBVS|Jy$qfxIz!`SYl|MH*hN&> z1JroZIBAEth^>pRLzYt~E=dbW}s!M`IZQd8(5pe=6_xmJai6uXr!g%tPsIo$*Dv)h*P?b#OV9&Y{~1_3-unfJpBi8-oKrtf7yEM zUgBNe)z~xGy(FquVibMvV>(JiNdrMF^1_2eSpq=%D)v&yOQY5OG}3{D*v(N97V>;F z!Rh38UXVO*^3O)|z(QCuvR+tXoE~oW*3Y{XGP&-d0;k)IaIOO1rj2Z%z>;?ikYt;izZqCC zUSDX&1YMPMsab`g+?eo&ahF9rKMAqUmX}kYnJ+jN-3uw3rx^| z|Na`?lukGWMO?JECW`NPOmatXka!!?f@R}mlwGG?2KmG?rz9g|L7g@_W&^Z(z=_3< z?hSFx9+vdY!4;ZsC@hV0nKRyZ`KQ&~xKsy!vIybTF@%GBeN5_0XWJ&`ZmeSL9{xB0 zg#AwA@OJ78QfR6lXZS0h0NBvvHCk|!N%#VO$}N{(Y5VtI7^M*^pQ*X_paQ^xnavQL za#62eqd+77iK9vyjXqGGp#WnxBk?u0pwdS(9k*og---rVm z0}g70N?EB$O|%|I1X>546-o<=3u+a?dMP*hgyBp9J7H-epNq|H$Q7o2%V&*16^EpB zZSM(3q*bxgIBrsGlcF)N==FesB(6G&h2}FH6Fvt+1_m>3QV7TNYVY@n922}2j%L0t zW?Y`N?ROKGck@?mj;n$E=E;4RU?T6*y*ApbmaZH$`=qCnONe6$fQfH`#?RXM)O2&@ znP^9}KgINt(nzZ}rdxcWA9Jm6Ovg|d%;Yd4WN7Fw)r$Et!r_6~*^1L(hzz3q;Sx8v zT|bBuVN9iC4ax6t^5r>E*twO30jI>9B${Nb?EG+C4PeCj?LiOkhiTDQIKFfG{-z>~ zR}D&h;aV@7CEx$$Nc|VxD*hLAt3Mhy2~smYPH?`Cym>8-B4jm5de+}LKYZ|@7wNn( zYA!Gq3eS+m#o}vLB1_`WyXz;gFX&zv)V8#7@pE-S>rBTXMgj;hfH!9N%v9@y9-f<5 zTq14Mo!!LHeuebBo1HGVh&O|4EVvL$_4KQ?+TDEYemV%Nfw)3rd-|#|qX;81K9)Z* zfYL^A*~X#7`dEAoE^1T^W>n1V**>#exdx?Z04ZUY!iH}!3~&SR1JG@a!FWu&Pvwg` zOU)I``KU6d7x8D|Z;f4DEr*X3^F}!r>w#_rR<;Mr{V6dB4G0!4D>m?BuJ$L6AH>qw zTtw$1LmVP`A1lxw0npTIk@`~JHq+EKipj;@qFVG_fywgvZ~4Gb^m~rb6HCUaD5a<3 z2un@4Cu{pntAINk{n+oATsuCearX70ikp_{6-#@%oj{LOt z-_bw)ovwcWo&DqVe`fz+{mbm1mou%;HGLa0XidokeXW0YvHow?m0ws_wu+s@ENH)A z2*GGC$b37zyoS%6-_6QA*v~0fcPfI$KKz#K9f_WXl!cX48|qEw6~tsJj@$#-6V*;z zs&&-X9H@1j?*_DQtj^_r?0y7=S>CuPDxqzcAb()ptt*Uo(+O*j08RrVcxX-m=rBLt zm73|eJ4`ouyMO%LxC(BU+(pBYhA!riJ9hWZw9)toWiSikY5L9HvLSVltIdk@X&Wlx`0Zr)yx<{%e*R~?hc__|K#4Q5%fT-`1Izw*g57{q9`~$r364Z^qaVx zmmvZn9`ucMg31TM|NYeZ<2(Cn4PgiB(n5a6@Mo76Tu4)J#s_YI=(MtSf}j%uy>%9+ zp~(hHgs-Ql-B=+N^&Ry?;5$USAn7=E`Bfr>dkEmku5_tHeC@;@)vP7Bu;HlH7U zP`;m1(qIm7p~>!!bJ7n9W>nMtqygwwXAX;`P8c6f!|3J02z88xa$FBhS^{;^47=f!P$&aWXWc zi+}b{;AdM7-66zF`7brA0pFTa_)u+CPX=*wF+PkvXnk3I1IBm^&5MDQZd8W9Jc$(P z-a(QTW;9wiG%jiYbZ}z%vWPu6yj|X9kB8Wy#xWXj)^gOlxzBDzbR5-4AZDIc{X<*u z>ze%_67OB%88rIWLcUt+YABtXehd9{7hEG^OU^(koH1Pcw|z`#FcWzB#L{)vOLa|0g62lfiI zm}u3z6`3pVBDA!PIa^g5+?6bE(Qy#Doe?B9(%%DNJcpSq^yw!RFXsY-pG7{6w;eVD z2(9YQHG$PeP%*=h$D$U#S9dx2=~U`)p`j0vl1;4;ZAU#)*f zB+d_s)6V9_Ch*WL@fLsfE1A=q$PH$^#f)15*dFl zH?s*+#SRfu4)(lbmY5OcLAy1H$j3&wd!7VkSFUVj*Ag7jZ%W>H`Pnl$^9F%k?>$v# zhT^?BRl&ml@A)1g5KZ>+x`h<(Zj9|rohRcc?k7#<$qURsov!6C^ zU{nXumga+a$n|4SU+5lV^s9m-`t_T6h97nbp|VQmy_O2`AOPm9KWG8Y6Vg+e`_?NlQvN2tAB4NV2Pd2=K9#2d z*(2K`{uaF&Gm&TNc5VmNczx!j9;p?t_w~?Iv{R6xzdq)#R)+o-gPnh$Xrh?H&XTBn zI`@oUFAu|BSOoY?J<0d|yUwoJzohxhq<$AsK`|>sgM0xkKiQ7+I*Gx z$mKTol`G_;k$?QA>fOH3mG%Xv0qsL<_@|$tXzUxPu$apfoocpMpn4?ROxs5aWNG|q5qfK$+x6I=Kn@J8C#lZAp7Sl zmE+&7WkeV)pbi~4FGsrjtVfH`O2G`$rY5K&WZLUJZHPL;PYv#O<1jN_F$q5J5R2a) zA^!Ji_hktEE~`95LGyDN__Dleu|M*( z>x`Q~dD@D9=4qS$Gf&%MwMkdHd3Wphw9R)vYyJD)O>XTb7{ZsfsK$fDnb-haRue@E zCy}sBp*7T_RiQPM{SE+-iLO74b0d*Cg1H_qH7*WhqygrKN?|6u)g26jN+_LXer_{q z9>XGfdI2>nZ=QO`Bx2a#Bx{k>gLk5DdJe}%uf3>mY#HND6iFr| z)D3QHlYWPMp6(^Vu~Blh7TBFcY!TZwJ}rvkaD~X1GgF;>+i8-y7(vzBwAgyWv=&JS zA*-3$N4{XY=nlEe`+=jCKp~^{R$Kmqc_Yr;GCt;>%tM#SH)!JMtl)V)a&$LP65Ej+ zfy79g(*+Lghf_reT?0O-s^@GwZdaVch}J{5{a3f>*)VkLEsbZ`AdijG)D6czF0pvT zZz&fUcn)_B>W~DrukIVX=f8x-kHlsKVm3*qDV@V&VPuJj_CVF!i13K4&j>=r#+x3b zr%S(4O3{x$$xR2|`}{=L?KOj=hEj-AXNoL^H*RGxlJD`|njV{WDQxmVdtudtF+}wCXWJlA zsh^246tP#H6;y%RLf=reB{1+!6)&^sp_)~>r{R zB+ndae0*;w;@g1jx3m_=0p6|W*>c%|%RF4u471V6a0$2J7wjIADS*EmaD}5kYqy7H zKzs;gQ=nLoh^Ku9?$g&pVh>Z(K4^Y<1DlPzDmL+E*KVm8ZAmv3wwk1^;53h2%3k`& z8>Q^^3~C%@ZYi*HQqjpxEY-fOW{j#WOjpSb>6%FCCn6$a_uDJdAFsET3423Tt!-hV zSBrCe&*wwoA}x=NL)Klv7JR5Qrr>@AX`A-=E^X{D&Q_fEO|_I2lpw)Y2+TC8Rc$%` z5Tp+bBl42IxC6Q8ZVjGe{dG$E<~O&yfws;6;0^KHl>B9%1bIU!fYMy}LZU~qK=(zr z;TfDQp<)Kip!*^U>@aMDk@wQ#gDv9$TLxAI@wZ=IY$J8BFGz{g^}OePWHtKu*bDG) zZh+zM2m*s`QQ>w?tBj*V-3TvH*~x6Bmr0OeO4dsuLot@luUfW2rJ9Kz7Q>7QoS>Rj~QrFwYLp`?aUTQH6dHH5%?;D5vu zPm``6^fs@~Q%br`1XwMX%rRF?FxWwXVzrCqBX-AzrOHk&$a?!*D=i1bPRp^|b)vtX z3TV@x6MhNf6Ml(1L$&Ad$s^HWzR}V(?6|@x1jI!6}=t2(Sk#1`1Z*du6#EJvm(yCrL;{utY(H!(N`d!tZ6)0fa$vsnrB8t;ff+1d$4*A_uWXUD3Q zK1=Eo-|3ro?gC~!S|=ajZqz2aw|C;V+(DYi((9lVei0{>P3v3^h556Vz+y*CF(DKk z1QrCN=fwryIme8_H1lD9l&`&w@*M)Z=AY_*GBQKYxbmhp0ro}%kzA62iX=;Be{`EI z%`SVKCq8y5=D0R^mK|T_0)Ax$08=oX9=Ha6zEbxROg>?xR z__6eD{dQi-ac?fy1&s&{Xv1Rx?eG6aUH30W<-b^5_CF1FbqI@*h|1n}??GeR`L3~2 z^o|5W7656>>k=rE?N+2`&vu2-qGy7LJ|UT9(cf}9zG7tQ;CbFW9yk5dp*pXOG{_8* z1|C|yj%Ff*_1mm%*|KW=Kwfjl+8!UzF2YZ@ts6S0)y9loq!XJ|184tFewC+d=bsvX z%58CHmu)$1z9E=Fiouzsl;4C?z=@GoncKq@X`pDox;83*h@Db_SnVS9c2I67zlOxs z_q7X+m+&l5oWi3m@DgYZJbb;Vev_{!u!5($MC zsR@V|$uaUMC^#xG>ClKdHgWb_cmrEkl7$n|goLw#1TCg6U&@+|m}Y8mkW%Uq(y8wS zR(Z@T;st5k1^gUOA(IoYpq7)z8`V4iq!3}GnYyJxhTYA^nthQ$*7qnW(uY?o_4svU zpq@E{wXaV1*D3UJ5Yz6z&5r{O(kSTpn~T=J4%YvUzVZEg`j$K1G`}6#-}%q(GH;Ls z(yu`E=YNzyI{hCKNRNLjf$YC%L3;(_Zc3o<@z=b*-}KXeeZ^mBTe9+)J?IXV4~^1o zn|oTqQfh8?b~+&~kh}%G2(_UOeT6E9q&}jg2Ct3NeHQ`ckwP>0k_tQ==}RH92L&{Z zy5Y!;-xME<%g5*2OT@R@F`5~ltpivq~GemA-_&6I*bJ2Z|u<86vjgvF06DP7+XUi&8+F5g4V zavt&W)k#n%o$%VQk)njT01+23`mJJV4{ZB3=bbV)It7ue-i89c8YSozEe(Icz3b08 z24L3qrw$vaUqtbe9OCaC7?Np>=#WjA&fmZKps*1XJ=W>y9m*2#` zf`^Z4#E`;Y&kbcUn+pD*FNpy}*ZwBI z=U;qHe>u;q>8Q+UgOra}Qn*3FV2t=;-5CxdQlT&91TaUPqHAkwoOx0KK$j6 zPO|NiC@CBjgqgsPx_by6jWrtVYj+LI{K`2XwiP9ES<@){!pqQyeXy7)DikiG~-Bw#EL%zhv;v_NL;1BDngelqmYpvKEfNs%@@zYVxFVViZ3V}6oW40AgI_U z!fVW#+?GX95(h12>Ho&&cK1tM)DSMbCrRHdQ)Iyx1x9j2e3xqSaE*#J9khk{V-<#o z_R8|0vV#6>ChQUQv&PDD0m;RKLE%DCNZ7s^xiPB+npaVw6CVbDN~)CF?#d5zkcBbh zJ5+z|hz#EP9!S4ZQiuE&el+vl)zXvkGGV)mg;VzzEF63C%#IeV%RH^COfSdtDb+H= z0YfTPU8PP|0TzV&MKqxauKl*}Ng;Wt0QxsEB0AVu^Wr_8aMa=lq%84}kAn9H{-V+| z;jR%g=_L@=KM$)T-Nk)W{a^pU-BuEV0Uk{X!igSP>cGh}E}_Ca)Jzs8xBv6b-)yb?%C)(A7b#+~PGseVyB zqJgazf)tNOM2SwaZz-9PNpdMcipNXDCPqn7fxI0c!@!43Z?f*bs=~&Y8qX}jj%SeK zkyhvrf|izNIUcOY(<@o*ITb5tv4;^?LHC>QOg3dg6rHa^Ly}T|N z6qwIej;WA@k`Bb({7ukIa*_r8;+5hEn%4izDgBpv;J<_@Ez&a8$E6so7Ih#YN|FIQ zq}V_$;5uQ%)kLoE&nx^tsM%o=D&z+fMvoibsjjoGDL+4dU+~s`DM(aQqu{tGLo^*; z+wXA+b)-fby@Uar(-ZvUoV1$qI*sji)uvoE8%$Oq+z>~WP&)zqE8exH>EbS$JIDA! z2cri#r))xsBlEDqoeRdHmJzust%_AVstzbwPc+{LE>EJ(eY{V)EpFB$#w^$CNmTuv z5mL!jzDh^<-Fy_U>JZ74QkFIsS26q9`6DaJY#7iRCb^vI^j-wV3V(!CJnM_^h0VH_ zc_cUFObq`to61>pvvHwFCWDZ-d{?6M-Mj&X^$Kqyla-NIJ?8y)t*Z<@y{gaePOw@T zTMZRd!Fy1D!hLwpXAnP;MoL#xr)C>fr+59Q4y6Ky62%ZA%u#cqo0w^@iulM0m5{Q^ zTmtqfzrT)OW~8DPHtMY`HC~ucQkg~=Q{XMH`0ua`-ysSH4m6IZP=5=S6pXFSOkAZ* ze_fN^RCN^4gwUUW`Ym*k)6NotN&yXOnCGKnN#N4Onnl6==hJj2!E`At3=q8_A^I)6 zb>2+>r^Il9QO}Z&qUl+`v~<3G9*b_5ubFp0&-NW&?P#jZ#7NMH8&YAbZS|x{e;tC) zDLdb>;?v5Z_GE}=RBbXU$N@@WsHCNQWZYvy`$U_*?e?m1mW4R9ERYN8J3@C7C!Hg3 z(sN@2aLJ=HsB6r|ZBrHR#*n+Eg79QTYY~nEt>EdI-9tOUT73C~LPW>2l_UWg$8^uV zjh@P>wO1gMCu=2aR2E(Uxh0)KaY!z2E1F8gL^mV9( z;Yx4qL{Y0wIe(!HoC*F%gk#7{m119A50?=*&&VO8T_W3aHa+a5OJhKB@!m~| zR}X=sdxU-p4PH-OB6Y;ArL_s8D=fux7gg}47b$19}TYxQ^h;-dH* zPrsCNFBL+guXIx~s5%$~J#RtJzbWSw6@-3wTeNqF{)Z=u`yU3?;?U&}1+I?|Yp%c9 zp*+6wmk@^zsOoPJea!mxh8<(==n-@Qk17NB{yhQ*$JB5%>oF(`|Jv^|5zU47yR>rT zENY?(4i36v@#{SEL!b8B*00H?DXI<3044wvGZO^yYY18h>{q|_jZlUcMR9@_32P9J zrTE)d`gMKyCAw?^T&fjZAD;#kT{Z`Sj3^3)2n|+$WoDzLju0$ottSYAun~D`f>z0+ zk*arvbUq1koWfy0r&;EPmiW3JCvrb-zI%n;YlAX@jm#XDkIQPLNygkeP=@8vdS8Qe zb9>hv#vJ9s+!Ko=D!Wa*$%l%J#zfv53kEhvvh7LtCH#FUxHj&OKX8|H*< zjaX^oYnA!~RI5^!%6rZr3lg)UDk*4-R*UqWfrTb29G8%M>NOXJ1W2eh_&PhYuPUFK zBU38u#>+pGyOGOH#>~@*kcw4Ru3EEJj85)ps`2TdK0&yZwN0(p6)3P$`XK)dW7fN~5>| zN1siE4p(i7#zeb?QzK<5B-yLh{Y{V(5ycA>I}0hYZ_CRp?)ixS0pG>8&R?+CZ4H@; zatkT}_3MSQFk}}vCK(;(n@5Co3wU*4(pKc^$h7khYnA#|0Fh4E1hcE^J;B}Tl)d>J zcnVo3xLa4XGb#28EuO`dt2#&dH%bWo_ZF~8@nK(MJ|yM~6|T_hN#Uf}cdM}J)w2Re z9J%C1*;4Bm6$c@VO#{rN>ni{)%Z-X~$+4!{6V0fSWe?$0dDD=pl;}aRbG5;X*F;T5 zahI&LP|fPbLk*Qd8^h+_HaMdE6-|kj3TU#I@Y&!^0PXcluw}wq%1ft~iKk8!M}pq? zu`}!2;gv;x&hPEhSe&saoV)g?c@{*y8k|z8W0dxkhmbZ!iUnZ=+71vrK^r9YSoSM} z6qg>3+4x+d6a4*rt9zLCs|>{2Ud~b*p^QTIv$_r_Wq4btailNc)w;a3y+8)Zbk!_D z*R!V1H~4<)+%NQb0t{S$^dm|XKC!1Xxx^1p4q1ER>zMnuMkq#hRe9Nyq&y0HM;)Ku zDMt=-*{{MJYp?8@v}(oBSU*74KD>@@Ge#_J^zl6>@&2lDIW_+B;} z&|wQ1H2?m?-23Hl6`cU;WE8|6dM?czYX+UJ#+7OROe_mni3~JMn9)i13IknAmd<>j zp-Rxd0=riPC6>_$*$fe$p58qY<^0_A^X=|};OxnV2X)YqNS1^8pI}!>iZG6;hN+gx z<3d|l@*vY`mmD(fYwZ?wb3e<4E|v=vb!#<_k_Qf3m2MhYKpJ&9%Dh!u$HX$b7NY?h zMa*5H4=i+Ou-4NUEx|hfYPN}2$GxNJP!+~{`uJvN;JOXf=F>ZyU1*>4R;@{#wD^)-A=azm#d=g z1Rh4QE2@#IB<-ZEe6yrt!fxYBJcxH1e7#fJ=ru#_(m*ME3Uo@CA5x0cQ zMSI9;T=c+ADu>})+CUa-c53cxBf8Pp*uK_+9U5ia8mZ`S+_SC33b~fUmYT)~!(KO| zfm@pGyO;^ZJRu;9mal8J&gre+i`hU{m|SK&EgXG$Wa1jwsv{H$v~86L5@>}!bcf{8 zpv*Yk*ezeJr4psL2|0YOT1I73xyB8%qs7b_#d`GF4l_~glZ&AP;)rXn7N10T zG^^^O)ih}>p5qL`^IIHXBo|rKvcXSYK-oL_QbU|Mpj%wn>nHJb>^iOuYT%!3^Tm8X z*}?9u1J-h(V(;BTbG?C}(6jlHyrZLuV4?i_@I@ar*y`_#wm&#&t+_WGR3R|UjdPf7 zf6o&G-n}o`YoFUel@cOz$PO5-s(Jm{?SdU~acTbhJaNMVf=GCa$HLP5O#doQ+S;U_ z3~7bJ*oLL$-TN6sUHwM>_4%Wp=_-`=ngcY4H~Zm-;aT)}TpAZ@rU>*(`X`>F9d5H7 zAu-T|G}}WJj+Z3+dwYSB%^AZG;?0yGtEU#V3nz8d36l<_{pSwu&-{MSdNrZC&6>{e zPX)5f;{^6<_-mG>Z|d=}+aJstzUj*qnX1s?+c)B`RUI)sDnK7Ri&Bryl&AzxHW?rI z1$N(u0SX8PP3q`}B~o{Y!hHOQ^A=H7t`tzR`pX5q@o9ubJEAx9*8oH!)%hm0ig-PT zg7k8#6*z+`uKb_!E+DhnEUms%C&3&5as}@&wkARq=fn}c3G^~e^OchN-Zfbavm=-} z%J=c0rne}+_l*aS1B>AWe@46DZcpakD9hjHCir#`{R74D3d=FU;a)9H6Mh-FXIlET zp?4r%vgNaVLep!AE%I57@HZ&)@rTPqoEhro+x59KHiOaJ8{-=q%YDyJ%y_r!uzWB} zOoPiTG>*Y7pFh7k1`nVXH37Ei_34bdj;~RW^+iQ5IUT%RFbIYtlfKLK zIhov@>!E7QcHa3#mh*CtZBNp)=?7Z8U+%L12dlwf7VuT+K0##Qvt2?-bot`e<8`WsR2!;{Kol;k20_8_VD>=Jfp$n`v}FQgdG8*$`u_OAb@W!jJLBTVTpqqm%$~9X>L=7WiR3va?>j-@B$A z#jkPcK!exQ^!wXYnVaH2I)hf%=FQlfXGzNRTlikmCl!6*f~AC!K?b6!%vw6* z#8(CwR}g^(FIQ!`L0+;A)=x8!)$R%t55eYUlP+aSO{>%UC9xPhp4z!12cO^CzHPwPEe>S6!V?Y)XYziw0i%4l{ zqFaeDlGLB0K9o&M$2{sj``LZ=RI`6@F;DaW@leS7Zqw8pAh*xv;_W?We)@Row|bM{ z|NQeO(W}r48=m&9nnA*GH$y@WYjMHku_Yc}5FxeXMJVxZVvTWPDg`O<4`n zrU?^2$eOJfR}um-4*U>VKIh~3=})P-HfG^@*!9sNRVf}+*&mr%A;|)>R7g#Nyo}YO zwtGKG<1F7@O%zmla{+DvLA9(+ayaJYn0tz{N#Pi@=I6~oSt;%sJ9iGBOe5)*N4PP)Z=QERmU9{Sed~za`uOH>i;%gMD$5O8fkXx}Rp-%fA z!M)-h&TxL~7U4|xSdwvwG=6Jn+Hqk$_Fyv^IG z5JVvd8$lXP!(?J2RqUyH4=0ls@eQ0EpF8@fhRqb?dekcj*j)-|rRWjnCOd(<5V=%F z5Nub`OXP$pzsZW93fRqfJ(c#|d*ECE!-_Lu*?Jkkhj&K8Ij!qH(h?X6Yas$(NO zu7cdTX?wcuvX?{iXlko#nZb1pO*jJ5b4=sQ;{!;z(;PP*xR&B3ojFeBFWta84sCWN)MX5ZWt}Q{QOC-dA?lS6fEsm6>3E5>-ani9&tP~ z6Y!y4?o3$b6Xhim-CPrCinc?st$^L@i8Tcc#|OWuVEi1+`uM6h(N;%PhP%L$_|)jW znB|00vv*VaVUaa3%k{u-QQV)7Kz~83N}5n-QSl!|Pr$b)&|H`kq>lk{$Hn)^K`Gq^*!&3P^CvPBTt zavB*%xhk=jtIHkj%87pRl;lr)R~vndnq_3O&t2DSpryhoR*8&de3!Xc=f~*j+m497 z$I+i$>LVhwnPy!kumyJz6V6BY7`dDjgWWXK2&eml)s>uDmR*9Segs27a4A)|jvRxf z*mY)rKxndwji9Dj^^Kd(j$&zNgR2b<ZQHhOHBMtUZqztw@>ch` z=kA_;@7?db`+oTTfc4Gw%`q{?93KU9V0Nd6&J9L(ep9Fanw=fJyP-=5=KBTUL;1IP zU(V1DXsYV;j}cmMB-eW&wMcY?j!9+!geteVb`YUoSrpa@obn-zUp?PIVmN$ok&5$O zh%ga21Uk#N437JeTS$YjI#DuWa!3@Bu(;lJ&w}-_(#c0b&nc)odheuT4~b-WZ+|H< z`m*#&CGMJ5XwZnBbh~90sw_S@*`Cv;%^IVm_JET?$U6xdO@q6LjOik2_Twc0vn~mU z|NHiuyO|N5zwAQU#glOOfTdt9aE|sjUe>_o@IQXu@BLwvs^u@^2fi8|>Cn04s$Ez+ zTUa!Qk|yomB58W%!C9d3gAsjlBWmD;!mPfM3nX@y(&Hb-56`QOXwr?3m&xAKeD~cc z-kTQ!`aNK&{VK>{sYpy=Wehia@sb0k{JK|rG#vUr_PDpUkeH&t3FCddRYYN19!{G5 z8vU@5L1dv*(V0ScK+j=YDYy9pHR?7sTmY9oD|CYsr@;?4c8(PI`Xr||o@xq=5Ak9J z7DZU=aYxL7AsLp+;|H)JzGPlR@sP0B3zi|P>-2*X*U9C;i}*?8u0^5-8jeYMF(gY1 z99Er$IKdv9%n{=Lm`bc4Pm6~fNS*u`Z95fM<={-`cTGGud0QLmJulH|yMQ3#b2;NK5m<(l z++vqoCT}s5y`MW!Uvil`scr2AW)Cq9-0VLD1*ve-6VdJo&HOd)on@p%!x3ny!EE-Bye_yA6A9$m&*Qfzf-$?h=(5NOLxq6bv2 zv6iR1SYT4BZ+1%9ma$9qe@B$d3O3w-6E-Az-b!uPy=g=ZFlMl%kV+*={H?b^Nt=}p9T!hNVv z7W+iFo#LBcvs#+R)=`7|dGP+H^s6V3%lPxZa2XqiMW-Er)jT)wTm1LF!{0kIMk1+y^{@ctEx^aLmnU(Z{2e}wKLSdtv3S;-Lvlmc=y&=r!!eP?FHXJ|e zJ6ICz-Q5201;sPg|C7d;;`;GlX^cZMUt3&S%#RViB2FgD*_R6Bc5gD4YZM!6FVrBB z$#ct7a*~Hu6!C!O9WCRv6 zRC0(G*`SK;GNOxcs~EZvpZq-KD~^A8Z%+W9zac06nL_{4lLafv z$pHK6PZ`B>8N=GodClQ7I`JX}1Uks8UdSZW7~ofm&EHX!jYur19%|5D-U(fu#h_4D z1%&R_^RP^G-g~gvUnqQdcUM z(qC5LKTMtm`-(FdhuLZinDoc=xFQyj=JT5tV%_`7UIYIYp}VR(U~r-?aRNc{t?=kZOVYJ zz8LuB{EfEaFR%YU`?I8Y9T{99w2`+4DP8vl%ciEVr5lu{?-V3DJ~Y6E;u8@SOyNUp z3gZU;(om|Lxx|$*H5K`%BdDVg8omatPQgN$flL;bLw5!i^VgT3x46CR{L8hqR)z$N zBp-L0Fzg#WD#YX>*icU?*s&@<5I5E&d*qnC|_NCnnk|Wm8{uV<=Y1% zfL+0X9aBR?jHeh_KeRw9!w1Bi%Vyt_0$x%$a}%?5a+r>J@6}wgmol7P$(~PxKLE;B z26+H;j_ZhC$}gO#VbW9yYm3XmNaXw}_w;T==K<*JcH>%kid~{b=4~U-(9pMh?525hy^vvby$lfDqCU z-$Naf#-1L)X9-4ir-*Gu_06;tB}rLBk;f}oXcRjKHf}t?EG>8XJ3x2L1RM?SpK8nLc)R zBpyPq)YS>Ja~lkA)7{+@q7?`B@cn?mpB%1VWm&s?tKku_9E$)({%_o(Hl0K~fXMZMYjoW?AZO#k<=t2(ra2<`bVi`u%RQ~k#b#U($E0w)doFF&9E^|fq+8Q;j1y*nsd#@4gJDy- zLWN=y9fZ~{6kERZ1b*zc?;Id}dj>$jMo5FVP@p9a9MIkxZVy37h2gMh8mJT4c-)}r>`JpD z7?I~G`>3;euG^S?bDdqWHv$sV6iOzv*AuAVf#ob_0Fy(cUp4i*+&ZwEDl@3L#e{-WZ<#<~q#>UiCk!c%>B3YtU0~7^t+Ix3A%bI2 z8_>1@-&vy8*X05H&;Rl-0Exf{;teo+K>!_jMgN@^<9`Us@1=Q>x~>7}{rmT)m+d zI4D{;dfsw6=0vl)wG0)GMN(r11xlszf=fcAqxEuB210U<@|&N2nU|l6eACZ;u2-rU zclI>^S=5~%|K!;w&wbiqx83XO;TYk&&5*Kfcm~>scZB1u`GWltu+_Wikq{8XWY1Fd zRD1164AdT|g!l8;VUdX*S{M`3SRCNJQ;hs-m)Pp)g^n`A-x*yX_C`lr3k;OkC=;s8JHwzm-PUCNb~BoStJ7< ztV@Pc5sb`L-0r#n-A0j|dbjuwVq9yEQASCJZ4FcS^eJ+t@DrsDl;(+_bM<7BqS7a_ z8ch>*oiivQz|sU<@V(4OyJ30Vd|Uv1oigo_N;;STG{@^k?7T7tg_yz8X*!n3*)XW# z<~%ioiu`YSBaJkLaGdKz-+#(iv*lzZH(Md3L^~Uwn(PM(a23m_M)1{)v#&4dQBDYZ z)T!RWiVUr##>HvWMRNg)_VTM&7n$9`S23B-%O6nmnc#o4AEbX%_foUj&JLIJnPOZG zzncmn|L82YrhJ9at;U2XH>8tV+}RWo;A5Y-4!=bc-tomqe#pDEmvNy_TnywMySm8! z2+oA>gQAz$!tr>2(PIQNJi3@}tdg=4WRYoSmJ~%(vcB9ge97EWvl80`%ln!Y*ZHQb zEbIo}4dWr!{Puk#8ynuHBMk*7*>?~(7St&`_0e_(*dwj< ze5h`|kVp@oyN-SuCoy-fVd}$DwcmXN2W_~)<`vmeffT#p=ewO}k)zZ$Kei15QW_b% z5$~{eOG1&iD?<3lkvIjns_z$K+#SAr%@%+6sS$A)k=T~(4tZJRvd;I6ck?#pxG}=` z>cKgPz>xbDK96tIYnQ7~0!xxN@P?)fkb5LM&@dY2@^nMYO9Nx_sahs0Mp+ZD#JgFMGPJ3unv}L zB~B^(W*==P_!1Dg%)a>W7qwG))%>>*VA}qbDgM8*#BYs5k;*>>P%!ck5UMYta{GIR zvl2=uH)1FVqER)Pxy0Mc$;AdQ8tE2f{10F+O2ZgtFOss6l`DE{-e0;}_}pvkr$4-N zt3&tq|3fF7IugJfFfv1ufdag%Rpj=08WNgAl z;oGA4SMS@FQ~VME7yaa?Efee-Th<~x4`d7MV=*pq)i2rL1Ns7_6JQhePH zWkD=Z6|oWiYuPpH^e*>g(PbpXFV!}xcr67yKchc7>rStq0{KMv+SMN`Fq-Ao&NS_& zYzX6*aI=rKrb}DZsLpYwn2lllN0(708>PhyG)q|+4~0RmeuN5Enx189NDtmDP{uCB z9>WBI(VIGpeq`W&-WT0!m+x6@;`5)XjO*b1M$Nn$vUXsQQlrvQRlRYWtpXNcjpF*1 z`Tle%ZXQ>eJ#9+u{bXL*y=+H;#{K)sW(lIJ>*r>+%XU@;h?uZN^$yHlq_yI3>r{27 zhzXhlO}bji22KBBBbcvhCbe|6pP62DePs*|e5FCtRC0})Uh{JiK{+?5)W(~?-tt4! zJ*w$ZmRfq;%)PFN)XHWgg2CkhW!?p5SDF9sPKR_pyuet!Iqt=?e`B<<(Hzkq2`T!DzDb5uY|ZwR2u2Bec1{8Yt;wq; z)9r|q`Vq;z0<{{aoufZ(&og9#&jP-$vYmfeNpek}GBSYjQO>Nmgz~r7fOfjGjWymd zV!oNnukSYCP!HmAlu>G0;aovpB;fbTq!}R6s$5xX)@s?nA%2S1AzQDEwz+aEwoKV$+)PYxHM1ksbw0Gf(2>@d# zaGZ$sBlsn&VVkQxZ_x`Z6K;D??ghuS4RmCnuWSKK^w^{=g?H?Pri`Dmyq z0}j-#sT1EXsPN*OWSZ8$V1o=gocF%0Ho<}-`duS`~Eu`@p(W?em`PyPOHen=OoNh&fb$9I52yP4mGCmMo z;0DU2eiMcZc@#wxAXs)Nnmdx8TC@*UBV2rrK@COPts3xD8@yLTH|$7UkCm?})(Ato zF&IW6-wdO4jA-=XcsGp6skmxb=1)la_35i7U@!k0hEo62r~g~U@i&H25W&9;rAh-W zPOIq(W_y4vK!PWbpQRS!8Z<&PZYv!u&R_mCltR7(o%x5M)P!c7nOb@(fDPdkhaGx> zfsH3}dwbmN1h7$#3$eD-XjD()+&;+!`*_CIWRb-Mq1}b)TQEv(jt#nHIbe0k^2<<) zMA6Ajj+0wn_Eai-v3|fJ%HT~RYho+YJgWJ0ptW%o|KonZ(h054H>i?6vED&VsqTR{ zs|99X8#pPtIK0{QaOX5%@ew)~{LkR5HYdyd&C#50E@vdN4$K>i3^onJcmW0pZe@nb z6?Xfya_Zl}ub8+H>ysvq3z!<{3#bE?lPPGw-F(v6=--l4e|U=wBzX=JVQR;LHXD>M zkr~viFe2wBJIh=SehTH3>+PWb9ic= zL$d`U1wmStkhLWk|GU92@=g)Gel)Qc1@tK=%DDbbqMFqR*vqAc5$cFq9>lMTl@^Lh zYEgU#3uVV~wt)Dm(iu&csXj>$8DyMqb9t68ye1URcrmx$RHsg!^Kdak>#!DPCDF#J zlQ=A%ba#=M1POf5f_F?QUFs4seKM+t!^r4A_AMFv*{D>9!G=^&Kt=f6lL(+lsj~y8 zILB`*4D+mD5hmN=!iv7xAkko}N!tMMooh*(i;TA}Aw898@|2fwb2~%Aipar(jkq8A zY10~qFDWSEtK4z!{X$Dsa4U!y<3pEmQp6g&?NukBdsP(3A`Zd4Ahun!kXwBjf;;A+ zZ=iE=Xy6=Gc3NfAmbe;N>=^S)L=;-dHEn>WRQEQI7Ie$T9HbXNX;ed6rw($_j+rbh zw{ZnU+vU6m-2>7-I-{vZV%jmqsM4xS3rxwa@BNNLGeU>a8*tE|;UQ{^^dYxK_{h?A zCdC`9YlXJ0(wZbKBw9VXq;jV_#Ju4pn)R?JieVvse?f>W@xS(k&_ZT9xw!+zoJ9yA^Us{GaE%k zVq)3rbI7<34zKDZbYvkTIUIH=7F)rhW9I>7zSF41#YR2dALm*A)(iJd@231A!J*#8 zh7-@ZDBpkL0J#e1#23P!vaU>>US)1njT;qVt(o3kZSQkLw0;w;oxRaQjgi_jHE7)+b|1TulJ_@met>TI)&sec{-0;#o;2ecrFavX&0c&%c{>YXW{iTh@j11rT zQWfvI8xgnj6of$eq*CEMiVapve8iv3h|xp6z@58GJ&(QN6%uPuPjf;_=APlRpGhza zFCaSM_hklX%Pw72HaV_0bUeQ9P6#fIG`)+MdnQQsi9^_edRXp%gGtu$$=Qjp*!-=g z`_*eCN(#OFng`wjAKt$mJ^f|oBxK`cYG~pq<^iM(JO5+l{ohXmMLtN?hR=xP{&O7I zF~J%3v+^S=>>s&(sWRlO%%3a8`+^JeyzPSUgZ;Z`r8=O26Yhj2N1Y*Qur6o@#N2wu*(j?h)dIFqx%Me)p-$Wg4D4cr4!aSnL7sxQboh)w)vcTj&$7^%e-xe26-Ut{ z5opXrVb^YMq#kJfg#jXYK!W5GYx}(=M|}7Oc<0EsP?^>5t$OUO#{4DKBSu3-xRPHw zNA5I%K0moH^fs;x84O)GPAde69+jeKD6Fp>cbQO3Dd2!h=>H_&*j5Q2r~{I(WZ_8USYHJ7AeD{J###@8$Nt%mV4asnBSJ>)1Xd+g8m< z*WysYy3G^y(THW()f=zl#J8pqy(B(Cy+~I;aXKyBB^*8!@NTZyAV>-F5fhrZU93M( zI_q=zzTQsQzuN>9?2y=5ctBm0r!MAh7Xx%W6oxVZNby}{X&P7EXq!uyH2gOmcC!IMmtM#U8h*99VWi2h4H|PS7FxU6 zQXBNBp~+R@aZSo&qoD&Sz)Yu#+n_BZIZnqkQmoOc6FSEPRtKgImmzK0jp?ci$g+vLnyp)O=(mAroUw0mb$7rGPYmAk})JM3B zu@5>1bgL6>&ZR4-RoA~>adjJDZL^7Ry0KJovtJ61P;{GMSq*zymh@KimnFLT1OsU_ z21gzUsEKt;jImp{0g^weIy+BMid{Q{D-xR%sE$W>kO!uccnhUiGLS!(JEg?WL^@NvrA|cSo>{okIBLPej~!`+TLDjsN-bd#w~0?l3j%0MmfTe) zz#<=1@`s+BBye*~L z4kM2fZPH7=e!kW}ST1@q8=j%uNPL}+0q8}k@!Ja??Qq~xPlah>QXS{K6H7YpF1uQyxxm38Ik>y@87H2C}3 zhC{yFT?E}bg%3o21gp<`5{m37P|#$lt-mb2RUoNC?fIOvl_8W>A2rlJ292@>#t}Ov_6whMHr*)$xrZa zey^mFHlkk$4Q}p9BW>}v1JW$o3=$cuciLl^WT8<=@$TOZV5LJTl{;a_>ibfMxm@gSok9L#yK%Q(1%p+~Ai2^g?Bj-FM%oa~Ef-w4 zU9UxxtHZ^DC!YcmJttep1qyr-%OUu9w+4E^<4tb3vM9X_V&6f_c(-f42J2773EuKY zgwNv;XUzkl$rqp@5rfCsXcc|F&I`=;j{(dnUtV@HVS3gjHhZDr!I+M4lHuu$hk9w2 z;44Xm6tQd~Lb7#CL4;n?*~^aS(rvYqtlfrS)V&urtF#%QrpI;l&D7c@yl1y&-}7Ty zEyqs0;#}uADwz=0k&Ekr_0>Lv+N8BYmTQK+hvlJprQk;1nd;;hGNc` za%Omo@58Y~dxS~>QZ?DX4$mNtf>XQ+JFQTPt}1pDsYnLJdT55u0iI^Uc2WNXf?wFI zS_$ao07m%=`2796$k%Ehs4sy$Z(H}CZgZIK^zG~f;S^ozV^+tbGg|CV2SZ%} zU$Whg&upnR%oB{|N5~hTm;olTmvmIE{6~tFh9=$* z$?5wyW}|909$h$F@@{QTzp5z(ATD#}&n~LjX@j|a$2I}ovmBSgO2aNFejAx-)AbJa zWD$}^9nl;uW;;8^8hD!B`7Ip3dSE0FWT}4O2e%ExWx@X!T>dQ_zoRm62={yEGF{{l}#;U4U&{`ImWPB02}{_%8Ou`PUYVzr>`VDI~!Km$w0nK z{aVnam}h$*ZgxCA=a~Bf4>Bf)|7fk=g|wqdRY&d(q2ceRhhU-Umvl`qQSTd3_Rtwx zdnn9ERzNTOHj$}&K-x+Qf#AB(R-Z6t1DPqeUTAIn0Yh;QAerT6IyHS#I zqS{G=5vva4)9R*N7e*C#HRBJ{>~H7n?zfAwUW;@u2Fb12!0YvW8{W}fwZ>`?En?Ey z)tC4?=@6hF`C&LWv6)5e)nmPeDl26u$63WRrzb6Rf<~O?P0_I-$9C)5Y)?$*8IHAf zwB5p7giecYvJ%`G)`yJg!s&*4)2i@U0 zxTT5$;sF;$-sT*A6X@s4*SL>U`-ILbhCgkiBpww~`Zkx0n{)Mvq0Ds&fp6z`-18ST zr9)AFLzX3erB(8b;p5xvr{+E$-t?F@mzgcbGvWGy7 zHU+KCulu<0G>}ucHvInE;GcHB%$LLqB~{5QY~08OhAzQ)ot9+H5=i6u@ddw>)$e_B z%_#v72sv8)k==ep!0@!{44ofww>gLmiaQ1devj;RlA+gcx;2@rmrjoI0r_)4-5^}h zeIC|W3N){f!ZieF4{7~9T!6R{;R&(V-KYq0H!8sz)}uHQR)z{v$|wxkr~Ok=K@_}a z^i_SV_q-Ap*TkFLgJ~9oLbq>_QLNq{Ur@;3u}i;Wo%Hcz`RwCwaiiwJivH;v>x#@K zDma^9>ND00c9#U!YG^iJ?`4hz)(U4Y7wL*iFQcLE5F4R!EE1VG*$znLQUhvU55tJP z;Hz-t^3s3V&mmtT6#m-J{a=pw0%v6ZbGnxN4U)5zSAcRWG`@L?s4At3W(LOp zIth!FtRU2Y1Ry0l#z-$BJrD`dLU0DR%Fw14uXQ~0U>mSpij3cL)NayD^Rzv{E;7m! zt*N$*!iGp_&-A2>{^X$1vom?H1|FByu6Ni0z9V~=DY)V;OWcwMQ%p&|5I#~WRr^#_ zr_Z}Vi&b4?g12H9k<#YJ))6WBZK=XpiTwv<(ekbUmsRjqM?n0ziLc|A!EWB6=4hcK z?)*^8)US1ZV)&MH$C}~+2DGCkkQEnSL`HSv83T#CDfO_=SVYU4SO69i4d89% z$YyOPS4ArvZN}~F9H9E`cMN)^nsarL_0eeRF0w-Aqi>KIEpv52gv|5Y>UH85$htyl z{@&eFUDg@yyaJ3L@C>1QKKN`}a&Vj7k2gXHI6W7WRz)9dnFx9x|W3IB(`Tc=ekr77oRhEm5?XjK0=+mrAXl-3G~g%J2n2EvkcOWkmMKA-9=D zw7jt`l%ygMLk^dutY=9y%~b>^JBcwMrMmBh%IZH$r9#S!Rfr1nx&nzKw6TkH#K9xh zFB2g3;unrQBHp!3nuN?EMlp0g?!dnIGj6}Y8!wQ@To)WDS%>{wKd%2NZvTqg)t#N=}xhM$<`%BF|lbGhh?ci6xSZP0t@D$DR+4mE*vLRj*3XR|0ZtEUWxU zC2R#eqXowIcruDuVN{6^P0W6L%=SF!vISCWS_Iy8MiZ*t7-|kdi=%f|^aobZYz{ob z?$T&89#D?82Eb5v7Vm;qKU=ot8O()H3-I?g-pG|g8;F++Bu-Q!IxD}#A^xC=*HpY> z!a!fY*+E6mlB8}e%9qK`7>v)!=2yGI=1-B)?!$z20UR`TX`#WJqZB7aq*=EuKb*a2 z@-_?3IkM1-V`+;=1sLj^UIvjyz<;DJrnl9efG_Ef<5tivOi-eNnJ{ZbuAU!(%OIT= zbuKnNo$!o9TWYU0a&EZd;%g{B6tyX@tv-x8%S_{7&LF)u5VKiM&L*Bbg)$V6h95_g zTrEtSjewiW2A(e|AKtSW=*o_eOo%h(l)|8WY9|2F_I2qjb;OA!xNFE=<~A!!G+m^S zLyT4^obzh%Bb@70v$AXD z(%{W6z%{x9OS!hMF07^$*D7pk@Gv3a3S1=Qbj>&{UyIphe)Wv0{%8DGKEN_^!T1$h z_fBem3+%bGPlz|()?SElp~QX!vq|62+-Zgy=oKSd1Ub1PdYJ%2Dxb=9D{Bj_c(oGI zcI^t3u${R)*Dm{S?*QwbihG~x^6U|vN@$3^OzR1G#i5$bp+_++Mcka)_j{!`L$Y6d zCg!(GGidkbRqNnCd$Z{=Y_NZuIV;WKi$-{abnchOq&J?bjdG1^W>Iavy>g1uXY8Tq zk4iXYJmu!P4OQiWS&j%?wpI<9o)g+eh%Xx4;d>!D!F=Tzgs*afoEV&uVq45|5u@Lg z*P2e*Kc!XDe99 zZ^5--O7smtOTa-$^@{0DhZ)RjQCcyd*aVo1wZe?De|#u^@F9qHfx@;Y{MOR+B}F6b z0)C@iTu6ZPk?ZpC=vOF(`_urCFkVSt|MF246LOgMe4uY|DP29Jj8&d)$dbVyNrqz_ z@&kz0#C4pY^6(o&N*_RN45 z%A%Nr{qhpj%fPLY*RbaCIIZVW)a=NBO#bPxk8`E4W3kl0i6LQ)mk0WHvv> zu{&VX3jUKv35CM-{AB1SwJ6`eFq``o9A5tod$RvAY5hwv@eihEL5JO{y0(>Rj`~bF zVuX@{xIs4>c!voZ-&pxTeRF$#CE(X_Gp|2dKy1BZFmTu8w#hGChd>J8=5) zP(fjmNThgV;H~2fS3Bi@-a768Y~+DI(vGmHl~|Uy?|F$Y7Mq^9l~tT*D{)vM0;Cov zFi3S=H|naiYXp(Fo3xYN#gSB*Tfl|K%2*Ue#uutvwJTc}N>TA%M`c!TJ(X;qFu(|pr$-KGf@W0?@O#IcZJ)|lODX-T8_ zu%AOwGi4u};YO-eQixU=+W}U%^eT(x2--iO=ZxbCiYH=Nf(qO+LQnxiof(y>EH@u- ztbGNvzMJE~_}{~NviG7u9{}wD=xthob^v-tZvH=qAfY>^y8U?rKfM3&^`KmBxs*iLef~BO6bWg1$fSiYTW$E|V#oH-Jeg^}v zir4}^e@|ZiXQ?P}uVU)tX86yBJ}K^xa00geWZo7L4jQzG8KAfzQ%eb_B>d6P%VylP zwEss#kKMpfp8=?=qcY$SDJoJssMC&m`5wy&6G`$7-Qt)*G>KALur-_uNkR*4H!92uf+pR zqCNeJl7<&nsLUr83(!-`aV!!Z(vv3+I(*t&jlyaQNo$A5U|n$;ku9dP94?=~m~B`J z11Ot;ef%e2AJ6e`_3{7t@_#P_lK$Dg%Q27DYeFkhsRtQZe}siouRy7U)Q0F_m9$98 zAC_Ytt}^7XW7qsF{S)kS(FsU2-tYWcF}dHn_tOh~U#Lq+I&@4&xuFb?h`n}L2>S}) zc-@JvJd_BPbPQ$0TiHWoXu?B4d;$tj>#?3LC5g&T+D}Kxr*xOJvRrdu1jw{vRE;#s z+KUc%^pt*&i20d_kB=2qpd8Sp8}LEtWb8{!?XFjwi#agYGn)y4c57@BT#&rxk>Tn<_2j zCwz%<*|mvLkv5N`HnXtHWc{F&GniOIqKi0}jY?Z7opIWs`N;uM4c-#wS@R@p@zGuX zHuDp;`RXIj>83N-W8rE>sf>$44LImyYqzSMxHd+2?*rV|%_d$W_j}nJ-2v;q`^?QF z<+2m~dVmJgP~6wrU~E7zfuDMol~yatHp2)XLe4G=KuGB;U&VSm4Z>P$jUiMH3w+C* z$El&z0`IS`-TwpIq|nz(Sc+reRj^`cTylH8GmLLqDU1a>G-lXF)1DSo+q8fRYmO+f z>x_igjT@a#Ow5A=E?ESzNvA~CM4>bSTLCw|jx_x#9QebpXM7D-NhP{U&L_!-ts-xxG}h)m4kU2loiiaON*kD}A$Obd&qWY+Ai zd0J*D!8_w=fl~%7| zJ|S9dr=764seuhI4EaL^F`Fcfw2ptr>^;qOzu9&F`PbP{&ORY%93vrcBt%1W>$ysq zgqhkrLzMvx|J4$+7-T%X75VvE9=QS=p3Eg#bwl|aF7Y;1s`)1{TjsshWPYnFUZL$q z)20V(e}SZKO2u$D5m7FAPgv35R*;7A;Xj9>?DM{S4Yp-Z z6+yC_=Vz0(VvAC)nmWlO;wsu!D!V>mLTBkKC<`N+{lA1QOJ+W3Nl-cizSM>M0p}*$kCVBlnzjoO_fY0A}F8@|8 z{o{n_f2^|qFrfZBVGG)g33vuLANa3aO_sGur9$1079(4L5h~t1LN!^dn}(6TjUdKl!l|dq+v**cN1rNhC0dF=HvIKaQuN>c@VL!P) zu}^?e7gJBgT`)OJjEnEv2igPahQ+2C-qq+*Qi-SxUuv`eErvB*vbAYR3V zb0H9ud51CA>>5jTR`1C9%*l+D&?sM<3K2vYuE)OP7Dq3uT)9`VGi7m4_eSwdmM=gi<_ zY1Nsh->}8=>)7SE3*%L)ofH@g3v6FhJ$W9(8+X0_*kgO^th1;ym!VI*&eAxMCiwQ+ z#?g4L)7X^Q?ATltvesOO^f%ZDv&RTWyTVM((Hq#ZDBt?j;d&sv*cKS8;I`nMJhF_%D=~gd*hdEpS0MCZa=a8{#k58AZl9YEYZonPB zVS;0lOE@)7GK&}=ePaDvnhXsczNfCL;VG3L4fEWIG~Ny>zd`WUsWSLd!e z{*KpLg1n)4@vb+ZLeEr1OlbsBxo5)aQaRXL)z2&%R~bGKA634K{@Krv!7IQG=PXq} zpAAEzdbScJW~aX{Y9p~6O#J2BO#Y{CW1kr15~lq41<6J+E6K* zgw}7DFC2@H6H8xUG7L#q+qAiLMr;uiAeBRU96H=HfuC!WH*_#PEk`+`DT0CQa~2}RtV)Nx2F<}V_7&zMluFLM(!d?m$>@p|FjPwr>`Nu2jxY3DA3y!Br zt@xDB3djpchUZ2Pm^Xw5CVWm_hy}g`1~#7%%_l`8{FVA!gC_Wg8Hpt$9Xj7LZjQ>Q zz7FA4`@KM5d#)Mm>Hq6QPAannDFB$M>w)>(0MYOJi+Qx+Z~1yUqPz^B)%6k%7=?|FGbuSqjp^q$n~F=_?MP2VG&S zBp~N(YsOb;SSwa<#y4A_)6R>Q!LQPtn-Krm$5^Ib4rG`fCyPXh>(?|C%fNx>HJFu* zeSrx`JHz)^ZN$~RVBJ$uv=~*}A?AERrcSnFaH%?#ved}3i&4W0X$px{yq&dV&gNiA zQa-8c!D}0T(vz1mtw+t&ImcY1DoqV3Cy5LVutn!tR*M_X4*xU=1KaK9VX1>~f+VT~ zu(n8^W#U5<@{&F-$RC<>SGIB$Q?_)ey>Gy;yhw}fvQsrb9TpH5L*W}lCUk-TcYYzw z*LwjS^%?3I`40LPfk3*R;SJ^q@DTNwg`-5?{(ywMqx*{P&twLpgqU#2xTE_S=)o-s zKamjYa}M<2E@U!+a70A8g^h!Z%>gL=E{p#K$C%7}80^3Rp8}tMuekb0@|U-F`5lUr zl;jjZnUFr|#p-<>LIhV*+(Tw8?u&qmf6b}_ei7~ZgA9C#|OL}PO^qUT*( zL*@&`%(#&=JLr-+y#2WcyjVu;rU%^o50R+bR<=nJr}VZ5`k=tEv)iD-FjJDCJS7sT zmEA$l(Q|Es2agZMMqwdnq0LmQlfXt-@Zn|v#iZBUBr=LGa+ds|4!vq~AFmaMfl&OT zHV{QfuiS4OC^9Xat0cT;&>*e0DA_n-d`pJNY#IvPL>etq92iv{WbF4#zns` zDhr%xczX-6VF{>zK(M~0D~L?;Dt}wD!1y=*gfe0&r3~IomWB^o-4|myzCW*V{j6(& z-m&@N99PK!S&#`VH~QRk@ru>9{NJs-Ie3U^Z^+t+v?zi zr4LA_G|Uf@ecz$s(f5`W9VCVd8{>zH17gr^n1W!9dVsQ0gc17FFLqk`6LwX_x3>A! zT;$nC&^60yI_n0|gS+n70r9dLzuMltI*$+veC4s~r8ZhD=DPQv+uL)VLK=@-`{~p@ zqC33T7daY^<>sH3=$!dJK`K%*&eqM2>dn zcSo*A-d{2H_r9dD*CWg_&l&fV(y9;9b_1K=0-_Q_Txa;N`dD@wWr?k{hWttn8UrN{ zk%p;XT@6#T$$^#_dX4&cL`rISt zmc%A4J-{@u0NkCkioF`}Uzs_gOy{yws5bIkhHE<+ebxNS@m9cGxCK=YZZz3j(URb0A^TKG=<+^M|BK;D@&UkpAV z`SnKmZ9JWYZph0fBd&UdOxu|lEggZn4vQgYrIVf-k?{oabH-g!^_5RHcNA<=p3rp! zAHr&>m|_5?4Oe||I}{zC!2I3uie1?cb9!B*WR501>w=7W%ArDLl?6yjKLCEQjclg#=1~#DeU79)a<;A1m6m z`_d0~@pfeJVh!{`awkwJLeDt7*!S`RfIBD(&>o}9JEo7^!-_7cx#FJ##52J@d=5i- zmqGGQTaUjtmQbGv=Mx6Ocfp)C(d)SjtpFVINs-8(etoEshXsexj91Sv6h9<5?a9{Q zWs!!}=pL|)gNT?&U=R(;)3Ts{vT*5vJi;+uH;)bfb_n2CX&xnX4)trcoDNJ2|GSj% z8}$CSq7E5|TLW+)^cI?c&jwa<)2*J2Gu!>82exrvnK;XIKJQ{V{QT>v!t#hbH0(cm zU}PB*x`o?}#fr52k` zsH}wd=HSE>`^XB~bl$&pnBa^XFa8YC(<>DdMeaNX*7G)J)T@7W>n-S~_#N!}cpG5r z-~-Qg1#s{KlnD5Qslg_`(;kZ3Yt|I>F;ma8pLt>|f-=MA`Wwf>cq&*ZuCzvts3kBz z{!d$ng4ne;H&ELDT+{s*xBM@Gu)Hh;Fnt&2PFw6Biz{X|`b~7>a$uOTjC3K9MI!nG z1{aWIT~_ss8SZM^>hhj>5S3Fyyzgy$kIv?>CaAymg1~UOpDg*!n91TmcmyJ_ z%8d|1o?%g|R+(yuQ=DOjRk%>&8vul*yWnK%Yi(Ycau~mr0yN#+e5E&b<(>;d{ecmD z!ao`dT$%IyWL5Rgl=`W_7SF4K;k%8luQf~8qfRE?j}~FSdy~zF=w2#@hR*Tx<|}QC3KJXyDhh_p^`cchJA?fD z@?%fmG*(ghkol-+nGTw-y^{zmgW#-{mO!$6=8oUAJ2Y;uN4jMsnV>qyRWt)(BR+tG zqvK|KQ1<{F+lx`QvK(-AE* zSnReFK+`=<*jWBL!_1Dgu_bnLPO9Y~(LJ4%&0#V5U7&C{^(kx6^CqfoEL@4LuvfA= zL2+jDO~?l*TS;xLbvCRkdRkh3Y?@Czlnt04% zDMs9zJuNsRCFImf3RAcAn;(4kEQsYSwdsk>lh=Qh$G*0?n|phuMft4gHnqjo>8~2q zS#xG=m9rpy3(*_sRygaI(O|22OjP1*a!E1ME7+1ODMn1>sa$!=>A)lXkbi03&kT#{ zV4@pwqoU+3hP;`&i%8b{QY7Kg0;sg5XV%&Y*7A)WpFdIf+V?Dwdn>U2LKj6Vazv9qSDiMwFZdjQ|SmW2P67$8j7HG-wW$^C}%(0pIV5iW> z1j2P+e=`3l^cP4CFE-RRK43(&yTnkLI&#b21>9f=BcbjwfqX@Nf=SGo6y31g?Sl=> z-8f1p*1utq!AW^b*@Z&|>5nRZ_hLKhKpt{khmk6|_oU#d!sB7{y<%LZW;nCyy-mQFz0HG~RfSoG{gp9yN!#!@U# zvR|dr^4IlVCihx;$9_6D|6m3O-VA_YMYxCI86ske|M`g{_QDU}|6a@R_V>Jf1rWdyP&AQShNO*h``Yra5I^I|X_9^^~bE5DT@wdgGkX&Z;awqXi~OcO;#@D}?sb*X{C z2}oVKN{_;c(ju73)*yR{Z0(JG4E9P1euEqU#L`x)5tc(qcFd48CJBDFFbg7KIi%`R zyLM8oDpqco=S0tdxN-VxO*az4>w4IT>$I71e*h0hUZfPSzINa|>?hP5M25(=BsB?m z{29ZysoaC|^9!|PLP)R`t0+%BH3|ty?>~y{TEz8?`g)F2En8zak9{%SP ztp9p{|Gg4_pT++Th!aeESpIwoo|0uswvx4@e@4VpFOks7!DqRpqu*Mm{%b@$JQG_m z^Xfgfg}Fh8_j4|B5vfU`xug?F?90Gg8<1>w z@hT^yG{D-a#u;FQbL5Rwx*vC=hid;6BL}Vb!aJYRSB^h?veZ%~RxyovaG|9GTgumO7 zdTBuMHSh3GDf&w4a<4Rt=EiY;6UqdgYWQ_sN_(mB-B8a;Da@eu@r0>{5n{N{bSSoW zW>wYpj<|QV0jZ-JX7Z&<$+RsJ8Uws}yzwbStwStwXvh_Iqcpk-!$a_&-DLU@+*im> zC0bK3*O|#r)T{&gn(JpPmb;1hbz>8dqdDUNLORLbnJAk%@fay*TkkJIx;KhzP}gZx z{8T#gvpV3bf&zS08|tD9{pPr?dCu035BAmLVKN`DVXxSd`r z2NIgd*)bq|cI02OyF_$Dq@BboBb`5xg&S~uS|GBQnFS+%g0`F#m}f0yRxJw4l>svs@bY9tKZ&JCHXZ|b8N^aST_CrKSjFR`OC|MXQo9TeE658k+6VDcV~{qzKURVhi4 zAq@3(5_8nSx5%7jZ<3bRY#lO9ZS$i}TN%nYAMql>gg-H}t^0Rjc#kSfOU4N&Y|AUQ zU&)n)OwfAZ7i3HlMt%$A_kXZ*8u9)vlm!R*@=L9*?@_;Y=4ErypPaNPz)5>Uen;`z zipUy-G8ik+4e#InjOq~?cFP|0JtsYEUx_H6`5bZN6YRIANI%^5KsUb*y(y*P^^%rG zCpCt`q;Hn#O9F8X(zbOAxdzu~0gzw;wK zbJ96LZ}@-g3xAuy{~8seV&FVaU|L*$F_Qe35rF0@QsVELs}jiWOf#n1o6LJw=hOZ9 zdl*0OuaG&UTOr7kFR-d9#%nlOk?8R>ILlFs39ajKySsx=QbDUMQ2{58It^NJuL<{X zg1s7q=x=6BL04a>I_usy^wiBfN#{Pa-Dad{8i7Wv)jJBFA9byE#l z4YfN(58kx|g;y}8^gXNYWO6)2;WJ2{#s!=xa$)iXV#X`#Z_&cxc*&nc_{H2+9Y{XM z%J$SU5d=$m2?_O-T+#DEOb`SxQExdtl(=B886=|Yh0q?(An@tYK#YL*Fi{@7%5%vT zxc()l^?CkQoHqxv0oC0FzJJbD`me69>EvK<@mKQUf6d;%vRdb;24-TGbnNP{7BpOx z+h|2}05}}jA3j*GEy7{mix=TLDoYRloT${KTLyF7ADm`nzJ~Aau>K5(zvi2ppvu15 ztF|@nmw<-K(qP1JWlYmz2jDPa@Y_@(bW^->0pSL6F9jv*%+)H=eAEbtC0R2Zn2_;~ zFjpA-V(zLqYMP&*I^v$8eU(qx1ZvgNLPx-ZG3f#(Th10!PIfG9YqWa|;G~*4ZXv>7 zsqveZrQPbf){b|QR(hmzY1y|+(O+?Xf5E*WjTfG}vEjR~@ILV%U*Z5A1AkoGbp#HW zyc+jeoqeAp3ym=+W%}n~J*yHo?{G<$pppn@F{$|t>$8OiShA^bqJ|Vv8Lz29rS)_4 zY?>yfn2tfsA_^bvFv(K|`FoA9rRyf^ERdL0Pa?Y|vE>H&s3d9109jvzcQA#U4=&mq#iFpMe72 zoojP3a+wwMk7jD^^)^wy!0KtL*l=c`)9L|I{(^Gpae8VZnK2_nX>iMjZe<4OL|OJv z)wp{@?RhE3*XXP+(`K9N8YHIPw+^Wy=4wx~t>Po9a5PMypa8Dsh6D?o@Btk@D^!I- z_1)-EN8Y78MP1$!UorZIZM+|BpPei+c$Z|T+Kn-Ya49QSU2V$}neZ@Ecxh2J_hR%0 zX;5~0mPt&qfD|EfJrxH0Bu*oR*^lK%vp9C6M^gMPV`M;z5FbYaQiZJ+CF3zqp*opf z*Cw>pye_VWm%>uKdP%eCL{vqB(#xlvR3_B6ceZ|V<91@)(pkNLck0~+-GtE_35|X{ zD%?spP`zbJ#0n~o!KjwzTkIR0J9l;GapUa;HQS92AltB)n|_4!h#zm#J#!q)e>Ek|o7Mo1V~ihsgq>mC|67*<$GTX`{om zxS()8reT_5nt)P)83M1@?df`Q#{l>(x68N18YI-OE-SR*<=r-CrH%jTPr9hRX_~0U zhZ3Eok(oljl1s*QlsYW9lV@_btdm$-%54fdJdkFR_SJ=mFJHT8zFS2XLd1?~FG8Y6 zX4!i8F5xD);gweguPc;#r^I*FEUp(uky4Zfw#%lN}O1rBqtbPZUi1ek7@ z*kN-3>(ni2K~$drxF@W@^*GZO#JXIOUTXg~Gpa{G^({iscar0T~d^Z@}CQ z@FQ9ebn?sAyNC_@7Bu)uro%|e#F@<){B?9t44*tCWOubeZbwhm6+!#EmuC}T3IHEj z`je};VDb6_n+9!x2JB1D1@IL7Lpp9K)D!%%3Y6%x2FQ1IVmZt;=4Ogw1x`g!WteW9OJ*f-FU4215kQ8Tc zQGp9+=p{1WyYFzG$aEIyToVN7N?vG)T4ga7>|Q>sL~S+m;jS8gOo%c_kAxN^iK=&p zZwD`|qmyo$a?DaNaU9s}cbymcDppiOw7FKwc(pU`0?rYIcbarQg`)>JIyFk=WW8^2 zaY-eZOF%oOoG6yBy37|C)ypzx6g)H1n|TD$z)F|ZW5!KEe1gYiS=5ZT3GKvdry%mC z)s{K^Zdtk8J|bvhj8PayV+=hfS8mcP2A)CHz#{6%u`)fuKX0B%;v<%8VU5b#lqd1DJ~d{_EDzyg zs0!J%0Xd;Cm@rGm14TQGzr8R#k6X+F!{q02yA6Eo{}J5%qt*Xvlv|q0eqe!lY$2e#V zN$a3>RV(a^VDYtFIq!ndbD~J@Ej|Es4ZGCY^c|H3sQeoUZF9verFL5{=HBs_7`tJf zF=>iczWFqLrS%i^W2Ie*?TQ~a^ocz8VZ4#oqN32#XK?mh^n+w|EUD2?gHKs!BwOKz zpqA{?M|4kI)& zUdp38NyMyYsWa0cAaw?Ug(X4=y(L+EzyGekvMQ{uehzp_0H*Eh|JxG$I&A-X^Zg%) zYiz?5Zxx|IsfC0M#hWT+8J9OOyn|B&lFO84plyA>qw_?QaxYi7r!f;7 z;%xqXmv?>5;v4^u%TESA5RT}{0i&s!XH;wPZ)N?18Zp}f->}?#*5>AgWI%& zV%~oA(GiG^!(x^-)_!Rs{-PXoo*NKTRcJ^^Jlcc~sx(BzXA@9nAypU#XlGU248-m> zPo-T%^p=xE4$n^oj25p_rk1dzQ%=YfS%a`D!gtrqWAmy#5y40c869|`K-HGzy$M*G zrs~!!Z*ev93GZBXNv>mPY;ud*cy5R}+b`Eo_)E&YZ5rR=pZRZ?Q)X7`ifaG(5(80^xr2C$z z9amu1g72B8(uLet&O+wj6nYp~La{7g5hEGi$S zDY=!ny-u~$uXGAQTNyJdJoAfCz&$;ZD^-5miO7||PZP6Q*+H(IKY1CIht7>SKf&;& zFbM|dJfmg&-dgj%eJE?mU&VmhvtnNYj}>lU_q}YLNynZ){G3Jh@=~MxyQem_%gW&@ z{1YO$)p)(fuXGBJqYKR!>tn@N{ST<;U!?7z;x7M)4xyRvTbSb=r36MTDKKgy(jSQ- zLWHlO6BS8VM2SC+Ub&hmi9t-O3i40C$#n&-fvha*V73PhV@Q3%4@?aBcWC{);O<_w z7x}b-$~wNIfdh(X79V&k>bH?yr~xtFwKndnT+>$A=H~#oB{HIW!pJ2DLWFVu2oVmx zV($qNB+D6$$;mX_h~)!9gtvhZVF#S4nfSj#gg>K$2|FIa%?PqEJ%)GlQoA2QVv~tN zaz3D|O%ZsUKZgj%zpxbh@dEqdwm@p>hc( zuE<*L94QNg2>ZS5X^O@d7@+wpMA+682oZjzACog=1iF#-a#P{8^`wFW^f z89fvjwzRPrAO*6(l z1SL_pZFJ;sGP^#=tfNaowRS(6syg$a=`g{a0vp-qk z;}1|3ZoklxXl)3ho@_ucUJ`zL*(m#fflKzF@hr8vg>3uU{r2`2Tm*cM?Gqq;rib;+ zOdW)?P6K=Bq(LoLP+?m_@Pd#s8NtgVqWnrphD0KW^o!E!`7OUch?P1HXz!`O_YXx? z5m#0hS5-4mQc)BYS5=i(kTg(Il#>?KHjozk6W#J&JIo6}Lqn54?|OH0gMKLiJy+A0 zIi)56Eukm@t-t@!wiVyk7S9rk!>*KzLmv3nN4dqv$G*i!$VXY)SVh6w(OOyCI?gB7 z#<1ANQOZjwwzJm8v8w2UrwaSV|`C>?Xi#Mlrb9`SFq?emSI*FB280{D&a{|w+&%-*`1IlCx1IhdF^J6qXX z{Bos;;)Mri#R;MocqP!?Gu4BRQ&n@V4vWxw09UigRo*97tGrOA?fwFpGQ27HBgFI= z%O!tyBd;Ir9YJP(|K#3*qswa#MD+c7M@dGN{lGEAlOcoQ2*xaCwV)YZaq&3aES`k2 zcq7MHP1?vh9g0PNHN(`$o4CxO(O6zx7R0hcwne7Bynslb?FCw^SFd8%WyKM<*YB?S z!^i3Lmt#ZNj17x({qL6L#cmINdn0e{O4!YEHv^B^-! zG-2}WP|1ZCaPAO!n@V}zeSYq3wv3}V`9|m|;=4r$pI%gm$dsw+7mN^_EhgBCkcjzv zAEX^_ADa|<`u_ZJN7(fudx$$cHPQ!>BbPA6j7$@<`Dl={yW?~a>1_wC35sX{V#GEh zE_oB9+dGOr%E%E*ak-w<$hUG*P4t`DLDJBl%$c!Yi_&OU)lBw?yy8h7i5$ph?<1ri zyCj8PcbphoBu6}TykQ8Gtg@PfpCb_UZ1N1DL}j~3G~zw#U4={XL>H-@fWLi$afeVk}cA*Hhy(jc3#^Bs~OC+JT%d!ALD z%!L~q6H=)vXDGB#R(vWb!ZAUS0f!g4F`H8jruASa7pIyM%J$5omR@gU2iebQK@$?1 z`lWA-b5j9x(+2AS*8O))F%bPdd+N>)vc?1RM!b3gXwe*d93_L$V3rRZ1lPKDzY z*e%_h%Z4~`^NpVT`^2ggO7pE8+9T5@**fKj9HN%p}!jE2Ljb9)9R1i6~O!4gNlZDyH~_R){`-w#)}iH~7|c zk|?^Vo&u8Z*s&tfO@7OYcS^rWw(Sdb6Bnu$w)I+$1Jaa5Q&^*llUH&vetDE!$u7Y( z7R&;~Hv1LWk_x%n(od9LXmhI&8;DWw=SYO!_0d^n`*!xob5)Cek-hPDu|O zadV{br;g$u@k{gBMCf`nwN`~jB{_UWk87D>A3`5QSZe$Ykz}LFH;1e_sgd6>3isp< zxK#y2^L{w0JfCfi@S?}k9s`#oayC9x;@UK$$538|xt;xBsaw*gbi6u`D44fgsp6$C zG0Uup_`7TO#7Q>uSy>ed9MylIxc=QS{pT4=jJ!Obfttt+<(~&+Up%`d zkiyGG%)eyi!o37n`ZFuHObgvyFEup)2`U4=0d}X--j$|%vf>0MeU+uI?S!S>c#_Pu zWo8ooDpz!w;oE}xl6{6exr45GeG2JWR)&0n9*R5qFq(g2z0Jy`m9d7R2tx{C={)R9 z-s29=4HL%k<)k(!Ji%uQX^sHH4fWJ-HTq2cwnd7 z%Pl=4&oR{Pf9a;)S6yUGY!pztnC)h#%Xx$XdF-J%&(LmV*({T#fh+7KGSO?>@Alnt z#yZS$sw(m0q0DQ~b+g8^n`z7^!EKT-fz8yIO7MW!Pw10q0&{HZ=P%#3b}8n9^*B7! z$0#5Cu=Tj%kqv}|x}ND{@(Hy6qK}E6>Eqp`De@8cXZo0m?3z>%=@~f<-hhY+fM)nK*>UFl=foeN)MVZuv7Zr!f#QeklFUl z=GkAg3vd;uulG+L523nb-_{Xrfo|I;d9PRZCDifx=ryK+kO)nml5GC^Ajx z#Ktb&p!OtQV2COW+WqjN_vui&Y)?N`eV%cU`4g{;VAuHc+eT?^j_>+ zQ-hhDb?Yo4XsfMi@$^;ntb)I-2wN_c@?_bP z=u&z#P=lVV(hCVNm)UK`8t<76X2c6c1VLs=-TJ2M1bH11tjb<3fux9H%lHD+`z*vf zCe_rA;b?_hL);@Al~bxOXlY`RpoT{X`(XO?NhdqfE`DDK)(S%|ZUPia0yu#GkZJl) zh5GO9U>{XR6?&9V_#63Thy|2{y+&U;PWA=kiK82tiGU0D&Z#w7rK{Q7AxQrm4yMA( zM*xEH*c1>1uxz`=$Fg|$Gc(i12KSeF{k$=NZI!xt{6$piN}no$?pDKkVcZX5Mm2a9d#iiqqVeuqYslS%M+&ZBcRPS z7@rN}DReI5WT}}o4^8$ou7J8Hb#gM7^pmJRor&fkIF_qvb%6;kJ&)56JAvGOC232c zvzcVVxKMeT0Bel-Dt)+%0xl0TG%a4ZzLkf~7upHsq$1z28lCrGWncM4Js^$S0)DVk z$)+hQsArS#M=sZ;5r--3MlF4kV(~Jue4D^34Z3FqedobVxSJjBZ--0e=pADET_oWo zC)1S%-0@a`?;oDv{!Q_I&#C_9Li_6XJFPR4{D+4;m&b<{mq)*cy!gI?%$bduyqX!Z z$DEm-shO>Kzr2T?nXRp{wkyAf%(0yjmRJcJ3220=x*ymDSd_`8d;6H|Y_O)3$&^R? z6nh_!@2Sl`Ql+r44Ry;oe@Aw5nvtCE9T@5w>VoVW6Z*hX!@^d@QU$L4`^EMZ-)XTd z&{iOUgqnZ4!2j!ut%i}U>wozcRqY(6lmLGmBL>fx@y$I$XNMNBqf%Wtxi@lt>VZZ= zesNz_r>kXna{HYmR}9#Ex_+?bhY5BOoAEWem}`#-ln?XYWL~c9w_UHT`}#b9SA|so zDe>53jCqn=WgNTm*WbrkF;oPpu?X+`;lD*@N_>kJ@i;az_!u) zP*_1^_@dkkALWwM6C+MZaVNR5m)UJY*!e~iYv#X_Pi~mspHwb7z`xvGX&}t#%wfQ& z?PuB4-ZNUoYg#4E9hPhGGJPpuVZ%dM;o)dn{~Aj9`o^y8vmIVXfIOXD>nc)@(r^X$ zDGBNzMd6kdJS%-4+1ysDC|&e>1{Pbrd>>TPFry16X++um$?#bZ(offcsXA6g<-99< z)QAWIqizrifvQFAzEOs0_SrIx7U1yexRL=^_*)K}REskRht5r|-GcINY-j5o8y`qL z=Was!NGy@jC9)Fa5;(mke;0YF! zC900|J^2z%!&Em9Lqocp}ztU-FJ9^heQE7)riLmJ>JqmB4G(O z5UE|uPP806mk|z*L-Y&IF}J^JrVI`NXyGC83EV){RXLeS?4E(}M(>YtL~^vvIJVb${OyopvA z(PR;x=diDs_~3Q<2@h9O>*#79&(F$nUHwT{y0+OG{Q5lAMtV=Pvb8_w zS9Ucw2SDKFIGlWC7bm5&3~P zR>)4~CRs9k48z{!FMc1&)a4Z&Bz#z_=MTSlsxHD@q3r$k<?%;!(1V*a37Ce-tHF+K7c!2_+Fs{~e;v$za?)eZyjp#q z-)`c83G$rmwr8bT#KUMWL>_jg@_`P1K{Mt$ zQ79)O?s1JS62X0bK3n(&IY-Pl|0Z;@)hFNGfp2=|~w3C<%LvA90y{#ukh91QC1D%6y<=Z5w5M>q4rgGWExx$Y_nYa?{ zMU~O3qyzzVc;WWR{tRXYw5G4Ra?0sslT}3DHe6sV?%vQeIfXi$L*YVAYi>LI`e+x@ zs5uh|+_Ik6uKvGvg#Qie$O0L?!q0M5ybiIU(!lca%8K9gs=~3WX3VwDK#amf=Kb~K zIot*g3>Z!5?WQP)pL%&%6_beEA4_m`A)OStS`#;R=4y`9XUlEgkD7b*7l>Qm6jxv# zn54LAtu>U^O|$A;x0&J1`bd9agY0n5H>*PUV>w7{jYd>i7S)?!IH+b@)piLWOd)O@ zvy!R4fxKX~Zb?tWlwgj4&1;u>*|5#pn2vJZ?B{EzwCm+eG+7F2?sr}W1Z4TfM5XY8 z;P4IVUkx?I2|Ve(qf&7@zwNLYEmzJUS@`1FVt!Q7l3d1NnS|O`#35j<&7hZDV6K~( zD3RhJxcspt6Ke5%)94lPo0w3Fwq8_X+dur9JyZf$YzA-V-QR5Z<{E*%6|M>ElMuz} zyG$v&-y%SY@g(^KT10A#eCZY=h!jjB>bi$P>$#wy$nprbcwvR8Exh0lnI%yGwzF@9 zCHQN7w?BAF!~&f@1^E6!t*R=nq9LrHW}qUjCa$0+t*G$-k5i-}4^;j)oMM%YQfj_| zlvk`xXqiE1QK!NGLMcK6lw#QbMk(@)CkH+MgBO6gM)B|G+F$a|zcfG^cFxOUC_WQz z#*!TcQC0~;GRjt9opr1niO^`^K5!^fM;k#xctV*c5&6axphy)%75V1Fq_8M9PRc?UELN^r>}pCI8ELXrpyTiop9hxAcIIG zWmfBI(0;U?SRUUVFKOkF&Le>n}BOx~HjD5#}QXOr8-ot`B(Q$MApQ(ts7O*oQO zV>5E@58aF;<;i*~9A)|N`02`Rw0Tu{BD~sZP4GwAq&lA4_iYe9TPK#Z@fV)Pan=X~ z0_H8s=*G9?VMx)Rm5c5`r6zB<_GY!6Y>gu}MFgW{B%AETo7P4i3%`04+Of)o(Cad( zM@6Z$*G*Ij1%JULG6v9R&eL0lj?$mJc`5k9vG_cF60qh-g}pZw?`mtq@ivKV$)?A0PZFIEvk zbibK8oF(Zx;v3z&fy3>4M&cV@pC1@=qSQSL&Jdd;!xJ-IQXzZdTZ>KHucJ1%gF=di zcN1ufab0W|G7I5FLne2+Zl&Mky&Fet&%yE0Sd}e<(@|wl@Jh=rM9Ig@*+uTY_zGs+ zDeO(9jtrH0_#$EAr@#9XDHOJb3{To`qR*z zsXe{x%Qk*Moj5U_AT~a#UgAFc=2!YUmumQoa0L;O9YcKgRXX!kH1W^hLcfZ~uZ>E8 z^Nj>dEXM!!od4lJH*#@s`t!g?$@9YZ2w`MiH~Mr#Xf1^9=5d97AVUc|fYa~6L))^~ zA_n_pz6r*ch$D`G|JE?o*r)M+7v3=1KPb^s)`g-4jX$iTYopzw?LYi&0)$A}(t_{pH0s!RreQQRa6*z|pDa-RE`Y^%qy$&5;QQNs}Q@JarrCa?`G? ztFYUJDC_Xs4czN-tbW3*NMYN0xV=r(Za0(#6p=%rIhsAik*s{NXG%TfaNCH&S)HGC z5zmJ+Ys+`%lIth0zDmhtP#;>_5967_BAIz=E24RF60r}&RDoQXjz!q9C4~S zFP3#aGC|mP%dsCLuscOWL*LqFcya8;5v4*M}jcLrrRYV0#U zF*?ucOhr_Ya~c{D!Eo`Jny)sfI^tEJQDN{6yoM@5(R9@Ky5tzvquD~|9v}^EXKd@_ zM|K?=8X|^&aD1rlNQ6xxN9!J57hp9;Bb6uHQy$RVlN*w2VxZ^I>2tDiW5`|q6Iw#W ztT@3(7HicTjMRdx%=s7jLoAxAYl}LjpCD)gp!KwOlF&mVz?$^}n zLPkw4+;4G@pvGk_Pb3W~0=L+jc3fJp=CQ!-u4F$HtY-^joyb4G4P0}4$W=|$kg!o& z1zQflsmbvxif)o2sX|yUY%K$lyR2F_-GK#255Q}N6VY{Ztmelh@Y{{_RjGgG(g_|Qu&jV(YgW+NFO+q|DcHaKMv&IuE|L%-(-7)aC{WFQf!ivbru!r zEhmg;G|5>yF(At#J4R+mM^*;7u^%;|#HT`@{GN&r6sVI(#-iF=Tle3edVhQW?f8Bh zy^HpxsnifvoRGo*-JHADJ}I-2Xis4fBRDI|Nr$*no7-c<>G!3(sAJVyBVEo>WCnwM z!Rg#2suM^m*GD$tt@3S`gV(}u7zI#Z)f@ZWxK+p8R zM$Z>C|6 zJmJ5`k#a}77s}4tYYPaM+CUfDXDH}$;pvr0!@;YD6DAFZuoqO@#uTAS?BPz1W#l#* zADr89#8_B2cX|4wyOC0&j8(@tE-#v4E{3}L_d~ssMMiBXZ4Yeo6C}__+$1pm3T67z z<|9|%Kqh5@h{CHKiu$P+=YokG$<(xzCz#b>L9Av_X|eI}2&m8~A3|t+erv1!gQ#Fq zKov0o!tT|7K1zOj0EmiP2hwU#20P2%Wm}{q39_BQh#_Z*WM3Df7Pmu!CWT3W1=U1@ z!>-u-WLE~5R}cYt`%lG|3J7H2x^5QcX+OqJ$J%`PI>EWSG~nsj;A^CJ;)lwlj5&kB z=P)ec!{KG%=Wu5_nwlH#PaVf%+rLKM2H_Lk5cXo^9`hoB`f`t3w?auPQ{pCG2HLOFUb9AE<9I<1tzXew~R5^giVLJ_++ScRbTa**|VPu2zTZj!+s-_PRp zu6b=G-mg>_o#SEUU2q`bFPIjKqjX=y=HmV|K>5-L%be6lR|qn(77^-F!I2 zF&#zl8cCiW6EY}sbe;2&z*dKP=0<~cPPS`)hv;Tg={;17= zbN*Q>e7_yU8jv+0uy;=jBMY z?OxlxdF7FGzk}|U%1~wO>vcy>OxsS7J`g9B`kgx@k)X5)qq31-KUE*eFwhZni~a$TdHowwKO0=;WhA zAhvI?Z7)}^lpwEGr6H|e6n>kqzd=DXM&T4p)XkB0;3<$*7V(j(7Jg886A|L^r3Z&* z8~N7;*{~_>G6Ni`IG}|85E=A)`F>~pgO$1!z?Bg*w?@#FwiHu`4xv815zD6@Mw92; zC}9|HG4)24)r7T@Ye8cEDkH`Pc88Wqh`4L0nY}t;ApefOpiW>h_WqwBull|@w z@wquF6rGaqQ?xXw_v53s&9c7e1n{MZ?3vs17=219N>%=#T!|rQ}{W#8rp;stF_j^gcMzDm2QzRp* zCVLCqo60-goIpF+(ZYg48$ZY9;={C!XF=Z_E677<8)&-wZ@9F~DHdU(InF)K#T7Vq zBQy6hKM9;s>@s{n(BhB(iNZ{t-tqNS%Pvb?54UIowtIe^Hhl^mRpnMXC;$$|nX1q+ zV&|oi+?a_!>FiG*(Bidb5@in^&DbVE@*aXS-6dJ?m}P_6q-9tRwW8}cp<<_)8z(B! zsWQn)XJ{E|P@-IOK`chAK#IPui|^NPPOTo{&!HdU2*C{<$R!`+3!;r#62t4JtmKUo z6vKcw);JbYUkjpMR%QlC+iy=maTLCN zx1;K^ay%&##Z4~bTi5j)y$8SD{XQS~XTbqSk^X=EhdnpYe+QSe1ka$K!i6aEsNLa? z<5AxAwm`O}2g95x8I$Q~9d@zwKb*!KBXtpw!_iJA9Y|kMLZgZLr@5wom7bp9`TVx> zw9N_jH8oXRXa-zc>w z!VJ*A+Yy74>pa=wm+0nM!TE3}D=C!YkCl$Oe6SJx+s4I4c}7EFU}7u)K2UGjfMkfi15Vz_>sjeb$x(qS#SSjM0di(X5Pv2g9GZUR% zilX-7Y#JvL6NlmSa<9w7hQg;}Y>IaJ(V|YfGi-$U6#;JtE8+E7v$z4(kX;%HJn-)r1u%OmC679{8MRdeSsh9=BRm45p{o z30dwrDyQv&8&=a4hIEW`i4bwGPT{pReci)~5ASNCflN zeO>xaO?F>GUIal0YD~r*WP_HDn&_DHZRyK|k|&Q+k8>Z6heeS|Z{o)oi&mEDGa-Y{ zpyMV|5~fWkG_<`l6%ibM@I6Y3%Mbxjr79t9;K-LBpSr$ywcHFJ)Ujb_#SGvsjkFt| zdYI4GT7e;;>HF&!*XCsy!)oqu2nr31~Oy zHmH@CD>YG3JKr{VUVHhK@`tuI$Wq%cGYRXwcamNcb&Xspa90E?M#v?LB~K{|Z?i6L zS_+WmGF>){eB)jj>lNDax%lbjdWQF{FUXf1ML=vLNap3YT%X2;1cd087e=U2cIAFq z6Xd*#J4gJ3K5rt1(j1oWPjqy4$(t5ms?VIk>HomSbA#v196K!mVaKT|4hwSSFMnRg z`8}4|WQ#-J3Ftd2z?uBd&*LvBNl&qd1%p30YB&=fzW6pQox34K+<=v8B!Vgxm$f4v z9Kk=*P8)u}_hXpER^apdx2=&FC2N|E+wyhhwC6i}L4ox(FoJEN-~cZ?S`4*vWBDLg z)NuG$7`Ai^WU(PLgxruJoPuAqd^%0^?n(3I=Sz4uzrZoFD#y$|V43-7kxFH`v@`Ki zN*(R;f|ndMHm`j#AtK>$B6qROpnk+sKgqacrw=Wd`-qLGmGxG~w_J+zw3li7{goi) zcfZHEA*Ampj?&7^pDpcwbkMZs84;y}IMkq)@qj4i+#r6W`ytfS>ZgOAcgqS=v4@kS z^>2<`8Cn;ebs}@FBuf&=`q|vj29dWDv^o4_ zY^vI6X^=CGrB>r7at&8r+CefGWwE89IZQJLF~b`a=n?UeIY$f+{P2i>Mv`JJXRvw3Bui=6i1=J)CI8^^T`S90}`=cg*14e)tN(h5LFj1$NtmC}e(J0{7((5Y=l?Vru z6p8gp6N_jXN77Qak(h6f@1&TC%O=dN@_??e9&Wez{@7Uiel~mK&B@~~W*78cf|TJ{ zfd4rL6$>t-DpjGpDQH>Oj!5g(WzaXQW;g6 zN^jf-c*HO}!K>?+y&9Dc->2Y2+bE7H+S7FJLYijPdXSfEgfZ=%i~84P)aYA-FJ3!1 zQ*Y$%6Iktr=;v~E)4juAL06C-0WrTcRl+VkOVPeaUTJ+RemPwdhRefcChME_{}K0< zVR>aqw;=(7ySux)ySux)ySux)yIXK~C%6O&5IndBg2R33?wQH-H`6osyFc#puzCOP zbL#BcRjX>PLVnJCZYy7y3a)&umtAkt*Ix_?=SOs838AwBRHs6|c@hFbl=z{o+nFLq%%VjBYS{Y=&Ce6--o3&LKVL9YvS! z`+l63m%s(q>w9Kx2Rpieh}kYKT*q-pxv)@Fe*=*|TuI@@)n^NqmnfhQ*@I51_CY)r zW-Z%X?h#tX-Q?;!=$F78+kaLx>5~^$I01xd&j1Vm=fw99>;5@!N|v7lOq_$uu{La} z=DkA*;HGw4PmI{cPtfa&EH&q#GT)ZTs+vu`2_WF}tx`R2oWv$j zt0)EWJi544_F6R=EXHl7DuRUi?q9RCiQu09s2rOOiI7YoP1=Lz=2E~Efk1*XfZ8$q z7#;xZLVzipBD5fnK0w6q=hsJAN31~(a8~YseCjWX+5haY{zgU>w6(P~H~uvq4E`m_ zqS3I33?nPR(_Ekt#%UxbYU1HjP!IqImo-u&nG{&DUd;d8BOpx`FSOxxA&P$9Xjz22 z;N8mTc$>qxpOb!n^SJ8zj#7=8E`}Xi7D|XN)i1mh^n0D&%t?BTa8oUlkuw##*k)S@ zDuxb&5Ny!^o$_U1`)Tgtse|*r_1HIV+lYE!q6jEM%bNYq&J~UIo>273B~`~=sQyN^ zRXk>6oU|%2?vbm|XJ1Z_w(9JRUIj5{WoU ze;T1*gYcd-cd}xR9|RUGNwuhKR9q!fmRcLehGs`(Ns*S?0YcaP`HZNVHfk7*zp_Cv zaP+-H!oSQR!hv%^36WnCxEZ6Bl(KuE7|lRy*}Z#N@!#Uhjanel&Jg|_~lQ?A}<^jnlIo0V*p(A|Mn~VB?@}e9~l5dK`URs ze5r8c=;=YOS{0lj?SXTmg$N9f_(W)vZ&fKxzB1@roX6&M@$s&3(8wiEkzZ;|+GCo% ztA*6v+tUZAHkcU`#lgIYPTvqgkwfa3&QO1`KP%Y%eZ%Av3h8JHM%855^!r!<1E7=Q z7EIysCXWUdEa7aJ*k2xrS$MK-qYZ7G>O2G?WP`-bj_Fl$3ut zVP9dkrXxaWkEBBKM*LP)yp6cWVj`jwI@xG={a{|JtnK<~CDL|q-f}qvT9aiPS%jEX3RzRoTtxy0>428GddQJ1i<>;EXP9A~ z`g>AqR^>A2<;N*u{j131Y3iX$BWpqUsrUc^$Wv3!gYE2(|9HmVI^+wHT2E$!jzpAql=UY(ba1w zlHzxTi=trL&FQ%yvVo#7Rtbf_Xbm^AEeF`x9GL{sR_G5Y3rZh-2cy-U;ngUqfS)^X z7h6XbkPj`XQRupCAXDe0VX!n}rLy2tU7`g#{>Gq)qAgNDWn(bF0opCJk0Z!DIe{{8 zr+zSaRZ*j!N;cP`Z+7l%Ev+jLk%wr^x1kbqg#Bf%O+IlZKn17)A!jQi$OM>JYp;W) zk#QjhCg}o;KIGfV;WC}^;m!)p1QXZH673d;4Op0@n}1LcduI}yNUWbbIOM$`uHaI6 zOcKBG!IP?<8PEEok&{MxJz@DIbrs=06^dsh@(YfR#{lo8^%JayQhG>w<3H3^jKugcWN`x=_?A1sW7-WnB zdvf=3OJAL60)Qob#oUoXe!e0m=V#2fhb_tjeMB$9GL7V?-n(nswJ79uKzv?77vfoL zOf-|7m$`z-erjaUSij;~rnw`%nr)fv&VskY?yXB)RlekJuI{q??$k$XhtucVyS@fA zjT7|AF2RO0^^QcGRP94BLiWiF2j(*R1&SS~-8c(NLQmlF?gdcAPrS3QG}*1z9l+*$ zW5n*TU+5hYx4A*`Xo4d6VzhE7t}61kEg)&u0lJFx4qI&kSNKOfg%6xwwm-LC(O;tZ z?%@0pDcCzhAJz?IY1oe52MIGZ*S&Y)h&|zoue`;2w5KL8?Y2H|u{2MP-8A7;k{=*- z+tW2$CSR~)=qSa|5t891eqD>Q;q^7V`_plR;vUAZ2V5urT^jwj0fkBGJqvv5p}Sfc=&L>py4F zf7tK0j7>n_@ee{kwA>$hRVC72hczDan76Cb5|#3khkxRT#<@Aq?oRikjZ9-N$g4mW&jBx(1 zpkMO`o?&w1M!%xwt#Y1XsWr&hvZ2UK%-o@(3x2&E@N1=LzqFoZm(=`5q^TSieO)9( zjZP~s{isMaWBb9p!Y|<-%;fWQ+>~Om(ksptb;3Yx*!I3vwgZDE-8mjF-g5-hdgcli z&!1v4Q(l;`Wx$=C4=}=iPMd!7iDRtone zR9a0Uyrcfwg*L5JYZ4$r0=2%bxSXCSjVBhpg z3FJA7e!U9m_#@}|siwNCY6VDRo+R;DJj+J{OLa0vPgRkx3QL*v`S)sz#o2HovqOh$ zgly9s`$wT<-E27h1I}Qm(gLql7fPRuZZsS=p6_2s+qU=!BN(sU*h5o^!VIYy`_=>_ zKTTJRYtVs?p(L$6^LYW0_C#)OIF5@&*<3+ix_j*W@}k}XoNI}iF-^dWG6byuoPqxF zqW+wLQV)%T`_aLH^rH5ta;n$DhU`Pwa6*<(Mo$5dsWhE_P_6c-w(wv?gNRZBmwV1$BJZaVH<_c{Rm6ssi&t5cb3MF?N5SE6+cNX&u_1iKGBw8X2JH^)J{) zeZgKV ztV}_xuqUeiO@>4tTz-J-+9B1^cH_)(f9d?U_OS2>lD#RICYo%TQzFF88F4HjSy|rQ^ z8+UT{oOEnS;(c+B9L?PUsC@XU~znrinCh zsEN~aT=O1SFUpb2ik@&!MaMl~ z#>7c`2oCtxw0MBME~+gdDdrL@?$VL#5I5nF!P!fWzkg#`TgN46xJc04h7)J4VOxZ> z>DrDI0rx6^xNG=2J3y$?e8I%rn6KSe6ynKNo{vlqO}bn0!4zEs26V;_R}m^O@vs~} z;wxd{tLkokca9Epshvh&W5~x*GeCJ38r+FI?F*gi+BKclS4V}y4K%j9W;Bi4MI)+Y z788Yra`TWFixzFN)m;akN>|B5b%WnRp#;3FmEJbnQ_ZTgj|`!W`K3g{D~9W}t++7K~P%m69OhbGJ2Bwf+Kzd*-$ z)|1|qaQdNz$))GZq}9(I`Xi@4{lr_Lgp@_T1;}}wvCS_sM?A^|U2C3Ij#t>^tCK4D z0m8O1o-V!&wmNqHZcK_4N4_UXp%H=M&eY^VS&o>V|0j}vk$h7>MBl=4Sm#wf0fNbHoA*qu!kdfpr zBQn7D^5JoRtAvoiU0jJlSc!?7i#O=qQA#r*;6ASs0!f2HnduyN*HES^R$48`e0}Fwx#|o-97U z9zO~_?#GDUw1$AN>F~#_+8k`WyGVqgBO>C;9y~ffrjjcB?}`LI1at4M=HZ4||Jms# zGql)B0xXIGKpFpnl>DzP`lq1oZvx_XgEm~`NsD+PSmuc}&rrwd^tRjXF5a$pfZnn990?c-_C-6R2Y_qe zpK6gA4Z{KB3WEjgIwwu5A%_zUzKAAMkfWqT)O(~+X!AiP8qekAp@t1V3`G(ZSRxQM z&52Q>MC~EiNDp2Tn35MLVBklCNwO|GG7g(b=Es1a+$ME;6Ym+F7ErNC(rC5LTH5x% zCLZ}1$L7&ZTQ+jsDE`1?sfAlKLL<{l+$5WbZ}XkEb;$H^=15@P>ke!9SRz)*Yt)Rl z{G3YWZ{fL?nsI1gUc<}Slu=JznjeUVFH7{)g{3YuTyH%`GrkI=gbuWFMJT53EmDLj zEmB>Rpj72q)&iDlMX$mO?tUoPuW%1@^ugfM%x-u3_pM(*nzv&|T99a=3osHd;CAE$ zL$;NoCZNr! zc5}7J$O_(w;|TjDH+2Uk&Ww)xQ|zIP172R;T_4zl^Y;|6D5)*(~hdk z-oXoQ#hL)7M&xQ5Qq(Q*;D-2z8Hg+e`FDatw?}v*N~*EM4@HD4SEY~QPunpiwv`;L zoFx5oVH+RRpdqotcggN{U$ zN?|C>s^H>xPir)%=0(_Prdj=+G;TTnMj8hXN#Vf$oit7kAdN5o57Kz-%1TQTz+PVg z>o24k{l*klG9WXk~9)BR1?y30i7O+>00QZbEcD{dNK(#uK^1M zLU1i<@%(s{byV`ar1Z4f8@%L{%xyvO08Bcq!8b0kkf$Ao1t7HqN`hws`Vbf&9Pc0O zk34Gd?w8x)EqFy$S7HPL_z^?EXZlyvtluZb|0#g`l`WnyX*16UH}ZAcO+Se#ER zEh+hd7#uf+f(Qnw2*Du?DS@J#z&=82Nr)zf)gdK}2N6r)p6q@2$IX1WhD>Ta8@(~c z21d@F^t%1WSU?DOvaN%HBB8Jrw_OrVX!B~TmwPk(BBme@lPD3-zPO-B1}{J@h>K@a{velP zSTN+?r*eJHm?(jMxrcl3Ty|GFq;XNCO`t1{*+(jLA~Fc}QJ)G8CkZq8)e?URIp_5% zos}brT*-kpO7Jo*0Ak6xsYVGzW1q4*b>$f(eDn_c8b*O4( zw3NOQF%lfo^cZow6xk_ajEB`e?>s48Lm_4kIG)5pT^GNVsfqiW$jVb=)VhZ(Ttf{f zNhh01BhxQJe<*oE!Dtc)XZTW+Gf;)X8_+dirOIj-O>iZnlRB=%i~o%7sOW5%sFV1l zIXZ*7yx57bP+@pOS+zgR&Tt-|P*N^s2s$GB&sS7IF`c9r;FF33=|0HG>1ZYwAdZ_;eO57VedBHy-wI&DIv7AFNx%H5{DKu#^k#>V#k zeMT>aad|5f?CrO#y$*na#`*5*?QQNmEMa+JR8S>=Be2&B4nm}m*-na@r^v7;5lP@j z7ZhNtGWa+(Y{pKy(-{B>ArfS!L}ds;1CeGAlB%RNjEroqg*?uTjINbRk54!b$NXH( zV7i=R-&L?Rg&bXXvTzVaFFi-!(i@7F5o$g1bDCak>>GMW7~H%``!^~<(|XrzQtJLO zm+x)+j9St)^RaA_f;~csHT#+k#5p_P2yUV3)MI#uywC2MkEPm)IeVB4lTq&CS~b5< zdryBxw0dx@?TX%HXx#Ope7$a0&OxD3(*9fn@VM%ycWPUhcc=p!i{& zZRdmxuodW&y1)YhQ@&GHW*+W@96dSGdPI{`;Q<{YrUNnhlPAF>jI$k}0lfzUlenv6 zME4iZn7|L-&kQ&gbeCcw#ri1j@lahzOm-@j!jH8jY!>IrCKKbJiZel%oD zwz@8C`4S&##4M57bSCsEkywi4s>azD9V_hDzxFKWRJ)!+@h>Am0Z3P47Xr<^e zFTVU?v$5Q+F%|GmV(op0^FLr2Ll00V%IJ2%v{?|vXEw?seO!u=u8S3;rkFI$)&*^? z8yUX>;MiJKxLArb%nHp9#Bk*W=Im@kwXodzE*}ZZ3c7?}-yO;vVG|$==?0rT+T$^e z&(KUbJws;b=4rl0eTUeUI)W@hT~2y{I;2k8OARx+hFG9rp-v2yk|zl;gH8DKzT8u3 z7~elj$TrL?1whv((G`4*5V|JRs5w;da+HZ3Y}u_at1h6%A)WcjIx}j*UKZ4w*!vR^ zDY_KSLNcu!>HIF8Y_d~s1ztrQzif)4`K9q75MIMcA%tKgEvG_H6J*uWSZ=1LWMMm; z0ivX2_)lHc5Ng?#Z-P{LfV2I-JlFq}QT%z#?o0)&Bw(t+??i1LA-qbM`uela3>Yt! z0R)Hn07NUo#Hkno*fF&0hy7IB?bO=i{mlyyfT)d676t;(#}%Yp1>Qg-CGa<*_EIg! z8&TUHvwhy;0A$2iv$r@uG)u{$~W>Dd|-sRA3)!Ws*1t znQTtZFD92HSfj|P7|sC$xUg+rmq!Y=o<7%@9qanU!{*ig1aj_9(!+rkh{X3WkCpM1 zRZHI!f>JQ%*Df9HL#ra(e^-7~sSDIb7C$Lp7ERhbd0pyosp4=3@0TvLJV?=Jz4mGn zw~WGL$3NE}HelBjvS<<(GQTUjo##HZ^2YNNc1x=PYiJH7Itn5DHU|Or{Z3XW+^qvJ z>yL8y^!XDF4*(+edarZ6$>!zt4j-r#Fx)P6BFMh^gsLTRW-BiU_jIp1z3NHiZSTiBs!z6kIv*MLP1SpOyhS2A-j);IbUjf?&pM>FvT5+wyC zpoz-ugRd}NT%L|z1COD=8uT&3=ocz3zfc5WDgFIkrXSv1wyy6Wq1f3(Lkq`ecMcq( z&`gF&`n3??(T|O?=5wsXRj{T~cIg@1D=0$be*@tV;fK-5N9bM)(NK(vC8N6;qK=<9 z)~ZtqbaI|P`^z)jHW7LzM4*-QxLiIXypSwgq_%%H)HBNq{+?;=cDMN_ImaT>rdl4r zksJhc9n=1IkNPY477ge*e!E|7S^x@WDb<@0WsT%=D5?-!KUy8ElWR?`mMNAH~-RA6Z?&o-RKixl`0!D#$!p}zWz(1pv2_S+B zBe=G;?vHra_-u{{`uGqTfZ5Z8+}jHclHvSVM+5=~G9);fCDqd!1kQnQBiU^8186uJ zoSHa?%t#GuMH{oI8tydwFbrQNFdt#0^vLRC&0H*VUng|+}y#XSOpD(+(3I>#nAkVS~Rtq$!E2_KWe3e1N-j~hiy9Z zGRD(TK5EWPTCYb@*QB?%Go*@_Hmik|TothD5i;wU-aCsV}^Tr`O78)vvI!O^8 zIzBQP%KL`RXe^JJU@ULiQl+>Yael(6G(T}d7nSufM_Xr!xpMpcaSN2S^b*T8GBGT> z2I!S`aoUSMwRLQ2kV+$XTEfNqC89<=qAiMzroupe3YbK?X!MYSg~16p)O$K)n4)%cF9 z{G6EpLlz0Is~;Wk}HTu)YyO55%|JoLu$i5 zOmgLFpN+*W@C9hldt{I0jEx5Wt>c)7?*^((eC&)%4z(WyFE#s*j^j>A;QAc~2^ua{ zH6D?5Qzc)~=T$*q9}!3_c*j0InQ=}b{4mVnQyw$?H zRjw!AGSt>r;GI^n6c$gwJx`F)p7$6L4UZLDq9+rISJUHVk8Lr3CT60Jw^zPZO5YUY z{@bJY%as_Nu>JF@Y8Ri>)mo5SRNP$$e6NX=CfNV)n6&a^oo3E$XhvL81k_DJM z-)aAxa_FLAGIW!!>}r<$;C+;N8_Uy_fxJ|Q8A!l?vT*kGBnq!$9~Z1BVRg5$CbS;} ze@Q4{^8l4R`J84-n)cmfWzCYI^009>JbWehJxk^pLtv7pRYts})uugB<-Tc}XAY_$ zD)WTkJX|OstQdfCVcxAR)yE|d@CtivbIK;U0Y|W|v`vrsVx7L{k;#I_f0oNXLKtB^ zin4Gi1Zi&d)tPNxAg37X&I5C5X-1R^{M>$mHs?*45ka4^Cy8Ohe#u>HQ+G^0*fiQT z4mC_P2{q6G6u$eNa#D0ZCIR9k0)jsYw%N9be%Jx7IKp^CLcnFjDBPS-eSi|4IB=kt z;OKNA#h(e81qL0gLICUC0T#o5=Scqqs73z|HOB6;;7T0kfW}llISt^sK&_TK63a+- z;Md9kA3nM3HC*Iu^LQblRL^Pl)F0ls`#ylSR)7{G&tGdXHm$To!wWtXaPJz{aI7^c zQD0auSbv{?G_ zfyYj2@_MA?Q;zln32S?f;c?=Fj&*82Tda+u1^Y2sq3HirFPsX~0K_zea$1Sf*6qHA*aiZQeZ zNheDFB8X9C+`fu!MuILgii(?{q`Y;(PT|&3p(-x~h$KOQdXJBnKy|8OjkYChUcW#T zZ%CSj+zYW9z#jJinBp&5_kDTc)@!|UD~7MvedHYCWB z62p^dO^{$+E~=kY5P!(#GAp3>xcG3FA2lBk`{85j#L3yyO9Nx#{gcP*J2^oBe3tne ze5TLIz!|?1J&_aPjr&X>l943`C041IvtY2N%#4S;N(n~&q zOd`em&P*knPUSAbqwF4X#Rjdo(?d?8&kfOo-*+)Eqh-P<9ui6}XqY)!^m4Vky$nS% zNk@*l@sIHF4M}PcK$(dF9GPLj`ituJuV(tcgUhi0EnM~-7gew@nDjSYMGJtgqBg<8 z!++9MjI#S5x{9of|4vsCXPkMR2Ji)r0Q@@5f9Dx~fya^+SKr_~j4Ua-r zvqU~ivREZCa|C{((((i{1lg3#jLq%kcuRr@$*@p48ezOkATK0?Vfr!)_ji(WTpp$KR405Zw(FU?wG7336S^QI;$WtO0x1|KPxIsaGaeyQr>*v!Fn+43| z3K~3%_v!WfIiMw&PEz|##PFQJHd@hCM>!kwoj$Uh*H67%4pk|8u++MiJ=fGf?q(cM z&eTUQ)bLCjEk4TLRLuG;R;5rF!kD1EXY}<4E{XOicd?`9A&Kh(1tW^WS49XD?MR}X z5#OzMl@d7$KEHupg$8c^(bWISlw%HJa;vdPb}#uvxXVWs(q2jr98K*260v{7aO@HPM$uvDgrB#9ffjP zi9QwtSyByU^wn}ctBr!rxe3<)%LbCM$9MuuSXiTm@TYcv>@0AqQ1xciy~g(h=dXu2 zmP}j_&;!5;3mFkmu%JBV4L z6@l}C8B3`O1I9G_F*hfGVKEL8e~oR1@WIB8kgiVqE0eXdzAjer@D&*Ufb1CUf$E$I zmMrHfQ7*?kZt_?Tl|*lT--8|L>9}LZ^l8nD_sht}yPDoFc0j63USY9FURC`4q!>Iy zrVu zLX?q^tH@i2;2HwgQB2t^-F?=tS&qLO)HTL2QW9xjTX@Cb^PID+Z&Cy%O;s_D3P@$1 z-eW=)9!|i^Y6K;&u5J7D+Hrdec86|h?>J*> zzRzNl--3O=QI4?Or0Q=h6EjSw29tF(O(|1J02MCvxoEuiK1WJtTd%j8J}Pd=+jN8; zQ>MWt<->;cqBv=!BHCii@M1&(J>=w~3*Yy(l@r?KW!i2`IkRHJ{K(ZlAQ#`NiXUG@ z-0C=nFJb}`Vi-u!N@OGIPna#%P`@FA=pL($utEuXjYF+{?YlX+LuqmL3gv_v_;|91 ztK?2;*Hsd8ei;};E_Lh%X^Yq|AAv4|nAW96uKrWPp4=8*uC3N%;PYzoo&rxxBdv7J zE<|Oh5yvonK4B!R*lMC*46Z)o1X4Tw}@i}G0PoT#%Xc&-RaHr+am^( z&ch#Hu{}%B%uI(T6>uI>^Pe-(nt7*oCjgK&!(qf)QMgzV4;ls7U!KJx@#!LQ24E&C5u7a0qHstXxF)g>ZA*Z8P*%*l`o8W4RF918mK`6^xK$WZX7d7fOk zOtYVV%YN+c=H&s>+7=24GD3ncG6D#kg<9jxA-E8oNGub=eGFM=1#kQ~VtFjnQk{ww zivhh_mG-Uo`ueEQ6r(!9P;*j0+VKZ)JY}WntYtuLMm0PbNa;`vn_^&YpRqxRPx zU-;mF1@hbx!6d$Y8Dgj$u{O?(w@=Ecj(i(Z7So`D6vU4D!+tYsBkMe~k^gnLv=?tpfN9mEZ8Zx}QL z(+l6!V)2QBNVvn3&*`eh3$HMcKX#Q2+J!FuJ2hANYmNS#CAdeO@#FS@ilq-&9@Y70 zH)hNqe@zT-0WX>icn;(l5Q>QdUN+ha!a@YjsmPfhkHFP!EIaz;}TQGE*}rz;lAkj@TwgR*)gRtOm*N64ODble$tG{1NQ2 zS^DVPX7A<7jL=M*PMe&jC2Q-Dm`*+A<_Zgp3q!ed0XxQ`Y^73l8Q!9|zM~l`KH+f< z>H$)r7q)obI&Gi2(y(*TDn!jez9m#jyq3$<{Y$Un+bg580Mfn%co%;_EP?YcU)ew5 zg36Don96W3H11aQRz$!Lc_)?`rgQhuC=JFUd`iCMquU zWrj>!Yc?H``MuytCOZQ_RA?&PASLxRY{>2yf-?2j`WYU5iU|Ue;iBMF(65K&!=yuzAC7IqbSmytPT8Ef zq5COIq2bE6UFP*8n9ZWaNW=G<0khSoCsgrDObgizM0GDb>9sJN^;*h$X z&A1A=UQ+taAW?ItOf@uPb%rK=(k7mhDO2P;+ztCY{I%v2AFnPqX>t)KD>dGM>%FfQ z!TSu)!>rcFox{Np->hz!o$GseIroA?YN>Ol%o&g17w7~eq7M)FgN7G{S5_Y1%PfJP zL=QOaHu}Z*ZmS3{3S*6gctdCtxq^E9dktYz20L&j@W$x0ef>8HqYkIxt@!8@Xg58B zUUnVtatNF*AfH0M`FRAre7KUMlbA?9_1wh_u(jgvLlTwI{~FmTN=D*#4&KNc5B?G} z8ga%cLWJlUh{oH;_d(u1tgrFRwW*H9y7voA_9Bk{9hj+sY4}8&Zod4Kcyk%w+L(Jx03LP|aGm`dm+?#Z z5uKnd*)NAS@+$gU{9(INiOjS=R5qTJ*C`H%LfxL6E|_#U%!c9p7Jn4L&V)ux&59et ztm#j?yZcNJYn4ild&ff6yS(KV_>Ksy{sJ*)ag$NvIge_-kxy)W#O+ld$3+V zZE~KkT8gsdNd`Aamgy0k1~0I3 znAbQ&jwf#j5$Y}aKvI(|680jHpq48v@fDJQ5KPhNL-{*#V1XcjqO(29FUZTAh1|Iu z2D|~z{H=IL@;{xr62GV};4aiv6c*G~Qs9?S{ND^{10xI+_*=!!t~R#R*Uu-c(32|; z9rxr23m0J*P#Pb_i%V8ZDa%bvORYK2O-jzt>IY?t^#?D@jptABPxl8AYk2Q21!cvT z0Q5`T`}P1pUqA?502}uKEZkooz}V2)!Q9E6mf!Gg{F=DY|6=F(h=hSgf8V)Aohih>93Y1Ws4j}+@qn6uqTo$JFogI+ivh6UeS4{{dGG!+8Ubczp)f#?cV-7{!>(-vSF+6yVh zBms9`BbgRai7#$V0+zdtde0%{LI@}yBmSV&_NKMU@G1V@;vm7e}&B|UfJ2_LwE_eh| zoHk*K8dT^94&B0LLpU}=5E0UdT5-DB8rXrwh$mwGrM`x`RG9zkJ=O@-nf)N#{&FY` zv?JE-rQZ%djy)D1>&UwTsQ5Yq`rKw}G>jZaH8DBY7o}#w-J(&HAi*K!d(wSfh+@A*4(M6wa+o<3XU(q~rEvAi zLMAF2pUwidMw^$Egrm!X;AMR>3m%V+nv~hX4aPpFfK4wr7meWun^SJ338R*{S!J3R z_KTG=GvuT-I}***dKsrgNZ>KyHYvE$BdsRD&rz}cETBFm*8j{jaQXFt`vPWX?gUxS z*t+t7Bt3F5b_ylMn&HfDA>X$pC|^GMU}O96OFqf%^T-LkovTWhoG)#c&*^mr!+{0K z0j1OiQ(U9VY>&!U^i%&kjAhTV+!~P~$Cg%^-kz8c*E3Z#Zngt=&P~w|r_z_S7u+XW zfjv>Zp0JCNf;d$C9RWi-8}MF%XLqc?<1+|>8(W@%!+o|F-U4Pf)KB4V=notis^kKM z7+o~0JQ2`+OWZYEwV&5w33a~z5aNSBd3^WsL0jnRL&oQ2=B}9U&W%DEanM*#>Q~XF#jAnOMX0F8xA-$4$hm$Tch?B+M=4>(qIB0(_?h8Wm z`+95l52E;PU{bHi?Xyt*HR#vvB*CEhl(Z9UeN9D}chu%%{MT0XW0K=Hp!!f`B<~Pg z__jC_!NituZ)M;IrF-~F7>yj>9~!ArC>PW$1}ZYto9fRTw{|0usbYM2CCnh5^l>!1 z(N!nKX<2smR^=g;3owI}3XXC1I1%z^Ei$W9u+GsG9KWXOvBb&F;%p{@d)}-*y+&u9 zs}+=Tv8MIM53&Am8^=l)7~oIv8_3K+7Yp(M05X$3XVNTH&FR@Nz^OeeYVmS>+hBa; zC%b1e*%AKX7eY!4oU%i~DrTXP0JGTfJ(}5rfMfj*iHX1%PxgVj8%!!udOuM_`n_jO(ehK7XRv6`28dMr&~c;Q*~Yq=>ppdypltd$;hDrXO{3XDBC|$kD(&TWCbSVRudE9#rFIB@DXG;8!sovSIFR%OD zeu=frCnMs}ygR5MrA%UM)musrp?YmKNI6IQCak23+;b`HT zQ*W6dMc-CzHhe@yD{?Z4=SMO4DpAuiL6OpH*m};U|>ejcJW81iF2P;jhzHuovldM zr{L$5){YZ~fp_X$jJj!U5r;GMfEG>4qC{?+gr5&GD#}YghVa`u6`{Qt_P<+{G8xi} z3l~9H^Y6d+MQobKs!&uR?&QN3WGmCt5rrp&Iy`^Wb)+;t1MdL=adoEJ#u3E*wCB~) z=?=|tW+*=Lfy?M%W8%x6D#|AaD(s%E_?R8E`Ab3=xc;dihHHfIi#r27^-h&lf;NM% z$-RZ0*VbYt+9NI5e#dCTVKG!b24c-|OP6TGpoG5Vbo}};;dZN`9QFoQT78JvBq_*h z9G^D{NFLlO3_*HaQ|NTc9c(p&9LJ|y$u^B7Q{|AuJ@wgA&aP<^sk!;;O-hq9jPZ|x z^c$_gtu=!E%FFti-EplCBR;h$_I1-y0SN z->x-KzBezpkg$LV@veYNir4@7S`)wcfWt#_hEw{T2JEbAf{Tdfgd5~f(Ct|vUg4u| zIq*?vr|M8!aIE2Yu?|#*cC&N(m*B=EZ^*Wo<;>9&G7-Xt_ow|6bUXwv7=pte2an|- zR$}9H3OOHv<~HP(Uj4M_j%F|pbVy-?mtjJ!V&gwSn45|4Yv7sc35_xe@xgJukY3B8 zMFWx*XhDfn3Jiye7PCPG?;+3x=pu#ZAg&8kCk8Fp`M2phP+PORVHX~ScEt;uB8^O+ z2=@4rD3bGBST6=bgkg5#hwy^Q-%F#daQs}TYe|PhCT-r+DyLQE zO#<&tPUF8k*S{uo3V?{4G$Fn`cZa8puxk@Y{&e9qoS74~2-atIG331SuV@)q2(4A8zU>k&QdTBou6cE-hvK>fIm+4k3Az zr94_X%aGO#m_5QcepaB4a*91Pv*5v`Sjh9K*L#Hh(E$NWWf^bH;3u{)i(yPd>#)ip zdA~~&pe5yEco%YUT($BJNt8YP`ru?q%IyoH_f7Gqyc{Oc z*sPypj!%}?Uv|trP1VKl`L=mZCcfcrc->BQxxRW_uA=zSR~;S4Rg*iK045bIzC#EJMA$bMNDgPD6Gy! z_L65dmTC(Z^n#khnzY~{h=&E4vMA^KiH?!3CZ-AFMA?)z5#S*|#aHXP%t49i>-+O0 z=&92SGL6}C&{p=vX%CG!jki3YP!S)m8K)iwyR=slMwPWzHB&RuryWnNh7b|2u%x-J zwJ1g5P+65dGfYzL8ZBB6|SpLj+>4!G`2mxBZ1*Q(W7PLG|K1 ziZI3p+LbMZZj^3qv;8==dHkC|T`h&yVMEoHVhpm^@C@~5Kvk~VG-t%k z>_uNDiL2wlZfzhH>wL>QrUiZntv4^^6B`2B)*S{q%mq1YXR$>@Vmm3bdm)N2REID}Jq&r^9nH4*;jdg4=WQDk zlry?q-_B^fA>_b@w0FajHxnD>NxCz;8CQSze>nT9s5+Nr-QaG)-QC?GxVr~;*Py|I zP2Anxf)iYWYj6$j5L|*o?qscV_Q}f1mb)K%3?66Ge^*!4CzVT*kum7b4Y&-QG0c1~ z3g-r)sNU5uEHEaWSCfep^Y|lQo_+jP0KkNl5qf6X0mO;cBQ zhc|5OoHCyC7JfV;&Vl&z zaG*bc4NMO^^IfC1d}&hZNtcO6yWZXrG{f&i&Ba{D5yyT=evOyA;mYxV7$S1hrHOuM$9X3)Guh3D{w zjX+>bR{=(b{~#*-9M9uyfekvefgc*2#ny@Z7K@hwvoo0at2jasO32XY?FT`lZG%S5 zH7D?$YC^H#-$CvbC!4L5#19PivW}mh&CP$jTU*W62eC2KmB6z^P=T>XnTzd;fd9lY zYMC-$onsg)WV>Jo9LK~E)t+PKG0%ROpbzjPO=DR^Cvl+3T^9o^G^n`sB8tq6X0lQ} z=p_c0nF$sK&N_WQrs)CPL7XPbU%S$;!3F9%HoK_ah&a+fx7yJf?PvoZcBUT*3Bu

{SI(C!?}X{Y0(JzSbEn&7A2jwV8Ovz#X^|j5)&9_#t(*)Fzy@kw(Yc{) zrY6G!h=n-glct7Lsql*bGtLe&H}gg%4z4 zzqG-GGpF9Y*n0Z_7ujzM)BpYLsvZu1@sUBxm}l#6sF8c(qRw-#mP3NmL(iRq^%E8< z)L5Khx3P?W-Du>K6inj&hnZZm#rb;Q2z)E+UhFnU< zB3zoL?|TlzD^n;-W0y(%M}!19_`rg_KylmXq$8I5IrG|LxPNSrV{zWjnoyW6`9ie6 z3aSCzN4Jf*hBwEK_?U;rbv6cmx9!FJYnrB{YL>zP^o$&V`FB_P>Lo^ZR6;=>yLsa#3W{Zg@|`)9)TtBZ5Dk&M`kUp1I>yD+6dk; zuiF6MftkLs%%W^s2{)k99bIthBqI|aiaU@Rl3^Cm)j3>$bzQ5jGp)>>=_FHPJ&9PC z<3qj5K-x1Q@ml+96vl`pMKe*4S(3Y*%zQ}eL_~>Zb(6#E@bo?wN=MxhH_*v<*@NH~ zH5FZnEcTj5WcI5E&SMO~8M#=AXPKY~C;(c@Lk0{d?3LF%)G(G1*vRD{^uioTrzKnc zJqKxS2_Qx6Nd+%kE!zhp{eeB5CD_$I1PIb5;Zy+}j6Nm#OH=;rDSDQwSroEUOApdU zO5$Pzym^QSzMfP_{TVsXMaGr6&9#ePbhNn&W>U0@NI zG0Xb^Pr4xwOJIYIm^a(csC9@tDVY${z&{sLivY+N;?47}H#Lb;DUMp5bTW3M*8OpG5tU7+L)8vx0^u-r7Gi_fi?;%aq zEEzsN$uHTSa-`Wm)s$<^W)_3E+^>8rUTkC#cX=V#PM$S_Gr0#vz>pOpBQWuZy0*fG z0P`)JDeI&Uyn+*!?=1hk4oofkRP4;z!84XgP0%5CaiemE-=y1tTCxQkqSA3Jq7C!a z0$f{EAAXd?+)DC6B%ds!Hz-XK(TbOIv8n91^%booW&U(N!3Tc-+d-pr?xPQ1z?apW zkC!+JRYmdb1ef>ormG0L>rwbWw1SS4N*u|x?Szo;qZxg?$6G;SE)WoLgHR^9$Eyt9 z4;2VFglT)|?8;Q6jVaq-q(p!T2-MBNC)H)t5xGhxqoA8scBQkAOL)a~gEhR?ba03I zOg`%Z{X=|T7TtUi1hnkq(ldSmGy$oqP?cOoURBt;+{^8=`nBAc=Z;MBjS;YGM!R^@ zxBF4~pX3R2a^b$SO?dVhMkza!bohx}+2a`yp{SL)KT$J?58bb;z>6L7pt_GwVmmwg zTV260sGkG4f@zvmWwJ3(38`am-LXI_YR(1!8g&f&m7(o{!JF#eCK7){ou3m4WqaWG zD7=^PQ4P{E6-U`c6B&%+?d+ha-9*SN?`c(#Qe`>&znp2Kqe(H|zw-WLe3W8K4Pm2a z)}GrqzZ+q;{pqVQ#SkGOnlR`oW*cLP1YIQ-*lV;SS}vlP;G$y{|D(t)7lh(9cAUCn zPYhga^nSjw9oF}pPL`=ePId@%u0qIjVL%U%*#iedJ?#QCljZ}ZPa+N%Un=M98EFBB z?xQw~Gff0d0@h6OhYD!1yI`k%m=n(lGv3$Qq@39LF+}<3du-hyXWHsDuxesx%n-pe zQ88+Tw04$;4y9&?*zfI2k8akwf8)F1sB1%xs=-3#BZU<{l0ieOZkdhz*~wh3bW+&f{{*PU2K8({qk4{ zX&N`YRE2%Os_^$U{m<|2-z!6HH`JGr*=Ap*ii#VggmR1O{Xh>QI2044?H7_{NV{Mw zAVeeM518cQzX#1@=n}&v>7H%Bea7*2X`b*dQUR5l?)OM}XQtnAdF*|? zdO0vsto^FLx+tH}m}hKL1cC5C(LsKIOJL4HPlA$yge-N2i9BeUC(4LIxC+kcCNxTG zRBGPi&VxBZ=3>hUOT(FtsA5CK(oszUa(?@S6(Jl)z1DT4`W$Dz4mzB?X z|FVr$YQbfp8uQQu_YNAqJwQk*s+_4rSyrZDdlw6lQo_|^N`{BKFU)}-aK6p(WaH?4 zF-E%>S6x=QRZ(olKknkBrZ5;!xg(U;blRLGhqZUzjm3=|nCm(8>4>mWYsZvU137_r zvmM{w7xi?W1d+Q8J{VXVwwM>fs>enVts7-If25_G(p!`()p6qYkfhP2)8J>poLk}G zvTBk~K0~z(QEegLH=4E1X-I58OVB+#jWm80fMe%CN8A;&yvDhu+7_g2sMa)PuhoNz zN82388U{iC9T{`? zIYKQSq%6Q<`VMcc+lXljlNGhsS(U}^i|gj-z9j-TBCa!Iz(X+Qog%*1K@YG0gOJhFDeN!U+oyZ@XevSNbf~uwt}${4vI~+o9GJg1y}9 zv*v`3y?eHWRapCSsotqp5Y6JvBH5MbTr7EZ#Vtjgh)lw~XMoX~;8|wDfWHdO=DQAi-#y8-=!mx%0SQyqe58b>JhEez#ppd$V@iz5}G`mmdX=Y8!s|MUn z`%#U|(pW8zlb=L{FPLx5gByYg?#gU?pu{goS-KdggtR2uY96A@_>pm-Uv#A z^q6P{D6yQA?};DYN?7!)i8;UzfE_E9Ku>egGCAY3BF=#lu0k= zk{B{_Z@*kev^WInqG~x+V{vJUP?zIdEE(sQn4~VP+a^dU4C78G( zvz)d!*EAI(;4T(C&$x)@38{X!Kf z2CH@iRk4V~-Bm|8rJ8np7ajx8Dxf|P3q>q^|Lzi95j@uynIZT1~1K1|e}B9*Bz zCbh8pU*!3}DcLWA(|Q+^IGboYccu@F>xzOoK>3nV`0HBT1y=Lay_I*n{Fl$?7mx-> zOOB$kQ%slvfIF@!%@{)^06D@4jyhX8ONs5sId{+f_te8#*+wN+#@oo##XMsI*o{SW z{j(AIa7-+c2iIu~D0o9s&%PYA6&h;R{!V47GSg^nH30rrIz!S}G~$<+5xScWmvxI5 zeL+O!lPaRaZdZ&S4IZhf?=~C7>EUPws|`$o*=kW19fX3T907@w{D&dNvOQ^0E;joM zqT&M>aWkV9E2-YJ@;b%C`~cAvEA1j>3@pw!%IvsF3P%M$DhGf~EqD^q$;Zh4L1mgDVVX1UQPdr<1 z!T)-mr(g^L&cMp*pK~KzOe~#+Y;68*W!P^Z4ym{I*tQwh+ZM+ZgT<;y4E9@Ygr&4u zsIffaZ>mDv2_QEje(=ARggTi13Vy&J90FWF%dY>gVfn`oc5$|_cd~r{ z2g%^S`RTyY)amd1h(CV1rIfgjl9`&3l$j5~Z#N+cWJ#d>EBW}#MS_wo^sokAqA4It z;%ArbzwSfC!qCpn)JDqW=YlL!Ra*sB3hg;fhXNbNk0{5#Da7J+f|7;@~}nYpYicyy@{9;6l4J+Hkhw=u8cA5W*3 zYp>*uwIl@lU9h-Hf!$SP`NLa$bGD3Gls-bo+Q-t343@0<$>2~f`glj#4gau~5}V{1 zCvJeHX=*5O{uXTIw5dGXk6pyM7k`y=v1D+jhmW#T(02adbaC4SaI;4MYIswX3w=c8eEH@1IB#0dL~ud6d|)sMvX)l=rryt3ow~n z?DE21!{_itfIU16C;0rO?{y(*=<-_bs*0JHj~8&c&mL~^R{LuuS(8au=?g0bFtxKL zrgLc(E#nS#JJF^26l&d~L{0dU`EtTv=`&2K&A8FKS>r?%vhb8s8sfs5zxAL+C#81G zqfvhnYD(o^BA4plmie@quuOs=n&03J9ps80#5R)EZY1L=m%=jcP+Rl(>M`JMAO2Q5 z%C_QODk<*Er`qsBv3^24m)kvj!--j0yLtIW_jq+j6%3{sQXaXMNq zN~B@-F?3%)GEUm0gQzJ%-z3o`H%Sh3R2$R}r~uImex8pDtc^iq^v>ih)cTuXK%T@s zkS8H*5KIO4#V4kam5L={f3Y%_A@cJgYRo*<>}sjsmsd=HEf69hJBW}XsE_*JO%fSsIg(-S5D~xYpycl-cO+D3L4{!BI z;dy=bJ(YV=A?J*!*u>ak`Qmg5HBJPEH zsrNw&4_;3$j`IceV8wzD+;(?N~)%%Wg0~*K=90umPIP_iFfZ zfF;LUvq{Dq@4X?Y$dijL(9Kk{>tm#g*l@{0Qy2p7yrR*=S?FIXDGL1EYt2A69b*G52l@bkR+cdU7VO=GDMYx{W{ju%n~np1=>MAIN{8`)x1t zuOH7}B0f-GhpK_*!;oH`?t%hsfUYh5#$rJgv|eo_9YIotEWwDXqL0Il1JlgqQ@R$1 zx=$Fe16On0E6dAsJB00t*9MFCdr{t z`WLGzRfl$xo;OZ;L-CLsCfuIOm)Ld`=~vk1zSn|ES?Oxy7dO+XRznxb%TAL{@N3`A z`lMKVH$4GTM4STPERGzoA{wilqY~EQrqfhkGgu@>aZ!*On0y&`5zBff6flq?2gJW} z;PLd{(3xx8dM*wS-AUK+__G5^}t zXL$=Q!s0Vg?FSAVMzBg-sk@nV)LwVe>L#)fwG29TQzt>REDCj~Yj&uh8i8stg2smUm?oyX^? z&GX@-=ysMN-Que4_l6nHAsl{H3!T;yusjc|P&{pj59ie$^6t^~GmpW`r9_0du8Bty zUrSd7;`zMwsznzuuR-yIu4eLAPmx+KCNgKCK-lBloOD?i!RKUm<(jpaZ_3rkW8PiV)2^B)CVWfK+dQ@`!A zkXw=4Dy};$Or6A=%?{uXxK*7L%59-k1dZk4LG)LHC&fajPevAk`l5T^8FNyYMXD@v zrDfp?oRqE=WoB4(ST%8nCUQ^AV;%FZR3j#9Q|B8pknn)`{D!P}K4;GHI{H~-_k0r5jxi>;+E zg$S38g3M?+4itf!y3Vo)YgHOGvNs56T?E@aN0gk{IjuQ$>}l-yIQ8!S`4-&4&lvml zlw)s9Y)vRVL4(Jj^g?Vktzq;VJgf%$*W0IfRr$Q_QF@%(9p;m{de=)B6T7u#;7avpl0>Q*9PwEt;q`c!xLKBUFk?P<(#Ov&<*iW?kwv!OIKAhKU52Yy zHBqejYOIb>zv)PQd6CWq0Ht$7AA_*JfGzFeC!^7cC?N;a8R~a|Afj)_XgCC-bsgko zm-4tST|vLr{X;r;x?gWLZ=>YDoWVf(bZ(k*UvzwN-`!hj#nsxKk&U(Bfjc(lFhJwb z={Q!I3hqzN0n?bID+DC6PXmeUjoVy3f07-#{v@({zDg~w-^3+RF+&LbAO$6>LmP$s z6hKxZ5RO)_Au5hsGzh5-5(kZgB95Frp!N7m@rsqr!uSFwxd9jXKMlcRu0RL%-{MI{ zlRhPs5a>t^2Zmi`Br`ZdRA>=bG?uLZdQ0WahLr4`TxfzvkSC>0nU9o=dS(lmshsw1 zPv6gB)OG*TE~t|IZa3*3_BbS*e!QL#LXQH2TSBC%h8gfR zTImzDWVH9DlRlg_zz(4b5n;xX+tEao_YrCD>XFkJjaP-zAw98w&@1R*MrpVpkUqPbv)42L>i!|Vl*6X#AQKs@Q6*DwG0U;g}>{T)#HC=Mn=TZB3NQObBmlxB`YQ`=g*r8`t>XKu%!ZhkFR zf1-*)E}=AD_M(*aNhb5)ihtxI3K^3rfIs-=y6tA?)c1!M;=1l*k_yk%u3`cPJyd*;LZ0b2;SwiFeV0ZN+3lpB(b9#DZq07l`0`NerN zrW-l=L0_CdqpGt^30IQ0^Mi7qhGuMI6}hciALp%lmm91yd{)8&wG#j?)W4p9c6-iv zI^4}(t}iKsM|be-g-gO}ABGEG>0pxDML*(ho?R)6)`WFAPTCrF3WtSg0JIGa z)ohpRJI;xrZjW~geC7ak+KT*T9uu4g0`9`hnSj6qQ^-idQM{iL*-oA2dNaEnvxQDx z@d-9JYimAHnIW1+Asjbk{ct?F${SZWDyv(NZ9^=S$f9rj09Hzo2}RKQ(ZpL>qYNSm zGUot`fvTto79FcNRBTDD9=rxLzKLptFhM^;_J|Ei2tn&xh|Y!>tt|Rs3$TH^w>nGf zwXFdzmm<0pWdjb}%gW6GF4IDF-(D4cv?YBAF>Epn$Cp`z6dBvkoFMp!n>syHn%fv* zle+z&ZSg$DMh%fUT9R5)!n5mWCy~8AK-?lXu@lpV_l5kfXE(ai= z>6~y-iIaHX!K$$InUX_gXX?pc$9>QG%U70d8-vVn)k&6jMNEzE(goP!)^MB9oo1X6 z84-y`#I+UWSs2>*rtFjMu=-F7?u_h<&h>>v+5z-Z2y6q!`!SxkR0mg9(kx8(V?Wl| z-|mH!-x$C(SOhK7J`Q5Labat@-b{OXe9(KU>)XaCNRK|Li#qTK@_{%oaeja0T`dtq zs8-1yj9;Dlq1C@Z_hC06s-))_fNSe~{~fGJJ@3KcwCi#Z#S{0G%Ls<2Fr~6n^g-n6 zfN`P&iX6ooW?sZuRR8mL@YR*I4f%afMcVxZas-I>?ba*TK<9Rc?~{b_DRr{xi#2W1 z%2Qpb0~62PF5|4XdoJ@JkF>e0=ozLD&}1%+PrQ;SeBu^JnH=^0m9S$$W2o!6zHdmM zba`c715qU;yVuCJu2B2s@lYE3-G(^(eVa_d)I8Yw;~*^>*OT!f-_YCc&@l5&+Ha`u z^MZMdn|AlFczA^P@4+!?o5;pH_}kRvvM~v>sA3=8vAExwZvBEPEoge|y_jGz0AJz% zB=-FL2>&0fWSyAwc2R$1Q1A~}DV~b>1y-8I&-**9L}X_yXm`UmewyWZ@`rvsgS1Ro zh$ReKnTDf=e7J$i5`q`j75xZh5Ul5dN@#b?b*W{=`q1U;#WEu9H`DQ>>O+v@Pr|Z zC)kqj+{`Oz8TbSn|6q3tIER3lYJQ9m$3g+f;3VZ*h6t-wS8cos#$n-_a)#sSFh1Ftuwe-GXv5>x>G{e}*NC6(Kt~iPGt4w^goqrJe`jLs?h*dQm7=9^P zZ9jIW0W5UVt%PX#yW#Q zg7Hv{Fw(#uikq6*g=lb9(2+!P)VPwj2`ToXI6^)I`M19agk@8{2aN+yZ5jwH{cK zGm)JY-|qR2Ti6Q9-8zXV0T1~fY1j3|678Sp#9>m7|H3)E9zXM(CvcZvx(RgZ^JkWr$VNKhbjJq#dLpr(_E zG0$e=pnD>qR#ULa3TP;A)xv-uU?DG#p;=)l*iE(@{ZgbZ$)i6UE(N%z9%)#{h9r;G zF@=_4reBQv)bGF+yZi^|a1ni@34RaAIsA0JyIql7YZ_a|lhm4;Rv`D(!igLrw>`T5IlW5K*jB&UNNTo^R z$lTyb(k0SeK%ub2ym?2HjHf{mC%v@uQD(Qh4L`6TZ2W-0hZw!4mG(c#{ID~kyo7-4zxlfsy5$~WWZxb#`&1-0ao`!mUn3KV8i*|YY_AOvy zX>hhXGlQyCeQ38S$ewF;01EGvWQ;k47+5Kh#cbaqY9Zo7ij=3m8n|J?j=0(x1$V?x z%vk&Ewt2LVjc$#{J+YHvfs$JwI(r5t0V3#BU;r^1MwJvK5^B-gQrEy>5{U>!J&;wT zm-{|Wqn9ZT+O?ElF7r+8irvVGdN3U(U^-Y`xn~$G;?DLu?M70?4R2fCrPUCl%w#Q{ zG?%tEsr<>Nk2Mw#QOu)WYQG61_H>7Tmrw;oP$MW4Rf}`Lfgx6)JbrCrQ&%8Ct8O$b z_*0sN-3=Joj~^u)bKC|K+nPh_;pDCBkzd(*5)DWx-mGN8GpSMeV3792k-HKQ(&q<4OG{V521_x~6qJCflk0>xO;Hm`jp0UE zl-|dVfhc+PDnC$%<+g~s+3Rc{%!-*d(@iZB&03zpk8hZA1jRiOtoq$ScL;bQ1{4X1 zYF!97BJ={(B?d4&N_w3JjXl%6NEIP>Rof_IEo1HmF+)C(xqst4E8eflS1H}9z-g(R zY=}D1L;~sefuej$O8$d%_!?eLh_GlRS~>Ll353+vw1ytp15-r+xQhwTGqeQju&nQ+ zhBNNddwhGwHMNDOy&qTzkMe<8eq~suNBYtZ31%zUgfi{h|aO6) z{=dw_d0TngBz_B1r0eBB83W;;g^_9APs61ilZ5Y>tYG^9#lbM&z^-!hJd4F3HXwO# zA|4)2GadwQp0;)nJ~K2ZOA-|ualoLzqaGz??DmHar%6(!E2BcD(j7sd>iTN>G$BN)@9bIm9uuK-*?&Djlj!( z;F&r=$BNSltwd1~BiU4le_|ibNX$K^oV1DN@X;ED;C)!g!}Av4IUR@q4gpkCitfX*MFyAB_$0I{XIhSPsFQu zkQ6Zj|In_!pi3Z9kiS%j)WNh8FHqRuw9bF&@JiXa+8h7Z&=TCwTIYW#hF_p1b3H8| zr+-zrj!Pi!KE7Lqh zNW*~FaNni1{obPglHx(4WLLi&#J}E#f{~S}v9k!!VfjTy{NLbwyrcorzyFGSmDR1B zLf zJN)IN`g0#LR*q6imQKH7mI9(l2o`j}tziATtuT6DeSbNSVBn$xuK%^W{_9r$^tpaP zEzSRjj{BDxC9bZJh~kiQwY?crs^XBpL5zW1V&&f+htwM%c{8WNcj88RJc^BP)QzyXfCnRH z=lb6t1?@jO3YeI^G>zSi*py_%8Tvmx8NjypA1F-=DUz!}@Op4SgQ{3|gS& z$43FlK{WKMzrl}U>dBWV1pqEe;QIa7qylth0N(5W_8frL3`W2Im>jGe9nE~Q{^=>a z0Y+Mo|3mOi@W60mOn%*i3yKZ7B`{an1|s-B8^`{1Bb+T>hB5y6RLGeEDG9&e_*yDJ zr-Nqz-XBf}N=j&Fl0c^esC5u`WSBgE_g01>RUL%ZQd9p6l}CtrXu_g@Hn*gXh!d#_WX!6!v`J`c=9BVVC9rUmn z_ZLFDxadV3;kWX_S_*8EXPw9aD5ltvhOz@{I@6B$oNN)+gG{2b&8n~ATWc#dn3nJS znK@kCoO@G<4^z@HMc^k5muhy%fe1eP$P0omJD+a65Gy+?_JZJ>3jq;)R;@ik$0Ps? z5W!!S93Mt8+Y?VgtFcZ^Qa_n3P)n=X4f7u^d{^dm!nIGx9b>|E&#|##MTM4U{er zu9wY8Ppc6S>5tvAV`k)o7_my(ZVI9XaMTz`^6Fbd4%jYlG=&3)1-@09U)>g!`dZn; z9PkH%?`qfx(E48l|2j8)3p#ElKDO427|(K#4xNK~8;*1Q97_Q!%Cyo9Ds<_?CKtVv zDUIjQ0+qp8@2k*%cpVI~Tvg3Am>xAzB?U^5&wWfu^Q2CI{fg@>+E~~ksXb+H?HM3F zsE(edW!u?;1n5cEQ$t`ccufHcQyDHWLsSvjErk`XUL)%+PI539D*`*MzR8T~m9kl5 zSyWGx?^zmuu@HD1BWZk*sKwAC?)yU{A z*t7a%1I8oSr=k9X#m}`;{q#}ap4=p`oY@P@>Ze;p=uaM^4~#9Yi|cW)PjdIF;~Q!Ytc%ph8#W9JK#HAMnA0ZfivmM?I!Lu!rV9 zy7za0h(!V^hiV6*lWFxYoEAj!4nMg<5~ZD}eG)`@AHMrc2<|jZxLTTapAmry{-PiqNU6qfA*U( zS3_mbH%vp(f^Yr$f5mWuIjQkGf%kR<2*mz8{`Ftp+rM=pR9D^sIj%oeY`)4hXfG8J zp-oR+G%wCFpraooH$afbye_N{Q`>TVCx_W%w`>FCxGJ1|gR7$FAngg~5cw&4F)fSD22Ju3P z1E7a{oH2FvOI&kICx@Up!}OuQ#Br_$TN1#gU__f^0>n zWttl>&^g!hz2(T#+447WcgLR_ZC>-#B`cb-k4&_pXs=yYWhDx!O+4Y|%+(S9zV+PHO*QnWVB|$*k`Z%&>Q~CGqW>&E*#AjF{MBzNaHz z5Up8Ws~u}0nF?$Jqpu9X%__0|)e+;WUQtSr@1TrAm)N^knD(r?c-+7S8bAl$VR}@b zpudx6Z`w`_U&j14Z$ek9*^deT)Mf=KUz13KPJ0V%*mqBMsrO>qFSU`Jsp<^O)4;b? zY(lRpJEG;YsHcD+NK@qqCjn!&$okGL+ZM|>Xv-D*;q<2E;1Ymj&q66q3b3@K@Nr%HLh768q z19%r@#QHxz7UQ_t>OtE8KD}+2Mtd4}|1PGezF6~-cr0vAz{<0&t)tYqY79JpM7%|j z*3*t!M`Z@J_=aL;V95)JT(Yl;(Z#uM^4A=0Kk$ z_Bq~A=6{m$eboSQPHiMl>gqcPzKPJwAwm<%j2GS{5<)6&UiA!BaM%yl3uLN>^+s)p zk|pJ$5}K5}Xd(JYHoK}#jD-eB0$dLvVayd7XyF%i1+V%DMEbwB7yxB-(NS!N zwIq#i>31s!sx9#)9H&Do)5i?IUm2`fO4K+Ug1FHb@}ijgS0C1@npnHlFz&-z=MPBC5_7ayu~c?JlyV*`57TyzTT$~*Wb|PO>4Wj>3x+jpT&r<)%fQw zyGJHPc~KdJx*ui+_KF{!k(b!q@!>`4QrN z;&9|jNt9sQBN^20`y+_6S%MOV77Gzs)?yrGAH}7wQ4A@Ts?9YE~6Nr7mcvHO!@Gs3b*F z%wz(w2TYr)Da1W~b)6<&pWl~G_9C6-M|dKs$hdzaGuNLJ@H~bK7WDOfhE(j1=h|E_ zaZK;S2~kJf33Y@$BnC<*oVa2>CgV{UDH`n?{`~36qd`WsM6>1@(1aRfIS`E0{Gvo*hPiune2U6q* zp#_rWvHkFipB|?Tqr7nZj_4Q^*0C=zLA@M7JB6Q>KbTXVnO-;v5Nx)`s8fsc5_x2{ zc})2$9n<7B?cMJ>vY>K*ib;FJ{4 z-9^7g-j##w4WCg6aTewk6CLpmxQ#epGsSPD>ULuhI#0RApCk;4e8kmZkaY)PM$3ip zQg}-GP@x~vsU{zL>yMmnxTddiW8*2_8TDE0UYZ}8H9v^^7;aj*eVkN==j_`CZ} zqPnfdv^w4o-8c?Qcu)uq7euk5B-K)$6|fv!BCGoHX%>!RZOkcJNSUelRjykqAOH5g zFDjl_`;!{H=7hsrKZ+(vAT%yESJQv=oIYpA|5)YogjvTUz~YKvM93I`K+wllJgfJ! zKdS&pfl0|0hOks@^kerF*9OoY&)q9u)`$HJFa|2K!c}S zhiXPccnnF$v9qLNCL1=&@5e?&do&>5tE$-E4Qn(rcM2EHyrlICBj!GSU)j`~W740D zr7BfaaRfC2-;;W7n^q@DK3{hEhDm4CW^3FXSLIZS{3OtimcxlPw`rVzgQvm4yNb*P zWv+PJ1xFv#?-+UNN?vkHSD5)~YRIG7U>@Umho)FE4vBsZ$>p}X?}4DPn@RL_*|i9- zMm>Lv6nJH$FdzFmha+YKuKFbyG2_rq`&%l>j3sN&YPNGq$Dzv2%BDWWI=>raS?{l< z;zMkX;1cX~X}2)O@Qam1m3OnSNCn^G0NHYn{!742BMa58F!MEP=VnxB>uscAHGbWl zOYl5dQs|lz2eV&B=s2@5^b+Yvb@ovVMuPCb#`pK>4t=g=hHq*P!eQPCU>^jv(X({w zy#v!@c7!*kkl$b{w5PO}eFRD0aDH|&jMK@EA-*knh&QJkv(V(&$jS3dZwf{~pln~} z+%T#?*Tq*m}R-EzKiv`FM{4*4XF>F z$Ytbi63azfI!(x@!3rs+XbEkBKG&c@4yij|eUR#TRXS1$IOT_bpXoJw=^*SQLvgRD)uen69wNu>- zzepK)-~aQw{&OCotgFz?g!T_doX|9`hF~#$W{SaZ3Y^!>9dR&lQ4zMO_yFI+Q1Q(G z!Ow)IHikf&SgN(_^mWFxr>C7@=c?cG?Q|p$Y2+Ou-6=9Hqr|u$PY!R zZ^46;^(L6x^ad<6E10SeK9>NlR-H;$SW1tZ5v-=pa)o1fYIM`HUX#sU(EBM~ewD2% zWky=ZslnDXODBIqnf*3zuGVt{YPHIpQQ8OUfI!qhv1qjrgeyCEa-r%*0s7UCy*cFVGw1%#?JYK+m@DS(D_S;C0EfB^EWr$ zGBFrwR%v|9q2ii&&8YEsXydKQO>E58Vxw(4{;bv?7WJP!KagHSlOvDTWIMDjf}t-) zG>>nBYMV+xFU_vL$?6hBWE6J*f#GFFohJUf{wCKa$JYYDZ*K^=e#=k)A32GzrJV`T zIrM*A{L~cXWPpjQ_fpjrscrndmUZFkS4C)dj4o9qh}@hB86?y6z?9dV#JWMxbVx#H z>quu3p`U7?;6^-IA9laMUp`&lL9D}Kx~Mv;1^|p9C}HK%ozXKa_bs{RC(QQ)NfL;Y z9b2}ul80?KS*xi7ni+4?5kw3(Vm|B6D_kS=uj=brpOJ+MCyy{;$VAJGDK@L~+hc|G zOlIV=h4No;0H%XP>^CBId1RfPXC^0d^Gov!^BTh7*{~rUaTd;H31$>hoP#X9)gJ)1D&TGrz#l_5kBOoee2 zG)$}lGPGOU+D9TY;Ls);0-+L8dn1}`yg#&qdE|!nWbzeVz@EPuQfCzD!ZD|M`vgy3 zrae43Pj6oG$bJ6PFqN0@<{e8=hakkOSEg|Pgdh6L3H(fpi&Q@Z%4U&&tejA!11jn) zRR}l|g##?}z(wJdOQ!slp)o9lWM-RI%1w#oy3JJHh!MpHov zctrVzy?+Eln@IfvsIwGFf9JG!GHSm&wl#M2?DJz!`&CwVqmQ#;Bcb=cM)d#^jOUX( z2qVqHUN9!u_uj>-^;fK@KB5lQSxL!g@b?ZS1dLluhlqER9}Eejm^P_C=^I{`2}ImF zj0P+1cJB5Zj(Yb57x;5NL7#Ww^nbG~zKq+H2ynAMXBiuD6qLIXhuvEn1-^5^ITq9UP^I8+{A38j#dTq@XW1 zF}nbm!r4Tt4!N0+UGo_rV88ETIsSD1y!DpCxZq(_c6c;m&-0e7kIPs)OMUsESEL^&>lQl-0omyvQfn(zjWSl%N3EnkJ{KJpStI$1ou2Sm!~7hh*ToQNw4q-;#W|fCQVXZYKD^;y zC?yHQD)jQPK$8(_M8ZKe29P5gD9C*odn-ksSlc8CyQ+SUxT@xecv{1`2a&eh6XB&N zhL^6^Hr|AEMl8gZ$)92zl94??N^iE~WT`U0Fl!?Hi5-31DERa6N0X9UXcf>{KmJhs z?MDj4JoQain?=z(-9}X(bg%MFRIiVl$O0;k;F!SP3ZrVo*%q@8ULOPmrkYo1l`7CG zBT0pwG;>RqL*0s*%e8wQ((3I*zH>BpJm|*Y1%t}8KcaJ3mu?o_igZWOw%He49U*Q= zFgwrjX+*~T;l7zteTsT#zq7++R`4{Jsk+F5p~%!xUe|@mG>I?A25Dew#(6(pr52sk zDp0^3*qG_$)W478LRPlL<2*7MW1-w1lgE+L#$3?JB*c7-v8LuJr?JS_wZQf$RExVK~M5 z9-V~1Y}rGK_f{k{A@B28ku|ym1r?YzmiM7SJTP3Q$0`Z5_rdbXbiuG)L~-*t zi6eW>h%h&rzjZfkT4E*<4Od%SA+{w?5VRxMqezpuLQRpEhpYgc@jDJ^V^Aka9zSU^ z%i+L!Q#f<23W&4_NFIB`wk%$7*tpS;^Ej;sTPynZxOM1HIuOyUi1tXXqg>qLsAEi0 znN6^vCF0u|V0?)qwIr58>57}!g4QlmZ9{aM-J}U4)oCw@N%^FSswp$ccaN&-WcQUC z1Zvao7IQ6rjcsFvO1(uY3DkB6Z#sP#UD@m)9HGe_H8&Q!j?&2FdkwDUfQd%=G3FYA zvt)a2!-z$cu7pI$?O|{+nd44pr|v!^MSBgh2ydYsH&rl0e$eMkq2|COm?zBqmK{w+ zGab!u*Wmm@&EW7*{Ny>oAAI|1CIi>oqg^3d18e=3B=(_5M&A;|uipZ~nRhrrPA$^V$nn76EY1C~OkKXA{W zQsB%Bz0GY>R>V%x9kDlAvIB7{lVR+<^Uzi7+4pb)plBoY{ApR)>i;VjR zQ6HkrAC%_V-&YYM(vF#;8!{5;N!VC00VyNBGy~G3ZJ8I_^v8@$_=FO&KzUZqX`nT4 zJ3p)b8e#UUF$b)GKvm$78)MA@NThT=6EYjAg`{c`qHFdtbL4G1ys8SGm4>&RZ~4ay z!0In@78?u`<+M4EuZ=^2_7h(z+KHg|;BLT$`zBMbs08 BVeP)8rj4Ml`G%cVuQ= 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 doErJR!ToXKVO+cnCPC7idTL$(HG z=@>+gZAg~!Qdt@rd*oO{)_7-fRPR;J{anxQ`90V5{rv9xdj9!5Hs)+VZUBH20QjU^ zVF381xBx(aCDh&s47Y-*?sfnGHh)Js0XvMS0)=Sc%7|kaw-Dq0616n4g2SM8_9~XJ z70a$p3v;kaFRwXRvAgTP6-c$$8lzLVE)#*P%4QbbW)6Tj78$VN%Wi1VZJ8p4TB~%4 zH6H@|G7MG=XP4y`Z7K-iuD{m~-E2*7l_{!e<<1IeC;V3DTIc#@8o=jizL^`q#(41# zQau>=`vAv&AlUcvKZN+chV0>{fjCdhKZJ$94+jSZ`hOi_|C`afh>|Tw000(V06_Xs z1m_zN47WzAc=>w-1ywq_I0-rl?Sf8QsDq?>-ItMUYXZhw7QbE-P%u!@4qxNRS;Yg_2}``tlcxmY+B`(+!kLLHhn?ku4$v;jUK)G zK|YK6p*OdOt}M2T@9pBm8jtVDdn$oAwdHdY7A5)5#z2E}%}upVO(f~Ff^>T0DWKKc z+EJ$hLem~?Z+>_x$c8s=gz)#_ku4Gf4igG;mwA?DntwN~vEb*Y*m8`6c#hgYA2+jb zz&66~tL7t?^xqrCvE^N%Mv@~)Q2z)O3F%xGcDFxV)fGo$BJN6^^|WY-#uF)_8LA|p zp4?~%F-{DF(7Xmo3;oxYi2uB^y+`34rRNVy^D7fD=&ivAqTUx5c@tmc;UpwUm4Rs(8i;t;*bl<5aqEu6U7;)PCBe66c+&NUW|^u^ZYyL~yrCiHo4fGd{OQ||YfZmwN6CYJ%tCIuM zZ&IlR1;X)}4I3bO`qC--PfL+8d{?t_jM{-bnxZqj*U(!%W)ivYxxww14P}t5P3}(D zt4mv7$4HGyhbfOn#aLr)8%Y8Nlxczb#t_gKfr7$ER2anKQdf4AS~EU7PhLTpzM0c-d+%>Q*JeR1R*j#e51{;n(#2z ziaJR0w(I>6hMt-?T@e`hooODt$XQDs)6UMG&d%w=-lu4CkOeLCfTE zfBX_Kgz~JV5FO2eY>{w~0zub-rba?0<0T3=Fx&-?L5i&{{{E*fpLsHU!EHA+~Mdr+cp zm)y!qpF?qXekH6l@o7OZ0!W>WiVj=or?Ndpza)g-q@I0n40o<1KUc3)cQav9?zqmS z)=vEf0_-|UqopnbRO{HA{9A4ZO_~dA66!#!#jg6!_DyjPvXJ2elp8wHLyP>h zZCv4>+r!s{dUq|+O6Z2A^XRu#@yR=-!m=4&;RA?s8>I3$I%>Z5e5|IUR!Mu4hMnC7 zscLX6VSo+l4Otd#NDl$|!TsN@Tfg7w9(9E@5VG6^=PEw11$b&bi=-J7L!YQ-kGY-U z*f=dR6)=$EG7^a0DjiZW8c$t2ea}7ZBQe}8Ld|CpP4z`j>eK!o?E9I}96I7iCgz=n|jZP*ho=&vhoYh!+doe6O;E;0kT J%=~Ep{0|jfpkM$1 literal 0 HcmV?d00001 diff --git a/lib/util.jar b/lib/util.jar new file mode 100644 index 0000000000000000000000000000000000000000..ddd37ef3b1005ccfb7435aac4817f7dadf31b9ff GIT binary patch literal 12237 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 literal 0 HcmV?d00001 diff --git a/properties.xml b/properties.xml new file mode 100644 index 0000000..f7d4ac2 --- /dev/null +++ b/properties.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/.class/es/tid/PortableServer/POAManager.class b/source/.class/es/tid/PortableServer/POAManager.class new file mode 100644 index 0000000000000000000000000000000000000000..92359ad6e124e76dd1970115e5377e8113f33975 GIT binary patch literal 504 zcmaixO-sW-5Qb-MZLC$>_?4^P($hk(o;((m1_EBgv>DdaCc(`#_}e`A1Nx)HN!6K!LTAu@~lYs-V&yjf^Ik+-)#ka`V@k;RVt5b zT2q=>l1s%h;x|ggXzQ#n31>OE`L;7DZA!K=jvM2^G>O02bi(me2DkdhM(>rcJNiw} zkHEgGv4l^;@l9!sE_0)!(lX9h6qBvV>S%U-iv=385iTBtI%Z_La>3s=mW5&k7gTA^ z(!Y%qjFwoVUSVPMY`&xgE4chOzo$UKj+~DC%AhL`1iJvjo}=fu=h%n+Rv*AY%R|Q_ P$D!j0{8m4P6LE$&COm|+ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/AnyImpl.class b/source/.class/es/tid/TIDorbj/core/AnyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..280daee0cbc885ab6372ebbc1431b7c2a911f57b GIT binary patch literal 15707 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 OB>Ji=e*NNA(*FbR7NigW literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/BidirectionalPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/BidirectionalPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..ffde8f7bdacd0df495e4766ed628bdb033bcebf6 GIT binary patch literal 1953 zcmb7FTXz~&7~O~4kjcal+J;7IO4K$mw3#$UYeTH%WI8gv-(Ei8 zaFd4zs~kS$X@AR)HG7}nuT6yY%*{S`H`Y`R0dXN@U3f2&AQFtiI!vA^hq0ay7D?E?r4mRrplI5 z`@W#GD$0&dx05YH*J}H+wcny0+2jaVGg|u$7o)MfVeU#sV^>NSOR1!^)w4|yab0a& zra?x8AS$n{wPl6jLNvdpJW?cGY3@p8%hZ~?iP%H(XsSw`;Z8KKwk1oeOO;&4Fn9K( znqjI^t!_%`OexoFbu0p@N+a>F%-+YQW|7j=Yh4vP)`_q2LD;f|8j)FQKdhe5;dqnH zeNr+`a!RXfrdqQ!qp9e9e6G>bskB9^E(4!^Qd3*@bz8t&hzbbfl7KCI#xOrjQcT^; zrYrJhu_9+5`2S$Ez0Whu^fg4Bx~TOf`=Z1U8YW96GxAollq^uKHaof=p)yjD zBBuJSYO2i|Wmd{%@@rJ{B^#O2GMd@d2QbNEWY*N_?JhCzMetZ5o1Lu6c5w%Tf^ZWMR+s1^*1 z1Na%TDPIH2eq&RiX%rgrar$VYsBOo#Gxbeiw8?4s)E_#E-X6j9h4n_@>NxqQJD*y| zo)x+MoncZ$*9SV!h-gFATPh{V*HkE5j~SBDk+vU5IX*taBTf0@Yb5`3!f23sQz>^G z)hqu|^|t+Z4Wx7G6U$WWGR}@_@6BNu3-pN2fzg}D;IapbUfl`$O%p)tW!lZsxr@HM z*aZ{AFW~x_cA#5oH^(MM7L3l$i_hVHipfKGs$F=GXzO~`vwfRZH`p|py@Pih*rEdq zj=%y}PJyoAssmcK{gAit2@0&NCd~LO+HH zNLVHdyJGhpI#GOy*&bbh=!8Rrs=h8Rp77<5kB9?=jnMxmgI%k0aJ@o^{RKZ5ha2{? Mg7@gcLk1z>Zv)rXjQ{`u literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/CodecFactoryImpl.class b/source/.class/es/tid/TIDorbj/core/CodecFactoryImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..127213c1ed60d38b6d4e5a61153ee8d86cce06ba GIT binary patch literal 1220 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 N{GV&tDEKE4eglFKo8$lh literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/EnvironmentImpl.class b/source/.class/es/tid/TIDorbj/core/EnvironmentImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..f518231283ab1d9eb679790c7c3c517aa33dbee5 GIT binary patch literal 388 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ObjectImpl.class b/source/.class/es/tid/TIDorbj/core/ObjectImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..08dbde6194c2a05eb2d1176b8c98e28607c5861e GIT binary patch literal 1034 zcmaJ=U2hUW6g|T(9iU6aepm~&wc6@JDbv=s(wHdtfB{KL)1>LcW?9C~BJ7f7HU1-C zt0pwj=nwEmsdo#~)ULkFy?5^1d(QosA3wi*2e6Ob6lRg*SWO{@TnhKFmclyjhvo*y zgCxm^9GeMjaXey(8-~*vGAx|cyXHGn^i0qrLv z+V}dk<`Ki0UYA1=I300Zt9pLBD=g2Kq0u~gUXJuR-at@nIUnh5w!6{_YW+cv(9^BJ zwB9t#!LixyNsh-HI#oth5S20QB|RTWJaK6CE~#sn!!3rjD4JJblv_g{1&(bEMeJxO zK`@A@D9h{jMTL&Hu49>j|IGvuP2lXf#K+cLPux?#GeEq#VPJ$e>5 z3!Q|}Xm+Bo{u#h9XZg|$WL5U0O_HG*y*dBij++2~5{BDi3}s++rU;vQ{aRPAIyw!? zpJ0Rj!z}$A8c{er(p1uEXXwn3b(o&Ca{QQaMBj&?H$B^k*RPjax8JO87G^(cd;_bn;{v(s-KWJCke`t YoswF)#01jnHzZG$`BdvO5@T}s4YP0s+W-In literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ObjectKey.class b/source/.class/es/tid/TIDorbj/core/ObjectKey.class new file mode 100644 index 0000000000000000000000000000000000000000..3a64fb8fa5d1deb7387854101e4d7fae6c00944e GIT binary patch literal 1872 zcmb7FZBrXn6n-w*WXZC;ByFgvghCaX7j(7Ms?gFxz#2%1hV+G^#!Iq7L z{WybZ1()!Nf<9bU@F_l%@p&(16!@F=78L}rB;yMO zr*K1neyJdZWf?0n(hQ!aWikZQJN!qkRe8OvtyyNJUY=zbtQBh9Y;NT3N?Ja(XqcNjTG23dtynU(rFxM!nyo6gDn^}beOD^=iZw_0(bz2pDQT2+hIsTX z0fdcL|DnaJ4ClKWWjA;9qP3#mpN-vR=wGvVaW}&odA?aCPm-zg5<{Z9t%x|em`l|g zEsN6Cd2QDAc+ad@WIXksR@s)-X*Sr@t;}JeC?Kj_`RGY38hgvssdi+2Ge^BSO-9H1 zVmEG%8cMxo=(P-|Un(LPRq-xHWMou~V^u{KaT#B!_!?sj!-iSbj9OVsW^)VkT52`F zlv|xAFQ+oRx@DL(y)@?3lv*v&aw^u4S8)@0hRKr}-&sZ#w{Tm<9jpt4yDB#Djf!va z9mCMkOoT>(+`m50Z=1$F(LWX6i)6w$D}$@pM3EuVErM4h=)iYQ878`!9AoSMp(Qab zAehxbcbbcn98q=Nqzet2O|c{9q3H283qJaZ2x+}uwzlm#N;xOltt}#)LlbHx!{`az zq9LVw8pa{Q$rdf$TBDKD>qRji(bxu=j(2CeYq_yt&u(+K(hwHQv1OvRNWW0r=4OGL zCMUAX(T!v(WzP@ogdA+p8-xanCNghw;qKg#0=2A4Ra@Xq{qiO8W}x=^C@%XQF&rhg z$Lm3iK0~iXpoe}$4BA1komM}H9T=tc96bd{GLqi-KG^THfqgyZUJu&X7hIKTct{C|2=u=&kPxyB?;iRO;9C#M`{?~sgvlV>NazWQoTE5QD(L#~ zbtDu++;#A}CItMDAOutbQ||T81nHx*+m2uVRYxjw2k2XO_NpWL_c1UdMSewJSc?4A z#^9Zir`{QFSPFYRBW(;FAg~_x?$h^V4@zdLjngchct~!56|B-1$jM*=o)?&gSH=fm zOvZ=63u-Ct=vjvL4}3B{qLzRBDn^Y`6fkEgkkE5#gd5Of3_n6h9E!Xgcn??zcnMKU Bv6%n> literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ProcessingState.class b/source/.class/es/tid/TIDorbj/core/ProcessingState.class new file mode 100644 index 0000000000000000000000000000000000000000..65fc62ee988110e0cfe81d3428b8d29aa4e488d1 GIT binary patch literal 1299 zcmaJ<+fEZv6kVq??esEG5ESI9^#UEldcUHgfLg7^K*302nxP$Fu$>{(!OI8u6TZkB zFT9ulCYtyGew1;Yc3LrMd^!8<%UWxnz0a@T-+uzQg1I<4F%d%tF34k2!^JpMWaM#4 z<}Sxrbv1@-xGvor8g5E^OT%pqcLX9cx$IoNARrb6I%Zs_=9`YcY*w}{g$fYR7MAk) zZ2pOKg+OBQ=~7{K{#7#+5{NfLbF;EYA*Na+k8cTtt3}sa6&T7{wTy3siv7UwCwvZA{sY?cWy|9sgfpdRai7am$i85KzX`>|FD<9mjUo1?aP=W6?KDZ(o>O z1#`8+YTd3aZfyHy_q}74>qRR9(OMAV6Pj0e5u6!i$DgHFbPOS-V*rCX zPNGX7)$UbITw%kr%(BD`>$od{Q%GsJr{g{zXqeXV5RY`sU{+vc(|l)UDyFlZ$vVE} zdD~mQRi67$vbKENb!1ga;7mKYm!4a)YBj!|kCrp<`pY%Hx@ndC#Cveww#U^|u|EznyvKNNktY87p#*qkvxTb2WrQ*O+4 z8K?MpJNb7a=tmM={C3^+LO4dh=ZN1+|M(IA1pU4vem_xM3{S`{@r;s-3*b3IZ;+fJ z+NALf!k9Qf$WRWTd}T=f^-(s`DD0*cjD?MTD0}tvX`DtXNT8LlctBJ_Jb*+SsgcMd5q4r1R}T}!&)501ZMCsj!zPJgii(XaU7)>))PnxNI8MDcvoVm#_$=#Y+vp2 zp<`QzyvxA8b|X)<;ZwC^bvZ>8hM9-DsXLDt!ui4$L!|7kL{)vLY7Ce2wLNWLlMT)6 z$(xR?o4sOzcv72=*7>%s4cgj{K};#tv`m#B=tGB_j!QyXCr-I zGhEbSzGm4y+3NS?a&u$7BsX{Vc*k)S5^8reF!YY*5dGDBVLFl_uG-w-+K^ClYL7dr zZaUoF)jAZoaUo4PU99lkB159W2R0WPRG-XbI+bpBO#f^|MPyi>R*QhG4cZ=oi8`%z zY)-^v&&#)iyDeMf=D;alEOCIfu~nnO7K2f(&%0ZiG2+Ewb{JgreBkJo zInArLRd?yX&Ca?V7+BQyLxx2 z7~*CQ>5z;yRBNBxwl1zhBOgrkv;uUS+-Z7A?Zd&v%6lg`iK|#lB8$sOypAh$6axo+ z{YkalRvXQ>TK!7dY%^S$1gw`TYOAzSs?!~8j0_`3*O)F}&gQ$^=4OWrh0htTE0x+B zU7!__?!QE9t1EY7_#z1fPm=f&wNs+8!*e2rYm?HArmECiwQ9ZEAYV(9i^5m4Roy7H zm1ctq&WEz2cjdNHvFx2axntQ}ZVmaUYmIdn=FbPnX(&6%c^aNNY-lF=7{()rrWRc) z&7h7?i3w-M1AdZ+1&+C{6^=x>P-Ohlz4 zFe&^3Au03%;a@2PT3Et$54eUfL4jM+ZwP&d*<(buj}Sds{sXCF%xq_3M~I&+XD+=& z;%7Ja4SGfpN~eh72Hx~|7U(Smqk=~Og-i}Nz2%lC^B^EYzv0mL$Vt*m%#uOzzw`s< zrET#spvd!o{u04+?I^i-~<~k`{OUpkZ7I}_{FM9^zx%gw@^%ib> z>36(hEs&7E2GTF?F2shzU}-|%IVo-VkU^s1K4XF&_lG+nW)bIA60! z#s~ALjRUx71gN1-c;`}?WUZ#7VO}g#waN=t6W&!^nmDgA!v!Hs^GUb&) zNA5fF55c}u^*B`98uZ8+~P`Ck4 C=qNn^ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/RequestImpl.class b/source/.class/es/tid/TIDorbj/core/RequestImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..b05fc34ceb7e9f6c42c24df8041d295db8bb2ef6 GIT binary patch literal 7216 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ServerRequestImpl.class b/source/.class/es/tid/TIDorbj/core/ServerRequestImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..f6cfaa8db9227be86a863894bc8b9f54ff3442da GIT binary patch literal 4127 zcmai0`F9i775)aXYF2q+-QfZC)jO_S0JTM!j_sU#ar+D^yPU}QX!G8!4& zEnSjs>At61x~EIpCg;?U)0~s^=l)SW{qEC@Jd(!ngWl7-_kMSK_ue=E{olXe2Jkpu zkKq(PGlG-&tSq0C<@2(9L6+xb`JyaelI6>?d_|TQWO*@)uf{NnugT%-QG8<<-;7}l zFAd{cF?<`}iQ&8WUKHPt;s+w~!x(;qAII<${4|E2;pHfPK8#<)a11XA`N=4&J?nZV-gO<}UI$f_dU9;vcnd>bp!cd@LZ;z;uH4S

R@-rQH0ShCPeLY#~S(D=rsH+1V~qettS5;>MNv!u3pHMpQ-U zqivMyc4OUgtM!^er(BB)ZNstLmeV2VLU^uaHC>}x(U8nr&9qysq)WM(y0fyDF4rB4 zi*2V@tMx{@(3Z_ro?=+GakuK;CcfEV)YPus)G%fn^@in`%4*HDNgmIynHy$$-K?#q zi>_0xtr9(K8?NcBTCRrkI~%Qv(UOwOR4TO8By_|!HY}&fury5Vj8zU_&CM??wT0Wr za=qqS_h|J{zV581>-K7TdcJTuljh9{gHro#qiH!bVKhvK5xB%_nCOw8Tgq3PBF;$Y zSZkd+_xH$TYMT_;Z5!6Tvel53sC#K{HeIWWc)SN#R1#SqMJ1!QajWj!HJyr4Us>yS zXMSbPDvLW4wqcu2^R~HeRk{L5gr}?VU$u zButnuk*nmb4Qrjip{J|0s(VSp+dEk6R8sI_!X4{~ZWmpDA%#QxV+xlO6Cov*T+%Qw zU9YfqM>@r<;XoqU?|_C#*}bP>lFXe7YP9H@zZ>AoG?3*})bWTv`9#vf16(g?dGNuZhDK(I|Dbz?J$#J!Zjug~H zU`B$;zuq9Z~z^})WIZMU^fnNEkYuX*grsD=}L*d7t-YyuYogXVA_rZZ|{6z$wj zzg%Yqh@3a|I9?x_<6tjph*tO-IQ31H3nofZ)HM#0K?ff(5cWuA24_hsP=yc0CYN;N z(bDmLd_c#0aa!kR0hg!nw2mk6J{=eFK^-5)B^@8ZM|C`doQ@~)Astt6Rm15{H$Kda z*!ZoEkKvkzqaB2L5H4qCjNIIkF<+R;7FgtL^F%UUHrF{=+!TK@-Qrn#g;Xa(v1)9PD;+Hd81*lgaDI z;Bpjy*6|noHHyFKcnyD#;vYKxiQ9bXxGHP7Q{9d8IRxLS);Q<-JG?Y~jT}M`^gtDzSyh*b6Z~R5 z#m~SA9KpMBn%|&j)4!^LuE6ovLiH zS-C@6RqbqJwXW9zaV)wy;ZQm16zotCI`2$TL^mU zEsQQlA`h@<3wz&C#x%@h!85XtyGH6@>R*Vy?y*0Pg2z6Gh+-ciJ2LPJM&H8N^7y_7 z7=MS9VF73;a;4Zf|CX@mA)h5lKH{Gg>X&w36WqdVfzSQ|o|g2esg ze*&KjmmKmWbzkyRFg(fNHSPAV>C-Sn*h4;h1!a#t?s+sMSs(JXS77z=kFv_P`L{yU z?|O})Ngh{mJA^&pv#VGOVITILyA#Sj?z7inhoIv=yM}rQd&Flq@LUL6_t_4bA?!h) m?V{ze4{(>}7?whP6DR!4Y~XH)g1x?id)V~YU5WR)5B~?EOYTho literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ShutdownThread.class b/source/.class/es/tid/TIDorbj/core/ShutdownThread.class new file mode 100644 index 0000000000000000000000000000000000000000..32a53e8fdaae5020499f873ad5fc057a3012d75e GIT binary patch literal 348 zcmaJ-O;5r=5Pj29TIz}j)dMksc!GM^#H+@Gcrh_CQNoo}cLOERC8gEhWdfRT@CW## zjMD%&;$hy*o4on_`CWelxWtJM2Zt4uQ1x+ynu}u>b%HY+n)HQm_MjIsi0K+d`C^AZKy17Lqs6g@3Zu{L il)1&;55GX+#R}F3vqFCWvDF0Zi+V3y!uo{0QQ!|tnn>^f literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/SingletonORB.class b/source/.class/es/tid/TIDorbj/core/SingletonORB.class new file mode 100644 index 0000000000000000000000000000000000000000..1fcdeb2831c7bba3fdebc908f081cd0fc8ea26e8 GIT binary patch literal 7373 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 QI!TiMG)r{waL*|CKWALDX8-^I literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/StreamRequestImpl.class b/source/.class/es/tid/TIDorbj/core/StreamRequestImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..9f925c92e3f616d8249f8661cb2bfea5728c26d0 GIT binary patch literal 1608 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 UvqZD>67envw^qaoXHDq;0rn!k+yDRo literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/AbsolutePosition.class b/source/.class/es/tid/TIDorbj/core/cdr/AbsolutePosition.class new file mode 100644 index 0000000000000000000000000000000000000000..a1e192100ef958c72f20ea651026841cac25689e GIT binary patch literal 782 zcma)2O=}ZT6g_V~lQi1a+SDYCAh<|U+JS-#sTRLBfl38Spld+)pVoO{mw`TN^BfORxVu(4ExiCZqJCB~YIx`6xk z^^uImN9H z2rM?Y2J%RHksS8D?cPB7=|<}n#m4*liAuGKt836piZTecbF3|+us#QE2wzI9Dy$5~Qu_>|UH=N>Gb^w^gK|D|mmGp` zv$c<~#p!pLyR|b|r+nfu`Dfc@~ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/AlignmentOffset.class b/source/.class/es/tid/TIDorbj/core/cdr/AlignmentOffset.class new file mode 100644 index 0000000000000000000000000000000000000000..014758f07378c26605ac5dbeae3b714039ecb0c4 GIT binary patch literal 356 zcma)1+e*Vw5S&e#OJme%MbNzXW?O`VzFGuPgo4rsOTi~ONlr^*E+swf_xK6=AO!_K zz;6<9tA2ni?C$LB49v&Z>pOrG?0B%S(S(Uj2Z6_P%fU9mDef0CpDP0O33e|nQ+-Bg zwELYAkBcf{sujyTp661l!FW7V`l_x9!V&*mtC`SgB8L6Ts*W-dSG5vxQj7CEos@+t z^{?WTuzss${BR?uLmB1Dhl`dE8xG;{pC&6!lMrNbAw@3Bi5NtgiZ#J(cSbniP!@;f zC@Wvy3@(;1_89H{V8H7xLEZ2L#xq~R{2KhfpJVng__i0g`++-6dST!`!ZLerFz>=8 P8c$4e7Vb9a69EC=gSJQN literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/BufferCDR.class b/source/.class/es/tid/TIDorbj/core/cdr/BufferCDR.class new file mode 100644 index 0000000000000000000000000000000000000000..d12fb1e005e5e9dbd4d6a8bac2e3afac8de6feb0 GIT binary patch literal 2500 zcma)8T~iZh6n@_9ZZ-*v5zF$?Bo$O7Bxn>{tn#7ZqnZ}f0%C!-VM!JYgv2Jn4!!0t z^wzfYf*UXFjD}9_IKA!<=w+vOopGl3tz)t0>}~?`A)U#b-S>T;=X^Zp>~4PD`so>f zE-d*FKwQOu4=%*LcpHOkhExpu;Km0&T3qA1>s~SmMt#WUBR&}6gHc}IU~`lAZu#&r z#`s{I&4h~EKIoX_vk5kLc>5C-Q!1tf>f&Q#@u}qX;rP(-SaLiuJuDy+0=0wrT(M;2 zN|Q!*#gr&lMc~-@#8~3SwVh}_IU?X$PNwdzA>NM?iDV zlf}$erhvOQlgpI)1>|s|W0Ed|`7~`S;h6zmwuMK`Vyu)&$0ia(`NG^{ER`>qu~fPc z8{{a1Lt{OR(-zFqjg@6rdCr-rZ5!SW2Dnn7l%9Ope$-KxuRL91U~&gicBy~UMS?hrtZJ4$u zX+}dEx&)5y?!AT+IH}7Y#79FkY{M9|7s8X~x5vi8vAc$Skk)f# z%WuUPUoDo*WdW~IC>X1${Jm9y$bP)NK@*lQZ_zB-g$slap4F;0Jr0egszQ^)9Ww)H zrI${CUK28!5JU(9@6gJH<7h_9j&&;`Xjm*H%?n-qgr$if+fJ+Vbnc>STVxX=@)WMA zO-N55M*>fv(Aqr}c?@L}Y8jq8KM)WWJ?zk94*leAdh}U^AKirab#jM8jzY3xAKycM z44=i1?j+KnI>dUq3d+PoxyfbJJaqEv#2E(>CdZ7Za}e^kP~{EC5<>;fl2zdHUu8cu z>||Mtv&3RCngb4P9e%zGl%f3s_apJB%9bD+iAB$i!|fv`zqeZ>Wz_aceZjyw8krol z$z>c_bBT>t&sjt}1NyxD3ss00)I-4!sN<@^NyEo?o9JEs-u(wK+#UV{N!dI;hgnqxuzD>e$;43!!k`rG3 z#)>bMQ8yCh_VMxT&z{jviIy_*I4oP0NR=mmdEG&d*spRL%-wkcS_Jp9>1n3YwQcsa5UP&m(kQ8 zqGgk{B+*Edb+kludOldNXywK_Uz4eXKcsHA?j}?sqPs0r^JO_&y;Ul^_1&t}?a@8D zx{ju1S@&FMR>;_nJml!lH8hEs;8k&jenP0Y PNyEI literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/CDR.class b/source/.class/es/tid/TIDorbj/core/cdr/CDR.class new file mode 100644 index 0000000000000000000000000000000000000000..bd4a035f875b9bbc777e5b9bf469eff5fc87f21c GIT binary patch literal 2536 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 UL^M;t%XKWNd~M@%Bs3`f7ydtEzyJUM literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/ChunkCDR.class b/source/.class/es/tid/TIDorbj/core/cdr/ChunkCDR.class new file mode 100644 index 0000000000000000000000000000000000000000..00e83a8d1522429aaefef5c67ecef851116a1aae GIT binary patch literal 773 zcmZutO>fgc6r8m;PMo;V2HFM!^n(J9IauP1kVtwU5(o(@4(-8moNeqhAINq={2s17 zfJB6ZP=5eF3h|!3DM3P(-g@`V%$qmAe*d@x@B|O*u&`^Rf;}$#T<%wKP{jj*+B6uP zpPs5zz&Pm&G^RoLAxtLWV4?&>Utn_@d`$8k!zQY!iatebfLNsC5bOD0 zSFBE2Yj5)~I(rqqKPt^SB(#DeD!I4m@uixL^0*vcPI9n@mV+v44s6sNG~fvAs?5)m zp?}mroTr1aAI($cN5jULAhSzdc(+$OgELpQ!?`ZiiCbXKj+# z-_Sq67eC-k369SA5oY{Jjyj&RyCF-`&B!ow@7;UPd7g95eeMZ={`=b>0IuSPI8Ni^ z7+%MNI6lFryn4vPBOX5E;d34y^YBHShFlyc@FlObIF^v-&jJrR?=8o16f3-1<&~je zjprvk6nQ8qFxlGKv3O-EC@c6%KrQ8#o=H7tRSJ4VKs*xYEajFpxyqmCXLLI&jY9VR z^n_JeTFd6Gik{6ED%o+%l=`|HpI8`jJgntqTbBX@fgWQ;W5q1#rkrz3$t_XJ*;1=W zJExInFxR|g5Lw0L>Mi9AvtU&8yfiE`XIcfl9qV+%_8yrMYj-JEwrqpFZO{EuV9@h* zOV63gRn*NDxtg=8ZL_6d=c=+?m5Z{XYbD~1-ZD%>4hvjLwxQe0bl`zNWZcP4{x63> zP~TMr+B9Ddv&U9+IpqoAVlwz*efR=hhP_}}(%TaVCkIGUU5ir7Kbh6a_qC-W-B*mX z;>tiE9h_ZIRCU+EHc>VElGKUxHfep%m3k!kh_h5FOW!UV%{Vtq*Vi_<<{M_P!v(#l zOWg-R`SU)JPzfs1ld?d&g6`A%p`v9ysg~nCvY6<~oP@nJcYb0e!m4Y#?+CEF@irCv{h;%!NRnwHa$5)@tCPGIB! zpsko3WiOS!sR;p+n#d%y%aS@kPBr%{Og+Ub`VL`>$ z7*}x{<8;L;*6~cmH~3b?bKFsJ4|8lVt>P{Z&oN6~D5$ghV&OzN9K!hy-}CB)z=a^k zeMzghk81*FgNz$ZgNoZMhBkf;4GJWKz{i^O)+XDgHX(2%uNCurNxIu*rYcs6`@nSY z8*9SgUhh5)LL=R@Mw4zMon~u7OBjtGF@ekho&-ODFg+;xiKalj=G#Z?PQ|OzC}!_! z_NwHrOhmU20R2jcfd}ZPe?v~wzc~sbtYKP3Sh>zjGInMXG0h>?u``pDoqbX>%|}4> zMux`A^mUc&LNs4YZ9}BOTL`7Xzk=pSN^GGcHMoT+uM{3Se<4da{#l=YWY6ERPQOHm zaWV{&W{?*Dw{XSt@1a?ce@E&iIyM=dKCj}McYNME?&9NJD3J|B!aqAkZ`0U;P-2t; z-od+`N3WMqltYiy1HO(M-npMJQYXBL_gdUfQ4V$Yp}m0o?ja6@ib`zr4z z(wQ2%YB-c(C;={67sCIbN5O=G$w5M zou(+IHRGn-oBAC`9}aHg7>RTPC*4mzqX26-zKuRsFS$12Ng(t$E-0A)3&*JWQ-k-Y zu2FUQdd`r2=Pr&B*olX2?gZ)}-mr+#dKj3FA2#bV)60{IX27eGz` literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/Encapsulation.class b/source/.class/es/tid/TIDorbj/core/cdr/Encapsulation.class new file mode 100644 index 0000000000000000000000000000000000000000..4a3920d26594408dd750b615837d88bc9548e74a GIT binary patch literal 2912 zcmb_dZF3V<6n<{9FG<)!BSc=>Qc$4DZp!i^_|k&VQX#c%u*C{gjoW0KrX<<0*%nYg z;*S6wobd}^_<%@TM;%7L$c+ENKjJ8Q&Sq;{yLE8J%P%Yn#QAYYx?m zR--vzwY-W`?-P(~1==9c8Hylyetdwo#cPEH+iem?zzE%1bZRxTTyYxa`CR_uWNR}a zm0F=>d6qzAYCxc^H7YnWGfmqQ5V_U4s$DO8vxMlc)GOX;f#G!MNdc+QwQv@hNdall zDcJ&J|Ci0Ffn1L5DrMWF7zyl6XF@5h#*lW71U^R78S*^N*dP+^{J-eg-h_R9-mVvk ztCY@g%w(FdssegA^^Lchxk^Eu@T}ssQLAyuny!+q7?~fOtyC#bj5IM1rMl5n3pmuu zs>~)HhQXAgYg-;2?1i)b@0aKY{JCi-Tj%HMjd^dvBQ7-#;O1@*o*Q4Yw~tDa0)NA; zunXC67uaor<>$S>&*<|rjZUL5fBLVewTFc}6t;Wj54SZ%OJ!coGLnR%zY&x~FIY?E0*7Qp~6J|2B^$2X492%d<<;My~ z3r7U@hhIZb4O0Vt{xq*u8eILunPI}uRBlo&yI!SU7SK4i3e%2LwJmDJbU9S(8nx1a zTb`YFOSa3vt86Agvq2jcI2?X%C}%&3dqQ2@nDIo=uad%i)nS5C+V6_V)}+G?tzfyX zMURr2Ug?=p|H(;FIc^9py%-7K$G~2@KUiZ2`|0WHpeI*Bf^&)fNt~I!rsVWBWhH5F ziu#)JmGm~+NeKsm42=#Vf+*?T`Z9!WEFz+37ZKH?i;!5zU;9vo=m8{45QS#<{R7gw z2t`jxgwazn!COe`w8#d?BxylNS$~YkL*KAKFAj$+OAmr&Gjv&ASw4cJA!udA_%R$0 zmS@RLnQUG#obo8W@l6dVaa_=#e&f5`joK}>s+fi}c-+WsV z_y7FW=O^$AS=7wpbWI#yqoZYXE31xDXXy*b;^FsDuh2w< zz9@Z4N9QtPOuc1TLS#EVkK7pobG>wT{M+>i@ux^KUOYl#8C$+VoaR=sQHUJ`eI0KE z&|zZ2{vS(8{@E$%F4S+KJ`oD- z2-!Wup51ME)wbf5vW%@Gv>@L@(qR4B61H77me6jHNG{<8o{cVHyRk|=j!67>98htJ zjyR1sgM&^42km2sw1ge3?h%r-LLVm;O{X~RTJfV8bW;q@;A~)GluU2{O??S3j*7AD zPuO_}+c}KcAFOebuy7X0ltR~ z8x}<(tppMuz(*nOObk?wD-kd5weOsB?#uJ@*S8-4ZsJBB1uPj@&Le}RY2c$aa%m{-BvqtA2eeg4utJY^pNxYL7!oB0=3FWF7$f4?u%xJ8lom=UJ0+Y|IF)e zk7lX$2ZG_=1hV6*vO;Umi=TWDe$?~A`oH5PXMZl?gpaVZ-_nXX8IE|EregN8zH895i_X*A?@Fq-69vh(y+ zQAl9XIRbOOBlG46+7MZ%Iz-NKz9Kh-{)K>0v~vkzy4F!MO;ci8oLVJ~Ab;m(nl+?-4x3!&#X=F1*D literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/IteratorCDR.class b/source/.class/es/tid/TIDorbj/core/cdr/IteratorCDR.class new file mode 100644 index 0000000000000000000000000000000000000000..8dfcaaf737fc1ce44cea7cd42e2467c96320803b GIT binary patch literal 4854 zcma)9>3KWBuAA`8Zhhuo146m2rUN7F@M;+ei#hd)_;?1&opP$29WO%E5zD-td_u?HgztfLB zc$WR~@VhtJFDh74bj;fr$mB`?0*fXhC71z+_egs=JW z2p*N=$3*1Ug?Lkd1s^#S<#WqN{*Qa{4Fzf{vV76dB6>EiWfdrAt*!jZik6MU;@mnm zt>r>SA|5(DHLhou&xK-oRtxbcG-{&8#^(nWw5B4ld^W44jYw=QpFST+=Tl@irNGM* z*->!Rk<*v}EJprRB%|jNMnX?3*qe%I=~y(A%O|7OPD?5hO(s^;DUqbFtmHI9L9Zj@ zkrFm+LaFG!R3sVA85J%HeAG}+8`?TqUGK{zKaSr$TGEYC9zK5nOQ+4H5D__miC$#1S)eFM(%9$C)m$-JSJ zz=OSK*-R-rcRrC}=*=1}9a<{ULB3QzXX$Hg(YJLbQbD7Z*7K`t3z=w4Q!$IMij#PW zid!+FVjLsv9!_nj;yWRHVi#nkA_TduVhXpZI48muWSGIUiZgh*g2PV2>_k_whJ-Nr zriyRjii#+fRSaQRMMhQ=vU(EVRxyc}syHQ9d1QTd{0FL-&Zk;F%`FC znmzO!Q!13uLsQ{$sVF$OU}UvuDzFyK1=4z8S<})1NeL}3@_)c8cG9(~fKY&RQwb_Q}J`L=@(d0(57csLwag8G!~v89SO~h%rBf8 zp|VXAv*UsAWMK4;$;pX%FMg@wSNOH?_>C98Rq;FF{(EuKAMi&Ny7+eue^T*h@x=w) zt>Q2EEBmo&bTXP=4TYD_X)*TT9_PHPRQHsbEf7w~mF{l2o{@2zsU5N)1 zkN1@6y?~R9QtxD!q*7I_ug%i9yki2{_)j=-sxg}75Q`>ba`9`H&nB}vpA`MOSyID; zjx(IYUKLWuuvdl85mPJFyd2m_OOft(R$)g{I&Ly*tjU!jJ}rfvzU%(aS{&0;nWQEc zDsKxTPk=fWo|&7TI6W~QnGGulOz%!W|J=Moz^DEfnONB47{{8c!McXeM3Z^G0rt`$ z^J=r5&nR=J_BN3yJEvSgJJe;;rG@{RPog(i9TXH2)NK!hEU}=Zr?$R+|BRd?oUZ!c1W_%0S$A|2M z*b}5@Td9Pvqlg)2~3GDtI%Aw>3KJ9FDRW=vV%W#xzJnsl8CsVQvxyi1|Udc|;+w(YrGg5kz`TX{= z1pB6?UVXuS2EQaFg>+eME0OjGJ4h>uPAdM|i|8+*`B<{ix6pZFMe}bb1tEI8==LP=ei%m^R{rK zSvb{&Cp}4ImW$|kxrjpC%pzy2ahIJ6Ct26eAMUg?enAm8@$(_GXWhJU?H}BBbr$i$ z*@36%;{m()IZM%dF1st~)&%!e)G6&((d~snA^EbK+gZ%g=^Di(PX|phRg|v8x2LVo zu&vKgiuCZ;zKIttb!1L<-4CyO1N9wU@nJdYT&l?Q!Sye+Lm8DUU&lq8Rj)0t#bm`I zy5&K5Jsa>;saprvzFURtHDxsq*kt}-P-x0pDtK*~wRA8s!{XBROK_rR7f>*^$dJz>xq*qCkr6g)1>mvRv1&iRpAK;G? zCnkpqrg+)6JM-R~ote+C_YVO3Sa)He@4&=Tbu8Ohv9ZeF++8PSq2-fi*glmHLT9PC zIv$j2l#8TPQY5JoQB8>kmj^$R`!XYqnkBiYDYc|?m=&2mVmR^tQ=^qLWf}|_%&1Hy zgFBYG`60uOAGFGUwNa@WzuBs(q8?nVdFa6QFb9WWvu$E$vAUt&8G3pA7>nDu7>n~! zE)$wF_k$s}XbTpt#vmj=x|x+FAqTaDc{)9MZ4iSKcEdNYaCZVD+?#;EPzXd>z+yw} V6Eccf;VX>iCf!Bvk2J5-_y(;EfMfsw literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/PointerCDR.class b/source/.class/es/tid/TIDorbj/core/cdr/PointerCDR.class new file mode 100644 index 0000000000000000000000000000000000000000..0680ef9a37218b7ea9ee6de9ce13a74c7a2d7183 GIT binary patch literal 1164 zcma)5-EI^Xtd8NwGRkXASkWkq0_0mb;l-5w~A(|<21Xj^;cB)ZT-jtZ+jj1 z4HLP#U3VW6G|ji{52HdMvr7o(or*<>R4sRyBBZs`*?KaS?9V$WT(eDK&j+%Zc{rW&r9otj{+Vg`na7|y6Ti%Atz!kojjjO!|H zAS>ghid%@wxUJ$2?y5*)LB&192}^#GZ98?_wc4y1VX|SqG>xWdSBYUgpWed%H<%1^<-}FvCw|(XZ_YGZbpeva4>5W%h%QZ;>!tZd;~n{hL@jjoLVz z)euwdn$50-6#o(`|3yIrga&*H2pI;Rl^A#ygZ%`Er8>`cmTzgs1=-K*A3^#`4*@;d zgQPF?5Y(xM(0fjT!E?Cal}xcGj)n9O2)y&s^N632mfm{l#EI$PD9vAjSN#GKKfpRS z4}C>e%1IBBe3o8gE+Jl+>|>%2c`x@WKyQA17qQ@8PEUM7nAwUdL5XmYZ4A;6M2U`& YIO3fUE*;aD;hPvDtoIS=Lm4u`Zyz@k00000 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/PositionsNode.class b/source/.class/es/tid/TIDorbj/core/cdr/PositionsNode.class new file mode 100644 index 0000000000000000000000000000000000000000..2d576d7363cf5c3f686e538da625a426126fde81 GIT binary patch literal 1095 zcma)5T~E_c7=BK>tz#61%rQ`>0)kt|sNqV3F&Z#&2`Ui+(VM2*8tCYHmVT(e#~W|F zz{EkKiSY^(f0Xe(T{Bd=gq!#6={e8GdEWNd@2}qhtl?e`D#~LR$4yagiE=xKEanv~ zsuqQx5~%(VvPA>TDT&I6;zeLJwZ z%b;ypz8=_ZeYdg6y=F&manI6QZBKvF^tlrT)^>cB;DxT?@OPGH*lyeQtk!@c^U!wf z;1NT;a(S}q9z$w_x5;eA;ruAl5(5dZeV#Eo3F^(#7fb(hcMTi!xYF$e?;L zb%x3)z5hQ8hAc7fnNCQfq%a!EbG)dLAd7kW&{g^cWJn@SdXhw-QKw9)r@<)f0@bUu zTBLo6dPzG4(^wypR_jC7v@ekRNPVU)5NQ!JF+hs}MLHp!Aun3(1nD2h9J6COOrxeM zgB1ujI~1zNxY^nnW(c4VFh%VHvO+OZ8bV71ox`}P|0WYmB8s8$G25@ z+r(|lFB(~afgStkKPB;g+)n99d>JoDd<9>X_!_=0F^*A6S>hX57TCWTs||gn z5EVGsyc3_93N$bk;mkQLWhC8;gx9cJ;+y!E z#JBMs1>cqU9$w_QzOUd15%Z`s&uEWL(T1omx?J{*gOrec8zZG>_;Gv{WO zDQvezwUMCO;HZAb*t{(9d%WIcpjJZyJ)12@15?xYu;GDP;*@u-c!u2>bKQlzwxK5_ zF5;5J8~B5O?;Yq3N&FFiB5qoB0<{H|yTqSyS>g&K`WHt1d5OQ`O^LtZ?-KvulK7{@ zzwmE?W38-kKh=_*B9NHVt~%Qjb7!e91a90)chWR6mY$=Q+{VG?h85Vm8Pj<1UcySC zzm=03W9w0d)7g}Or%w8?C_(*>MV%nO;co}r{|o^bzZ zYWoGaQnp*-Kh0*?8dnVu!M1YBgfaV(TUAjNhqo7EYP zK~JPkM5XO$)-}GWb|NV{EVCj-08^BWf+TThGwwl?pwt;88k1HbFCc>x(aA_C9vYvG zO$fLfVr*0(lee}AGW`G4c-s4R#L8V-!ZLF-r=3Q=;(dwHYj990pb;i(4^PfeCZT2X zg_Kq)fKDPXXi}LjS(Q57hQqoXC3ih3HrJDH8}&wMGO}gs)LjX5(5Izdu_w2l`%Mlu z@LXxu5k|MWoHEn9RO@bm;8wV`tmvi=;l`tU?CDwh91HZd)T&G+5^GP-Cd|ydzzr?s zDEWCBUnJPust~H%G>i15Gg={U8Rzs_{gHx3tuKh??!0b=)^|dc4V&jQ=iZgoa+aZ` z?$4yPT>cEJbQ<|-J#DO4&_04^!;3mZU9>T#<&8xBRZoiwXE!osnu~>OZ9<-S2b^te z&MIj%Z4zdd3f;R+b#0!bgk1;0P%j%A7_G2uH5JQ6(pKiNha7I63l&}%iW&;l;W)HK zY)z$7mZ$i-X^!f-hIZ^IPsV)t96@RGL5s#gE0i1JszpPF+o)dzjyDx_?daE-(gsxr zPl!l)E)TVWt0|dirHc5=sIu;)mebNSECWs6D!KL84X$F(G9D)F?qR#jei{48 zkf)nCx zLeZw+B;PBz6SM@5UWG@&n1bMu|I(MmvA36m=*(P!8jqu`%uSpUI?5n38t;nwF2m(} z1IL!(@Lj^O;u>zA>GrIk|00QaV}m3#Fi4CL2OK}AL70})AVD7s5||WRCBy@0yNW{! zLJID3UgLl$#ycr2iiJ+h)mZMsE+QVdg?tQN!cb)33hbgtzWf|eZ^d;9?qB|{1A64V~&XdV5^x(icqleLU4PAns T$L=Ny-zKt|R_2s3qrd+FPZ&f! literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/cdr/ValueTypeInfo.class b/source/.class/es/tid/TIDorbj/core/cdr/ValueTypeInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..cf83250c6b874161f345ac0741e83217abf668aa GIT binary patch literal 4913 zcmbtX`*Rc575=WYtCi&SOJG1)3g#_KN(3}*6JCk24JeUpA{!Dz6GgTcBakH{tw=~( zCuvFgem8AR(?aOOZ9`jVL2l#VByESz^sne|o#{+}?vNpI&)HpDD_hRcsXacs=kEE= z`<{FK_mAG51F#E!^&*P%9yH+vCNDab`FZf$XPJD?OJvdmFJAIuBVJbUikFzr^YRzG zxPVs`yvEEInS9BMFXJm-d=+0~_UlZ(!Q`7vzQyw2X7U{--(~VWFJ8y@75qTK58asZ zBFMTg;G%*bvB5XI2=L15__2rHe!{vhxpA5Gz3IjkmiZ|!{!GEo1>Ai{6N&U-*C7EB z7ijD*Zma{iy?8 zv57)a=d#E8%eqZFxg;Anf#}Ejv<&9qNYYud&DF1)nR?-nL7#!FNiNM^1;0=*Z4AFv zW+XKdlu`qxQ^1y0Q%}tx`2RC&Oq(SGquKOl(X@&~IIQAPbg4LiZWTRvKt(SOs^~+4 z-+rm$SNOHS))m{$Zi4l_rQ#`^pd_fcir=h&Tvm2QKBi(Ec?G{!@jE=G;F^l-yr?6m z;&~z;%&?dY+2FQ?&|OrXshk3WLIk7a92WLZ9Gpq zH9OitBf2A79eFC=!7UouOD6}rKBwYcyr<%QPS~IEmcZr(E%y9$l(e%QIW0e?pX%7# zu|vf2~&7uIVt-#>hshB2Ks_2OOLvUIepB-k}vD&)$#c7#tNW4im6 z4@f#8w6o<*j?So>for<4htG_fb!%E1@#6rC<~57=Cr{JNW(4mh)4%O-OB zO77F7vG3}|31Y%LRLrqFpHt>hM}DrNnYujY=n7MnQ@K={##A#0RdXaZl3Kdo=-Tr- zxkQEe7==|iQnhKt$ZXowT%mBLJh4#q{VR{EWzO0UQL9{*|LKuanPNIqEN0Hr4I*@+ zJ8s+sWP0PmHPD2uHpL_VgGpQeEHns@=yCIcq?&~-83($+I)hDVC$*xMAJKTco83cq z$tJoCgQy?(;{m!X#`p?|9mMan@we%XCmN%MZ!}4bCk<2MN%NGR>&bVTwnXE^Z6kTXtKk`lu($~a6KB{b z-Gt1quIuy_ka#Xyn5~3y(3*b=cqD#Ow6 zC`-_^C(4eo5k@pI!g0ACL^UA&i;x`_#2>CexrkMaY;jMvxa*?V8t5a7=%|HmW7rg$ z4ZD}>*5|*5{p;;&%Rg8x8!Jy9ila<2UE78*nqo z%mmf1nYA6oF$>;LaEZR}5J^)($hkjg=(qyo8DtH~NVEda6lCe@1*e#v|A#HRjc|U5 z1_e)wzz39SLFeL-rMwp|L;3c|+%0&Mq&YHo1#6X zY6jX^J2`3#=6Z28C%+j6ljt5XG@LE8FmuZ(M`brd=l6pmoj`uva;`zH3s5&7Ff*dLi;HyVLSwQ*6!*Ln!A;iRSIK}*Yh?NbX1 z+%=i`538$YhBWxR^pE)%PFWf@k_P@4wT*T{SVKqOeXy=o7 z8OZ)eKoyuq<1B(hzWZjd;oWKM2)-i|$}c&C6?BAW5g3}q#v#8n zgH1Eo%q1g@QL^o*U`y4_4UoO_GYLYaTgwO2W^f3nWtNz<<6UM z8+9nv%l=NXw>~c-gd9Ii_cLt@=8PE~Zuv<3L?x)V$;+Lzl zFaXCq9gg+0PVUlG+;aCttKXmIT-W5Bvrj|!AScC2>;1;s9JR4?Uw}XJ#52|cJV`5v fTyW3?{pU1Vj8$Vo(`q$!DrDbX1ZniOJ5=Dm8!nVl literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/CommunicationDelegate.class b/source/.class/es/tid/TIDorbj/core/comm/CommunicationDelegate.class new file mode 100644 index 0000000000000000000000000000000000000000..fa4ebdbd79ee2c2ebbe3dd2eca0507f7ecba7b9b GIT binary patch literal 8914 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 A2><{9 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/CommunicationException.class b/source/.class/es/tid/TIDorbj/core/comm/CommunicationException.class new file mode 100644 index 0000000000000000000000000000000000000000..1658c71e537d2c88f09b38c2809be0b31fef2e3f GIT binary patch literal 388 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/Connection.class b/source/.class/es/tid/TIDorbj/core/comm/Connection.class new file mode 100644 index 0000000000000000000000000000000000000000..62c8ddba598edb76dd55f86f7450fb7fb8bb1ea0 GIT binary patch literal 28233 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 Zn@Kswm&TKQ`;cugsXxn}m(#r2e*yc_({2C& literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ForwardRequest.class b/source/.class/es/tid/TIDorbj/core/comm/ForwardRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..6b07a798c547e82a8f56ca68038c36087ab8bb79 GIT binary patch literal 267 zcmX^0Z`VEs1_mPrel7+U1};tpW(IC{1|D_>UPcDNwEUv-#G;h=qSUn1qSUgjlgbWG-Rwcwx5V6K}Jq;NfA~v~h@kmj`HrJAX z9Ra%xN!NI>1BTMf&h=&s>4^(aKZ`~RmI&(ZHykLlH<$H!i)wc*0Lw`gtR4g*EBN_8p;GqNBJ;}&pg`qTa z0#Va7@7ZU_PIBHfTDBQd4@ReBdlt=5n=W;_`f-ue{6Bv5T4gqmB7I_pK08i}$|nnC zp+ri3k;Z7zWWcaYoU4a3N;p5(J`sBuBCaL|guWw1q6#Bl93ZVq L_%DWNmv3NZfLlaTV*A~%4i2p7cC}OQrSRl47cxA0r zz4OQ7RBo8!HtmYT#Nlisw6)vC5Tborw-^YJW@ucu)a<7vwYZ^X3RI0u?v!B^xGH)n z4o8;gS|AqRNs*iQ=iE+q#ynbCei-2@Q5}S=FIqtl-YV!shk`C#Q*d4EZlGI1J31sR zDpA==M6Knm&_U_C$qnwTs4g%H?5F#P z9^53`OQ$5o`)M6aoP#CUDSQe4Dg0s=5GI%yIYlTjO2@AhCg^UV&jCjX?4!F-Imq?* zW5DsZ(#psmOngJ=M4;(7=neO|@Y|knp9>$t9f!S|y_;U_!iN!a{I%Kr$4>URclJtg z3D4{SH~Yxt?oo_6$x{f>4j7}-1HaKAmhX^`FA(0kKxFG2vS`W~8lnoBGc=x~=~uZy z<7E9{LZ@V0jlwc)*l(19*;~!VhpX4IcT~03(l1i$nmL) z&+s`FO0brU;;iBed?~H`ilMso#kcs5VMke` zWJvsK-WJ)K5QXA}nQYp&rDu9D?`#J}IfTKqL8dyMO7Fgxpw}2SSK~A}XPJxA5(aGr zl*1Q1J32f%c5ZY{#2+XiD=l<2s2aVB!#R|$o8>skCQy^Pv6*?1q?5GOOTTn5DUe>9 z)k9V}jyt^MN(|1C;j#}ny{jwKL%cFh*qV&Dn>nN zzZdkHO^jh(O4v~&Z|g>qk{9zn`{hRF>Drp$WKC;mq*^4U!{jt6o}IQWT{3Q4jajhM z8EsN-l77H8OIi#q6o7lM7!G>*TTNm4n6BuP3@UkDlfTY2vQ`lxQep1|WPItwR|>SFraIgs?z99~fXr{AUSnn!M7hgH zyfa<(_`Y>aRZo~*-WYBnOBorFO&3dTY1$GOg(aLiYpc|9$=VVvL9Wj`ji~H1Lwm?u zR3e8%(R-6n^QF?296NTcMq1Sc9icWa$et;5(of|NnjC3tIBi%?e z)`QW7a+v-%Th>h`tzj;$UQ6Da%xroj2B3ej-)3Vj!Zc8+8S;j*(-1YDsR!W4& zT*5gb^bz4W5e_S6ot>&n)p*|x2{B2DF_$bcBNHN6e_8>Po|fUkYwV_v^1~gq7UFhiIcPn zExJ03`+alnozJh26@Y7;`Z)2?7Z@aLUsRsTdaO#zODk{{44>JMO=tA_c&BunkyM(g zYBAcPM*=li5*km!+Z);foYXh- zxJYftrc$M0fwN%8SXYdOZvvOQvuSNC7xzoal}%OILY<&NgTHQ-swn8E>LDs;Icv9f q7A+#mqcWj&mnR^w=YACMx&j?^0hjym+VpYI<{^$YdA!M9qkIFejcmdI literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.class b/source/.class/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.class new file mode 100644 index 0000000000000000000000000000000000000000..93a374ff6995e43fcea12457dcc11222cd1884e7 GIT binary patch literal 776 zcmbVK%Wl&^6g}fdoVZROJPLh4X-jFE1(rZaNK{DBZV(_4sUoqm9A^@oI-bZjmG~vZ zA{0<1koW*T3US7@s<7>1&b{~C!GENtk?;0-_^O4_?Yo&-(pLpn0Iuya>~xtJ5ZHg6fO(qgOKbi@5I}y*N}^Z{$ZR zlZ5fuAI56p>moAG<8*i!=M$C3MXb^%0$%VoQ-e5>TA-^6fw>tg;uC4pg5@*wr#-Yme)=gG`Ns{DaC0fyWeHa_DBK2&3cI;p8an zCG1k)kCLiA8+AP_W5YuOu7`Onc(|hBIu-;TUgDN?xf=qDqwpm3lQ13nZ+asc71-pf z)p=zOUxLl(tzeFpw@TkYlQH|3{NfD1M4ls+{M8x$8hK7h-s0D6%1SpGEi*D`-S!zo zd+i5|uZ;BjuVA&(EYS*bcKbVwFJ-!cHLO?Z=T*AB`nk;QmZ*mWRlo+%_9@KiDJ&j) wDyC!vZV_v+)=ksos<){-AL%~IKM-5LP%g@u&FU4=_YMQ!rM8EdR_W;ZwrJ)C7oj8G0Do$${ z$AnzYs5sk!a~j%lUW0;3xfzwPn1(nKav`9Cq_m$?0F(|S43PUjMmM!|kveFBA zrZ2c@=Pk3$kc=Ilx$GP1Og`&)bx{z$WmZ!%He3*9>FJ{BEt{)0rEGiVb3xy!mRXkS zqB)I@ehlg8MIS@_pO2;Dq7DNCIxb81R_ysZGHbj5t<}t7@;)`WgkOqAD!$gX<;<7kwcy*#G?=-lcW@(ZRivk xmf1cclvK#yLR9_~*dtq+jWkRmZ0tp5cG0yNAi~cS*8Pi+{*^}ep%L3K@B?19MWO%z literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..679f00f5678a1cfd9b7dfcaa027f514fbd0024dd GIT binary patch literal 2376 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..8c7b2563342bbb9cc40f6eb628c703a275d8d427 GIT binary patch literal 4029 zcmb_e33nS;75<(jXPohKv7N2i8i$b7mfeUXP!^Yh<)n?kOR!T1#}qNP#QNzdWv=)HOG-Q~N>yZ62RpI2T5 za2WqKF^t4Uyc-{t!7?y!B8&xDBu&^@lx3;|OERZBa7N}uIX-J3W8yYsWyl%Go9ID7 zP974*qAW`?I2%#MvdQ6L6Z`Rq?5zmhqXs_KfsdQmg~tp$ZekA#!uo`KeL@EE?}20B zlQMrwxT$RzpEmI%o-!%oGeZAa5%xJbcv`+bFMz%v2Va!oOEP@fz%w0q*2ED!X5u+K zFElU6@D*8p)xg&bd|g3j6Gi)>vR!f#>7>HIm|coG>16a|{Aj*7e@D@y^JuM?0j zJ1sHz5+=(|y$HQnv{G3+=S-&`wG~ucVZ%M?T-v!;;jR`?YR23jpFDBgwvu*ncwj~$ zJep5Z#;G^J*4);bf^~1jML~y?r|s!nil+AujGeKTt!T!|rK0{WJ)%>#Q)5yXB-O3Q zWBUUA>e%CcOk!S0e0M4AX>JswJUJEftnZq3tcA1VR^g;IpP?IWZz9bLpF(HRUa-^4 zb}XMoOC`nJQo|7@sf^t_YDK*6pWJX_#!4+h+xQlGnhKV%{_5_ zUWu9vZx_A!a53%JeuPU3p?(QMrB@aAHcNsXZaTLci?!kLB zVi;A}c5OUk<#dL*C4_St-^8~Jd|Tr<;u_zSN)bH^JjTyYEaaq3pD5QT9i~fv@ z8h^oG6}B{*H9j&meO#>C^gzyjq`+*olYP~QdvX37u4uf5zia#huWS4h|57;8)W90r z`mC{&LEf;k-JGjNyRRkf`lVtH&BYWBwIuawc0HJy_>OF1$t!)lz|C(~gE2vwWO={2 zE}xc#*eVq49GeOY@wInj`1ASD(BMSSP+f;v(s3_d;)n$YA zY-K@;UaWaJ2+HIw$dn3WvWU;v#S*KY*mAQHF5wBt3CUzptT7*K4rjd`*YkR+$z2O^ zxc{{5-9pmU6n4%Wo0^VKP9zQ`4zv9$C7D+Ot3DC?Uh+hMXQD8$!{!W}K55d>JFd&w$| z^T|^!0Bjp|&m20wkg-`HShA__K#TA+WSNA3BK*r%N@T5KY01in2(e*g*-B^phAZvR zf5mi56dOUbdtTx7>mO?@Uxj?p5&md>!S@<^H^m3J;5Si){VmL2Xh6(|3Ry>&%DJ<` z5^s^f=c=5s#G9~-du#g^sG z>~fsjq$hKh$25$A3%@Y7 z`Nv_5VLUi~9PJ)jo5x+RVM}BUx6Sf9RKc58(RBf)9JmC!hMw6$Sya%wicS2IKe23f z$;MUK#nxcwC2VtX`#JOkRD`(Q#SXDfVS=N9(Dn^i>AkS@)d0)W0hR)}c3wgF5@%xS zTEni{-rW`4ahV|YR6+EuVy6)DPY`=uym@^^Nc&_(NN@4aH&-Evh5NOb^w?oF774H7;JS<2p{{!O z;lp?^P_{x}h_Z1q4V{y~ADQiaTLo{wETXHKzzt>sH?DXY*hT4gQ`0+Kyz`U<=UpyZ U1*N^Gdu!Ef27__=NMJMm2doN1EC2ui literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPHeader.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPHeader.class new file mode 100644 index 0000000000000000000000000000000000000000..df38e4509f9aeef1c64b5853330c1217e2e8c404 GIT binary patch literal 3794 zcma)8>vtQ~5&vCF>s=`;M;3%6-~<^+BCkjU4bV0rF0!rIqLO87C)9RRv9{KVjHFei zRUovbY3YL&XnC~|`bbJ2hBj>jCvkG>bLdA-`?-Hj52x}yr$rF1#j^7n+krx-&bV(QXo*tpEK%>l35jq zXN*R|Disp5=`pjuxRO{h>jsfZB~dJywZwQjH+9-kJ}#hE@{8v!BX8CVMqNP63xq5A z3Yp}W>w2+bRIP?UABl`cLoXV6>wL`+IMn5kY@;|!iuM7nVWadM8H%)kRLM6iIxLb| z(a-6LvR*AFW~_RtT66-USZj5%G717aCQ`|<)O3C(J)aT?jhfYlrB|)fdbw%%sG_Ps z@1vz^$r={$#fDA`_(#nG9ds(zCB*hTbW!zg!|p@Nb+a-;DNEMt`gwsPv4xSLF7|xX zgrQT0>4KpdOJ90AtJh}r#j-(dCJ;~h^2TBrvtCS?m11HvH$9R})XciY2~Fgh zR;_7KKN))EIGgy1qfUx{N<$RtiP5p?bhX`xszP%wpjf8Um;$#`GH+>DnpzoesYqf( z#c@2U62cr+@em$X@d%SI;!7&NjAJTJ;9-io`)E3SB5<&y>Mg9`(2J$j4s(1&- zXgEK^v^_g2zK%08ex>5q_>GF+a+sHplW|$a?|AVpPO11k{vfbxYqGP+>6wXSM&Rg( zUWjsgN3+hDN6*@Qek_`vg1e5E3WOx3<&sf9BIA!L{)ANy{XGu-eSrtM`f>3s zT5VPq$%%?dyTovev##Ag~ ziMXLCwd}&l>Ew7eH94CaJ40*GFf3%!v$L60J~cU(PEN8kv@nt$Z(GX?3|_~g?DGRc zz%yjkIy<+xVk}u(L|)4ccJ5fhb?W%z&O8ittaT@_XWT7SO~T!Kw-&SGeljNz-3AET4G4N4iQPKF>278WAy0fN+HAp%&+!bj zpjzRFBwwmhay3H8F19VCc2ec$O|CSGlX`{nxr=?Y+G_JX?bT~Fqe}R9xWnadwQz@k zk~PrDp|_1e`aAR>y}ye6uj(jKFznf1LO%OT;Aejc|LiXTr2Qo*r0-q~lU(2{#P{Ga z^b=1wN_3PYcaV$*3_O4d`{2w5;siVcO!>9SK!_P$0?!S&+ z=42*{;~{_)PLd^`G7P`%;l6bQ=58RE(LM^R??Mt+*Rf+xkY6<$zkdxOk&R!qPah|$ zKzxFJ852m;%1_bkq2J^9sv8&IgkzVqYw)odhn+#T!*;K?O=#wBM<}))GU?UsqI-C^ zp28Cy%>7qf@6(;lCC_|j)BGU0;o$l?xNGQp2a@j!@e;cd;QRR?RAOgwiYTXPOGvWk z^E94x_uDTldm(+Tb4YF#1m-qFYByIr^LZ?|-uJsjimYSjoQU5*IIB@j`bE}@gq|^1 zchzl)7wJaIMX2%c{2C&w2*ktV#KgmCo91jf#nef|ZLhWXKIS*G)5jYAHQc_6LEj1H zFG3#hUtm^ZR=RK^KH!=6Uc)Yrm)CFyN9ZIqgx;_;{0aSG4gMDr3F*mpf))$3_LJg& z;%nG_Vjw(z34wv|{AKKCK{$OGyKE+RnJ&bVsY~cz$DX;!Uf+kf^9Jtvr)KNR{#E$7 z)3x|b4DcvWjX!pE_j$VPVwiXA>ffgAqg%L!^cmFl`JZo-X#1qLrQ~K~zs6o};%*+W zYv}b3iF$|d{vZurD*;XHq^S{ih8~yk)CRX1O^^(o-c}NbyEm{Kepf^->MFG)wwB}> zZ T>@{WMDO$@gHqh5iWiRl5gS&{7 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..04dcee7cfc15f5034b30a0b48f7ecdab22fc5a6d GIT binary patch literal 5021 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..6995d424cd957232452ada88e7f48c14edf0f696 GIT binary patch literal 3382 zcmb7G*>@9F82{bQlu6S|Ny{RI0%a*AX=x}5Dn+m@2+=Oklxjf@(`K5cB$+r#i$%p< z+;HE({e?cr1A1u6u^fH(U(%y~-(=DzZ6fg@clq}1{w9C?{p)W4_Txu4ycn#(9)x%q z;^mAR!+5d=Pho_wXEmI2!-c2$@(lByb<-)#r}J*;7}2E_O@ zso{bPaW^&~p&{u;BTUv!@##4hv-q0kCBxV88cboDRWGvT=lMFrr%SxNpy5RgFA2C3 z;R!>J7?yy)*GLC4u}EMjc+9j$Cj(=qWzdpH1fnrB6*v(bICavN?G*4N!U-dt)}uyv zbZUH@^>>!mk63|jTcYRKASte0QY6!*Cv+=4p~smc6JeIK$eBq_ z_Vk)oG+-v8fgXn%Gn0#F(+WmF(Zb+>QF`> zyU?enhV;?6Vb|+2)hlC$GFB`Z6^-k*3dLXVRqk$Zi{MJN`Os-4n>9=3fuOX8>3n$j9h5`%Az3KoDrp)QQL^*#nIs;Rg)KrEZtDz@Y{9}nv@TtUS_*~)(T#@(^UrAiU zb?U3c*Z4-_FdmWk7Dpw%~ z=miOfX3`lWLC~mMmOe9PrU*@F#+O&5GgyKYWZOH-Mz(}8^m3`G^l~-tx$dB?R!t{X zZz=PZ3r4k*<<=L*kM`cPE&R20#HlrIf`~=s_R`_d zyD0cl=XE)LNv^x5^;n$0WH|uLbxQT->SW`fjd{iIE@fI7)(I3o8@p7s!^a0h!GZp8 zM|i(L>pfL*s-K|hvbKbz>cig&*{ z2W=KEme%|WaE&O+JZk3P{+ZYU2WYK_@(+2c(r{42gMg+IgYeYxzm9f6VlMw}RAo_n zi_WZi2%U~Zy(3Z05_vWuk;4u+>_%d1*HJBQ(LudV@nj+CsIW>d6ctr9ZaN>qQAfFf za^kF3apnpK&9aZ8YXyHZWtis^Fgtvfa`=uVsjQv921kXpcErnY-Iwa zyiN4lvCZNDQOH8Oor6c-bj z_6xS(KwT^4up^6|v)DqET}zafS=2hr-AlIJQ2xRu4Sn?*8Sck`W4>@m-T9`R!fA(H LG-vkXpiuq=#wAZ| literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..b2ba1be3bdd888f27eb75df00d8fea7598b9495f GIT binary patch literal 9292 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 SAbhxhfb4Q51RTr}0RID)rZ#l| literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..1d7a6fae543dd5ec92512ab634eea4f8aa0aa478 GIT binary patch literal 7537 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 I8`&ZM0lm{gD*ylh literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPVersion.class b/source/.class/es/tid/TIDorbj/core/comm/giop/GIOPVersion.class new file mode 100644 index 0000000000000000000000000000000000000000..ac86ae96280bbf82bae9c7533e2f05ed4e6dd141 GIT binary patch literal 2039 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/MessageFactory.class b/source/.class/es/tid/TIDorbj/core/comm/giop/MessageFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..25ca669ff9faa9dd7cd78a4cbf6fc35e128b535b GIT binary patch literal 1101 zcmb7D%Wl(95IxhRadPXHl=r(7DA=K?3#z&)f<;kjq(+4{DuNBVaV}PZ9S7T~lnp<^ zAFv7%0*Oj|03U^zTijAu#NkRa=h!pnjBSm7{QUMEzymA`oWW&*E4W(1HC#6^Cy>Vt z1M>m}jW-2~8gB^*jkg6%jSB)Z8t({{HQqH~5eg66-FEVbkhAPPLVi7LDS~(tg~6th zEfo=7SX(M~l6K2!)SiS@{T5S0>KloB`WJ1@{arny6xlu$(=7N4@K-I7yAQk3(1*N7wTQsfw_gEm)UbSNVUB z8%wwqx-wD!3Rkix9tlrAsGTi4eyRJ}y&IAA0@XeGe1yf(n$&wkx=9!f2<494myR#H zp0nNTC^sQkqaFS%46mA}l6vel20h+8+say?w3U}| zJWlifrq2XO?noKbG31Qk#OMM_bYhbRhySRPhE5+EeT56x26O|jjry9)__$xkcB zkZ9r$@JAWXoi4cYiAm0xJ7;e1Yp1{e{P;yg(^Sq;4=rS=n_e(2GA%K^WLjo=#Z+Qi zVOo{cFKJNHu%r=51xe$QCL~R1w3fsDx<;=BX^qOUSwFG_iLxMB*|t6(S$-g>z2rK6 zU^>AbUnfxn!TaKRbi?wEpmt#FmRDSF|Inzqo&{<&47=twjZNR)J!x9=f-;ENte0mT2RL&8L=yymhYRkwd#4U$8H%Uh--qfl{L?_88 zf>MR@*dDf$dw}7}kDlA8)Eo@9h>I%^uYD<DiQ_=B~M4M;xu;+waTHjd9C`YCS3;Ss2^Ph10B^V{ccPjf{ucf zelMoqhmIbU{vf80LPuLlAB*Wl=;&1G4`ccx=xAQ)MogcCj(I>&p=vaX4j$vwi&Fx7 zu6RbG*#DgpUvVPJ(kwlRd|d1T+IHU;b+@G$j|IB{%m7b;d0+`B0qelqQ%Z)XlmgN~ z2G9TrWPw~LLU;-F+cwHhCZmPqbM!1qZb!-AM9DcYuk+;7uxEiefD2dzmVp($E!6X& z-X7}LLcJr@J43xI)b-0r6VW0`&k>+C6`T0aK=k1!b-z!Z(e-bXWHY7A6q{*frrFFW aGsC8)OpQ&cOvz?v%Ok7omP@WRX8H?Vmg#f= literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.class b/source/.class/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.class new file mode 100644 index 0000000000000000000000000000000000000000..f17cabe2e6ef56bc95a0ef65edb3696cb7ee4f9c GIT binary patch literal 1471 zcmb7E>rN9<5dKatbX!|4E1-ZNs7PCZ6+}@$u(S(lLR-?UD2ZmXluC-dr7R@8lJUoi z8WK%>03XUYv)zPtt3TLe=FIu#J7*>{bN2V2AHM)BVmkyGPlM>kGgiy2p0j$vYK7G* zt2GHPC9F%>knl=ELc*qmWB{oUIn@BR1Oiq4%&44}1VmaOqGxlu`ZlTV7Sg#a?UVJ| ziD}f#J?3~RI0V9-9A&3;qL}4FrI1e5n+L~AvED3^s#cYwa=oGCOO498W*X+{N#VRv zS{3NiUu$aqDh}T(1bRDBfdO6H*9vN;lj#xYcjL_6$t4qvRd`3xWM2@JUp*iJr`Rn?THCsL`rs%h!$ww}qQR6gaWQ~z`d^sJR@WpiD?7fr|Z zXi3%&sn~v}=-z0I$}W9q)~kBCW(q74?b-#6Pvet zj*T-zsTj2*rG-)pq_twjNsLn13nPZ5Fm7TnjN2Fq;|{C4tnRUzW);PVz__cOE0dkm zFyZ#Qn>y(xboa80;_isRwEGq}#c5g>?>}v#v7Wou7<0wqG+kG<%^e($ZzSaR5sBbMB2$$cG>WR@A|V>5*(!K-o1s#%N{&~vb~(4*@N-2%;wN`oXT9mTMY~Su_+~99O-x~0!iRvl!^5=MD!f13JoW0F^5@QQe@vO~Uw`5r?j zV;8>$5aI(EnFmm2jOT z1qz!>=;{?z^&)6NBxKRE=fdXwDJ1`R4A~q=tOGuR(U>i+sD{@F|%b65j3yB7a z1rNYOA?_rhiBVIr@VztkckawRGye7a$4>ySAS_t8Z^Fa_9hw#%Vo!%h79Qh?4*NPh zHSo;9a|S-{2Wg_BFRCAh49sWPUcCyXk_@eP(L|^?6z~1xG(Q`PAk8BYgt>T|1TvdU zM^eRUa>P)39VfAR!%%Vj_D4$HG>jNL$N$d~T2%d<$BI-PXQQZle0nlf*;MsZ9?9{M zmThG+SFs$OMv@xwt`+-9QCpdOinCRT9?dxFIN;a<=eUV&1BV z_UYnUbel_{9>HnE^a)U|(Ws6FMVn?#B1)9&?sqV^d4ZD4E>QkTue79&oi(sr1UqZs zE!&;NRtY+fw8bbdQEo-_n81&p&R55Yy N60r%;NOkoYe*i;;=8pgX literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextList.class b/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextList.class new file mode 100644 index 0000000000000000000000000000000000000000..ef59a6fcbacef8dd8fd77d36dadb2033b8fd004e GIT binary patch literal 1324 zcmb7DO-~b16g{ugGITmcC?eocEq*|mRv#2U7DW;)3!AhdX$g^NAVWK82HKfsI-qgQ zuQ0CMu*F2dNW`UyKgESBR|b?jrACw~kxcULotO8{IrrZ4zWn^K4MjWpNd~#LT(W9)%hXM$!N8y7^agi~ zGM~@RTK38+FIl!uORdH$hE?Z9-QF-tdd4yx{kfB7=$JB0!r(o+^ znc->N8?S8h%xocR*4Le)Lq}`rG4F$Ih;v56B@Y)Jt+bZc>hs!4Ri|PZ0?%y2ApuKm zn9l9DFC2MYIRihmHdqA;<@j`cLCm6=hL+du!y%!OYl5r7}BJRkzi-?Q? z+>>z`3Pbm*wxRK=W>)yz%Bo&+7=*ZMf)P)uQ!QbTT$?PfS1q&Byql#8Z#|nSr|f1Oa87hd8VX)Y=&WaydHQ5kRZqh mkO+E!pvh}3=*bpzf3pmNBBfyx8Eyi6KMCMFgvbbhns)@OEnw*Y literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.class b/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.class new file mode 100644 index 0000000000000000000000000000000000000000..ea5daabf597f3bc587474959264cefff556cd186 GIT binary patch literal 743 zcmb7CT~8B16g{^~JFqN>pr{l-P(xa1GLaV&Aw1Z=Y+|En36Uo=-AXku9)>7k zN#K#kD*|PKRYGakWXA0gf=cy(Fjco*%`VrfOZZTEtB<5JUAZ4OY~Jb1#O7Ki-CWii ztvDMVyS8KMV5d5nXa@t?Gj=H3Iv<%t*KOwXiQ6H}wVg^nHPvumbyCe;MTjsb@HoN~ zJSDuESol}IH>P3oKa)myhBd`>*-sMMz?Y~EfouXiP` z9$*cAYy2sIybgTNGrG&3*cUg(pfCO(Gq{6=t8dHO74TbY<0}fg)GVJ~Qt+Bxfvw24 v$|l%0&k!7rG1aUwxmf#rh7v>Z8%`gV$C$as96?+j+*WXbmn5(_&mH{)W|qC5 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceId.class b/source/.class/es/tid/TIDorbj/core/comm/giop/ServiceId.class new file mode 100644 index 0000000000000000000000000000000000000000..02ea8f35b8619b0dd475b107a79ce8e07bd5c020 GIT binary patch literal 509 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 S!}0}d+%%<gc7VT}(-q_D;- z5-F_n$`@ppz&9-JviO$8cM>)vd@nF&)U`cNb4;~eZ>t^65tuJ&uHxxUWxcp;Ih)%` z!*VndhN0-XWh=#Eb+tgd600xx5W3k9p$vv-TMf0XlvwtHj9k}E-Mc9;GaG43u~chI z3z@qD!v(9U35>3JYU7u(YOkxCZOwnrJpswle%;YrPvA~8P%XGG8g_dj(o_FKi`5!A zCB6lcD|-#i_H@g1CHz1ESf;kCc0xb_S#>*R<9KUrZfgy1WlwiKS71FloRi)ngR-r* z-smW+{-1CmhTlr+rFvR82=IEZ3?#p1tD*4x%$1 zO=`(n9r`USip6LzaemWV08Xly2U1N<>i|FJX7pZCc%h#k>}f% zv#UDIZc*p@U)e2{Mcbx!^%L8j83LIB+BMBk9rwQ4?$I4F>J7`JN|=r;ahd>IJPrk> zqFxeS3#7R0g1Js3C|x>E8TEy3ws?9!f5tP#Y-)Q|@;)(p(j-%)Vw<5qWI&95RCpx8 z)j=`^!A(K(GVSUZ_H}M#bB`f%2Z$YDC_Q|LGqFFB&OX7&23<&x5PyJkv`z3fNn2W{ zcr8D|=tBY$m?b%e*ni|DCLtps8#tpvInv(>l)U zFGiBmff+ypO+ z|J5Go$x}o3#!pQaI;n&tUCQQsl17h6dTsxRqSyDk1o_E3kBh`l8dLr^$b^Jgn*LFl z?_-HZL&(wu8FFnTe9S{!*ryF=ks3Wz8K*C^A7_FFzPw`o(!C7OB uGmP<92tX4gyna54=_3T1FCiV1lwz)#RPgxuL%b2-Fne+0O2JKh4*U!kMeP8dujs*S6qXT!UEEYNI?tYz|GlM;3&Ixy^cu!P5%NX zBo6%n{ZWY7BuY>*5__;UGtckM&YOQvkADH|W2b@-SP!rf;0r_fKxN7uGJO5nlsR{* z!!M&_ZQEU*Xe*1L6(7}WR}7_4cO*k#@H?AII+lmWajWl4-;D+Q^YnM$ z)b@t!^oECIV1pZNooM$YkFptEfUN-ARg^H#@XP1_tk;lS>t`wvg+)y1g-fXt-evxigZTt_VZz4RkD1Ve?zjn_^4fF-I$3d;w^U zF;8ciqE*Vz(Our%djPvH043UQEKq&12fT$ophJtM4M}-F;#3*AHvt&@x%^7@I%BV|mYiC=C{3-gx zn~C8;5($YW^6npHJa?PhVicF`-h0mZ&i9@B-TwIb^*ewytSL}%KZ+<8_>z*5jv%8z z!lH~N1u~XptjJIq6n$6QsT51ulE%P_3 zW*EBBO9>2eqe8ub#W2#SR9(lhs)6k~70dHnk72UldNtK;)YP1AY-VZQ-mYwA^Mx0N zw$2cKY&&-Fgh5QD%M4P^Js>8V^=+rts=T6cih)^uvu!p@=6;$_ zpSj-tp;~o4i-YesgnpjG-k=H06d%hz}Jgvn<9mWf02*i`GLQ&aW* zLwZt%u~ea#ECwDu&N_dy|F~YpEPam(eLo?LBZfHtwkQ%XNbyi#oS=BPFCHNbxkp%u z8%TSEddXB;Z&P%K>WucG%q3Vxynv8l7ZA@W1ri;{L@TV^n{%DX&>z)iusRU g{Wt9j(aL*W>Ptkfc!DeN^B*FK80M*2B5E1<1qlA;$N&HU literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.class new file mode 100644 index 0000000000000000000000000000000000000000..31bac4d90f2382a41643dfc10259aa1f67e38bc5 GIT binary patch literal 390 zcma)2%Syvg5IvK$O&YJYYIQFnq!GN}R&i4|g6>MU5|g3cV(yij*#8oIfD1psj}oW& z+!S2QnK{Fm=iB?sD}Y06C1_){ixzqb*3gfz9$|x^s>{Mz%SB_HCG4GZts7J7@!6^K zS2JBW&jMAYM?bP7Lg(06)0_~}^j{Uj386J|B@;q_CxgOtI8lh96gr3^Y$^<(2nS2& z8{=;OEHS?JoR@_DET8B4Cbv`lo!VX6_NK94|3?z=x n6-OQqm!W6T zs}wD-T(nY4x!EMiY<7J?E&H`?RfSWs=4`Cu%M0>?eu1n<=kO{F&F6D0ZEO*OL8Dd62L7QI=z@E;L(fWLL7uHGv3Q=cEGmv$ zoRse&*AvdGw{+>6kt~%Er@tJfuN6WEuA-H`Uz_}BXea;L1;2y*&I^7Qq38-EAy49K zItXc%YV;#UGEQEMY6VEQnkQgp_YneS@CZSZ9YHztv*Ngp0m4Z1Aryp3zdMDxc7o6` zw3&u+)%=2>vJb0WT7mZ;K4H-Gtz(1_piXG#@Y#4jA6E~~e%5n(O;xr#g}xSTJb^)N zPZ6QoP2VL#-A91&94)Kft literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..abbcb33fe99922e28c3524d777c7faf8cc8cf22e GIT binary patch literal 415 zcmbV|u}Z{15QhKF#oJ4a=c!7-=1FpY+)^gkEH+|^d*)h1`;a*fxWTRG&(1N?K5grYch2; zK5}(ZsMOWO##)sdcdJgulZ)e8=a#CLvh&Yxy8_)kQ<-*OU?=`ph2d1dKXe%*M5(S0 z=#s3PQ6|udhu0B$SdGwyWWqlI%?IEQxKmeVR0|9WJ=3bxRjwvUL1`-x|5oa*HKm$& z*GWm=sZ24&1~1Nszycp08IqUk@vVn|ZOCe!wZ}djJwc2%AK^W)0!J4SedYAo3x4zb H`*{rSnx$rv literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.class new file mode 100644 index 0000000000000000000000000000000000000000..39f54ca8825fc15b49ae66a569db8d2378468292 GIT binary patch literal 11895 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 S43i0qhEgOq)R#wc74RQVTBV%; literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.class new file mode 100644 index 0000000000000000000000000000000000000000..14974a28e3ba64a05bf251850abe53a4ce7753c8 GIT binary patch literal 6922 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 z%0A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 WzN6&961tb1e13l=#n!871pW`H8V-s8 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..c064265edcd32f8bd80442b90572104fe3fbf333 GIT binary patch literal 3007 zcmcguU31%15Ir|eB3sC58rsmNrBwoH9p^*+fR>UrkUFL{b?h`Tp(!6hu`fo!mV_i{ zn*YNLufRYuLucTP2YwX8UPZDaM~=$_Jb16{d(NJ{dv{m<>+j!w2XG5q#sw_PcmofG z$qBO}Og=^CBVis1^H`XIgpZSWB11+|!fFzw6v|kWk;YRQ>)1%5BGylY*-YY7v9m1U znS?C~&lv`*mT5996uGN;Mop^}RxD>{SF2hMC(~?dhGE%Sp-^7S5t3Iu!!j2cq&@Dq z^vE#Vn_3stM?~E`0uwLg@b6mO^$InHnLf<*5Gr`q&Mt{R;rk3%V|nEeKWcp~KZeA_-ui=c%nd1(7&nC!uBLx>_oH@HI$7=%w9 zK{U&$YgV(a<;v?1m$e9hNF#1*r)f}jT-!2Ts+xp(MU~tBJn(Bc^IR;6jIb$}o3*^-SPsL3e(dfBX?aFNt2lafiW98=xX8!ftxyZuLX z=;`RPAM0kV!RaP$$1!b7*Pga`i`ROv7UEd`1nogMpDFI@d%D)p&APVXIfhyH%j!xr z+c~RgH@K)DDmSm?QZwYrBK?*8%66&DpmtSVH-XCfPK;EcA59eKT+c(r%tVGWqMpO! z+6{UMHRI=lpO+JZt-HcIZ&x4M8ADy6AM44z|3hyhrmvsS=$awx)HIa8r1T?A!G18sUa$oyZ=7WoHjCkexd~B0GP8!R*Ds0}TB{ zyC5{pjes*ooB{f6I6M0*hQs~q$OQXmX=SuOl>G(6KMFQ|rHK=4N9a;WpT%6Tf1ECb zbedIh^khiaa3hAE4CyrG;^?W6ejD!u`{PK^6Cl5YyfyaPA(TIY6TFK%F%qdz;x66` zwkIf~!o|o-q_@UK5^&mYU;2lz0+oTDO2(0P&~O@|mi HN)Y}5@bw+L literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.class new file mode 100644 index 0000000000000000000000000000000000000000..44670f79d21626c1fc4cbb0c96b34e5da3ab6171 GIT binary patch literal 6012 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..f6b0bc2193e23243a1e0aba2065fcd1ae36490b6 GIT binary patch literal 2704 zcmb7FTXWM!6#mw^C{|<=0;CNs%>^iq5=UHmgCvxY7;tgyV7qBUFI2I&u2S1lB^k(1 z=`ZMOJJUKdWv0CG(CKgL^sHGjjjRwO?mV1V8Rg6+*%Xaq@E>U;eVB#e_?h>`Ye`<2iXSgI~7heTs>Q0TAaeM!OmcP#r8D^!ddqm#4{a?-Kt^NtHx%&aC^gu07Ucc_TEjQ^mSH-&flRKHF61_{4Ciw8T=X`bqbvA(tJ-vVWnLulNW*tn zV>lZPk;^~IZ0}^#+v!}1TK4t#by)j*W}{LQS71uUact9g(Bw^C>BA>w_@JNrpciG( zh$ckqko=xl{tqELIKzkSd*F`kJ~7=2!?G;Wpi884{sr#T=v64myQwdY)m|M0kDat( zgv8Dyvj^s5)2Nw^s!{Y^t5FS9J00=?CdPGK#hjeNm znO_b4)LAnBc<8@|48^>=yubw-;w@-D zw`X(+3E>c5SqmqALE;%E_NFF}aPqmxlwpH|3Dor zGcu!o_CM*kw=Gk^h+j6jxqJ3;_H2Is{`w8TB|MK|7)fEKWTY@HAuZ!LW@OAlm2g3Z zBn~ND6y}nI%Mz~0P%zVntKxZ0nCrsah~Xw~$>_(NgxfNOyd&c-?g`+12^ogtPPxu) zUJ1BauKC`&W%IJ-n*1#T(-?Z4vgP>jp)93ZN(%%Rh1Z_9_JgDZE~9TxaPh# zY|Bh+izCq)RbsK>ta1NVLctT{g()algf3x8!BbG$aV#^aVFm8!Y%j3_HX)&;;2DUj zNt|aG>{h3*ZIDD6;$dMs5@3+KB4kJqr4k?G{GXb80pZEYGDi3>tL?C94;f@(ZPfTzOGvNaXhiP{?Z`J!t=f z3HHzL!~V`)BKBJQx6OYKk+4GY8K!?E5CId5MsK7RjMB4*-o|i>>}fj9wmg6nsn1}M zcj#pw=q(~nO+_1(#1e(6TPYU7qC?N3nCxs6A+_)JKJ%5 ziQblDHr1p**cPPKP4pGgbc)5(O~~&tv4#HCEhuzxaOhAI1MwyXn>ZZ(grQ9w`M!nW r)p&XnN4w?3z<%K-lW>l*(1LVwjZsk%%71ve-NP}_&U6za?XvI(vO%b@ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/ListenPoint.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/ListenPoint.class new file mode 100644 index 0000000000000000000000000000000000000000..79c6722ee8bc886be5743978fffd806f439cbbe2 GIT binary patch literal 1450 zcmb7EO;giQ6g`imO({XJd?eM`j#dIpa@KN4zghrP>ZNE_&a6_nmv*z3-mp+pmwG0Gvl6h;|It!;c|u&Tyl1 zb5_E+AOS9Lb1{fZxGVsBd)&JcB*4`muHia25edUVG+{7+5x(BwDL1({%FURBaRy&% zG3R6%Lh%h_)6kPfdQDF_Su4F3VeqFG*X^9+IvG1l4vR4aDJ7R&ECu|-R@!oIFtmrO z8Dh#K1~F={m_%Vd&l|}cLt75jFc&&4L}?9zt5Y-demOx~d$Od}OhY6I<5O1CUK zqsOhBW2R?pEA3Ffz86``p<3q;ANMwWZcC)8F5U};Qk%_cz$)& zBuU5>j}w-0AJZ~s@PK=>GE`^`&HK5fNixu&sLzUna=-mG>#rIaLjxZ&S0#zCyvyg- zUHuVzf??nQs>NheOGfjFMtdwjyt!j9scOw}| zn?^EkPOoyU$7&3jp)(wJFI73aC@H0tB_I08teR@V%o$PDax3QsQ39koE=sEevR%;h$39LmZ^vYqXIo zkSi1+Z9x*>KoquxZI|RE*+vLIp-4D2%D%fn(woQJLClOpI7JZwPWqH*0`=&}fCuY= z&xN(@!oQ#vQ6CDDZFso@`K<>IL-D}f#92qtkgB<)jeHef6>+HC8Hv)vKJl=VbaCBR zjO?OmVF%4|Ep)hu(7eX$`G6MJZyqh8)eTXlbk?l!y{Z+_#vhRgcr6UPWh(av#(>|1 C?Nh)2 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/Lock.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/Lock.class new file mode 100644 index 0000000000000000000000000000000000000000..965135e9ac6cef0cc7dce8dfa29df5bea43da00a GIT binary patch literal 1444 zcmb7ETTc^F5dID=-Ch=@2q>tqqGBnRRTM$N3sx}2LJd?6zK~^mvMlV)?V|XLeDOgN zfkYC0_eUA$v|EZvNkcX}=j_aUGv8dYfBydb1z-}-ljy=&0%?p3F(E-sB3jej6}Njr zObT&d!UG9YaXd^Sg=q;haXb=+#}Z~G%rQvzMkUY!&M;Bn6*Vx+YAOHH^*6Uw-SxS; z8<>__^ti7Drt9Qf+q1a1%`(XLhR;9l@=CB_mKjEx;&s=yRl{^Wb+zW3FB4RQ%n@X3^ISn>zt7FV|ocAvR|^X7H3Dk{Nl&5Y4$|ik1io<%!Q|<~)qXGA)QS z=!<-^!Go|FoN^I~52UR8r%cjkNSI-!Rs80Kid;#`brNT~WmU}sF{D3hX0Yh`jTutg zGD{*u$6BE2JIk6^(l#w#-I*EE>YAf->pj6t$B@y7ei=RJm2nwY7{<=CE;25mTgDS8 zGH!@C!??pRu&sU4R7-OVHBaO9{aufSys)QpPwW^&uj?DCYa42=xcXvV&99UeR#)Z= z49Z)F?|ED&cjXjRIl&6Lv>oGTlXR>vMTeKRe6E#qnj^|2|01as*WpUdpimDK(Ky9) zlwgZ1;esiatM5$6c!qw4p=L>{i*Jg>FOVxkXQS5Q<~A{BNST#WJJgdYG+fpKpL#wk zhSO=*TN6%#8knX(01%;<+DZ~)F4dDpLuUd^jEm$|`WhxrMrVKa2rSDE&?ZDAdyMG% z5!w$B+pl67uHkx!Nz*AX?b#n_`+i~`2+dt+qX&p(M=4w#J_seWcZcve!DEMzzJ(EJ z_RT%w^%z6A*(^t-Zoh@wq5U+)NSz|>RcJ0!)lo`2Bq$6XBJmY{E5}H!cgaWS_+7hR o6xaP~DRKHkCdofeoxDIXGIUQN@>;^kl7wuMRHJ9H@2s)IKla^Ovj6}9 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.class new file mode 100644 index 0000000000000000000000000000000000000000..2847482bb2a98b59ae388af15862c7fbf301e559 GIT binary patch literal 522 zcmaixO-sW-5Qg7rYGc#XR_%wadeDO;6RQypM6co{e zc=kt$lNySMQkH#phJALJclP7+^$ox-)(z-b%p-@T0+vxpq^hH)qpo9xVE7l(lfDe% zh*0kg+#6SnW95l1UTK_Qi86kTR_9dZop7M-v+bW9j%n3zXiN7FD}Sol?VPN z9yC#!NMd~Uk221-i#F0we7M=$+0V>=cW3tJuW#Q0?Bl6{JeGAlHju({4wG0hkj1K; zu1T}5V?&Oc(roE4ZTHNzyNTDa-?;IIzT08QJof@G zdBLEW))7PcW!NNIJMAV6TV_qfcH%Ydx7Al+RBzjjFcM^Z-}b!l)UJh%6Gw(=EkXRj zEqqJzhvH*b#7VX3Sa-=x>LTHXXC!F*KT^wM#NN3)hG|t9vZ5n=5hO9go_UvzUk6=Z zL~i1Rfy40-(+txiZjWOM4>)%4grfkPV-C9vtK+YXqljIO1uQb`jK_!Ma4ca@O4?`G z93NTpVk*m2Uwg+5TJ}M`EgIy?Mc0*JsN8lZ|CEj4nK@{rp>)nok9E^Uf=7go1dF8T z?|ly)pZc|=lJpySc*#1#3cZm$y&Xm$m4T*A0eS(flf5erIv{t6Sv1B&->f3O{X13EMY^#A|> literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/OpeningLock.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/OpeningLock.class new file mode 100644 index 0000000000000000000000000000000000000000..647a443ee547691551a8e9398a3e84aecb16e694 GIT binary patch literal 979 zcma)4U2hUm5Iq+b7U)v?skYQY)hcY&)moowOpv0%@L_1h_(T@ClBMikvRwT5D?a(= zt0uNhG_mjgDC1nf(8SdAWhQ6#?97>S=hyG=KLKpxVGIT~qnN=>6>h1JQMIfNQ^!^W zw`0(8N0sjCuyovG(5o*Bm15-?11mDb^THcQ+mm&>H{?NT3x=?w6!sKi4531;R;?)z zV2HR4qRZicVbN`fKKFRL(Gs4=Thb98!)A#OEa|kZgW{g>n_a6Vd``i2EgChU?UD?) z!F^x&3~MFfcP!y{tbDchBuBAaZamEuOD}5$B8DG1o+BSK1T)z>gO(R<&M@=Nc4U>t zJ6?w&lX;%K;N1AWv|EQ|yMJIedz^e?hz|Iu6>qCf7wV&wMCiA|c!gBve>-IB23C7(hJDG~h4(Gq9~-)QzB>%_Q%}>c9rBVtvAXg&_S8?3mvW_z1&H9V7G^T18>)6C#v@Ula(9 zfp+=>`s;by8p$G-LzUCPR`WDL|hSrl#aEt>}uXRDPBTXyU;i;Eys+ zL8HWm7!UgP zFs#eDx>lg|GJIzL8Uu2)HYzPtln!-Hh@knYrT)oAz-TaQgemfl$XCc_^k*==I6*`| jnINi{CQu%yStJ_iPj;5-GK!}3F%iea8$)?QY{tX~^=7PJ2_Fie5f4lIKBMEalIC;r@p%nj z2;f}olaJ#%9+B`-4PVson2s+6um+C?uohp|@f9ikt5U+(NJ4U&oV@=m#=dKMde0JfY)9I({6W%%7AK^HUu^)A4f| z;a_O@rG{T=_;mok!Eej)JN#b59|GvbA2s|bfUEFl4S&(_R{3kG*>#)Zq(MEFlcWm*O+|I9h$+J_XT&^W>hVVtd)CtM=uT65T~iRY zzN9ippzNY(Jes;h;DUzf<)0=ajXl)0!5*ZJ8C@xQvBgYuoBhLf@vLTsZNRb2lojdRF7UDj zS8#sdi~5$Z&G5F)_A9N?wyTN~$a?5DhlZ@d4R$PH$E|p(t#MjPDsR*94-NkmxZ%IG zp|gKCYxI9~^2s9QGGG*NKd5vS>I?2#X`SXhFByt zf!T^KYKJ48oAwS^2{}+10^1o1+p(eW29Cb=aAa$wJJQ|}*|CY$vcZf8<8~@&C#-ld zzinHC(x9LK3|x zz00w$motZlK>@#+qR>DvGgRsg(SU>@8bwGTxXE#BCm5Y-V~aT;oor}y)ioJng=pra z5vX_R)uiDt_dLrTQms_AxZ4?(xRf2t7Fy7)*r0nrG6c7%w)?{g=I33=bc_c(M3aG zPPREC++?z6dS&*ryVVFZoayNBoadPwIumI&$|Uxwg`W7*<7btyA8 z5|0j;vTwaTN?_$Qa#duDvCyK`#Z)PVY~H4Dc9^4b(<_N=6lk87cM40^K11#cl7IbZ zggI<4a-0?qjIw8nOeKcq^K6)Abe>A?E-cJk!g5lhk@!wqpzZnDkk3r*(-(a{A@@T% z-eV4ruqCq_Qr?WFq%u;l*VTT+)v=tf?sj>)RxI2QITUv~b}Ykq>GSigP#UcY(2VuA zJ#3jg9JsmhqEOlpiOBU(TDX4H-FZVr6=j<$uh%GZJ_Y116ZtqPwvs#Hc55VQWt-FA zutOqL?brk6@HVwy*A!8y>9?M;Gl`jER)&>k`IFHbSR&&g7!7EJ;TNd{^f5T?U=B~P~ zYolC_xObJCj$@7v*oje&kwoL-d3N2KZ zTY2h|hSSEoN(dZ0&86# z7NE}dQ1g#q!8jHcVCy{WqHzQZQ1uzcaV(~1Gao@Mon6w)|Eu{ocLL{(W9b-0=6{ux zN3d)H%ZcR6Qhyo^gjL6}h@ku^8l{9PiAsZkWgJ(G;X1wt_hU5y6&Y2{l(A(D74lvF zOQ={^q|w6vbF4=Y&LWTET&7~Bq)B5{)p>l7b}>O(NzQS}JeJ6e`o^$$>rt%j^?0k! zCv|fg7r0ClxbUG+RqHs~e3vYgHl%UUL0sk$hjtuBo2#UJVHy{waf!=D`T~-wOS71p zePV2KoWjb=GD_FELZmEOnnwE}d8rmpil_MNAAhc3Wj3N>Qq-YD!^<_?2ZBs2}L zIDvU!%P%GTWSY4D^uwfdOij=~hP>MnP!mnl9(qcl`w z9?h@iuM>9GjY??M>!lydmTV@dqaUx$cq7^vJrZf|QuJ+jgI5*@p_3oDk*3NPdk`;d^^4Zh=HsYuKIXsX zLGD{N#9bL3 z_%J}^BPQca?lFnVsKZ16llYj)Co=9MCgD>VQ;5rG!!$DxnPf79gp64{kdUm!TmbV} zkkO1qe)*Y%&sl&>wP8udG9K3A3l@AN;Y$fAfrdgVtCusTUeJqa%P>RS}>MvW}lSIU}I z^-bVf$W?QdW3-O~ma5(lg!)|hPxF7!UA;RyoATJ;N!QIA^6Z>(lAde0n9XN%)GiJu!8Q(C)GIZ+9Y6|nhhSwfP}9Vm?(1?mVyn82z0nPR>fSwD8?jg^7=%em3t`Y zG*M7{TB26fvV(m3l)!XTbr9nb#{?SJ(wk{DpDyN{juz-~Q^2h|pU&m9tYcST#Es83 zlw$sj`;0G1wnNDZQB02n!Jt zXm>N{NDIi6rD{asP|UskPee~R*Yokn4B$}9>jZe-`PNZfM z0>Sv%0;KYGD1K0SG!kg8kH*duW8i$$U>khVxFK>PQAt8WqYLK2zaKHK7@bf|Aw2w_ zIuDvMcD(9GX{L41-vq!*4-GkcM{~|zY1G*(O*>laK*fj<(LVasLaU%P5Z;BLr{+ic z0eTfi#9`?|4Sj)&d>rk%9u5g!x(J|uKeIPBjz zkSw#Y@8J_Kc=OB-cgm))A#107ke(17dzr_#1BqAvOVn1Dzz*bi4dmuLh0fljZqhoFQzf6+@pcg*`lIemuX$O0*2M?B9XyxW1oOU0ov;^PnJkR9S8 z7^Y)yWC!)zXs4}@wimY1NLxQ`8@5@Km$O^(p_Y8;m1UWY)7|12{{cR`-oE9+AhE{R zXqxW-15IzxywrTr^Aj%ZqUG0c{|;Ii)qRg1kzW3=Ls#h;qGuue25n2bxLm0$_U+0x yh9a+Vb!Nau=R$aZ;Gvvs;y5{Hr literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.class b/source/.class/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.class new file mode 100644 index 0000000000000000000000000000000000000000..fe438063ffcb0a6aa0cc5aeb1bccd37e92134c78 GIT binary patch literal 160 zcmX^0Z`VEs1_mPrE-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2CdX${gTWS{SZ%={Gy~R{p9?jR3MR?tDl*fU!Wgelv$D*l9`*DUs}S*Ae@z0mZ+bT vn3t~aT9KSuP?DLS$Dqi-1hfkT7=aLID3D|W@&v(r1_oBG?F@_?!3r1vp#ULK literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..24d3852a00eef1a9ea0d477b7ebed9c163b65092 GIT binary patch literal 4159 zcma)9>3XjRmTg3mCTZg@meW=|x_UcExIC zaIf?}lQz9edZaf!(loTONJ1N+2R;6xerWUS%RH?%rn>OUvIzp7Jz&4 zPYw4&_TarZ%|k)OiiW6nV(`fs9?tSvkyj;NnJO$5qfJ_yli0$-}33__T)4;Ilk@j)%|l*%wrNQNx$;Wged6 zljm91S9tiUiWgLTO+x}w#n)AQL&GSfh7o*I#kVvZ!nZYi2jA6j5ihFvo{H})=&MM3 zRoe6NTvb*a1^3O$O42d%$;H%R%U(W{%vrXip;Ss1t(;y=&hog>$TY5?$67ukbIy!h zQ?NHwLZ(hY)cqu`T$GMsnG25YR4WP&hB8$hqnON;rL8mVRKUeDPFwbQ-OkU;)6$k^ zPAb?jYuSaQRVpN>GV_xYN$*M4PF~2#GK*mCnu!+HDvm5o*9nMvo9$t7%qkkWwJFPV zmkE5oJSO#8w@491zPC!J9{OR#eaHe zNkMeV$`fk6M&*bHrOYdc3=W;7pdh#8&d%xOMSZzQG`AI`;}bRDy>oD=1Et`0l*8AuoNUOI8m^#O;Ed6ww%`u*5OtVkOhNBhnC#LqX_CJnN4m`FhX*}qImpPp0SP&fA8pD73b1x#T9Rc`rMg@)oOxL(TV{pejSYt5$X*&~y=#SriO6d- z_Ee;qpSEqwR`BqMmDF!E$kp%94s7P}x!OLxICMCGbAHU*G{e zNC1c7vr*CtjA2}05>o;X;bDPUJR$H19u+u-Cl%~Dqp#}8qHY$FDatw9u9h8{ZwQke z&6%4@FHX;=CuSAIpEBizGSwfMk2kQ!1724AB?Y4!t7{h5GNxQyv8A4$(#_)(Y($@- z1LecFm9M}XGO;SN)e~Zc=n)*9|`;zKM`2OQvyH5(*i$ZygtOk&+&}F zFEAr;3BM#n1%8EJQ?!JsY-aN4{PYolYq+l9!7v=$`eqnbIhjgjj#1{9 zs-}^1d%b9roi9v4+RfwD9&qQ6LTrIkJWSV3Ej*WCFME7(3bdn?`-9NRDpZsOhZE}FNuUj>_~ z3i;;vUHq;MDqllnQT5U)L0PAoOq+(9y_L2tQRF?8)k{WprH)sRRqxK!IO)+go2Zmz z{WMW99ABf5kN-5yTBAb+x4;t!<0{={n5))VdbGb4ce*P|v*4__%^}6jp}I^aQJB$((qJkT z>Z*Qndhof$7?Z{nTYl@O?}9AtvUxxE6mXa|0~wf5k90Dcn7X#F>V;>LB^*t z^TfU@jL`dzA=#GuU72+(c9?5jq7_yzDaS)CJ`g6nx$ck_1jA|DDv_(*7mkO2t@+

@kRhl_%a)x)ap;tr-Xl<@r@tgC->ISdkL}hRrHzD$%!Y^%st+RTQ}q!= zgno+mW(R-Mcvni4E>ya@$#Sja4F|?LM|pWSQ+N-&=ORvdt3jr`fuW1&y@~_{ z^zb#_kG#nHQQ9A*{dJ7gkR0oZb=|H literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/local/LocalCommLayer.class b/source/.class/es/tid/TIDorbj/core/comm/local/LocalCommLayer.class new file mode 100644 index 0000000000000000000000000000000000000000..77e614e81c0ba2cd77c28a2e3cf3cf98e4325117 GIT binary patch literal 6203 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 Iak+uOf20j(+yDRo literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..fa478bb67fc55b46933d99c622343c5b5cdf8985 GIT binary patch literal 2375 zcma)7ZBr9h6n-uVEJ+p=N3tF25WUKa7z={!TAP`Lg7W=v+*SHvV)7_22FY-%2 z)R_V^b*BB+5B*V{o|9~r5Ek3X%)NK-dCtpy&U0`6{^$2U0Nlh+ag5_`3}aa0;hus_ z9MRU!ecoB-&j-BvnpY1MWEHIRV>J#HIR$I|SdSx*M{ztxfmcPwm3XzGU{k>pfdN-K zFQrqEKR2Z73Eav_SNF_{UdrCLo$VdHY&(*M-CezAmyMd9f~No);R=McM??GcRjhg+y)SO#A$Ky$gY{?{fupSa*v2f zhgMi`g7gzuiqW@VTBdhLU?UmocFabo`Q3D^{M8dgQgp>QVijF*O9GpwqfrAy&Bjk+f* z9a0!Od9||ZrRBoTDASWB}>m8X;d}*-{Gd2* zxcMLl@As86u8j}K(!)#ApA5^@0TGD1!K*=6o<2IBgkk#ZQZlCKZ)lwUxBAe-s-sm8 zORzbUqM9>_syUOSn)5WS&^!o1-T#orYxH#u5&8j_(nk>KnFI8sXAclbzeRNG2)zgB zdqY+b`XeNLpQ|(r+8ap!2IVg((btGZerbYIH1?t=ahDNk%+SbLhG=GwUiSEv795b| z?wdz^b3d8;4$;rC7;!y7bf%2GBjp@)KW1mjSUV-%E8m=_Q%5PuG^dp;GeDKd0xIDW`TYr=*ROI&QT0LXabQ{1vgg|+=|l{N!$-UPBR}jLBS)37&^po zyMoW~xew|ru%~VQ0$+xhBW?3-%=_jks*39x<(?^=XXX$WTKtW)TXq`@Veps_A3X(M X^x<6%2?E~1S3Y8ZaeAZQ7uwp8P>m)86N(mJ)=hGWi^*=>-B9>N ze({4kePMJ)zv+xW%JJOYC4^08m`v{7z4x5wJm;L}?7#p0{wILjsKqdk_oA4?`(pV( zEFZ?Oj{9PHAmiaUK8oTIvN6cm5QjOjV*5=5YIv+geAr z^)`38?J&$2ExV~&?WUS5S2nWh)^5>oTr!_*Yx|b{Ot%}FRXZ3oEY}WrT^NqtH%!BQ z$grBckVR^jA(FEioFQs;xUIW}WirerQ^f=QP*+>J*;K2pZJ13$mg?>i!vbBN=a{oh zmmi7PQQdBK+uU?1lZ9l+EJ#JfoUFQf{fCm?+0kn)3LbN~OVx9_Eh^r8*fDD!uX|p? ziXYW^$EP{9Zyc4oZuTsuloWPxva23DE^lw18D9&dhAg}Y6NdBHFEVdXzRA>{&n-9{ zl2lN35jNK3ZqM+_K$Ut8k{hHE+d3xUkVjD{Cr}2%b#l8%Itt!EM!{uVQLup56)a*& z#^(wWSW$2d*BLIKZ_q|IuWe^5*%HItR=3qk_^n9Te4pFgtaBL^1y$?_=qCzxp(~0ZCvPuBZkPORF`SJN^c2_&<~hRzXD5VUSK56UO*B{ zbjySO(5V8jQ&|C$Z&Qvd(} literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..c78b6a05018a49b1064eeccaf772f8e907bbce5b GIT binary patch literal 2394 zcmaJ?TT|Os5dH)P$wDNyxdcd|q-_#oJ5ldxfzp6Y8n-5AMsLv_?tSY68;#Yn*Q#x0PIzPBL0`$`FOM zr9IHphSs7idApRM!LqAWw^uZ)qHQ*Gsu&eZz?elw?#80ym{mh_4YO6Wc%@5^B=cPk zQg8*^0um>yz?!QH(#R-ipsAq6i^+?H`yy-w4z?AzxGJKp;2It%c*x+9f*pKKk$Yhq zW)Spk&Y~?~DBNDo+^i=rJ!8UflI+yWs@IW$kq=9x3dgwyc=L zJo%QVqu&25bJaFoy~3+4QLfx|CQeh0|Ud3)ZZocKeP64M9vJHb=AB#MvH}tw!MXGFgaM@^D z4ZTx!K2&ARre!*mi(A$6 z*z)4O+>Oq(idL`dwGL*4ULy6!+2@KXK%f^K?uHem=I8g|O$=9~eh~5ky87zUhtz~# z?{2gkCihZ;BGv8XR#mf{b|cK}$+v$~Z&>_P=Z^+XwpdzPR5=vxH}zPzcN-htRMHue(9RpDG5SNso2N0vkntAY4!pzzFMaIg z*TBU!yc4J|2BD6pNiXdon%;xVa^wI5BrDnFPw!)BB@>hPFr0}+kJiM<9!C9Kh(BO7aW0VWEMzA4F!nRf zWP%++-R#H7KA`j+V1iK>FXxX~{XUCge}OY2;5}Lu^gP845ep*Tml5T`8{Fm}x=k-J zc2C@9BJ%i0L^BDBb9AE5m#0`3efdR}W0DW1JrMK31rJR7;3W@S_rc2y;`rW2uXsp+ nk1l$sCqS1x6baB}4@m(^5;}grQ7BI_>ECZ)K%u`u{saC4eakNb literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.class new file mode 100644 index 0000000000000000000000000000000000000000..5dc591a3df6ff96486097a82fa2558a8f833f348 GIT binary patch literal 11327 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 jAfIOyQmtZoG literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.class new file mode 100644 index 0000000000000000000000000000000000000000..aedeafe101f5f90f4e4b95957f3e30447456beed GIT binary patch literal 10208 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 SN5yBGcItoEwDAh2;lBZ%;v72w literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.class new file mode 100644 index 0000000000000000000000000000000000000000..cdfa40be0a7481b08dc5414c851f0f1960d452cc GIT binary patch literal 5267 zcmbVQ`F9i775)ZG8cU3^aWKUsfS^!YvW>`Qhz%5PBm&EFZ9_3_qKxH12&5ThW(>GZ zn{G*(t~6btTe`Z7+X4-88@DlZfs*d~zPJBCf9xTp_l`zuW=c+vk7q{n?)u&D-FKzu z{`1VU0Pes)0~mxEzzk0C(@8(taEdRpB3@IE*9PFj!y;Z6fFG}CiAVV94FS9nZwlbe zcuRm}A7zEdc)|3O$m9IB1)i_!K_P zYoFn#&+=uCKYorcD4Ke1#>?@ydB#xxnHV zM0{01qhVyyT5e1^qUeg6R0OmQD@MdjPe&%AgPJ~dERxi8g)Z4_Bu$c$Xf!?=jgR#T zXy%tQYC0*KX-yrLXBAyQkGp!oRb+g8m`n`3K$k4~cBa*|xm&=l_W$2Z=%4`4fHqCJ zG>n^a@_0Nmb@Z`&B?-=u}e4@g6cnEK)6HV^&R; zqVBnQ)HSY()Ho<1if<6-C43XlN?5`r3HRbY377FL0h^A=C*(**R#TB^CZnX}OrM^b z$r6D|0SVYVD(iAqF%>=7#{1pc=54{Gtg4zBoKk}7OeVvAzAa$Oi|QOKJSrj1m+#=a zw6!E$!ByH{626CP5}w2NB@AJ&gdgCC5`M&j6F4B?)@m;G_YEfEqeEkT6VdnxagVk| za6GN1GK#6GB7Q94C-^CQ`5%U{XNDHOQ)#RDwXlFFB}R;n%dGB>V=ymGCMy zw6;2$fp{#I*xMH!J}@>UV14ysyno-&z(issK9LwY6dj+SHtQP3UQItK>(h4qCHxM* z7tre}?%q`gX~(8$w=)F$Bpk#mCHw)`s5MAP;u;0%WVApY-a``ph(C$=vxGE`NjMIA za~yw>@K?TMkrDAX0qu66!L$+7)XZ$~gq%rF2ajlaP*<{=sRT8vQyFeKPwSC^!LiD{ z!yf+59#jFLY9LFUVob@(x^Yy_lnNza^$1Z?4i*lseQidt&=w^814kt29JLOLW2;l% zOzub(1&a6y*x{<+j=p^!hFn!kXTzwj9Z6@X-#Ah;s~CoyB3egAHR|4J#h@T_)Y(*O zhijdzQ~tCSs4`BAIW{s|ur)iNsity@>}+!qwGgqQtb)Z(Y*lq(3bYZ>QT@79ufAO2 z?4d4KQL(yq?(#l57OjZayBvsxjCeqxquY|);M^2#K{nb%3@q%U(rB~I{h+SOuvmC< z*wQ{+?vg|&s)Kd3EYB5+#>0SsE|<8=2(p}AXR^AA5_YKOoi1kn2L;I3@(N=DI$dly z)t!`^2v94MG8ej>p>;ICK>PLb@VL$q;qpA=lMN%CqHSH%9|`^(wQV8?O>E{2?NN#P z>FDs##LyshO##80Bd%6~Qt5UmRrF?RoWRWnz{3LS(?%jw7{t~lX*w~B6G;trJm4{v z>^;)qQj9V$O2U+YRA`h#JjD?L6V7!g>lP<*N6ekeMX3a+;`R~4Y;jb!d{m!97VCNZ zt;x6{LG}{U_EAIgLhZ~{>Hwu(#hAMvf2D?FW4PZr#LA(~J%>_{zPm&RColHB0b z@+zzfc*@!Hi!4C$h38tYW1!BJsv&L(#mecCzrGRpayFefDy!2OMaM?^W;aM*h?mhH zjZoGTO?-4;0fFZLy6&e>`%p&`Kzn!rLdO-X33ueNYyoxQj*IYwg^Tdcpcm@@VMsw0f>U3b%UlSdm9#*-o>}dfjFQSRx(0_9txA5b+Qt+g)j+AH=vW={yI~(za^H{}loaP}+ z+RG16GIjLsE`q7$DpoFH^Mmf-0$P{Iw)ZL;>E>beJl4+hD%7YFv$qATTO#x8N7zpu8+tqi zzpGm%2TgnJ3A7fs*}{zlZYgUPRj@=emIQSSMv3$|Ky#X%Q(q z2^@-;=tIQnqH=E?>7oyju43&J9I@>+kS(UTz?9;$rf{@kiOX7Aq5;=lT0=UlC2<6V zHaXi?G(Z!uEwzJUWhv&K_X<| literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.class new file mode 100644 index 0000000000000000000000000000000000000000..f8e92dbbebf76e8eed1a31d38e6cd2998c3cf9eb GIT binary patch literal 7104 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..67d8cefda7776ead81ee0b042b4139ebc240cec0 GIT binary patch literal 3616 zcmb7GXz3 zcCVtwqSb2s)}PWJ&`*8Zo-;Ec69`Xjo+tO-bMAT1cJDcNe*gR86#(mTy$tOb@*yf= zxD>0Qm!SX$d38v_VI~Y7j_`1l*|9Q=ATA-nM3RSN5>gUO2^LeM62^QuF5!fPac11l z!vhi?l<*KQALii^36Jvpn1shAJR#vprk;}Uw1j6QJj>K`5}udvf`k_(yyU~nWyBkj z@Jbn8#cS-v>wdg}H~n}EZ}aeu4<~u=13xz6LtcHvtB=|BPni6ahtGWYTwq~mSNHb4 zy`hMz_C|WT!VxvpH_#R74)%5lD7{CtF)a|&;)epNl``Uowg@aR%~<59J{~cxL`shw zG-7%ru8rsdYQcy*R(_{_U!|uT!8lS5Z=j*-BdZ8J27qPouaE`;XT6SEXVcFw!rPp$Q-#~~m z$+nV-l;x(Q+AA{HHJ}Fj_6St6)R>+!jYQlPRC065ha=G3tD6DK7!HJjor%=YkwBCV zj)swuKz}Nc)Kk`YFn%yWXFE3+?nFrUAeYU)yRzPVIL79)te2fpV(a#9IBF!8=THUw zymaFcC}}t1hIN}jVav)vfufGYFj@5<(ygF<%c4Z>YFRmZY^2RdBm;D@gMIxS6zyo- zh-wxkt5+M>Q*P*nZo0u24Udi_1!`KHTW=&NJ4W2vmoh9pwS|2sS1m1ibhnlaX+tsH zhc5)A_GrxZQ^s8g3oO5(R0}NA%{DrcHup%{9B12d>q^E}+{TK(l+lNN%6X4I-k@^b zHE^~YxbE6ye1%gozQ#8)zQuPkzQ+$f{3zomoEBK|Uxu9Xk+Gdk-N{y}vR0hUwj1!* zInBadJ*tcW)>4tx!h58na(XwRL+=Rwo{o*W1)T@rI6X>4x68^86pi?K!d5fnZ=`;?ip3Od-kukwn z@GQ>xa9&0l7pOR7{ESH%7jemlUj(Y{(;u~rSb!>MSy$Xjjg!mnEC=IpJ=GDTM?g1a zT*eg{zv2?FuFAN^t84g;NwPD+m9}HnAPp}2U|zp-i=H}L)~O&>xkjZ${nG6K-gj^2 zOUMmjj;ULnx*1IwN$x8G^YTDh&`*K``ms?Xr4LgtYuV4tGGcZdP8d<$q}$wbAis^m z5iLpCb2jbt?bOV}ltSv)Ray64Cbi4tDD~1!UPtSU#g`ft_+Vv$efISdl#_UR;cevWu1;e_!W*33Qn3DQW-em^BBZWD7e z^7cu%KId4VG|(NgUE{QNa9T^~iJ;yy?JzPClYm45?k7sF1@{{Vjr4)lPG5yJsO1h! zt6FTMS>SeB7od=6YL_;DhlgKI{0Qau~7|MInWLh~HQY31xRJNBsO8EE8`VtgW~IeJ zHM^*0pOdMToT(LRxL8@GhD(&zshllm6e~MJcK|5G0o?7}0nDZP;Gc8}tHT$t=Cn-- z+=F{vi3CX$5jWJTw51UsRsJ;APJ$k;-K!@-586p=rUgA{SFv$VYh`H~H?^*r#La?U zmRnjYx4QHu7AQ#L)-*P^rm^MJKiAnGfe4MIDEJH2KHRqr612<}MIB#I`c;XuD5C!y Y`q$8Zu@i~F`?Og`LL2ce-YY5n7r+;}`2YX_ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.class new file mode 100644 index 0000000000000000000000000000000000000000..540b707908403ff2dc0b2bfc709cc135d1d09b93 GIT binary patch literal 3001 zcmd5;>vI!T6#re4W|QrPrh$U1fUWXK(!zod)Rb2V2$A$*Q;MN#*(OWalI+Ia4HSH! zsQ7-OANb}t&hS-dBw>uApZ#O}3moy>-8QszEAqh^GnspL?>WD7?)lww&fVYt`so&c z$MCg??bs8>UJ?7SpAQGZ7!q(WjEsm74)LYKe0WyCkuZ*m=tPze&xLU;jGTyJjPUnS z{xl|H0M82;7m$x&0>?$H!=!){B4oV4R|*17ir9cD0WXH}l88-sS->>+a7siURQ@!> zpNf1a@j(-CT0{b60cS*{pbMB4aF!voM>lk5A44FKoMZ@Q%#y~?S=OAmE7(Y&J;&kn1#33aAIE-MtUfGUG{c&@0`9Njc*a!JOs zqvH&_eC=ws;^-x1B74ZRW@eS5X=#dX))ayaGDM1&raIa&?E=H&{~GVbLZCqjJD@Pc z$n1<-F^g&2u8{RKZB~K-Q$h`|(1zRcG{a`oDl2BStYk*V4-P3bj8T|sSyQscIklpf zM${^i7Mp+TUBGf*mINCPw_0bAT^j3-UYVzH!aS=P`bEuRUZ#X$XmIuY6J^CQzOojd$VHPy1UcJTXsJSKB~cHBd`n?2rL z3~kQa2bEyLmzbFAGpE~*W{jCSFQ@zT>lVTy1LXG}RkKK$+GlmTW?JNy5lf*&KA-0l zu21Ba7xf^Qh}CJT*?G*jiTmJVWz}UN_^P(+V{pn>&a?Nf-sJ9hug^K&%fft9aq*#w zW|VmW^!Z0iR}1ycoOKkjp$OD zfZc5=o+3?7P>5J~8qatvu;U0L#{K+XSs2-V6Km5_@E7!?iO_Y0Zd{?iEc}S|SDSbs zy}AXtAg^xX!E~1#4ai-2S#YH{@Q^G7ZeTrOH>AUIIMBj|f*c~TBuAUrm~UZIA^xx& zZld=;BU|JjGxI5Tlv1vPj$uy=eFc_k;1S`}&*c5l96fIy?jN|-z?S}j0H3$^H?ZwD YBu2J3kW2?#NEPH@6a9RnSag{98*JGO%>V!Z literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..7ece8759869d422b8c9ef4162739efe9bbb1c160 GIT binary patch literal 3013 zcmcguU31%15Ir|eBHPGm8rsmNrBwoH9p^(dh0>BXkUFL{b?h`Yp(!6hwl7A(mV_i{ znjggQ3Ji5-=nTB^z>i|st4Mb2$Z>dp2k(`A&)Ktg@9xTf{r%hT0G7eyxP-Mh-oQg) z(!#6@lZlb}SeQq`JQgM^;gcwy#1ThM!bTMN7z)^oBY~%JY@rxMNvxj=vmM1}VrNal zGYLBqo-+(rOv7MMbKFr~y{eY7>!w}aQ!A#;$ut_OZY;6AnkM8 zp+|=K{@j{iKFSt0w~xTYi`o49CU@Lym0@lGb1Q%fo>|@_@hAL%;d&^q5C8~0dS5qm zca`CXWGJ@($@;@j9A*Ht6MZPK6YktL-9y@}a)yM%-AAO)O&Qm4U50{bhRNktl;xsMGv|U~m zUO#7;>PF`ayV;G+TxKJaFNwKmRy3FUNmi;RcZ{2^@~yVd6-}`?x0S9eOZY;@m-tHf z-j(pR3=L(5t9et&(irTtwo);TZ}eKz7IA2(2tyNbwp-7p0jS&DAuXG`P1{iRwR)3o zQmgwjXOowa)1(Zii7VQ&XQdd6QTBu$IDD-W2UaxR}iCY5SU5*NmE4bZy{Y?LYhD1wyD|NNEQe)FPPPiGoMfPp_c7t#uv`(cC!BX=r45b!Yh@=)<7*1Ut zZeiqS+6AF$a`>DH;tbJmqpA6q7!CGsBI)m+r?{=}qM=p)f5N;h%-Mbj4FKdcKGIXLI!WKt~VG;OI&V7X~_7^&NF*@#3*8eu$5J%mpf<2%RS? L(sYQ)qXgj}bsHhQ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..edd18f5c2e45b381b72113f53e6943885f086481 GIT binary patch literal 2710 zcmb7FTXWM!6#h0h#fnTqfV82dxd6pc;;4k)APFTT23#CF*lya;3svl`tJJnsNe1#$ z`V0En&J<^+%#=4CI@7<@=~>xwkiAa94`vaYr!#%^d%0@B0WxM+aM#*+LnOe>8ysBk8Mxl_|Bq%TWmR(joO3awOe?ZIM=Z6e4QdTYm5c-s3 zSFO@vq2V}Hi@OZEl+r>OI{}zB=<}yOu}9Xdy5-+w_$MKy_0LRycuz8<(B7R(VaHpQ zx~1D%*roH{w97m=1^@Us8CKqOn<7@c!XrVhCKjY(`X`G)^|;?I4u<6uRPU8@+Ix%}-7BLWaD=r#6hmY?UIW7j>Z zy6Hq0qqRhknRvlBOFwO!PSM=25|+~075&ijc`fy{#GT*@66qXF2pjWwy_|Ago4S1c z|7hJ6+VHKaQFP4`Cm9;%v994V-q)}IT|*Mf8Vr1(;VM=%yp3rM=kbn)cX2_(dzjHM zi#Y{fY1qR<4PWDif^Rf@i|-hwq8mtOi>Z8eBg1eZYtN?XRy^*&*^*uV!KyS|UY-*o z9%=XFu3NYCDxJQq#W1ogF6so>?zf#Wk3eksRAJ9yEA^mwWID89wOf z9_VEmG*T3zcc}iJSpJV8J2=FLt&8A}?LINxavza>uaR~Inay2SnWjBb81t zQuPEQ6%dW%grCPnvX|)J65&T^oYjxO^u;Cy^ra>S^<)!6`t(o}!}|1a6C=M92E?I? zZ8Il{IY8e=^u=dTLjM&c+WyltGV%}We?a+7u<0+=dfOeLkB0O`64Vm*Dt$DhQqxp5Ly>8gaHwwGn4!cEa w#X&9$_DjqNU4dFL3sllLcB0UWLg-C=){c0Vc0WiFN1x-&-Vx5epgH~i1A$e)aR2}S literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.class b/source/.class/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.class new file mode 100644 index 0000000000000000000000000000000000000000..a8a9a0eca884b675158ed7eac60add766c46ba91 GIT binary patch literal 7161 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.class b/source/.class/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..8cb473540ad8bbcbe9dca2a8c61aed1a9ba36fb4 GIT binary patch literal 1454 zcmah}TTc^F5dIErIkYTtvmz9+2x40)Sm08C=p11|z@Tt!e!A&yZGoCt7? zdC+|NW}IW91+p7=anA!cCOPhV(1r)XVv1v$m>UfJ3AHR+ z+NPXYiPOcloHtBW98&91GHWm9@x|jKLW*HdTU7TT1?AQrXD}44ds7-Tp(u5eO2ED+Sf6 zqsK55NCy*!S&)rlL5@{VsgAW>MmBs3|O z5?#qG#B-}DlGS;$8#<5#rvsx>OX`d^a+lA;Uusa4JVDRw`i@vnLUQC#?d^CE(xF2E=z5x2v!B;i3n4?dx#AL01LtY?r5F z>?2x_A)Qpvmh~OuN|Kyg#*Wbb6&E9lIUeUpz8 o?wWPhrzCKDok!??-s?QDaYRyHG<$!dk7I=6&JgeX0Ztp>57mTk1poj5 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/compression/CompressorImpl.class b/source/.class/es/tid/TIDorbj/core/compression/CompressorImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..2be0d77e9cc70a5c407bef516ba1845311721b41 GIT binary patch literal 1208 zcmb7D%Wl&^6g^Wrah)1yLU}ekN`N>{TSK=+NTd)bid2c9Zo05id#H@!Ot1~2{{#pm zA|w`k03U_8WBh1D2(a+IGjryg`x<}$@%0;kEo@bw!_={emNb?$ZE4n}*^p*agRS8X zLn&}Xc*s!i@yL#S&wjr9kPcqjt_Zo@>^~IkKf-ZF#^uT#BaAOf3GcM{iv|rXGwU4R>kp@j{}OEk#(gre(GY*}pWWnhB78HYn;7jcPeVia`-TqpHms z)Ray-GP>S1a1Q4URIp^=ELIE{IA!28&KOvhrivQF=ByW#g`XblZZM{&)SN&2o^S`l z&LE;OoAYjxblzNbjUKm7e?gf(N|!8TvWcgB6Hh58p0Z9nRYbl5CaWZSfp#_&S^*8~ z3z)?wSdd1slnGQzpP(d7*;<-F`;>@C^2HNmWtzM$$*c3omrjt?oZOa?Hzc|K2eQg= z8LLFD6GPDeV4)w+|1#HoLzdK!nbC^ R!9Off0TG`0)c^y&N!Kzd(OGvJ@-5Hct{ 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/DefaultIOR.class b/source/.class/es/tid/TIDorbj/core/iop/DefaultIOR.class new file mode 100644 index 0000000000000000000000000000000000000000..334ec5860f68c8af957ac6e2714d55991abdb411 GIT binary patch literal 1878 zcmah~-%}e^6#gzGdqcXk5PnD~(ts8dQdnCnYEr5sq&01RU`VMHl`h#OEN-%y&4rQo z{sX@Du`hkC&KR8HwD0}{{x2QJdTv;tl~^V-XLs-Y&Ufzl&N(-K{`33=fNL;=7=m0~gnTB0xPf_&n?dyAOOCICxB!h~A&7pYq)AJ& zCFTjC}|cQm%b;7dD($uJ+yZR@+bX6yB;wk%w$UQMp$ z%%&zRLn~(&9d~0}t2nNySx!SM>(#1hEV<66Wt&M!6Wny2+MypqKHAZfXo{s&@^qkB zN4N}>EtZlDy~{$c{Fv7pWqrdoIqq=W<;Zd5NeTwPaPF0I41>|wX>JC!YKr24P6A2=7R^n4#}>rLFx3fEFLW> zKd4y8LlrtUR8(L{L$OBR7Nk&I&*qnMnS7>DX1LfXhSxac+G+Q&3#m9K=^gcL*IJ69 zYb{MfawukdNN8rp-#$aysWog<>OqYucBnVhbWt9voLO8iP!S`!cRNsT%yk&J>{)K@ zNoxw-70vsW*kTy!z!Ia{ofA%aOLrGsSErWuMPo9lOaGB$M_9I&(wpYhIe7_G7y{J3 zE4sZy7lJREj#1`8TFF!U>s4Btc;{TNrR4Ecs;RNQ;W)Ob*W3Ehanz1qW6p!UER+4t$IpPr1K{^@EeUjP;#=g8l>eRzv>oU!m-S zzl?_hE%ZG0mV-yjW8CoDe*_BTeJ>Khw^0Vu|L*07g z{o&8$M+$rT`md)LPAD=`SZU$>5$gditnQ;v?)0xt&+H?V;9>f;FwnwaSdni-VI}?> zhQrD;%H%e7u}6O$R7%Qa3jA;Mv)lVFo(?BE pw(#CFB9S`AFzsy*qKn>0`~!^8(ZVl1L>yPnK+K$pm^}l5e*rnn!kPd8 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/IOR$1.class b/source/.class/es/tid/TIDorbj/core/iop/IOR$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c5305eb989f09f2cca204a87c1b432c27ca3fe54 GIT binary patch literal 366 zcmZ`#u};G<5PdG8E+NnYBSJ`sp#>xt))bbOAyN?tDi$WwxWScWBirS_n2;Fw06q$F z>7EvEL>;7~pKcq0yR^lmoZL9ocs)C5R z6tiOD{OeN8omWD;cQKPyrOF5I7TTzM@XU~mU8xwlw{~t^Aorb$Z?5F%X6RurLxN3) zqo#qy{p0B+0~oTxTII(^hM)q&Nt0uu7II}G85s_nMC&fMD`VE^xIbt-i3B-@Xwi4- mpk3;fskR9n5L@&7?EK;j?2{l!$|)!4U<*5hQWCf720H&r3|Jxn literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/IOR.class b/source/.class/es/tid/TIDorbj/core/iop/IOR.class new file mode 100644 index 0000000000000000000000000000000000000000..6f858bb721aab894e126bad2655255889bbc1288 GIT binary patch literal 4275 zcma)A>30*?75|N9VRgY0@#e105>1=!;fr$ zASX*(KwfrF>UcbWT71TjS)B6Yvv@+5pA&FesGgMB=L7fxz9`^J0_FmEN|sOI%YJ+X zPwV)q$oiU)eqF#fL=!o`iEjz`wvO-k@LfN?hwlf_jAsJ)0e&buKN7+p>v&ej86D3l z&@=f|D&9Y!;I1As7qycU(V=*kl^r`C9k;S(G-=I5xxHI~&$b5bY%(*Ypr+?|;$$M4 zN@S*@MI85adv?YgO-_(GkbL~eR?+?p^IC~*Z9 zdy<)?y-$JK+;T*L*6Hl*ZGOM*JJlg#8k<|nT2%BiIA|xvPxK~ch7w~b+7d`iELo`_ z++3D>wLhY(B9Y4_r!oqf%5#ZMq4iIh_7DRYXZ+UD#u5RpOq=O3Guvt9Gqw{I1}Q)` zH-utbyu5R(&12P)*?cUYJef$DBJYE2Jj$YBY9&dxwZiHWS4V~I!0FpgX4bTldFXDE@S zE|-B~*4mbvvt=QMZLt#ErGeepW8kA`H?Rx$8;A+`2p%xllG-vQvm)|0_^pB8;Z*~lz$Xp7hI6bA1FwtD^8zlQz)F#wi#jeD_&r`= z_-;KLBK-{mm+_{7w{S(r+Xnt1HvUm;++by=qE>n;+R3`yAC31N8SU?QXrTK5Yd)S~ z`6nlu+;lYMcp}WqxY@)rF=bERtK&}w{*1qfhQI2#YG4?P2L2}L8NpEn^`!#f_RLk5 z7VCy8S6eeCQ(Rf!+cg9ZIti+9_WEPJV%e2&{M7$$EImwK7v6Fj7I;p4}Vdr!{ zbHb(TSY_kjY|b{*>_v%eHZePH&CnP&yp?blo!A{Ofr>i~kKs$CSZ|>cTrCWjYA1Mo zcpb8`EywL3MTu$N2${)pw^Jwgq}!B9guBg7H27rilFgClkq3@%{*L*_Tf*W1RRiMn2-5 zxkxV4xSgZq=8KZG=9UqrtnrrA=IvxE+L6eaJ7UtB$0^&kifabDd8AW3F^Uf6+$(%l zhTJ<`$SR9u`IIFWy+*@`+b=Vjm?^P9RXxuq|UF6jt3D_7K})rH?_rDsy6owPE% zZtXndVRZKQ9_r~H>h2ot>t}KF+@68qh}~Ret`G4KViSKNrTi&&>YLsq1N21-?AbfuML;?{AD@uMPe>=-k?r5X^H$)vjyt?02={VT4-aR+ zn(##^Vb2A4!pa4xuQ?1txX&frLPC|;x)s961!&>c3-I2=;-?iKb6KL$95EZup<)rW zm!S{W_|&)Hzlgx=s37)L?kjkZP=&G{o3S4qF7u;wN%S2EpNDr5p|D0q(Z!`28C*bE zW>>UhME5$#R@K2=LS?Hni43kbuBb?Zr*11Xb)w7F)J@Mk)D(?e#inqCQbi3%P5k4i zG9U}65icEAwPk;oMK)GZST_#1BC9z{RK;3NoD?^CAG+Jk?sm1``U~|z*?3CUnxaaAcA@iF zFQ`_==R*Z-2y?9CccX-@KBjp?+O&S`O>et|u8t9--)rNCmuCITvw`JV`(d&+#B`m{nV}{@eXe7n$x=u&jp!*cNT8E9KMXr!*$+^_%Q2ToL(uYC!k+PgN{em+~DIS z=wxPqOC5uXjv#N?T}) z&_Y)1-7RHX${pg)~>&IvGP+Twq^Zg%$7!Te6 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/ORBComponent.class b/source/.class/es/tid/TIDorbj/core/iop/ORBComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..bc49c05b392e094cc7f2e116765a28398ae8eecd GIT binary patch literal 1218 zcmaJ=YflqF6g|^Ywp|v50wPp&RUUmTtl}H+MT=N1LZHFmmu6^}X0hGfEK|jQ<2S#m z(UM5w5AZ)}ywitNQcaW7nS0N@clOMgAHTkR2QZHpDn>CA!8ybwBvd4kl3+-fRWT=5 zb1)^$D!8UX#dQVqDm2`Xa5I8ixE;nFxw$LhUKk5uEK25*g8K>{FsRjn>+crCJI`WZ zS%%&v+pz^@g7L&QLr>Z*QKl!JmAlYe-xjnr;yLTU6n4qXXERj4Zx&tOGK(eOOlLON zYr?CEE#X_dx+u%~JnjpdS2itPVo3eBIP3gf8x}5gvYj%+a6FOQ=Wn=K;ZE6XMi&|S zw*)V~UgKV#?^Z05f>h8jjtLFtF{a@m#uPl#@K{Ec5z~-HOhHD&3Z78cMoZgmHGC<* z(3kZwhM{(DgH9k$QmY!CBCFt;hUdu95!N@Cb*Z7A%`E6Lxh7$PVO)=sL^3_A=dFsh z=Q?(g>)BK$L2^=D(y!nu!(=x_ZPzo2lysXFpnE4ki&&y@2)WHl@3xbnuT`Rg= z72Q+gdJDCRE9H*TJj-8kirhP>Rk*NShhfkq?JTuZ7+v%jlHZIds z8>RP0PeFQzRv}uE6$mfTZWIAp0e#8f5m++#6@gE*l?CLt4pQKR6zd>e#HAK#iaJTs zSStAi!8&?Ub%f+P&|LSn`|5P4=J1JD$skdcBte)u(_f@bB^$Mlrul$Ea7{M8_|I}294%9qDFLxb{{AZ9qtIz%#n|ckDesd O5cr8z1yc&9`+?sbdK0Pu literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.class b/source/.class/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.class new file mode 100644 index 0000000000000000000000000000000000000000..1615a8710329c74373b11b6c4f98eaf6153eafe7 GIT binary patch literal 1840 zcma)6TW=dx5dMzW?xyQ?oC`^s*far}#+Q_(DR-xZ)G^c$+rc)4ln3j?UaU>myUTiA z+CK9qkPr`j$qNr4l>|}IzzdQ1DewoVk26^PTw-mgMoQ!1|mlcfQiU@v3 z!Mj)yf+AwLDzvoR0MThqImXSB3>an*J=x3s41>Y8CY zTAjDsdMkhEoMRa7G#uCd+%WYzG)JOxPIGndDClj^v7XG6=(6jiWwwSB=Nk8dCW3Q+HPC3J8dmrsa{>tisgEtT3%VBCJP6O7kSS8OG=>>2ASla;Mufxo6lGgF?h_ zHF~CPwfm$m659tQ9PrcxIdqrsi4+XAle1*tdmK=K9;D=P0>%i|z`X{2K1yI>Z=dvs zO^xce4ezn8!%f?{L%)?&dLWc1r$)S%40VA34E?9>Bh>#G{4`c(~oTW^@=Ttuz5cNH?V;8FU>M=i10>l2V(f2B5rXqr z2yo=6KY?R5`y1k4Bbxmc@zORTthBg~i1gh9jBM;;bdOy8WD2DC0ho+bgoZ@VC`e=m zi7En0FoP`VV>=kn?%+8AbD#24Z{yoo5Lcmxq*E7t^&ZB>nOq|0iGCY@k~S%Z?H7(B g9Gy9ULM@yjQx=Os<>_EWu?z)F(H7}A<1Y#S0WuBE?*IS* literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/SSLComponent.class b/source/.class/es/tid/TIDorbj/core/iop/SSLComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..7254d4a752c185dca5db0cfbf5b150a57015f245 GIT binary patch literal 2160 zcmaJ?TT|Os5dH)P%R&TWE&);~X>&2Q6F0pVC=J-8accs_Zc=)4gni zhjjYTm%O$!6qqv8>2rTW|4KUD)g_okN;`mI#5I*OnEMtv-?<6SPdM_k^ z;f9PacxO|g*cBO724AxGT^aXed?jN`#@8~wk@2mJ?__*0qbB3N3{A#%9Q8OF68c&- z*EJ-JmMy25w_447rBW`fZ}888g#Ja{)V(DMz3I8T5@H3bAtannce7@LzNe1vkwq?D z7H;0t8~JLfXgS+E`MTwZe7)i13&qX#wr97!isuNewZLuzw&r-cW^4+LIA#CWxn!R7 zl|73h>1LCXNY9mbv?p5L&`e6i-=!o5E1p(=w5HirZQBr3V=AwN37ed}+Oq3fbzSpx z%Urj4btR0YOI-q~xCTlsb-GZjxvnCMoQel%#_>>v4xwTP*W-Ak;sy*AEe56v3pP>p zdFock@*bDXkuVZ%Z!o!Fm!m&c;eeR++m_?a&oc5GCk2Ge!Fz>(O$taALtEX z@}>EjmqChxBWw!W(8ysjatOB9bk}kkBDk%YNVn>GbTPX7urXtT{hn3xk z$fa(NUAJuRBL5`Q=X>=mv#Qo?ibjWJj9wtOQ>*4_^suFpgs#qA8j8BfZ^ByJu(&Bw zbhL0*&AMj0Z6hkt=|_B97&bq_#pC8KtZ%L?=lMZ#*~}jL_R*i+N1Wx@A!L#hQQ&v*Zs;-{x(t(A z$z%^PK#@sSBU2gzq3K`5H%1(OIl>?jJy$-$&{p;U$+cWk*~f4$nK)ikseO#_$$J?6 z3FE1;P`GZup;iS{pwfm1Fjc(Uhp61 zhjDzQAi)DK%;q1;rk5=CPGvI{`{8FKaw+0DGSwHzGc3mg`E{0)asXz1kPN^@AIt{e z4IkVLz?%$)@ne84`A9;5F8in_L|1$i3(-{{$stM;I+@=%)EAfz@*5aX=`+Y5;6Ev| B0yh8v literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/TaggedComponent.class b/source/.class/es/tid/TIDorbj/core/iop/TaggedComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..e702977387bd3d914677d605b1281c5fa684de7a GIT binary patch literal 917 zcma)*+fLg+5QhKF0b{c?36xV)+EPxA6R^ZBh?~HLrAkPgZllGvBBzOMIU9JcN+p$g z(Ffq65VOIcxJnQgo|(1&e|G2d`r+~KKL7{VH(+2@hmJKBJ{hRuvkL15zTm40-&EMp z@Lj_uL$TMAqRqe@hH|gvM!h%+{ZO_%AqB(k55I5Az_Tx%lPJ0A*lv{gw(BMKY3Pc$ zKj;b>MByRB%ux^q@|dAuI<;#`&B*f^>ZbF~7Rpq-O9Dx*hB?*LJUKrb$ao+xWa5k7 zp|Z`zB9VdUp8LX6TfSv>!mPK@{~5#_C2Vobfpg5`gNAL69h5nCVQQ#xSg3O}lx7cG zgk=(yAd2lv(Qf-*^MxWY?TA}pcSYE?&u%)tD;e^pI`hO93haLa(sUyztwA>m=|e4y zRvG#X*7T7x$`P%dNrz8&9;3rhA;4b7&rmaKQ|V@;bR~3!_UifA6;)>h*q{q)(5=mZ zW(22-DfpC&RFzPsSfN#w6gkQz>kpV!y+_Vs_sIXESISbt!k93h6*k6%i};ud*VB%b uy7e2mAqpzzhbX@ET*7iHT}q|8RUcyJwVRHWF$w)Xw5@Ipq0uw@+yzh3WZS*~ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/TaggedComponentReader.class b/source/.class/es/tid/TIDorbj/core/iop/TaggedComponentReader.class new file mode 100644 index 0000000000000000000000000000000000000000..436834f5cffd9ce0f5def351456298731220fa84 GIT binary patch literal 881 zcma)4%Wl&^6g`vpL0mU&pgc@?1xlNwi3YJFtyqvQu+-8jjw+Q6n%E=D!LcLTLE;1W z5Y}wUhDcQ61NbI{xPwqt2`@U*x#M%@+&dcI`}6nr9{`@CXW<6!T4>^)iTf6+id6By z#6t^)B8DQ5EYuXKDbliFD`G41*uol~s6b@X#8U=iFG`}~B}28{IbqO-X&`CKqzD+i z_JPcK5e0ng?x)#g%KbEx+z&E7+#k8gd{KA>S!cVQQe%|P`B;RZ42J1!o+dIWb{ST^ zLiq0w#e6I#v9z&)nr?ST z@L15hjwVy-7YtivCI0UXgQdFpZV{(R__xn4!^&J_MI>TXo?++eeO5Elb~`6p3)g8H z)vAE09#XtTtU)`YUGFZzzN&K?#M`*@@AxwftV!CZ?l)BSnqSm;OwiN^tuCQLctO}8 zye6~=Z_iOZT|ztTQKH^EJBLBkeA6d-txvQ@)Ea1xM#74tkz$jwI?x@Rl)9snvUb{B cVtrsZ21yOaIHST04n+(4FFa%QdZPjS0SMOG&;S4c literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/TaggedProfile.class b/source/.class/es/tid/TIDorbj/core/iop/TaggedProfile.class new file mode 100644 index 0000000000000000000000000000000000000000..f20f3d5db8ae739e43c1f90c5a17803db304ff9f GIT binary patch literal 699 zcmaJ<%Wl&^6g@X_F-}d>63WXwTKd3oD~-gq2&qX}Sc()BN*8odP2$0FaAPx_fcjZ1 zno2DA06q$FCyB&E6`OPB&OP_eeaw%a-@XHQfxQ|$1RieUk%h-Kh9@;V#fF7V3(s6^ zx!88GL#P^=5-2A4r7k{XxjIdxk%Y=gi*Vy*HqOi|mW9n@g3~S%#kXO6(wf;}Y-ve- zn#i269(G6avlO`;r=m9)si8S&zGwdzof(eX54-AIm@E-Tai`FOkr)|9q>R+QpMrm0Ha%;!Q_{kJ>9Mxj$toTZ}O>$eU?S!g2%xe{@w`+96Lb3xd> zF8iYAKguR}w&r(vG3JHTcnZnsWNz^Ac|R-G-5VNZ4z-pS&L%I`14~h1U(39XzyJUM literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/iop/TaggedProfileReader.class b/source/.class/es/tid/TIDorbj/core/iop/TaggedProfileReader.class new file mode 100644 index 0000000000000000000000000000000000000000..a6923e0a022dfed51a4c61b10acfd25bc2e44264 GIT binary patch literal 857 zcma)4+iuf95Iq|wapJnAEiIQ8+LTL))0P!HAf!}CA*sNU(}X0d)Thdcx0ZwBwOpq^ z#S8F2Br3r>--HmeRU}jqE-UShk7v&8?40@bJ=~)tVU?$e8zB-xppxk*7f@stohp)E&HSx^d6#hr+}) zEb6#t;yxZQSTnDaqY)2OF57OkrAh{m!nulB1+E~R%POI zIr4eE)p=Rt&044Xy5=yf*wMKg23~2(E%j=z9_x5yq6|wFT4C7v(|uQ-*`e-$ zp1VABBcHeWLorAhwr3^yy`c<-lHg<<%E-SI$7Yy|-6Rd%P^G6*{$CstcH`=!RX;+J z1~MW!(lK?#thbtN=b(4cI5})Fl$^g4NXchq=hypa4uZ(9+W(?iN7*gR)4-~g0aNk$RSJroXRI;_SfGj|8v?I^+9WmwxU}X(2gg_Hg_p7 nxBLDAd4l@k9>KyM!Q%0M1m@RE&I+9cXx~v{3sl%oA-vpG literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/AMILock.class b/source/.class/es/tid/TIDorbj/core/messaging/AMILock.class new file mode 100644 index 0000000000000000000000000000000000000000..f3d23c585081ce98446261bf4078e7432644489e GIT binary patch literal 6603 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/AMILockEnumeration.class b/source/.class/es/tid/TIDorbj/core/messaging/AMILockEnumeration.class new file mode 100644 index 0000000000000000000000000000000000000000..bcbb2e1797a55702b9cb07435be2ade23317dcc6 GIT binary patch literal 531 zcma)(O-sW-5Qg7rYh#ntR_%wadhj4L^|0c#B8c`-Nbw>byhxfZHElj1NyQ)KK|v8c zh-ZJ4IH{qCD3oPqXV_9OfNd2DRtv~uO~X1WNvJBQDX1&hAgJDzbfqW# zI3m=|v2|mKY3#V7>rXuyTCo%O9YX%l@tydH&}{v~7#D=xNidXz(zO-!gHU$ojk7J| zlCOPv8xxF{VaiCv&QP59PJ?hT7Bq#dma6vB=`P8t$>=Gd{l0 z%N-3%{9e{Ei4~n}e$F;mdAFwF3k~Z6no|p`jg}G^uWnk~me~#LmU+waABEzwfOKk} zvKminE!z(SCicLpc6&=Tsw5}eF{k!jS9Mj0t~plQYAR2lR8_ti*bQ@~a>MmDHqE;0 zDYN5R=6yylk!j^EMrg8f$f;S5Jy16i)g9&gR?}`b&1;L5fpX@G-L`|P0_*uiwO4pe z#3s5ZtO}&(-3FyA)#*|;jATbIDOcV4R+%-kq{8t&p)i*NtG=~pbylL}r<#haEhSs4 zyN+WvZMS1CDN3;)R2t>Nf0GXVk}EQO)Aszn>q7pZy3|nu8BaOxHU(VzALKYqzWoEI zDPO1vJS(u>Hg}}2f_c~Jv{axP5_vq3cpIk#jwW=l z#0kt%cMgsQT`O@CZ%LfS8Hq3Pl|&I=OMHWxhHoV-Y)I7ExQT|qsiZ#MS7?a~xTrx% zJj6wbCLReK4}G^RYS&6TP@dQA5b=fY>#D;MN!ZwwIL}Vb9>~d_bVyvr7U!VF7Cw+D zGvRko5-1$V7EiCh*nr}_jZIZ25mk=LnDhEACs2Gvxsv)*;8H%iDZ;oTqvidQ!hR9C zwi=X+@dN{f2Q+g@aV3woz-XN=uRz^ZkE5F=jEjt9+HPP!q)9xTH9xStZMvdrf$h*Bq#s*0Wi_3@&1oHprYf9EYEDY*zY9QpKGhe8ck-U1)7f-P zd*4xE6?1gK&(hx}O%F9ct>8wdb%^IAd{fWUTZf?5DbQ-r*9H1nr08uJyAX!h!I1GB zsr6l?cQ8!b3~jX?WQ`&pm3EN(h0q`mMU-M2(_~?YWQUDkF!ky&4jBzHR z7&lG0EMeptZH9isA%UmRj2;fNj=;OLrXZ%siHWnZ@?@+mV<)43V(b|KnaVl($wuKU z$5hU-iyn?V#jHWwTo14P*u&AEkgmQs85Yl?{dj0fP-Z4Dg<~;;ETuui`xqeyG-a`a ziI|2?svPS?9OoS00WpRx2qKncOb@UB9Mim%h+vw1#ASRK+nC`DklyHXOs+?Ergkyi hkGTAT&>14c1)PZqab6Y;Vm4Fi;SHm-i#MZ6;2$a@C5`|9 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/AMIManager.class b/source/.class/es/tid/TIDorbj/core/messaging/AMIManager.class new file mode 100644 index 0000000000000000000000000000000000000000..0e08bac908f8bec4d8fc49b6019481d2bcc357d0 GIT binary patch literal 2747 zcmb7GYg-#t5PnYy-6SkfFog=O&{k`JwyE_}D_AMiOEiHN5RJEWNlsyDb~oK@kb1w> zyZ^)wULZV=eI9>+Kg!3My(9rPf_#{hGxN@z_spD`Hx#^?Kml(h@HXCI@h*$^SZGP8c%MWV_ionU7tY%!Jlv&E& zAjNv7XgiWO^9wVR0!K})Xj``hE=J-^S*_};hP9fxp3mlWOJ9}FEaAzs*VJ^=(8_l4 zj#f6RuE4~>A##My5!gSuV%ueb3kSO`tvOOJ-6S|UcAHw&)m^EXHCJv5^yk*~4LwuV ziRJvtx-4?^9#b=Yx|*e%ayM$xb?8cjN>p8~Djh>78fPMD)Lf&SnYC+{D;@vryER#p zl-rVY1jHhxaLTX@_nN>+Ix<9%>#=2l*sNV5F1=OhYNlanu6Hl0RxF)myKm4pn}$IT zN*eFjlIBSIQFY0sk1do4XM^sdxdvZyaFqi`p*zxJS&ARp8wdNERw{jr*%MbG9hY6; zQhF@%lK=5gddQhxPgr^?_+es%a85b}Xube}%whbS4iq8o+J4OiQsmrxFO8QFpDLDv zGE%CRRa`+{#p6g*Quo4VYDU?sepj<8Mpd||sdy4kso20YZ$D7+Dqd6Z1TG7lk7~nq zSyQm7Vhr~be5m3he5~RV7N4^CjKvjv&VX@hx&z}jGr@jesJMWOD!#;50%Hd{hh<>b zuT@Ooyo&pnRPhaqZ&`fD;(NaG4=jFU@e`&6Mx&y)Hk3d*3KEqSfn&`w_+3t&r&lV{ zD)EcjU(@|%4(dklp~J9>G#aVt_W3nILs8uPW)?UV*#+Dq{#+f7at_SYhdeoV4FJL2 z>1kWLeL1sJinThm$k<9R}PiQ*BJ;7P`J(M;j-EG-^xR}b&aHwzuT zNQG$MimhjE@c><*c`lvci!%BDSauW3ykYt8nkJ#Q*Ebvc6x;Pp@0`*?V_@=dT@2>s zk~c0>G*}{lJa0(di0AEF&f}Tc8VIN9Lw%0^O^74LBZGd$xH)M(!X4wS)O4OcgG=5@ zLxI*f4-9YrG@hZg2Z9>yS&~<2cOMEx0Pcp1#5lse*d zBU@ofx@Z_$1W19c3N`b2?$lj-4Y z4E;ujgUCFG$$-*vBE*yu>@{4+a0r=d3pp7=o^J~|6+*7Hg**~MUchv~B}J5KozJNz3^Y}F&@e*E+Fb{?1SCEY`4}@m= fZbX>7d~+N*Y}WJfW9oHVL5OVTV$ zvl2!=0xgO#RwKAGMudA2tVM7?g7q*Sgz=Ce-m10?v+5jLf;VgiR_glrY2TNk7&^Z_ z7RRDdwFGT!hhisMRomg#iDBwh$7l(LXsg;ZY)6>FVp!i5w&oZOty0=)TeTyt-nN9+ z61L5CqG*M3smx8T3#-^RU+sFlO@@&z!!(>H4B>2vzT682rPywe{+KNsKagP~`+pgv zV4Rf7hFS67tz_Li@dJm~Uzhot3a>ROp&Q0edtpgQUy61t*Ob|XO7sCuTVz`Xy7^aYj;gU2-X;MfqOt&pvYqxZ*xVOJu(6$RZ z)n|qMLYW~m(A-R&n;En1WNIQ~3Y|N~iO5UoM+~d~h|_5-9ARagL*mLI@CGFx#%2s# z*kD*0a1W+vQlmXyf57q#xgoPO$ZLo?CACF^Vi*6IufeF^0~nSsGG+{uNBo3qO->WI zS344Qhk?36BazDP_MrpEq8Z(k{t{4xesU*EK)01BDq-Ug9@VzG%^Tm`tIS7^@>cVhp$fw4AYUnTO zVvm~hvL<^E8uw{#dAir7jN_E=I&OG%n4*=*chFr!A87-EZw`eOAHFpd4*Kxzq3}o- F#&7*vR<8g6 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.class b/source/.class/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.class new file mode 100644 index 0000000000000000000000000000000000000000..5c19efddd845768d07670b6c9c765862e3d96778 GIT binary patch literal 141 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 Yz{}1@mG2=TE9(B=zi+-ugrMEPKc=B-y#N3J literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/PoliciesComponent.class b/source/.class/es/tid/TIDorbj/core/messaging/PoliciesComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..0bd908e57b5db5061340836e9d91191fd985c55b GIT binary patch literal 1205 zcma)6T~8B16g@**7PbotMO#0>Phh)ST*YsT_)vTxfk>dy^vMj}Nwc`!-E5}{zsOfj zv`r-O)x;lVyt7?G)yD8LbLZZ3?!9yF?Ed`q?K^-~ywFj=tx3${wuVI=87%2ohN-Nw zvMe1oDr!l5E6TDo+|gmc(QsGCH0~+%s`A{|@Ib>uhKVTjy{0ER4Az$DIMQ>S`sPL$ z?;kkLFcwY{KXP^y?5Gw7QXI-E!}yvPcygT~W0qetWNV=-7*@=)=TNkK#AE4ke^+pq z!5+6DV$&fnof)>LZF%S5A?)W@tIRkIiz(qVVFoz2a=2_KMq)Qqe8+d}Efy=mJ z;3G_+>mIo1u_z)c2cR6lLe>F^d^ zXfSZnq!zZLFc5)cSRTdj!pN!fR!g`;$gH`kMzl1F@b5SoW+}gjUj|Jcb-F&6UKlXU zh(k~QTnsIp4G}q*LyzTm-nohwS42Sd@$dNputlMoz45icHkYI!$p=Rl`0~p5C z5Xl-Rn>41iM5iM88SQy1*9WuMSB!n8qax4@hd^VeAbSWzvrR!|WGNRgZyh7kV0~l> zX7`Y@z9joN+1g2NdH^Y{N+d;Fv~xX75N1;0e;{vX==_ly8_;zMuI7H+SN^xdY{NpPr)d~6#re>J-70PD2~L=NXT&Z}rdQu<3(V-y!uT*O-(V}4x1Wgo7n^t{UPwh!Yf-htu6gq%uqWHrvvQ7@b9&kaEqgL*%}hpzM4@0znz_lSo7WzOnxtc- zuMZjdlrfPN9M?D|8S2tgB7MEGMY3Q>xZ@L<;q&pHXW%x#F~!j8qF4f1MJJIPGP7B; zz|iH6>8g34ZGb^7@g_;O!!Y2!`NX3Wvh=J+y;8TXi)hz9!6zZkC9_k++O-X8>Y4}{Kp3?Az zRQsidTe!*4yzV|hsczfFydyIG1fO?ID@Vtq;VXR2aD`oVLTjU(6gjB7zG-~_Qr?_LuNs_39OO316t`yj~n9G|s6}C_0GUE;zF$6bodm=(a zKq;Fraw=WXl@eSJ+LiTI$m=UyY9CmN-Gwz(|mlG!{}sdd`8kEm?3>~pNu z+S*NwHv1t5jp41cQrymR;MT7QwIG{)B~Tk`H#KDogP41$R7IX5J~QsvMw+6zck^9U zI^Hei|0rR!RhF+nfrsXLB8%8DNJG_7$0K;!?=C}GhNt5`ybMOX{UI7c z?f1bM?!kBaS84G8{;|*!)Vs8u3W&y9>{vk^M>|KyV}uk!>O@xs$s!~l8I80rqI$?5 z?|6uv1QL(5hnAsTlw(b|C*bkl{uv$hJ7fF-YR8sP7vziBRbNj-z_W;kMeLSKjblN+ zguq_`&%zpfjf4+yM3u)lra+ZAEKtSByt%|3;u-` z|Lvc^iPx#1vMQHWT12;pOqDRXayinP{~W1jj@k~Z+5e-W+9eAPVRwo*<+u!r8{dF_SrAH8@v zj&i)L$jB*R9LE|CFbY>UUa3$Wsboo4gmOcfm+>2HFTGNvddqncQ}m!h$wBO8epJmX W^8`@_sza6cF;t4i3ic4rtHA#NB_Ego literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..228d16178d8aef10de67187a3b69b9b2594f0004 GIT binary patch literal 1347 zcmbVLYi|-k6g^X*Tb89SEv2rHN^Q$SU9GPwXhLa|l7OwyH0c+~c9|dw>}FWf@@x15 ze$YgV+QfeMHyPty*jD>YG=!a*z2}@e_uRWbetr86U;)o%3}e<059TDy%d|#i#1NN| zkZ@au`G47<>h>0&+67@-4}S*sfDlHIllMDMc1Fifk>5RS%jrl@FUy`p8-3QK8iy@yRQ zNM+u%g-IY{P!7cqT(@~Y&XA3sAf_AbWGu&Z zE#Bh2Li#eci8!J@4j@AA5}p>NkX`NANt>>Av%t7d~r_EP3D!|Ujo@qXj13S^5%4ZX*`^XC^g@h zg5)BnbDtbEhWQJm|L!OadT$C!t)4n=()T({-!Y><^^cxIw5NX1^Aepx7@!{@$Gc#0 z^)m)O(#gS-n=WRIR)_D4f5O0fHypyG8y<1Pp3#}ZU>H+wFiiO!uCfo$mc#GD`@xmC z0@XzY>5YS8{p5aJ#WlK?bHPOta4r~*e}OOMsHl!aZXeRtU>8FNJz|iG9HiZKLelzD z!VOH*-b?Q!_{oL{?Hs*~tCxuH!JksS9jL0WgODn9Fs6xXjV4fJb zj*I~VDTe+3ldM8-Xn1Pi8TJ{{i`^>~EA69Vv)EwRSoF+_t_tA`4VHm5+%&L>=M1}Z z;BvWj-?6=tJ)|CNUxjSYwBK+q;DYAH&!n&&$*{h3MD!pwui}{x*Ss7V_(H1rSPPA& zhleeCxk-A_jDG4Tts2?XBU)GKw2laUfS#X#<+I-q`9dd!rw)XeHQH5tJpUDuPoeu3 zZij9~rQFfg^xS!ecxU_>%0JD0f#|7 zpCf*tSh9+uegW-tWrAzJrhzFcX@#sTA!&cB;U4aj9iux937X^svJ_uBEI66p`;G*| JIrLdl`~`=EfcG4_vyX$m{^auEF zG|@x_CDHHxDC3=W0U^X-;)mV2yXV|{?rVPj`t}{b1Rm=!a4m)~u4}lV(>WT)O{8^X zkkv7UTgtkvVO)c$L&qHrcNw%=dCPK}oPjMeM4vcyN6s)r(u3wa4AJAh=Q?()EL%RY=wF^(Y|ke`GMy=SqH21zsyVk@oXwdlZSFKlR(L}S zuM>qty50y!lK;zefj3O)RLoL--V+;}rtJxC+7)5W%@>!O(r?ODDY#XeJ_xL?!QJ!SEt| zka(vjxq55*Kgjf~O3Qw=Wcej)!{sz$27O`M=Du{idc!~hLk4l6qYR+299gBw}P%$B)yth!xg&923>JR56zI?-DJ}o=-o$O1B8d^ z)U!Ka+03rrrhM00sjviAWnX_7GlI z{yT_#2v|uB1*{(Wqe8Hbc#IZfIDiHzy%0h1?ATXyG3+9`Pa46+fHX`hs)|JR3$(XS zl~(FND27W&Q4Ce?R6tB-chP;wE9^mEkM1D;qn(CoRE(_47Qi}<3cF_e$Qk|Lxu7+!3a?W9@Vb~e)~(*LB1 zCK^x@efLKh@34yrgoh?P?A|+b&OP_ey)%FQ{`>`C0nbe2Fq1_Zvj*;%Wbc}|hx-N| z71dU1_dMeoC4Za@* zvd@sV9irzV5e9z0q52WAXs<#czKDpBx1FkxEmyQ#?(#-$sqAhZb4!%6$-7F5ScQ^U zzT}?bG0yPTJ`-5(^h-{acU=`U-Fjt3$ldp@FC=%{yxa9!L8s-`k^*a@*J&ylMD?J} zMNh?|m39~So6=ogscrOB z)KgoEif)(wm%2V+DJ5sy!e!(wSQuegyy&sC*rN5>DWsN|H}KTLIIdW@jRl4mC+tDbRTaJ$E_q#Q-}FhWo`K$SwNro1!-z{7Ki^l< z^A*Fyxs#@Qm9e+-kIXS> z9U;A=;}4MelCUO`PguGxEy3dCSxn&uCDjE!CjnhxzIceCMXgfM64fIZJHrRK^!qq) rgpM>!-c4eXePdu6x5(GY4Pvo9rKlz}E zq$r8L`=g9!x?4+|(g)LYI%m#zzVn?kr}O*IkDmY*u_0p!4}u6FCLu1vCk!7F5|T0< zF35O@Mx;$HB&lFj zxntEDwjkCmn~dlcnytOuW=h>}#F9Y2V`v42jabI0s@yE7`SiBsoV-_c%P~~F;HX>M zxpc)o$<$z9-e*DQ|K8t1W9(t6I^l6xE#Z@sw)Vaa-%j6kSnt zO3w}VgdyANr>i4XsgbsBMU;Dzr^|MU`Vc=Y)n8m7sHPHA(nn~SaH&ffk`>9+i z%P`UIar?95IF=(w*BR6%pm&oqmadh==+aEM!^d_RrkcTRgZ;)R*@nZg)_DoG<#5qI zwfn@hkxmN?Q%ZZN_){Ll4{?Vcg&}%5 z7=399XbsYyE{)ckWR0VbK7gF4gC&yZ==(~Rz>i|g!_3hG z<{bUa2)cSNVuXH0#(n|$BKXLRV#0F|d2ZkE^k>gGi7C$+Zh$GENjr^Oo-0Z+1g&z3 zz>%P?Lvq=JG=DQ5YLZZ*q`|}m1~LMgyn>shmbj%yywXF7)K)$ziQCOw(#RFnnq}&gLHOBAWgJ=s%T(n`qKme?`u31`+YNE5HP=XxB7^c*`b_nLJ=#@A<-F-# zOJyoXnHCo;ShDgaCmTERL0RSSoIy}XfTgw+F>GG!Osg?cwVwF@lH?W!e*H*M4NKFj zH38Q#CSVZPI3xrNV}!%9fIE00U;-Nf-=kzyF>@JK@6VU7McO6}g<0Yvi8stB|%A znm-4_?A45}qzp4xGds98)Uu(P44KPYY3Qb9@4MK`tsQg;+odo6$kl1h9@5By?uu4r zU9@;W6X&K zn{}vGtE8U{KkkG^99e-_{0rO+C-AhBCTLA9?FqP>+9zWt@Mh!3@X^h^N8l8Fdky%{ zPQmZR8wl8?8Sc_Zi~oTzhbj0mjTwU5O;~b>!bBuw&rviB?fDw$KO-~{q|-g<@c6(s OIo!i6efQ9}5bz7!v7ZnC literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.class b/source/.class/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..256b0161c1f992e2f950dcbe7b69993f85a0b551 GIT binary patch literal 1535 zcmbtUYflxy;B#SMW%|tcn=s6g*~#wuRw}s@3ESqea`T>vprQ%X8jnbN#I_t67G~g4MFb z62o}%6ijM^A-rtYh(_&FZiz1ESTc1=21CrT8%qLdjHtL8%yw()xwJHZtv)(?Q-3$x%%=-rMxSgU9m1) zZZxxh74=YcTcCK2q4rO%LhFbs)wgJqx7$YDYSr}$f4@r|tp`)~WEYxFgQROFl@r{1 z#!x;Qt|u(l>SX_`K%DBD?@ESKHMSd^?w)REb>HNUun zGRy{m(iw9t+NRNv#$}i}Z_aDpaJWkzZy8i_uWO_r*OOY_-r=U8n+P7CC4;Uud0s5T zL;&si*9Ed(oiv4GyF%Wk-rv$aBw6X{#Zwu2joeoTwW9ES;Too3m_Etm8T7QoaB@Ah zfhl?)#pyl8=u1|kb%^$48d@*W=^6&;1E}c(uyp1N20qbA;>k!pMq*|DVEQu#KKkLS zlNahfO zrS$YyL>LaCczjW^_zfR9PB_`hh4dkYijp*QjPWLJQB<}(@8c4Liyq-<7u$>+K>OKM Z6{m5jw40)g2-q71w{eH|VR{w={s2ZTiY)*D literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/messaging/ThreadStateListener.class b/source/.class/es/tid/TIDorbj/core/messaging/ThreadStateListener.class new file mode 100644 index 0000000000000000000000000000000000000000..3acef6add638536413dfab205a2de3f8fd4e5fe1 GIT binary patch literal 238 zcmZ{fu?oUK5JcxR8ey#ZLlcj37h3XIIDX392H28soyv#6kk58)(hF1iY>t-#*u+mlLBg{V9Ky%Y;^?N! z)BK#l3!Z6Pgp)xYsxDm#E`!=&lwLBuGwGb^dJMZ_GfCUYYIZ)W4USC=^lMYg1ukF{ z2nD^+6nI!ruqeb5&PlKpEDQB>cwWH^&=@-EJrIcn!%Ok}EO!*Vh?j`W370!HSQ1`V z@Csg4@ETqxDhl4fn+o2-+YFoM^+jFF=~h-FKc<;2oS-@GjnCPy|uqxNdm1v#j8Kd?4XN z1s~yK3RxvJGB&OaS%#e`pa z+mGwYGCGzXNsT9mQbVIt3OhMo1gx_nSsOgHT=yB^Q4?G*-gnl{Vqvd7c5LmbI0 zuRHD;J;yVCv%t&%L-U+@j&>w9o@mKtv7^&&r9sLQ)%!BUn9tXv|# zsOJ`F`W%fl5GvS?C#IF=A7%|UwTNQKDOv6fPyxou`KPH#B?;0XWH{s}J2pGd4X@8f zwxaPTzM`UeD~2$`5t?o5%2L)eOp?CFw3I8;;c(Z^E%LPRXX?4M!{@leEkn$nxF27o z=Ih*)VKeNh7G4Y!|IiucIhtnFE0*p!_7d&O#+=rO-pqyQw7JsoppKrTS)14AZ703R z9hXi7(osKc%A1y7x8r8cs3es(pn=D!=jhP#+g1mmFJm=I{$8#r2^=M?bPR4^b5)*c zqNO^;=4vU>q^HA=M&XpB8`N463SN0>W}q>xa?lAz@-ABK zLxApp_V{J6cyI*)A%gMXAJG+rE{PZD`Q7v-Qnvqx-d9NXYgZ9r`bSbEq~J9~N9m@i zyH)NfqB#)~iz1XnSPgfnp&~ZLNplN%4qrpdbg*^v6{v}(RdkTu&V;PW1aOxshgPs#mBTC8qc*AXRqPEQ(HvKs z)$mo^8UUfc2ssf^BSq}HMCcFUXZ%8WV7Q0y??vDSEh7@{m2jVg`z1Ue;gEy}!6YOi zWY$MX3Y3!c7m<$AOXpd#9)7BVezd2Gy}PG|JfwyM@^BS7K`9}Rl#oYC$ir%+jGXAl ze?#ahZVw=N5o)Tth&xxYpEw`5PGQP7tB6f^T}J110v13P^Yr;8u1hsu+Y!7$>OhHC miOb<6@rmLg!Y@jHg#JhIaD`c0$q^7;MVvx)T_-E}Z1EqbaKzjI literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMElement.class b/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMElement.class new file mode 100644 index 0000000000000000000000000000000000000000..105c8b528d6962d4a5cc78ec976f03afca2ffe38 GIT binary patch literal 677 zcma)(O>fgc5Qg80UAr+(o0gA~ex|5W69;KgB~Gm>s?bBEL_tc_Lod}PS)~q+UF=OH zehPm8F1;WTA#p(T+8>3O4IB^`a`3$Ku6Jgi*}eby?K^-YJj=tu6AvynO!m}-k_nqG zwq5KI^6_MRHOW+(5vW0MIi1Q_6Uxmb9g1W;6mODL%U+~9{7a?62=6#1cmtK`G0EDld#Xv z>GEsa{4p>`80NV$Hc%{@k=W85 zybs|a9{s6%$#pqi-KpKd`GAe!3+&ntI4mFG+Mi%sx7ICh;2Y=Yz$(2W<96A3tPZxY G1NsF^2c1{| literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMEnumeration.class b/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap$AOMEnumeration.class new file mode 100644 index 0000000000000000000000000000000000000000..28a3a58436b92b5d9a58d3057ee7de4c97b74d60 GIT binary patch literal 710 zcma)4T}uK%6g@YsP2J4=sO;OaQVTYE=*0-cgapNx=%KgKhFn{B!=0l3Qx64M)I&d@ z9~Ip#D+wQD;12i9xijaUx$hsZZvb|&5rBq75aXB*Vg|EbnhYU;IWNp>Sk$nhAw}?C z$Xk~%Q)!87VO%NGGD`MUTXuvp9Xn4LQ%%!N?+~&T=^DyBGmguLPN&{78cs(VmyR$B z4P{=-TD>J3swytMqJ7gg)d8W98M>-Z!I5yAO4Kcx&z`WvqH`t*lTG1P`N@(c+tOAn z+Ly_m5<<4TQ9Y0l&t$(ZvV?tZd~3?<&@rJSj8zS5I)X@hA*5ppQ5`YFHLMf%hU_n0 zs8#zsB82|~dfB#Rr)UY+m8>)J z@f3{kViSN!#IuLz#>aRVlN=+QE%CXJ_h@db3(7rXB)9zpUl;xdM!_t0ug9I{ofr$| e9^rq%DB-ThVRHv_#t8R4&azj@EDa0%Dt!Xr52sH6 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap.class b/source/.class/es/tid/TIDorbj/core/poa/ActiveObjectMap.class new file mode 100644 index 0000000000000000000000000000000000000000..8a2e46cba75832eba80d17db9ea6bf679d637290 GIT binary patch literal 2643 zcmbVNT~iZh6n-fft7R>0F)$vH-!q8M~G`+rRWlcMkNh=uR>9my{UNLhyE2rR<_bb+_ zm9`c1)dkyJT(K0ICYH?&GqP@{Rw83&ZYeL0DpU`o(kc6%f-4Ywte_2N64Z9Bt9UsYL7ndXPOxB95Wz5Lb_(*gjlTAi4tI5c8CYy(wv9cRhHX;u*ZAa$? zuy)2a<1b?7+N{JudKls8%eb{B!82S}(xRvP=X(lPa>YEd)@o*hp?l()v~8vYyCYD^ zE;vtvRBkA4r^L3sLKxI$q!rQ*o=chzlA@c5#G{;*t?ZG?-a=*teLZ32>}+O}Wl!Zs z3inhxsc@@8=!NpHnCWC>YH`_$+pN7#?pa7O(AM( zlyGB`318ZJX&*1#i${ZW(svDOx3JCtXr{(F)6N*@M^_Q$oK<^@&tl<Fua2gwvQ1#Q18)v1gH_Jj^FOG za1H+l?j|Ax6;iH}6p5}e&p;O$h)JAb=Kh*u$@3H3a+D>dD$1I=-l4%shb-#aD`+lJ zFOcFUDTC|?lF;K=F3_%;3WH*`hsL~CzqbAA?>|(Lr&_rFM7@qr`3Y6g&1bkxCz8`$W+XXvlx2Kw2hG~^T{IUfc{cC8 z%)J0Q=74se51Jq-3)=i6+}i6BPS_}gvNq%!<*2TAj)U%_9|`(OS$u65{z~!o;d6&^ zAw%$5PvE_S!RY*3aEG@`$jm42m!?zbN7RAvvo~b4Y7fvd7ZRL(v`Ph}&{ugj&_@d= M@Ctu>_-u#z2ifC)&;S4c literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/CompletionWaiter.class b/source/.class/es/tid/TIDorbj/core/poa/CompletionWaiter.class new file mode 100644 index 0000000000000000000000000000000000000000..f5261e54e4f87d859bdf460ff7959d10a2c6a55e GIT binary patch literal 1200 zcmaJ=O;Zy=5Pg$f7zj%sLO>DukSHNRSMXaJ#AQMJDO%;x z;=+Y0z$y=xXMc(Z|AAt6Ho^tWp?kLH_3M7!lOKP+egiO#bQoPov?GEEHc2+AFeY&+ zjLWbkuCzlUB{9XoX*O3SuCc!^aYN#!K(v;3ihgB7OTx}JaM zRQ!rtrr=9~mReqW1%bh=TC@F1$f}JbAQ+%`F)N@Xusw8farbg#e0#-qlEADd8bt8fJ z!pbcjhN9g3W9?;htzK2kPU;0ZSQuAn=!%w=pKeT`nMVVl;`0{zFlwP2Q46QgW1$x@ ziQ5+LV1^p8FpImS@VG(LwPPlf@`)J9g_R;zsa$#~8Z5;ayX>P$ZwzK9o-8eW>4t|KCC``^F1bwy`uzpu&ID@! literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/CurrentImpl.class b/source/.class/es/tid/TIDorbj/core/poa/CurrentImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..d1c11c09008fe913fa5b513e6d716a6b431148f3 GIT binary patch literal 1756 zcma)6+fEZv6kW#-4os(_f}#Ry0ksrxyx;IfOVw(j2#xXb&<+#-delT&aGtvx#wmjs;ouTxV4-2#ALQ+b@?YCGV=hq1aZA!}kQVq_ZFe zbe};W6jR%JQF{5A?1aF<*l@;ii(oaXXdF<)^c`eCmFBE@$ExVq`UO12;|F zLR!ad6L&CRB7-R%(BjaF=xlrJq`nh1?TY+LYF61l^>JU*Zg#WEZ71?fCVX z7{rjkU=Vjhn)31zHQbs!;}q2_P)Z3P4X9S{w zP2=39nU$Ko4If91SAU>SHa$svZ&0x`3xquY&7bmNHf0_oxvvyBhutMt$Nu<#hfo95kApNSqER2z6Mu`)3xq#Gd+;7@>+v;g ze+&IJA-q<&h9Ej|m>(K9IvFU60iVP2IS%}lqkRn>fi#>)4E-04v4(IUO%z9P)Ti0H zA|sGPQ>WDDxWc!_S_ePC%#3_RT}gd|Z$%p2Ano~sRM%cY3%v@xYEpI~^b7r@)G?}K?7H|-GaYYgwu_vq b$8GG_E>#--2yQi1>Gpx`^~Tm@XvN|;T&afv literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/CurrentInfo.class b/source/.class/es/tid/TIDorbj/core/poa/CurrentInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..7c8fe97f263d98fac607f20af056f443f53c6f13 GIT binary patch literal 674 zcmah`O-sW-5Ph4ZjjgHH`u$P0h>%8M!K)$^y#$1cN)KK_+O8#~$<|HuS9uXEf(L(q zKT4dm6%+{`c7~ld@6BW80$kBu~JreP}$RTJALb{I;b*LhG%M2R<) zK11z7#5@VQ{Kh?(s@>-usRSp8Up5e)OP|f5t-E-((yCRP*)aZyN-PoW%t&v(8v=bZWe^W$d#6SxzCjscFVA$TwlL>Pk{ zLm~Ju96|(9#~ce|1o0q7F~(tXT;mvL2&R(h^m^vO>=FZ8U}%}MOI0OGYE2Ys(z{0= zgFm^vI-5#+i3<$+{gvcwCb{CG92;Y3SF%{PE21!G7t5j|lwDz%Ov$RLtelxyn71n% zn`YLoNV9AUGt=;1kGVrV$n55xIYEwKHWf3u literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/ExecThread.class b/source/.class/es/tid/TIDorbj/core/poa/ExecThread.class new file mode 100644 index 0000000000000000000000000000000000000000..7b67bf597f31c3232b6675652f5c3c8bcd8cef7d GIT binary patch literal 14233 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/OID.class b/source/.class/es/tid/TIDorbj/core/poa/OID.class new file mode 100644 index 0000000000000000000000000000000000000000..8d73c80b986d9dfbd35aefe8177c392c0bdbd045 GIT binary patch literal 1132 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 F{}0l`u#x}( literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/POAKey.class b/source/.class/es/tid/TIDorbj/core/poa/POAKey.class new file mode 100644 index 0000000000000000000000000000000000000000..0c428341a4ff14ef51d3b4283c4c11d5a249c05d GIT binary patch literal 4622 zcmb7Hd3+Ri75`3lc4xC0ax5%u4q)2?-2=K1Ak_qrBm}x?u4b2Dz_Oj}PQpU==rFEv>Yc-CEjEk3y|l?*r>mwQ9YOzx?nC)%Rv*vq{)s{d}@-e%Cv` z@4er9zdZZ$2xE$}sdwBF-ChueNekLDa@<9iD_z;gi%;bmzNAVFB_)#Vw!YAzbqyyLDZVC7D(x;f*XUB2=eplO(30Q+O z5}uIoq=1U<*6qReNGROe9~L0A30TmcN@g`BsSPNjW2%K53;{Lzfk@kqZQDBfBcb4~ z4mupxhfs3RvdxUePjgqoE*3t|MM@q%CXmx;NwyOng9-6&yF!dVGVk+10p8REa9xL|U& zG$~85)O~baX+91U!l3-sXj&9JD0~yO1fAA%A*8AQ%ReEU}=NcFCEFKlFp8eDy*Po{wSG-)0Ijn z<3o&7m+X7Rk_oY0OBoi*7{E>$J?NFuhg)RyBP1h?9h52aT^rIEOr%F;d=+1l@pU{c z;hc=~ct*hD!i{L}?Qd%h1bf0A{XMN+bgy9DSPfBwuZlemg>B`Ia4fY7QdiMEX&p@QNt+T&ln}Frr%II(^lbE*I zGo-}a#{F`qhTU9^yd=4pD+RCq7GpAA#1L)Hl_BGIcwRvLeD0-d%C7mnj1>MLBY~uZ zmt>@IJNb96rna%+VKqYqFCgQO_>+t`u;OvNUcl1%6d3N8@Mjr+!80=UgJStt?2+*| zCV$5Tvf4;`%BRQN^n~34>I$pj{??vQkQP0};10%` z-E7f6sEBx5^x;3L6qhn-S`(=#!fWT7$i+aw%2HfrC7E&c1$avyOeGS5k$5T{*dFZd z8&ES@x?Tdxc2f&lK1UyANN6mbrfROnrti7{iSN07$z2|AiJ~o_icWMZne1L=RE_D^ z(K}C_z5J#NxW1&_mzPQbwee!9Yt_PgUk{yIf!{ssJf=iueTJa6@6u6SS zjHN>FMUhlgQ#I-&p0*i_W0YPaycpy~**KZiUlIZ;jVT`~9P8A1wN%@3YBt^ za)ENFW`>rCVr)sC-EBc#a*cX0uFY|04fnJ;YgL4Fb^^WfdQJcwEV6)V40%?bn2nHI=8TeOtWp{j>#`-Ia#4_1 z%$NOhTvTJU(HVJ6t(ERw@9;1=&lq>9$q{bG)x6Ge4^eAZlToT7^`6d|P2I3-+K75j z`@FljhMv3~^f=u{FZ^0;$4xX2(v!3doix80UDNY!TBBa7?@>F|ztmCnFEv&A*3b!R zxy12Wnyr9^MnJ7E55Xs#MwzetG%P$4nOGmDO@0>-V9;dQOe|JfYn+e8=YI+|`pZFL zd2W_hE0VyXtX-z84W=yb{IW`m*p1hjA{G*!GBQWcO+7}D#3Wlb)%XD_$wmhhFi-;m-ZaYo&HlKe6LV66C`xhYU-gnyfDCJ-m4Bp!2#smY?;xtWRPE#oW?la~TmM zxH?)JF{}(7vN2pAjjyM?D#$oy%J8rZm-PvIv&~;?v$(7|cztK!8?3eE!2$9U+J+*) zt6+N>ZiXh5PhpWTg$f4QK&a^1V`3X3Z2S-4R`#)IK%0EMvQ!^iy56qz{uzfEpx=O^wTg#ln?G8T#W3-Ggvd| zT$@K@7u$Xg%Zq4g^;}~h>zr$e?9`FGNXD#Z(FHJNm#|R60rK8bl;aK@G*xUc!MJ^o zVZ#LK&Y)>9j~l!Ez8qe~Pl)PI6DyZ~KHN`(RWTzx|5^3p6V?dQS^lq Qwo9lp{pwuoyogHRzneO!^Z)<= literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/POAManagerConf.class b/source/.class/es/tid/TIDorbj/core/poa/POAManagerConf.class new file mode 100644 index 0000000000000000000000000000000000000000..8f57cb0cd3860df76ddb11af26508f4ab1634d7f GIT binary patch literal 1462 zcmb7D&rcIU6#k~&(o$M})K<`f6jW>%>7po#ph+nQNoYW5OguHyc3c+QE$%LaKgN^s z=*5JFsEOV@_(vJvY@dcVlSY+hQJTBb zEQOJeK#L-bP2N67sU^R?KVLWDtH!DrUtT>03;B}jUZFhY9tmjKn44vPe zh!at-Sb{dTL$PDcitTXg)G+mmV>AUrv{`8wwj)eoF)Z&0TXT%MR^HxfS=A%0*0O|l z+~V5aZlT0Yt_!Q!GGFg_jCF>g4Z}2?XAI%&HhsC53`((8C*=`aIDR0*O7?%XrBs|W zN`_hXYgMvthWLTQYi~;YxXh~!O67*}vu;>Y()ig6xBUHH_2ed|TYlNCKB*533}$ok zQ9EE))jjuJW{mKDxfrIf7Qk`sl9IV_Kt7s4v&RaGg$z6d$5>R=ogISsMX0-9}KIZbMOL+6bvBrH!Fa6au28 zG3^l(L=2E`NL?gS2cN?XZg_YJK^I?5zeD^h!mkpM3k-ixtLIQYc%G>Abn=}e@B=Xd z1D`R%AoUn#$%YUdok&uhnXdGbCp{&_g6}=Cm@lUE$U(3KQRfCzLq0X`Q$v4I=eyLL zmo?cfXw;{<&(pasWgMk^H*w2*hY4Dltb^_v`bZlPe0w0Q`0&C&IOxN72Es!f7{387 CHcZ0+ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/POAManagerConfListener.class b/source/.class/es/tid/TIDorbj/core/poa/POAManagerConfListener.class new file mode 100644 index 0000000000000000000000000000000000000000..6cd493bf7027682861c3bcece5df32fdae68ce59 GIT binary patch literal 135 zcmWlSu?@m76a}9l#4QCwK*N{V0EGf1P$(k$pX8I+0vp*D!%;8*Lm^CcSKWQSuQz}V zw8l)MR9M`NYsMhl$34etWH(5!FkP-L3Tug!Oi#^W=R<3$^Fiq0na=h0#Eu6Em3P;p fiAkIUg}LP?(=A7+Zmo2w1QaHDnOWp4iogBgiy`HC~F-uIE|7hKO@{0&Mw-eGa!_E=}-|2 z{h09H?hG8%U^%eiIxu0G*mST3mvCI{?X8PER9eY6dRDq0G8z&Z|B+6RBue*UnPn;? zcw_k_MJ$t%SfuS0YsvN1U(;?J^KWL@WiP61P>B~00(jnRv|omO!4e1#pLSSbaIE|L pQ;`3Tl7BFT@xl~XvJ7`FY;q*#EdLe88_EmCI&(JPRM_`5&<_n%fF=L{ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/POAManagerImpl.class b/source/.class/es/tid/TIDorbj/core/poa/POAManagerImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..71a02310e9168846aae626fe795d31f310e3aabe GIT binary patch literal 6501 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 E8`Wv6$N&HU literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/PriorityRequestComparator.class b/source/.class/es/tid/TIDorbj/core/poa/PriorityRequestComparator.class new file mode 100644 index 0000000000000000000000000000000000000000..463760314e2b557f27577e05492e9b241be7b54a GIT binary patch literal 1406 zcmb7DTT|0e5dIELduST4DkxPHMUdVw0)pBCQriN>a%&4SJYguA8f=@IrVji8#}}Xc z0s7!0FU}x%nQ?sL!QZ6frk0CR9n73;b~k(W?C$rSuRlJ12GEab5vLL02#RPxzzH{c zUAO_+iJR!NM89K<0cSxv1nTs%?)R21k5;A(Bknth@};L@FN1#8cH>mX9&GWAX9GLNc>FmrBg0 z5}752Gp1T7>4uVz>V=YGD5h>O3?$XEY-+1=CK1z(l{Go58>(E=6**IjPN`2SYS}#8 z6sGfswW4N@GT6MnMFt_Nuc{2LoNCS)nr>+321C%B)Qz017jp8nS}rR&t(cQ*$@Zh> z^t_hc2>a61XWCS?nKtQkJ;@g??$ILI-| zaZkc!bTIV&cYhMvajBYM3=xj|5~7Gnh$F@^E@1+b4BdarI$u#M>T0b`2?MCZ(rix%5kqsS zhU~III1nt?yuLaBA2eVE5mP#jAMjfUQK+D-6V-_Vwt`lqgAV(gR?J5Xc0;ceSBYib zm~V>aV6m*qn}aTbRLV(vrkdI)LtP>=1nM?bH#kgqy6N`Q#ey9koJ9-it#thwaE|Qr zN9;DTJxA;dWL-RBx6v*l9Z4JIAl{O^QuSFj;P&r;`9GmyX$Q7<5Z;mx5G+R3B8SNm z$k$~X3GAXH@Bwy)ncgip=;aTey=XzB{vP7F8{eKKLN9b BScCuo literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/QueueReaderManager.class b/source/.class/es/tid/TIDorbj/core/poa/QueueReaderManager.class new file mode 100644 index 0000000000000000000000000000000000000000..390940c93fc80a8b2fab164748f1f89c66062b8e GIT binary patch literal 126 zcmX^0Z`VEs1_mPrc6J6AtO%u0pyGT1a?&w(5;WCtRl`+(VE`Q7Y9#1-cOJ#A=S!1ZK$4RUn5XNo1 zU?@M7kzg>C93mKI+{U=NiI(Ew>usLy@^(*HxPTc8)2K7doo3nS@9hcVpA2NkmDmw) z`XX1hg$6ugw3Q^ki6tG&7Upn~!Lr}QYTuSwBr?jaz}IoN$lYVOFLGbSk-z)&k<8j% zKa`p9Q_213ebE=u2}hpFBo|M367>r1<+H1H#3}sBID9A%4*dTRRC$_;Bw|={N97t- zaHt9CZ*_!v*6xZ>ZHe~`4yiqk`Y(h^7S04P)Tm`kWHIj@Pj!=&|2L9ACLM-ZcXRYl zYh{NvXbKGH>1f3?X$3X%X}EOH(rcP5BU|wf!9J1$IK|BVq}#N38pXD}Ptbl~;~Pq^ z4p9!8^~wO%m(99gDpLt{bFA=Zp0qOI z#EeTNO}D;RtNUK0e~c80N5CY?UWLmeFwqHv|~;;MydeEWYC zmkYBm&Y>_YBD%F2g{sgF3vG9iqG>^nfz`w#qp&1lIfkW645D%IN^;Z}DCF3~j#(4H zOyRhANjkztsXtnAb~l`@CS4q%u2QEj*{TW`kFqds<+xvB8frfXn>o_99!|mX*jpv( z{y5jE9!a{m$_t?|Nwyv5v12zKZ`-a$f$MFv52V`8eNtex$6UG8;uIl<9s^;kQBtM6 zpfL5EXa-PC-VJZNp3{s=;ra2Vj#A(X@9#o-eT~AV$QUK-p>?yN!zl3gEX?4dg_AgC z;U!F3IDrWhUt9PFr!BlJ!z*~z!Wo>k@EXopn8JAz-&&~Qp@my0S#YqWaOtSZ?zMGW zH`etJZDwT0_iU|f?dUp}3jLt{ZX(~X=Qkt|xKvqLTVC8)T&S&97~hY&_bPVmj{Q4X zDEB>b%WJo`bWr(@QGEYsbJ>{YvpfdYf*dm97@zix*cZ?AGM;H(Jk!5;riJlL7vq^m z#`82TaGoR|kAmYR{(B!;egVbeA5g{YJ~A?7i)tT6@d*a@F(}`r3`51-K61Y^8pOPg zHxiBsYRYhJusFw{biaVvWd8(b$uUrTilN^G&A&y=CEGptnSJC__+?y4_7B4Iza;QC zVRzwK)*#uZ4ybzzZ+GDtes!|veof$4@lJQUCvGqm_b%Q`wx^QX@^gQ)e%3cA0u_CO zIG5w+2ly}v?p4A-Gp*z!e4Okbti()nUF*Wnl2Lpdmpo?i!Bb?7hdhjw=sG@0h)y$3 zYO?64!C&?nhEu*9__UuKBW1aX`95-t6wZs5Y)hj^k|9a*3|1PkfW;(YE|D=Q5;{>M yKfyG9hLM$n>ew`Z%*0Khx{c2gV9zKXc_vkMr%Qa$s7!j~3^R6d+_{Om7R}dBMX)6rZE0Z^a~4iuhGFjCE^ED=9ZCHs z>oVMxVNJg2$*#^@xD0OL3a%PhwQvomseN86DqP1612-+4igH%|t*2k*Rp`i&YPWFP zz@4aemtjSAx%M2s_4uI*8!g^cq2z%Q{CQ9Iq*IgKK>1zyNcc`Wy29fB@Pn%{*yC_b z)#>mN%9IEK={pR|_NY#y(hbER;ip`w4++AsKvJvF<*MWI_08Ja1AYiVhjK@h88Rx6 zq0pZ4Nj0M1Y_w!kKauYk3Pe5bO@ARoK7S;D=!ZA`u;y30)V6#u z9o$85|HKzP2R)FA96f&WgMW#CgNLKuH&GEK z4hL}rPy6vqke+fuY{0V;MQg?w@{+9}uR`LD%j<-SqmrVln3Vf5xfGjWpd=SlB9tZL zaTS&do5647rnF*3(6N1JQk&A^6-O_|GnNo(;q)-9G;+r)q9SsZ&ZCX^Ngr;ZV9VX6TMXq|h8vNH2vfFK(eRk=H6V zdD|XJYSRm1YKK(3DS_T1k3vT^o0x@^)bd9~f#Yqw!|^WOqfS#~F_ExImfU_(E#> z66ZL+!q*(%ppRkGQb4t8aot=Hwc)Wzk*B=2)iakMJ7ob=+fXUG>A#^~i$#(l^LrxH zTU(aWxv(_}&B*1=(l{k&$(pQ-^b;p_^KF1jPMSMZ?>FU<;=iz_WDgdFG@Uxesn8VT z{lm%qLxY*Yfm~{sAvAPr0WxWOt#{`YT~Ffw#N;e!G;%ch7}hQ7J`F}Hd%|D4SUkN~ z2Gz(pmX@co?Ya@AHi+qwK>UvB^#etQWeO{JiT&s>ngff92Wm#Ff7Yc zcRC^^PI#XZcVfxGUosti{3HcVw+D@~L#Jg_DU^L{ibg|5H^@xogr-vqDB*o>n#Og@ zrt8AE)eIvv;;4?TPuACk`>z-@Mf!2dPph_ zcy>~=Aw+)w5&BV3&>$x(of_nDb$1%0?oN}Gb`^|9;{CKfK)3BAq0k7UV&&Z=#z(y5x9x~+=N7#XwrBGwVDAy&njQ9AgpVlBf3 zsD#!f?PPeE))pvT*X0k?&cC6qCVzXdt7iH!^0t9k_DYy4)}2R;PU?9yvP)4qc@Erh zx{CD|p$yG&$!Aw0^gA}VWU^u7XzUWIDW=a}P4PS42ou-Z0I3 z{zPB%l9xQtnKVqB8QSOklm3Oyq|IGPHWchK%-DDBy?f8S_uRAl{-56u0F0rSL_0=X zaUQp%8I$I=jxSn~z<3H1_)^Cm9d~uyOCpKUBqnh`i78C$c%b8BNn5E^J=$P+pFeq!Y3@!H^&k@rM zgX#Z^TAR&$%b?Bq8=OH6YZz}DAhX$?n9S4>k5-uyKR8v(U*F?^*mOrz*HdObwl0#S!iD8{f(M&+nPznsBBCkfYr*q; zlUVNj51>UoQm0iemcudRiJnASs>47p<_vV=f`Kk{8|cABh5=qRg|lI<=I2Q?TV~l0 zxJeU|Qp|7fxH4c~$AW=JxWq70ll94&lxWs=g`3|6zE>&vu2X)_Fn0R+Sd2@)m?;Zq zmniA01x5WXEnE3wsjyI7SX$Nb*uYoF>-gHhA_@#Qn>7&Q&U2SnY(cOchjWa$VMy09 z9cyPNzLw@;bl2KR9gvvQ^4j$m8Wlm5M%TXH&#^3_47;n*WweBE1$>hS+>^4n+@!L& zD~5K}-bx{t!{5rH zj)7SnS7>JtS7WH7nbcaQAzW+V)@ttS_2_QOC+j@-4$1HLk@_Pp^#*Rn0EG|osX(+gZcp-I?}A`Z-QaS qAR7apr&Xp_!s9X^hvC@QtgMkbgN;vU_#9@8aUpK4MUE^U5k3MzQpocF literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/SystemOID.class b/source/.class/es/tid/TIDorbj/core/poa/SystemOID.class new file mode 100644 index 0000000000000000000000000000000000000000..8d2d08b09b2eda7e0c8e20630decb905f5276c60 GIT binary patch literal 1376 zcma)5T~8B16g{)MWw&K9%a`&ERgvw27C{jO6bi(YfSAybXdjvdR#GTk(yl-sj3Hv; ztG~cUpG+_jA!>+EKKP@=d&?5HiA0;s?VP!1&Yd}P_vf!K#{dQ}5rKj0VW_ylA0(xTWGY;~@rjI1F>R8zK$lEW&b|s!lPPv7pwfM4IaN?vJUnmtlXJbA&HA32}j`w(eB1xrWGe*V2w6Ne; zQ=b)F<_RRsbJbYq|7z7Nc=q!8oV}T{mvRo-LC%qBWCGVolsspmP_Rn^Jtp1d+=9X5 zN45)D&&lN6{A$^RbRx+ngbR+n;;&YbSTZ)FqX{EA8gWs_B@Uw)(-DKk2{JVLPq&!Z zEYP-QZ`tvjonMVl=Iml|(k^<_JIl_dmv!?x9$;KY4@_pa>gYwEKR?%9m)f_rR z)gP5JY8%>pY6mo$0d-%YJ|Rhoh8(dEq3yFOPBue zUuc_TSZKX{Na<@-_7u@!48M5uHgyL2gTM@et{`X%0wV~t0FZfp`Z8f|MgI`5=n2`c q?bb1?ZBG(|uN!dTr7>IzqW;ou5So>+s}eR#_T0r4BUIR;n& literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/TemporalRequestComparator.class b/source/.class/es/tid/TIDorbj/core/poa/TemporalRequestComparator.class new file mode 100644 index 0000000000000000000000000000000000000000..dfa13269c4d98928afb0090e9ef7944e7fe7e9da GIT binary patch literal 564 zcmZ`#&rcIk5dLO=@N6yE3ba;G(8O3o-N1!J2uV{Lg;YqpYcC$mYx_dBF5S9)%U{CD zgMUFUTrlB4IP*tQW;c*D8ed*!zM1#UyqWL%=He2-CRVes@kF4Ug@LC6O9IOR&j^`D z-F3fvpQ{H1+9S-?!of((fo{tnR_25cVW!^vT5Y%{w*n#esa3Cf^;TMyVDF4 z4v&y0yiy}a`#s0o`xr)@zS9jO?94my4|B*d)JPacl+|g_4 zlv0NgA^-Q7goQK}Yd>(NnVBP{T^0EIes`5=Qy67 ziszU^$%1SPTv1?8?Cm#yKxYgR*&k#6?)e*klr(<7eg)&;Et?P4yK|UZcG*gtDB4AF l`Wv=2PSG#e=GYjgT^86b!I$l4T)jdkeVGbC3W4 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/ThreadPool.class b/source/.class/es/tid/TIDorbj/core/poa/ThreadPool.class new file mode 100644 index 0000000000000000000000000000000000000000..bee0253f9be6e0cd4bfdb401056b37bf1aa1fe04 GIT binary patch literal 2467 zcmb7FTUQ%Z6#hT<2V@Zyq!%PxKN!N1~9(53D(X9%<=6<_w5bI!MK-`RW5Z-4#t3xMPJDuKfo zh@%G=q!^T9NQz-8E^2r^0ZjrfA(y}#cr!uABN|2%FmPGkjmfWZDXvH{A))y=Ch?Yr zDIHhk;oCY22~6Xfj(2ptD-FG;qnIGnb!mg^m`R`{ah3+5VOGPOhItJ(L#$Fl$HS;&^$s>l)~J3clr zs!+MgVwqIQ@KQ}!3@pc>SBkvk*~`K=X$gPBJ^y-|uxD+@_RcY6cI}{diXk%ST4Zrg zsVd0UWwA0LxFy33r+Ue1Yu@9f8>4)2lFyV0XDHm{Ji#e00!51Qi_H$ zcjmGRc}BWwAxzGx=ivD^F7eusEpssH8QHEwTXj9i9lB;{Xp`b=uh@=qQ6o!(^W;)k z29Du`f#;Ai(2KNz4EhW_FGWAH3~i6Tl7#s?}#2_y`{}gif0p zK9QSS3L&E!>KI_`?8IJC@Eg|C_nTD;FB9!U8%Tq>4c1E1nE1E1pyhR%z&!^`$f z?h&u1JGab0NsP@bP<=C`n^AOSNh}FfOF>OjWi|sVCsb;l z7_n=faAX1YH$!i?$)M}ZZYv!9Zw1*`ep{7Db9b#MeNZdz!nj0I$IJ&MY1x0#n#Zf;K3XZ# z++jG-a1hZ{8k@L48Fw|JQ{7U@Rf=Afm#8zlAGP97ze#yXMs&}u*L$jW$6QdSgxKph zqhC}x#}odD>`3JrVtsDw4Nt5tQY(4BFDmp@?%KZ{$i!Q##KW?9JpVLIcGS0`6(;>l z4kL^scos(yMMw@6`YnazT=7>LE&fW=#b0T_&>9DmgMs96+MOl~AzJ&>n_y{nA0a8i z>F|9-q=-rpOFw{C*n}>xGj#nuX#j`tB3=sYoFXfX&W@zlNpT&~Z_yQehSw3_K;kaq z&XN8(ZGJJZv#)u%vJ0<*q``D!%5=d6!EC|>N#Uc+oAg z&NKsAJ3wdapsxceZj*bN{=us%V?sC1_!*V4x$BG%{m+b}V1M8irTc3Ay^_JR$I=lh zldVk8;kAH{lXNf3%cLY?cZiTR`Ut`&^1Hu-7P*JWj*^HW9B)6*$jkY@GQ+g$M9Z;;I2Ft2dt+ z=Fj7Ky8~Dv^bz z&aG-(SLk$HQF|@eNUI8&#!;=aQs%X0d9A7avbSV8QO0t`T43^9vCB%%Z66Tmxb1-F S33TB(A<%;}9Q~GqH-Q(fQ#!i< literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a0afb8f3270cad2fa862cfd5f8597d1fbfb12dd5 GIT binary patch literal 1037 zcmbVLU279T6g`u#HQSACt+uJ()mF3V!%7qsD#E4>7)aaDlt7=tb~A+4O=g)LOY@(6 zP*5TY`tFYs?_@WqC}@1xox5|-IrrQvc12;`tZ<)A_4Fh)! z+%;if)4&#kG3=dr;VaJYpe5wM5yOGg7E*bqA@6W`#--EjyKx*0MngVQZ4n0kxT_gE z427q`C{WKB9#-Zh+g*m-uIN+Yd}^RpvFBA`Scs;MdTJbzRJLL_N!J(An4$cW-tOU1 z-KEB~dophHd90)$5HZM!VrLEkxU?g@GN!tsUVP9!{f zNH(DC?~`f{qmb&AI?D53?t9U(o-3UJgV{Lud87g{iY-`JwP0d_;qiYK(HbQK_bl8; zg<)-WmWltmyVq;GNA5nu`mdR!<%X0(Y6+X6HUs?i8nlG(g>^5c!9V(E()8{;=V8Pp zodZ8t((@HVy&MPzY}?tZP};7`P4wQV$G_;Fc(f7_2N-TQrU{tBwbI2BZl%%dfU(T z>osajyC>tkFQQmU0uh6pn4S`DERsCK-j8+?Vr@9uvRWc?V!!VkG_V-CO2Vp?}rq;r*y)x{d!_aglV3>iIEiV76dgy?;qzLse}L#ttr!R*cV z$h@U5ji1Ltidm$U(O%wuhs>Kay@;hWJ)fqt3rnxlf;`+*INc zRZm=$2%%9dDPF`1%4AC$d_)4;VA=kFd`qirY6*(?VPTAOUnay7VRd7xgrs$k<1(&L JoTEJsdQMNmC=!Ei|Xe zdP^tczlf#8XPG1;TekcTsW%C{j0*|8n84|!mDdS)5i1E;r2Hn<{)F_giJu@dqqs!b z<0=Z|VZ2zJJdZULsVq}qg$PW6#qtMa>xO09P>{xta}%8VG7T({uW4+ZJV_pMT*ejB IGi2kycOU;3)c^nh literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..564594a5ded5e9b1919a01fefa880db81dc220d0 GIT binary patch literal 1005 zcmbVK+iuf95IvjQ64#*(mp0{IuC|M61TRQMNKRXcAQz&hiqxmbb(YHDWUY;` z8Q{3hafg8qdWS*$RxsT6r8;os;J|H5l?MB<=m>QvlNT8H}x?P$X$2ha(dv7EKtKV|er*4Rn2t76qaw2c&1C?;3vf0lNObY7sL(OF&`#s$ zv5;fxv@$v?J0DSapQr0Mm#63RbaA2nE>E7vg*@4y{<_xuisGKGpP)3OxJcbI6*WR= z6w8`dv4jT6(gGh7ffm?sKBMewmQ_tb5#Os!aOV58utr!t*fJq$eZg@FmnkmM83%p= DxqkMW literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..26a3a4ebfcffc370e409a58d679852b77afe0b7e GIT binary patch literal 1077 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 Ku&(cL0lxsGZE~vs literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.class b/source/.class/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a9ae999d43a3e8f55c638a09d064594b378aeb02 GIT binary patch literal 1223 zcmb7DYfsZq7=F$!bn7~uFa$*A4Yj*q<>D<65}C#<*~G}g7d|YdJDJ6U;3VV(RoL#*sH zIYYL^MI(r*;dHs{noaI8%&I$;{HfaMEukClYkH@y?^;~K0`Yhwd7i1KkPM}@#l>c* zUhj4Isvn{Ja^K(`VLG-a;Q>R2LOoVChLV~;ck)!T#F}A+Rg0?mZ3P+R6evhb&=fqx zqJ$*{%UDrx3707^1&@$b@Yp|jf@w-~R5vJ&vpfC4b-67n?T*DTKZ>OsAgYd`TN}DZ zy;09*4d#bo?l@z`?&_A=>{rY5`gTV*U3EL}*cqX`lAHO5ZrB zAh<&NI9XQ-;bY{&H?TtSD|Ag&;Rq=JJuq~I_fR4{~xWIU{(6^|%*6pyhQ zX57cQrSWiT?Z*g5NHK1jF$9l1!jEKR9F?In($n1%7AI^ibu6moliEm@(3H^0l*rq< zX%xsI353wU#&{EMcUCjAK4zk>hcO4AX}W$N| z_N0t)wx?t~!S+cRr`bLw;|$xUWjw?7SsBlj91ydCgXLs zZ^(F)?OQV5X8VqWw#s>wRw`s!rp1Kcm2u98_wc?CAHeU!hfsa^sMPwH-A`D3%IY&# zpZo9yua4hsne&tBRZAiEXeryYDA~(KwJ}Z2YDPwljf{$vEuqDYlZ4fkw}WObpB0>D z%D-KtT>FBt=wKw24D}BW#3Zb(Dwyg4R65)Jk*V;Mdfmu$SJz(6FfQC3?i1A1$w}(e z8%`fI^y5Wgh(e(>^<`Jp@_il>l28JtY+(DA}(kj6zrs)6K1iZ z0uRoG%uKLEtk)wkvuLDg*XLcR9iA7pX@QAcj~ltXS$1|f3pQw(DXLtm+wue^yc6>Z zN~By*k*NaskCAR#x;wtFHIGSXZ^ zs@h%u3k=!J?`!YsD17eFFY?@#b2+eWu)t^M?Oei?>~S<}c& z{-=Z`G}Dd}R>(+c`9hIjYNkQBT-y?w#7W(*>PpYzN5hSl$HQs#28Ox*tD2TEbpwM< zeh&;<)h`o@GBVF76*b|y|0&3P(^C;-no6cHO@(86zM?X)4jbsdov%7b{3l7eoxCQp z64{21^N_ydel*e#S||O~Q@3;)4b*~^==>E;7qMWdxvuVe)SpMgr4`@M{T=lDGLj&* zSChR$a+&1!QlHdDwt@UV9A9zlQnD>hn=!6Zn+)SkV*cgWKd0_p>-*pAdWzLW;wRbM zc>xP2NXe`gv1(+cu)2wrkJVyUOIR&swTx90t7cX=vua^=3#(gMEuXlE)*)KJwo5!; zY$Dx?mgcLtTwilxGxgTfQ>~PgEl{b&IlDr(j_fZTKVn6X6kYi(IduI%B9qXf<1EQa zk~GOGk|fC*5}RZLNk2(1$vKh$$ybE6vf~0)MX7Py*U%k*wc`&t{u;**JN{b7-{tu0 p9KYT1Z+HAQ$6xRGjpW}UO>CN=*rioyLgU|vNHXqPTDqui{sl^pnuh=Y literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/policy/PolicyManagerImpl.class b/source/.class/es/tid/TIDorbj/core/policy/PolicyManagerImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..05f86a53dd4d82cf3929a88357f2045d050ee046 GIT binary patch literal 875 zcmaJvK{9hpL_1P{&V;1H-LAj>&Rg}4-Ff6yuzlAEtGXsuq~I@ z8g?}7GGs?x5qxE+ba-e-UeCU4f1)2ZwkrZI52xqN2E)pG&-bDa3_I5UfVC@zOiT1Q zLutUH?pO>xch(gX9t2*GhYV%wx?Q{Oh+trg(ZFsI{YU$30i!gfF!9of^~8-wJQqAV zRjDp#W8RQ*^v_e5k0Vd`p@u3$k#xoRTEdU`G-5cmYKcX~>XkZ$ZkRCe#zY>vhCLJe zIM8rtqJ)odFNpqw$boKgkk>=m^&tHl2`c-Cl;Z{fRU5 zdW(WQ>2KPSMQfgc5Ph3Cag(^EDJ@O;DlO1BPRmMMi;y7Y5Gg1qEnKUOZAC7w*K*dN{3i|| zl^}88$blb)m`&UYi-ybW&d$6yGjI0S@9#eVJjIhLmT;#66L+h)hx_`rUBv_JXtQhL zp@~N(9y1tf68j9S%TW3t!j$gKo71ED#BI1To-j1*R!=4)F3(52(;vKi!QaesiOcl- zu}UN*)nbvTK!gKdcnocOVLP3pK{tw1b*vI!oFD2IN*|LzQ4jn7MfFpahbHq)$ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/security/CSIComponent.class b/source/.class/es/tid/TIDorbj/core/security/CSIComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..4a3c2ede245e5a882c2740d59a21a30be4efd723 GIT binary patch literal 5293 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/EnumTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/EnumTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..b17aec7870783d41f202a4d34c681154fbd096e7 GIT binary patch literal 4007 zcmc&%+jARd75{y@c%}8ab>%p*V>?xxOJ&KaN(w2p>rh#CT2s4rZO6e0iC9Y;Wn)RJ zu2xCfG%e6T3oVykxHPmh4F&h&GK2w{Aw%=R6Oa4{Jn{n1bXvkWyDLYscl9%BPAgafieq~!ZItqdNrGTl1DPB$r}622qh zyA)Wy?>cLKb0N3ltfq>{(C;buK3-CA052=}EI!9iuP7M8Fo96;AQB3a7*p^neju=? zURAYLW~fNitQH?tGmq$njKKDKzR|>3YJPEMJUKl!F0gH5g^!l?Tt+il^?d@}htzV; z3hRZiRw(DgMo}|WyOM?!{187<@MFBjtd|6K*Q;qThe|S2Qt%VJuHX$u@>9I2;0qX5 zaG61mdO@`eGi>Kz*eF|J<7C*R?xx)>;a$>ttm>HK=WV|l7ja!E8q#A z=Vg#O%Z2a->PW{H5|f9=U1kNVc#Y17!hDBJdk-H73^eN<7WK6>^|d$~SM`*@;HUB? zjeIeuox91twI1@#gZ}!1^=hms4C?Mpvan`%VtT!83T&wtIG=PfOR|?eV(8ybMa zLDQnUp;GL-cB>rO$r>BK zoBCvRz%m>zf*xsPB#t_jRf#+fm+hMCqFc>;MmPO-_R*|L8wHD|R*I8>s#q3b@{yPer$gKO|b_th{`Q*{~tOl)3ad@34SgZ~oz z-qq-D;QcUGLCc%`<{jy^H?F{@z58Rm6-X5XY~G6=v2x=tzSXH~kQc9^b#Vd$`l=qL*mmu#m<$b0C50KScAjxeX zLx`S_;7>>xIU&(4!Hw0yN3L@4y+MGsRM6Spd6}F-FIy|vwmM~_?V^46*oORnaDW7b zz;qJu7=<}S^nNVZ^axJal=q(|;JnY2_nA75=tl4`!S{rkd4onLWesN!vvc;e*brCg z2^giHk9LFfqxtG`?j!1*)Iqp{!N&L}1F2&c<5lp(4o+LZ{WNCts^dIbFQ{O_{ zHSAgp?Owy4>nqqjMg&-jA_Ou--6jPT^5k=aa5? z#x~K}N0r-u8Io@WKJV(I8@2DNQ%*90-2}R-wiiBD+xnomK_^}b(-LOr4}uIKuE#J- z?&8e&qie^rvCv%=L^xIhu@Jc+;zTU!wWAdA*=f=h3z5B%YV0C*?EV@Hk+G5gN(3ng zl>0#r2GZ*hyptoilT)z!1_JQdc;;*{+-Y{K7tcIhJxrD9V9UDL4h@FLUy(sVbT`vb moL6>y1@{cLU#Q?SE9n0>KBf$3FZb7YS%QcD1sthWkADFXSm7Q3 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..ae73601d6231594f9621840706ac5605536c055b GIT binary patch literal 2810 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 BY&Jp{+tdjRk@srBbYMlboarNj7XY6l`n# z=znnRmE#RJz0r$Mb;i+Ke}H%Xkq)E2XS0Dog5!)MGn{kwoaa36_j~f&pFjQ#;1V9X z@d{q`z>i5Wyyn8|9=w6D_?Qx_%N|_8RS(|8TOLefrV|m&N|=-Iwg+8!M;yN^j-wvD zhihVQUhFNnu;@ZeESFq(Ur@zeSau;Hwyt}yf*US;AYoO)O$loZ9hbGDW?p4z4~(ra zI3jw6Gn^01ud7?Cl2?m4W!W^eVs5H=$GVWI6iN&i1M|9(Q}jYkiNxYF(@J8e#08gq zP1BVnVli(Rn#qkRanm!mo#rJ|(~D&ZA2PVh8(L{a%~wc%`dYTl;JoJ@OE`;u;$YAVl_M#^Ir9$;b> zvq3Id*109DD9>$H)I3A_e-YZKn6T9?;$WMZ_-_)e$R7_FiRfB3)%3=KT1p7lNVsLC z(MK|p_*ljZP{oj97+g!NF3m+^vvarZ>Z$dl!L!`p#WW8~NXy88%gAC>ta8L6<2E!2 z>oPWwmr#&Vgf5{ZV-p6$=)Vg%!$>Qjrk9jio>eP(Ga8Ev1xI9*p~)~&k+3D>4z^|N z;1d~lagU*QZDo4?I%!Vuu)nC~?=uWF?D^xoq?a{QH+KBdOxQ2uK0ak=^9O`I4=DKl zB}30@d0zI9QC0cx5#%#`F5wFqUs})!qU<{?uY)pRxX{W3lPW1qm88T{>pX47dA43# z455F#5YY>zJl{Tq*Q8Qtqp=35L#;@J`>wK=%-GGq6=6TU zdQnQ|95+RkM9JKKGW4)G?YB?lO4Q09LfZ8$jEat(C@rDpay(;WNp8;}X+0V)Q?Kz; zTY8?Je(@)Pi6%wkS^DZn8?6A>`1fFYX!}k;EX0d8VgL@b)1F5lf}uUM*D!9J!zkSr zEYH#0Mzc5QbyVRT4?aOhu;+diQVn~a&K$%SfE!~Nx0$^(i(4H8cR3!@3UnSs$UgVc zsgUdr1*>pZ;i(Irzy%v}#)fnYM2P->KxZ53R0=NAxlr(TBI=;|8@3qy74p{@_z7LB zd+1)A2>t@Oif48)Bsjtj8hZxGir%o34LYB|yEsur-=xFmcmz4*?I-(o5f6ENvlkNWXN67mut#=`X9qo_F s35 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..b102ebba8cb10592511038e90bf1b0bab4dc5b5f GIT binary patch literal 2361 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 E10kujTmS$7 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/StringTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/StringTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..2eb068e448b67bb5d6c8df70a222cdb05480fbb1 GIT binary patch literal 2778 zcmbtWTUQ%Z6#fngOfnr1Lb+F@6iRM5^;Q)SA%SXICAEIk)-Fx4*s5KKtaKfB*aoz?=BVk7>k2Tt(cE z0nG5xtcY9qNWjM;61dHqJA7qMB_CjIQuB2>ZVr67fFCtT-I`Wmdwys+TW@xhN&spm3&Syiubv}NN`Rq z%BGf`YwNcUwhRH)BR|`H7$qMF_T|f8AF&VFK@}hB~KwsM94isnY zLrvA^{2y*qyUGvOn=a*ah8y*b?I?SStQF)%L(7|MhGwb;ovHwh!Ou54AxPF|xQN^{ zt!xO`k+6%bgdyZ44C0!EAVLE25~3Jo7_Q}Z^L~*MUdgC(OiAC-@@WAD2|7k4JixF7 z14RiYMg^24>|unVx0WV0J+qZuU!09E%*--$S=zEnJ|k07Yxzv9q-E2p!9@)-T)Cx` zvgUx6AFwY~Ff>rmRYT#|X-vXHJd*GjPdIvCz*iCu@I=7Z5}smT!Z#Qe@U4XJ@I6D@ zrfc=ye$g@|;0FoMIPe*MSfh1I8Ai^r zRb4E|*h7A6wrm4Uimt0X3ZucflZiDRI<@5F8U@5>7VPw+xRSb4dl@>;Vx;;zSR1ZN zNvo;_RD7(6xW{s>&X!uoB-=4}lU3(kjjbmI(yL=VSM&zd2wm9TQB$V%QdP33s@Bje zr}N6gAH8^JmEPw8`T;cO^?*jrG^U$K?RA>k(Q_F79iB)TjlV+hK8M$HIPW(HbqIjk+=dM`-{1g{7<=ofUTlG|-C>>4zUT@otq&Zp0rYnU~AxaCN+g_Z>)p zdhSURAv(QwJp35LxbwZ6zH$nQGmr>k>2gsM_<+9hSY;h=Zbt&$W%O`AenwZMb)t-3 z$E&_b>m_i%7zM@Y<>K literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/StructTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/StructTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..de156aef5a47120a802d97ae1564f9560784a927 GIT binary patch literal 4887 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeCache.class b/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeCache.class new file mode 100644 index 0000000000000000000000000000000000000000..d4b912277110f9c79aeb5f2f5b95890597d3ea1b GIT binary patch literal 1389 zcmah}+foxj5IvIw2EqmbxhNN1UEQZ}wva#S#^b35A zRSH#7rM_9^N2xtwxtf$OGd(lir~CArnP0!ZegiOpB`-QL$}#4J3;t$YMnGCYIfOXE za=z&W$G8_7ZgJe^m}tTsFBIHu!aaF(UphVDnB;iK@rZ%%Y}$G{FBpcFMM<-btd@+; zS;h3Wma&RLE89k1dsPxi=@emToH9(qo@Vg)V}TS+Q7cQqo;QY>WeEG1xAk|rmedHCxZTjq8OfI)l4Vwizb;^&;v*RoO&1 zrmCbTiB?vW?4q?tnEpUYK@Ub42LDS?I$lxGg>D6pF|FVUo)W8CaW>J&5RDT)i@KT3 zi=u)V%qoatjw7OA9t#X3wL9>F$m=2%9@uGql zo)dB{Zq-X)DChIX7eBw75e3_@Oom{sfPb11m1QurovL9ay)80yyB9bftKppQk#ZOm zs~WT^c8wB+cAZt%5nd#)L03!!8AfZJo{^&yKYlr$zPp>uQd{Wsu}M z$>WrzqxlQ)$1j24`|69EP8;O3*dB`Re(|DCu z1GIM0+#Wmt3m(F?-gf}^7kEC=CMdiYeU58{9Nn}x8vG1TXdew9(C?UyKfvRT-4xzO zbA?sNlcAqRH`p)%4d9vs^d1eA71&^Lg7L;bqBU^{Wxd09fY$HfpYT;zm*h%<5+LR3 zb<8GbmN{jn>hchLJ#>J!eYA%viBN?~bYxd6g`u#M_fab5@`Az=$GRJCZ&Z2oQ60~0GB}0#3VpJ$k-m-3HFScjH5*A zrs}HQv7@W18%9)gfmBgSrAqCttmq%;&*-L7)pPxnjE%&!Bb{^Jn|I%x_s+HN!+#$9 z0^kUW3A~Q61m41t1m4Cw2^__-1l|=I7dkFw)9B>k981=#|XNR<*&k!jsdtf41)Vfuu9@ZoLsK1-@<7 zo^XWANxXqK70xCxhjR+&lbFYX!UstVBdxHgu%u8>xS+7Cu%d8L;gZ5-g%1@zQutWm z6NM`Zt4SP&nS=$?z=*wW22R;5;NjTdS+`M(V*m5pj$4VM55;C)vadI6w`520 z@yE{kzP0tggR73U9tFocxKsFO!)WZ$S6HF8o5r8~l(T7c-q^H z;^QlH-U^(J7RQgpUNc)<4}7Z>pNgswtD?I?TommMu^^fV zaYpp15L2Sb5aXh|LyU>;36TeA@Ux-1`{t$hl&xF_|x>ruZ-ay`m{=c!R+Mh0r za;b|UhiDFapf(48(aTP*JZdrLH_o@sS>;&FsSqyFAU-3$Aig4Q5E9>to1A|`+#ep(>K%Sl+cAJX M+R@Ygw77wP0fz1np#T5? literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeFactory.class b/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..a55fc32ee0b492d3871f13cf1aa066e108fb8646 GIT binary patch literal 3799 zcmaJ@4RaG!6unDJ({58JrGOO>5D`kD;X_cNBBceb6i`|~uu`_kQqrW^l57enDk>r> zDk>@}Dk>@>YH5)oMMOnK#2IIt@y{^hc+PuS5}yL)dg{d?w|h|G~c zO<5%=Q(Q?G$x7)aZ6j?b?I1lydYrVA^aSZi(o>{eq^C*Gke(&&COt>mLwcUHm-IqF zUNmKlqyqAiDHYUxri`V&Y|41*E2d1KzG})O>V8uuQ(rS>3iWkUrc&Q9rILEUlq%|* zrp%z5$R*nC!`~!Pf4GV zJ|`U|eL*@#`jT{<^cCrA(l;hf+QZg~fb<5W&yau{ZcU`)aYL#a?NrE(MncUE^-i*_ zBNTR$cF5h)Wrv-J9co6S4vmJ+uJ}Sjim=XU>qy$04Jkm|O6)MC7!7ZpcHQknBZd^B zKefe4y1Fy&B-*uybf%XR(z=_?&2h)VT<#HZ(rt0u5EJb-$BElkLOTg>v69-e6LxLP z=H_&v-2`DNkJ>EB40`Uk%Qo$TyQJJ?lrhcpzk?<<%{w7(fl+Pq7FYW(UU$Rlf|_U| z>Mk-QZ(8MAL-KjOhLpD3?h-2%4SV|-Qa7#9Nw$Za&h}8O=xnk(qc;o`MN^qRLn{6+o(+bSL{mBI z@q}u^adpg~w9A%&oD9mhaw;ef%0od}O===Flh%;dlGc$PCaouJAU#5AAw5dkNNOc* zB3Yz1QdlBEu>~(?mG2vk=aCM(*`rtc&R*5lVTaw-_U7z@>AnlrB%)3tJGs(#^3p`Q zGdtJcacw+mrLvR#!(O^QY_xZlw zYuoT?Sz)&!;o8Z~Ryb#&|2EftY51&tw`sDsrtL(ocmErzO(v}!*&CYS>-@T}-VlG^ z%c9%uNY=OiOXJPs_Z^geIn7V(J441b)Hg0*vS8BC2}8fV3uaf(Lb}!lC!Yz*0GFL5 zeNQ?^`hj$w^dspf($Ay|q+dwCl71syB>hghMEZl2kXTSI%V|UWZ^t{qGCXA`i3(EM zVRc)fxRq!R=_m~;A1w75GPIj7s>+=WtO&7885=!#s`N=(NWD|1HD))~Z_mOTdzhpP zuu-Pg#jdG!u~x6v#j>?7rYaIES*$f%>(KUUT`XJcVmY-gmRsv$tzNB*wO*}t+Ot>d zG9JBJrw6mOE|#rz2rg6WOvIF_UHCt<5`VTt%JI(wi5aa5=4Pcx&q|S@l_E(iMV?lQ zRIL=*S}78?QsiuO=r)0=6H7tK=!CyO(UBG_e0B{gE1RMsA07rr2Ko4*d z*bD3fxPEs=*(NStXS44#a27ZZTmUZjN?uQ|hzWOv>mKMZwx*CBt)5Op2BIoH7>4g)3v5ugR2OBdjn zhn;Bi*q(j8?!y?bkym(RK*p@^mz#P9qyl;~bS!inbUgGH=mh9Q=p^W^(8r~b)B}wG`v*fa`dbF1 z3LDQr05hT0&=7PMbT)JjbT0Ic+`vpJxFU;HT!_h$u1rijp?n7;IWcX7?Ol2c_sapt zJb3+{eZ6|)O7oBB@uBE9qCke=nvnEl>(xkFGLh8hM6w7ga&M;wHo^YEpvG_9X)*ri zNz(f)jZ(?SdNJ|`WZwE-ncpvW_DLS!hO)cL?(UZbeUceksD_5>c{R!?(8fK=2xw!G zG77bEuQH0Xu~-?VHfohotc@kg2x_BF8711NSH>`HELFyEZ7fqpsW$FY#t3cPuZ%Kn jG$>=FHXcw$d9N%#Esf`;s!vAs$_mw<-6x}UR+9e!>8;W1 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeHandler.class b/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..8009857fc4d16c0254a3eca4dbafa2c0358c02a6 GIT binary patch literal 423 zcmZ{gO-sW-5Qg7L(xy$LwtgXc@|IL#!K)(JdQcDwrS#xMHpvna@*y!6{7)Vf6v2Z( zz#k<}O5(|~?92|&`_2se{qy++-~>As3~Y3vqibaWwROvX%33GK5ei^_AtfwM~F&Iv{(C-g#9HfF-U#f7YjcxlxQ~oTkuL|L81ymKb8wA5}Ac!;>F4@3C@2V z9?K{Z%c0UsR3qi#a~$#y86dRyqFREZ&hHMo94)SPq45E%;Rk4V^bYNnD=_WBt~CSB XmA^H7gZ5J6HLTaT$`#g(=Ox20{Onux literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeImpl.class b/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..811c632bbeb3658ec71dd0babd69fccbc3c102a3 GIT binary patch literal 7920 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.class b/source/.class/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.class new file mode 100644 index 0000000000000000000000000000000000000000..c00bed9ef8c8916ae11ea4769bc4d9257790ea3c GIT binary patch literal 5120 zcmcInYjjlA8Qqs8T$l_YK~O}f@g0)DSX!wSMMDT04FN*{p|<2^a!DpkX2Q%JNLtid zi6j9D2|-0|Eml2Mp)J)06sll-RBNrawzjno`l4^v>Yx57thV1icW&k;;M8`lPS)Q0 zoO8eXo%4O?b@Tc^pL-s_9GnQC6?X&>!Dj=w6Q2v;!Ndu&vq(RayQWx%}KcQ|?59uDExk_K_FiTlT4cL3+(fdC%F zL+tqT>{zIm)jrY=QWw5J*FxQ-9#Su9D`^`ZW=}%fS?we3AoY_5NIOY`q+O&ge3AZy zx=B5xUeZ?5HteB4q3x{pk#>;!Ndu&vq(RayQWqYfKcQ|?52=^5m9!0CqCcVSq&~Lo zAoY_5NIOY`e7cLJNAVcxagri^ne+tdNzzlKy`+7luaLe<`Wk0h9PG!}O*|dIT09fL zH!x)4fQf?!#$FwXMV$Eta!O{dFpygrZ?X-TZB`=LVnq!sEUAennnUrn=1}F5x&;-X z`p$NnM)PXyWXOp$h3cyp#uJULp>RB5hr&&XQ02n9B`K#pm*-8#sI9 zv{u*FSJl;4)EGF&TfoIFRBT^en&cv_e}ggh(F+u2Bw{9W@J;z zZVTd1__NN_U+`B0v(IGd$U+XwejMJIi`}hjCkzy}S{tlT)QUBSmNd57VaGtx$h=4= z21-AWUp;T9CDzNP93AUqml~K_GIP{+sdx9UfypELcH0f)=}n_gplSnUSqCFWN-FGR zI?bLEH|RQhZRUmSu`Z8A;<1eJ%&cRnily2zw*PV5kyvxadRA7?%k1?jI~KMx_SuK6 zx9JBqjz+9x#yEQht2)AVyE7swW{$^S++}qkHz2<2+m- z--)gA-vKZl2JdCzHmMbf8lrin2Vm^yb1{&c*?nwGz!>=hj+d4l#F)|{ zG*HJY+(Hc~ET!fv+&~Q~Tt}Uta3!@s;d1Ikg%WC^LNT>SVJdZ!LLv1mg>lr$jNd@J z@DvoCM2k7{mn*4}PY^dX@=1`RQ*+3dl_%s?FC~_gR|z75^#VTg&?)6ReRZ$h(;j)& zFW4>E!=X)4SWZ1#VKMa_g(~V)g=?tiDqKOGrZ9_op28*6=?XKbGZdy!Kcq0>5YAsU zsrUdccp(#SA%Z8-kO_CZgqlDy9qMDETm{_{syF+0N!<&TGw%n(4GXy7yms3A(INFa ze9yI=jPOE*i$pF`m@aa$j9cUqg#wXF6-<%KGULvNDdQf?Uyck}zUbT`8&hOV@! z-|QTdx;NxTDRXw#2^_&~g1ZHMg8Kz~1jj~!>;7rMVZqCSHwEvOmX#kwiNY3Ln5l5P zE|e;ybfHWkste@`VO^M|uv!;pE8MILA-#ab&*ci&>Xr{H%+-ZCdP3#VM-(pBEgw}l zPZzFGn4}AH6~^nr$1;i03%Ft2$X}kMNIrGbv-NRRExy;?r*%2lq+bLDDRu5o3)E7!VmohuctEO4dL zm4&WUxw6QW>v^WQyLd7Rz15+Yh$hK_eB`Hda6Em!9r5LWQ|#qnjg*-KTfn8lmAz5G z<-$C0qtf0FE}>n52L)V4O0bWc?*ZcSIP}eA2MQu=+L$wr2 zsf`L3Qo{<$L8~v3Xpktq)w5d4e(;$GuidMU iR`0piS<*wxN=|^guqPq+6apr0JB30Mx1U5)9`JAf+EJ+h literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/UnionTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/UnionTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..c28303f83c99825d8acedfd86bed632ff2c3bcd1 GIT binary patch literal 7110 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.class b/source/.class/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.class new file mode 100644 index 0000000000000000000000000000000000000000..12f1cbd49ec6bf5e7876f36f19e3c26e617fd68f GIT binary patch literal 3040 zcmbtWTUQfT6#fnYCK(2b5frgvv|e(#K{D))?V%X zAM~Yt^M!}n)dp8xt9|c}>gwK;NlZxMa@CcUGiT1(=iA@ed!O&jKmY#u7l7CBqYqPv z$vA?z4~H?$z4P2$;MaF$Byf?N3lc8zb4DinS()Z8v%wsXU1s}v8CP&s#sZQO7QI-K z;m0+ec~8bNu1mNfV>jOS;wC>okl{m$d(Th$mWbuFzmMlJi*YCKsOHyoD0s}($+OK zrxmj5f^8Xv>_nT94yX*&qu(xTIf1>wPQF9e1^O3kExk6Y6_eUZPN%2|$h6Q{*K&Hn z7Esb=!KR+OkI`VL6B;d?-bm|3+b|0yda-mZGp|`%o?ars8NH<1Mn+90;-#;iE`z_0Hza(l;2us$_(Z{*cuQck8E|Sco=Psy zPsirs(*k3G^IAD)2aI)djm~1A@mK^ygd4(r1*dRY!lw#8!{-9Kw;$lCvXRT^7Tbme z_PKzCfRoD=b0c6DbxU*3&uIl;;7bKx;emn)e68RtNFsLJSel$!oW6OlzC^+|3ch9E z-{FBk*Xe+S?-iWGJ3Rb@z<9fZ$D))bol%|2oiaCS(G!S1(>`YAi#ff)d}l3{iMjge z7Z_>|WirO8AThDmQV#PJ?N(sdb}4bpND}w7R9AI|#o=s+xi;dsJ^qfk`12`!V^u4c zY-3$dxf&^`ymxKm>?$-VG9{eIkF-i(jc<>$DM!H*j_6lc9BCKIR?Q<3X01#;&B3vD z3+p+n+09nPN4Erq+uRl$tfTFKTn3GrA~4`6WCMq1TpI-3s}+knM`gU7=ayW!l~1Yl z+Gh1OqavYzwxmcP(~{uYUAe7X+N)@D7V9>RyLIZIUbqb!M3-if6^U|Q(DHQqMB2r# zB@uDbMb1KZFcwX*pxjf0LRCnEvo<(xp<*)fCQ769~p&i77qu0aqf29s+Ehrjv2hpFzn_4y; zr3GE|9N?`x3$%X^rt266`NN`Ae zEaxu574psq$HTOIIKns;?0SfU4$u?qUf#lpe@_LY(F*p`qk@+i{E>s+kHI>+gsyo) zAESW@oN?h#5jZD%#32}cjC~I=aQP|6DvXapS<4*3%n%HJmeS4O!XyZUVL~;Su}uf0 zk>7X|KZl+V3{$NL+Wf`p<~do_d@Q=`PDcIvD+ojh{Qy7x2dS;OdgWSl@O}k{nu&LF U%>jq#B-A_*^Q^&zPp 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.class b/source/.class/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..4179ca03fcdde4e0d673367a50bc7412dd4b8ca8 GIT binary patch literal 1135 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 z z)tXHw#ntAO{A$-CWzC68qWKwm{*ukFaGRT1PKXIFrW#G*zg=zLnt$Fm@HEdC#5D+- zx@}u@<9g%XP)&W)8;OEGur4OImZxmpEar8GpPd*!S5h8ci)Glo^4en!0LfcYC%SdtsTQ>qr@M#ejIYg0WCEyo$DI;xD+2os+l2?B~jzSm+UXUZu~3T)}e)$T%vVwxjO1f_5l0qGnZF zk@2#OUdn8RIEV-ptE%eKRg)F4C9G8tMOYZE+fS#8Oi6UMLTskdMS6otL2HNzRr8#ND3_FTF^ryp zdnsrL`3_pby9<1hirVRvX*n})kWr!ux-d3>#x%YcUdhn?6s;%d??H1%G9?f80fT~n E0Xu$J&Hw-a literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/DestructionState.class b/source/.class/es/tid/TIDorbj/core/util/DestructionState.class new file mode 100644 index 0000000000000000000000000000000000000000..601ca59160b375e5860d0ac675f6bbeae3e11edf GIT binary patch literal 290 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/FullUseTableException.class b/source/.class/es/tid/TIDorbj/core/util/FullUseTableException.class new file mode 100644 index 0000000000000000000000000000000000000000..60d6d31086c9053ce84e7f9eb3b4b76609d4375d GIT binary patch literal 230 zcmYL@y$ZrW5QJxwn8d$A#RstS2RyJLD5LbL)k-x;EqHh)R8D~c&B%2?lT<1K9V##Oc4L>N6CWOYn@RyIgT`T8FaPtft0#cN!%xtd2Uu zI@*3fUei)_sCBfT&;j3T6t_G)PPm%_$07VDWa$&6;IRXakqsfxImacqjXR!d(hJge zIY{akLV;tBbfFDH{6UY57zt_6Joy~SCGs5mUoK9(n|8eRjyg9d_|i0HWG{Q8iS@h< lc`0;h4Rqzsb;+}2X{>$7ZXYsx#%tE0#Dg@4PWAz1(b literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/InitialReference.class b/source/.class/es/tid/TIDorbj/core/util/InitialReference.class new file mode 100644 index 0000000000000000000000000000000000000000..89786a8c40d9e64714d9be6de827e443936d7e13 GIT binary patch literal 794 zcmZuvZEq4m5Pp`I9?+w-NLx{>SKrE;UgAfkB(yb=q*z1Iq@T!gta$X;BgaCFf5yL{ ziArJ<{qAov#@Q>{CiKJ3WM`gvW}n&l_2>H!08da!A&px}nAp>WV_OS|F*?-26zCcX^k723m zN>|kwqJ`ochSyRNn;=!1>*RSB#OzC6A zozo^CwRzVQq}s$9vL;rLF|mpaLq60qQLZ=F)Amn=bU%oIf$eH|&O{Lh@m!p!2HUsy7*)H{_IiZqIr|nFdL3iMJL-CgQ2(Dy!#cgue^yeHW-RxY%8~Cw;Kn3&>h&09|${qq^5VdM;$~Uq(jRv=A#5urnqAPYSVvT-myAhOr!c9Rf{e5N!5 zE3vPLXcPTRA%wu(C1CVFu&jZVOTcw(%z#d-J|C-+z4l2B3*X1r^+K;bPu+3odTsj`8kR z$XhhwJ!6&}+;_0zV3lFwAXQy?#=u$(<%2BEHN#3Q^GK)NXt(vOKj`$Lq(6|+sZO&f zPSug@#+0^6us%%lT7#UeRHga}L)$Ne7D@_UGuYexu4Jelio8ud>}2v-DxEV}ez31?Et@9LbJ4J(dHZ)4pPu`_DRWDJ2KnnaFcV2l4*ykjT-}XxxAN zkIt zB!z{N5r?jL$tVVRp3#tEi}t5+jqD6XtF&*?cRs8S!NSidh3i9DVfYEw7uZ9TKhQ2H zdlqwJW{ns|YaS()KVsq>j(q{!dN<0uPPUBF)KhvMxPhBvs6J{5STxYq`2UUxHmJz2 Va#t3b?};|mYGlnx%p+We{S$x0ROPDGv_T4JMGU9Orks+T#N?!Qe0KB~ z_@pz=IL`FN8Ltg9;^p1H;H!VYSBJ5F>ztD|g*Js(LCq-as+DTys#R;(N-gVStuRn4*?QGc2;AazyjE&7^@>$*(~Y)wn_8DF zyP{VmPOMg{FD~n{!}ZXu!m_zy=BuW?lrOrcQwoV%iAf#TPa(npRW{nMqvZmsiWWAq5joqN!{3 z6@A4^w>LZbqz^qjqk@Yhs;j!DZK>s8*Szgm)qGDUSy5z3JM(U*g4t1NAosIg2fgD^ zrCn<%9Pm+E_59VQWjpguQ=7FZ0lJG@-L%c>H5a2)G}8wk+2W=1@iCEKj$oK`ha_Di zhy)L=Zq7+|-UQCG!*R1*)~(ja#KeR`He1lGykk}J*Jm!(n~Tf&a=oeZZk=1)nUa`Y zzfmYpFk zJ~XP9ld0d$$lJ*n{0!J4>U=$i4;yIULjl<|@G4$YIJ1M+k8Dk$hj$W%yj1*HI0o7h zv5nKraw5ai+XhxZphtHQU*Tl$^YKcZ>Sf=y>Ph(Yc5*&`9d+v7k;3*@=7)alz51u} z3}$ymjhzve@w~Zie{TxmhP*yLBv)5$65$X(%|MKwR+56NfH23^q?W76DOZzLt|sqX zO(waT>~l5wM4be?igC(3cb_51A5h6XKq#ly5fBj;F(5+aQtOE1QoqLK%2i=c4dhb4 zA?jL$D(i>^r_-sgu{-xO2GZ%`Cjqs#@lWnY&@bqz#1G7)FhRKofelNzm#~#91c!D&U9 zi-`N+7syiu_)nyZlqx+oF9&HNlYKZXSH)a<9f>s@6CHFneQm{QtBNR1AK{8Rg69c3 z#1ahtU%-o$QpP@(!|D*rF<7vJecy8J$7lHKnw0pks_gFGTqqU8{#**m{p4nIzTUQa?~X1B4uEem$9FX6IZ(GdF{U=ry$fprb8^fe&RuEFb@J?V|W zp17mk9mN}%@l!mBfY)#0tv=U*u6F^meXfkcs%62@Ing4#8i{-?f`sbsQ5DKut1O*3SS7ivl=jeu>%qaC zhqaom!)4f%6RuUn$HT*{2x1;)h2*7H2_KbORt&vZOa)IwddZK2ScaNBf2CnPKvCve zMzc)HyAg_XcA9B*af>b5(58(U9f~J3iPJQM^K=`)XnL;y0_K}fFdnE1@_D2&8jb&} o>HCi`?%?{*Fz>%UW@`Eba#*D5V4-0QU3#JSPfDFYe(NU%-;5GSnE(I) literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.class b/source/.class/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.class new file mode 100644 index 0000000000000000000000000000000000000000..0602a08a753055a59505d5f909b030faa52e9bb9 GIT binary patch literal 163 zcmX^0Z`VEs1_mPrE-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2Hn(R{gTWS{SZ%={Gy~R{p9?jRQ=MD%p86Hyqrq^yws44qSV9`=fu45#LN;#2H~v4 zvPAuy#JqHU*NWuSf|AVqJO)JuCZKg7zzBpubAcoqkS7S{Gcd4fZD(NI2v)!V05Jn1 AR{#J2 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/OperationCompletion.class b/source/.class/es/tid/TIDorbj/core/util/OperationCompletion.class new file mode 100644 index 0000000000000000000000000000000000000000..6e817a36743eec62f87ad94b5b687708aed3572e GIT binary patch literal 770 zcmZ`$O>fgc6r6SJxN+PzA>pGfv;+tQtH=^pDnykAWYjiDM6KY0oMb5ut{piWpnruE zH!fU|pp`&^JHH7bW@($|f+D@_yf-uN!@vG~`vKrC8V+W#T!4)g{kp0{&Biqc7M5*X zw{b(j4z`0%u)ZlE0)g3Pnv7JKsGTq#%N%V$%I-QT+mAF90)=LK>&a%T)7sDpgZ2Fv z)F>&CUyG7R-51C;Ztn<~&9u*KF&Z_~{b4MX?Efo0XQQVo?7iL!hn=t+ljDx0nj)3o zhLL)hW+$mAP3YEmtWBNPyPg~>rbagE0;MQXGRww8wM$Ku?729Hii4>sFnV#25QWd>C;AVPT)cB!hcu^AzD8S+2i~7EBiD#$q9P#`V zE|JA$87*qKJ7bmT0=0twj&}s%<-WrBOa%5h&)PAke!`jazQC|Pz&1a^%zYwD;3A_1 z!+jtqxiqm|rNm&VswHclMc*ZpO79Rk-QZZ5hxm<(RxV(Xd_B-T^ONe3w8AZTY6HLkVpOm~UL5vfCWm8_wxDTyVz){{(W{l$qUCytZ_~k@W8SF*EPX z^UTcZAGh9m8^9sFrQ!%?yD*MN6`WNuhB*bFR&b7|=XrRHhtDYZtb)(+^l_DhKd-=0 zFwg6PjG_!vg^pPT3;Zncu&Ck=SPCw%&_x+#6}wR3!It5u*n?Rfs=V_A4=yiBYYa67 z9^X<|a7o4&R4m~#4^JxiqJl5+(U%o`Ma5U~wQhVJPs#WO>s^uYO$FalDK3kJp61~h z72n2pcz9ODbEwOBUdDH2d{02GJbuY2*G&OEf5Et9WXgtJ%FKAKWtYYUVn;07@{S6` zhgy$^&k9HrPLY(m3T2~Kn=&dizptHWtF}PTjAs-sP8!u&W4>%s0A$B<57i1z)vO8J z-^Na>nc>zg0-E5J@qK|#*R1A>0{f%3CfL{UHi`mjaQUp0o0jndfnLvP%Ekwcto^l_ym5a;o~64_vKFHvreTn>bRxM#F^>i z$1-z)?pbCmdvJ72!;kP|fj(w#l$je11c(<_*6zP-9LzhT?IWnnR@;ZvBVSRbJ@GfI@2gA64_9l}|4T#r*PLtvex2))ac zG#Y+~-)r~-UJX!Uc>yg-hK5N@5Lirsj6Z7l6INxsuHnzfhipXaNW)+70`a-we6CzJ zOGf#aTdG$~+l%1ZUodRj@dg(xyEy0<6{Ger@*2+I5gC8g@CF(h*03()O^Rs4sGmer zj(5tb+r@~<{bnuWS;fq3?u6scU&s_3*Ub1xN64WX@v|uK`^@|Wv)~DA-(p>$|FPD3 z6X+P?UJx^%s2gRf+)d3Qur)q>o~z3OwA25mpIi;(M9-p8nd7E2koVugkDDAg^!K?<&E zc&6W-P8)Wy%gefW>l^}0-Z#5S^C$n@fwWUb1QXf``zA%v@c{{sE9uTcPg}Uof zVKvvAxe9ifE3!P{*dD>+hnc62%|0hKQ5!j8oh>C1=wL6sW{=R{32Hmsy=kV%>J4mromM~>j$qs_daMC?8L6b4?8`Qw zG|-h#>8iiEUGGly$qi`h=vmc!Q~XHk+x@dXUx5z$NMrQ|?l^Y?`nfgq>pL2VC+XL~ z&NbZm4tXJPg2o<5+Itw5aq=c&aj5)O2wW2nK%#(v_fqy4b&i&67??~q zu>0r@>>=}aWu=5f*6*I{INVA5gUk3kJ@#f}A}c4P2KF^@&ovwfoe6j1`n}{(fVN7l$`g2NO~=lBg12xq|70#8!CvV7zmWRD2El+sNzp1vdqfd)i2l z8+>@BQ>=V2?q9xo8>kezx<9}^#0VaQP)rPbm8B5{)#?c(koGJK8r zmB`HHejFf-hL*8NkKw%DJE`|hrSxuM?kcpDPP@c;CPi5F$=9IihD56W9!aw#o!vc0vG3am=^n`4x3ELT zX&F2JR>O53J_Js;{G>8(ErhA;%ydmN5hT5Ba%8ssI20 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/StringHolder.class b/source/.class/es/tid/TIDorbj/core/util/StringHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..074cf6f35c4050b968318df4c57b2f1ee02b9d7d GIT binary patch literal 1553 zcmah}TTc@~7(LSq+m=Nr0wPr`AkrHwpyCBYO9832mOx|lsoAz`EtcJ8JH_x*d^hn` zh(Mx=zWbw$-}K5>ihbCfojK=xx6}Fk=lf3pi+JI|0B*a{k7+mVU`DJ09t08cAdH9y zvxrETb3yUIg?R}JZeraPANM@Ck0l8YBs`Sxh@rQ_&7xk&@WZmkFq$yTf@16!lvrwK zEvlqxH)iCuWd`SgTB;IcFtMi|s7guI3(9VdONTuxMZL&Z8SH`JYX*nlF!%!9*>D{1b#Sh@xC)-YHFTgrc5cWw zs}zI3!!?}*%4X>T&&U5q6BeJc=F*zac@tAYHPbg*f(5!p2EgEjjhkX)npf=j;Z$rZt;8+9bCzzdpLsnoY zLh5Z<-=(rG;0;Q#o@$yzh3sM|dt^H8wt@?+09O2i<4z{Q3e% z@`w~%bd}DdmsaDX;evgZ{;Rh{g?>ylBD{gK7GbHSJlU!2tt;D)A)leIrXH?iu81h0 bt2=T&O0XGa5>t&RUV00pQ$+bn3;O*9Ruy(B literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/ULongHolder.class b/source/.class/es/tid/TIDorbj/core/util/ULongHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..7719953e15be9e138537de7bf1b8ae47f472105a GIT binary patch literal 755 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/UserSystemExceptionEncoder.class b/source/.class/es/tid/TIDorbj/core/util/UserSystemExceptionEncoder.class new file mode 100644 index 0000000000000000000000000000000000000000..a4dadee991072fc2284d3142471c04743ec93bf3 GIT binary patch literal 1881 zcma)7TXWk)6#llcEk{vkZgmpCtxGBRk|Ibcm$*%_olx8)c5vc0Zh)ZJi%}v=t}W;C z&Y$3k8D9F*2bf{x88Xwp@z9^d441RM#Fc7hut(aRv*�JGa$~zkh!QU=b%Wt{^U6 z2^kBxA>%!$qj(=5h~1*t-IVbmZpruvAItazpUPOmEeXjWZp%<`M+lc?+{I@?CnY0| zjEohmO88vH4DLzzLPA!;eHn9z2eBsBb@AGeF^fAAauV_kf!n&N+sh0i(bxk9U&g9% z2LEwGw`si>UAG!l)v8t1Oump#sdcMiYx@RQ^DVpHvbXF8*J??R($;Cy=C#$6GOydZ zWhOhoq*!4n|0iJ99N_JG0Jl%;To6mfJO@Sd(6o-tVv{!p?ij|mY^{8_q1CqqR|%Vx z4FwTgRq!PW61EgfE>!aC57G}X||s!CPW z&1$-(8x`JQ2o+6!Qs-rxS0cP$)TM}m7LF7gqsVZRH&t7&sN2~UtFeEemaPU?Tefbf zqBNd8pk$B*RX~y;R-(U-yzX=<{odiWu@D2+yLr0j*x= zV)AYb>z`LzsyB8-I%r$nE~5dzOdkvJ8=;5pF;H1)H%Tj_)gNzz{Yo2P6xZ-}?>K=A z^arlQ6Amso7;)f>Cw_z9K|rjMgCK4DhS%{<&+sXH@RQ+j+`;HZ;tv!?mcxl>KjVHP zyy!r7Fg6kT3FBu_N>k%)y!L#db8ykY#E<08!K8z!CEq-`69&^~m?_Qs+PL(~4HeFN{fuvT*cI K_|p<%B>fk<9rKU? literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/ValueHolder.class b/source/.class/es/tid/TIDorbj/core/util/ValueHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..ff8e579c8e5fb5a1783d6117b86e7b70e064b0c0 GIT binary patch literal 1244 zcmb7D*-qO)6g?BiI5-Y#NNJ%ov@FH}ra)IwRRa0|YNAvGA@!w}Nvz1!*pYFl+CS+R z@LHq-QY&?N?MGF;6U<^r9_oiX9?v;v?sEL+@3$WS7V%s~5Axl}U|fXz3LdDKz@&;K zrW8yo&{LREk%FP1pdyV~1#=4K6>tXmz;c^5L$0`M9a!A)dBqMK%XL0kJFdOVFxUc^ z;m3yE3RS;G@Zq8#)VaS`=WFH7)fK))$7^&#gsvBk=Y%gAM)XdgnQexofHN#~1hr2{ zP-Qc)ts2Ahb#B8CLXkG#@EXmq5)y20Suiq{(5k*KS&c1mOiiIQ%@2VSQU-cQm2xwT z%gC(`Fx=5+I+dm&i-#HpFsPvq{R~sFMwyG|5^tBLf(4C+xuoF{9y3hFSQqVmLseLH zo3C26*N#Um7>eUcE1Q+|l_JCFl@8>c{k-Rg`PQWJi}Q3x7Eh>sF>XAwtEFprif0TH z_C61t8sFM@vyy^!wZ-$P`w}pk)eYa)@41Fyhxt3Sw<(*x-8ZwN>F1jrLY(Qcn z43aM9l#3(JUB!@asMsvE{ZgISj#nqcslp9r35i%Yy*<_C=r0{2^Bt+T1Kp=k ze;yH8!3f4ElBtQFg7l8QNZqs_#oadI=`-B(kQ{8nvg zQ|OC+fPScuS?ht33SqhBcIJ6zc7E*N+uwfxyoF=I#AX3`Y*~1MZ3|DaQ@}2snRssE zg^8C0W9Y|&kU%aW|1Ro9>OCRr9A6T0ZqnjR&T;k0@MP$>2uIF&BHJSAwuRgHbb2EC ziBx_w4n@7!AE?iYW!;)~J73pl2xqDORAM0$lM^8R$0f!RHCa9cglT- J@l{^~xC76dtm^;( literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/WStringHolder.class b/source/.class/es/tid/TIDorbj/core/util/WStringHolder.class new file mode 100644 index 0000000000000000000000000000000000000000..a9af81774c6a57bc70b158ba843a38b206ec8171 GIT binary patch literal 1598 zcmah}TTc@~6#k|cwycX>}Az(Vk;C>cW5_kWb`El_kor#5u_uws~u=+UMpnP?Q$#~HZA80IljW+^i92CaETa( zeqSRx0h(!edNqTq{<|`T|*HU?1jTVX}PFi(sZ%HtKBIZm2=4OtQ;Zl`fuP3!YbHL6oV4|)}Jp+K;3SMD=VM5wL?eco+EvqrsjDTP%d2lILe`CZ zMmHJS>OM%McJ(x87`C(5E}+tT(QJn4>-dHH(&U+%;nuV?H_RgjnWvMMM;T^gHwIe* ztHqNqM;Zva;0SsH!awySophb`(ke9*Rkxk0nuM&A*9%$xvF!b*tu2*Uh9P@s*w`!P zb)GW{ahPB3^c+39issad$@F+~3tCcHmt*HXKpi|(cuQhp89 zp3op^qp3r09}fB^1JfuXW1^dWC0dcm>H9AI8!RJ$cK1W)7lI@-gVajK@i9EndGh8N^{;9r6!Zi7 zQPG{EFE_QhpXVO#IWMn|&j3!aTSOikHZ}{`Dk6ijjf#z`jctbfnT(}5XRvDZ0YlbR zV?onUi@;FPs&#uxM_kP!?)EQRP424Md@77ov1bCaNSyi#z`IL~n00PLF;7uW2?eY% z?Ej`|HQPhCf8lqodX_N?~f)TGz_Qz;97b0i>^`YeG_^{%Q$lW_F;fSbN~PV literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..713f1cc785f2fa5d69bbea8b838cb8e3a74c3664 GIT binary patch literal 458 zcma)2%SyvQ6g`tZQe)M&DhOSK6d(PYY^DBTe92zKNN5^gjdj>Srbkub;bnG*fFXJ>;R}6(#+h-`+ zaw2FNW+G5jSS`0Nvxv(i;7y za2N1dkVf1aPerI0F8;x`@$L^@r`7)@9I7l%BlB-Bd>o@hZZqg)y+)bDQ#7cnQzoS- ioh-qgr~tLwr2K1rM27{MRbQapHVVztC5n%qD0~2I)O5Z8 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..502befff7bd81e7a73082bdd5d5494a4a5b0dfdc GIT binary patch literal 458 zcma)2O-lk%6g|&T$IMEtAaK=ABY4n43L|hv7lJgQBD9imd<<_G=gG`7>R;7LDCh_D zqoO-Sg>GtdKhHhfbKc&cUjdxqu!uZ%Ozal0S40M76BQFx6Z;JLOBqRh#bDGMV}`7) zW`d?(EL=^6Rqypx>~l5ux$O+BHn-J$5eh9;G}NwMCauN>VEB+|G4I}cVv(X+B^0p5 zP+O<5+MS7W(;c)&J?EMMDe8dXTqIn}86WjJDxL=1Q?cMnEkiE83HjRT#7;j|F+(|U z?_3_bkzqr z6@4o*@}*wBpXWP#=e)f?zXE7t*F*^$1~$vsGNGYrpk|2bpP}H% zk)Uaqi9k`|TJ4U^A}%Kp_qsjT;hvmK$3n$2^;MweGrO?@@E>MMOfK(3G0jnS1!b%; z?ER*3oz~#m={Z*n$PqgXCt}7`JmNR)mdu6;4`n9!T*YH9zRCFVY~bY|%8a3!1a|=+ z2WiB+!$gFN;p`twD{n68POZ)lp|7$yjqJZY=;IJYa+$#(%Qea*nxaWvjWVf3@n`|| eLR(XMTTh|Yc7brY_qVNG1KXM2F literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..d590d64b0f51fea8fe8fbef2a88e83060554a738 GIT binary patch literal 456 zcma)2O-lk%6g_YJ7@Mrr3Zho+G=c{$iZB9aoP{7vqzJBL93R6IohNUeQU9t|LP0;E z9~E7TzTDL2ex7@{=e)c=J_9(xu7f-_Y-|>=<-kJ8M%hNi#x_I#LMGB&GGwZ?9z)hs zBSF(hi_lQvR$FbQW3Hw#_kwG;!96vdO@xsu>6p;W(|TpCnWx+CKl^;UHy6!ZW+ zRPje<4$8E*Ub_T9+Z~ zsezzvtVLv~X;l4|(g|1NgnL1!QRki-Pe#H>m4+rVv#DEK0fdiJBgV~#SWFfuw}=AP z81`3af_A%iUH4nJohAbopdE%YG37=M_>F(1bbrWWr3IfEIpX4nk7O(_d)`8)(hQ|x zbRY3ilqNjr4@GPk&i_HSBKDW=wAxw{hDOUYasN)Di$mlnYX+Nwx2TeJdL5d|RLLlE iM{}@eYCz*U8UOy?qr(jCim$NlDw%`hIkHb*D0~7-;dBN7 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..9ab7ea4644a3d6b2587174c557028a9d76448ee3 GIT binary patch literal 462 zcma)&%}T>S6otAL2ooY zhJr1pg1SL2d__sS(d)}R&7*y`L+QcJBf)TdAxH z%Gh8y`i<$dMy;{!47~2p?KuMmtaN(}mtxLUH07gSN9L252Qn9Yp`wI~FCOK#w(>XbywU#wx+;&d(E8gC5638y;|vDbuTdle=ryUT mQKVZ@JXwN0QUWSB>Gsd>0~*w+S9ykZQ`Zkqmnb}ZsPGPH;dSHy literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..32f340784c6eca655558d03d96fb5028ad6d5713 GIT binary patch literal 448 zcma)2T}uK%6g{)6u9=nE2SHE0X#@iXL2LxMZ6GLuhR~C&>#)qSyCb_})W51Hp`aho zkBY8^MZVO_{XF+@&v|=)eg)9PZV3f!SlBFLs{{iT3snm>3)>8ZbD2ne!C=-KLx!BA zCW5AZDm+a^tKROYG~g-@xYO&mF1e%PX(Y5%$v}I0mf4LJz~CX%B6jb6FzyCMflg%-*nc}P#3AzJF@r^h8CmKE`31&p%{(}sBlq};!UsdCahL!A literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..d48a4854cd63469f3bc55179f4bcd2075cc49a27 GIT binary patch literal 450 zcma)2%SyvQ6g`tZQe)M&DhjULr6LT72oe!&bP-6Ym{M?6(sT$D+Du8OqJO2Uf`T95 zM~OFz6}!>ReV%)`=e)f?zXCYIwuLg*OsrS1VZlJnMBPNg#3n=eOr}zwGZgG*kD=(Q zp`dA$iBMC~vOQmAF<0Z5yPccX1$WhWG7?&VK~IpkgMQe}gLM=BG1rsar>Z!*3(>$~}fDr2Z6;a$i_ zVH)$!AQ6#fIQ<9H(whsq6WjkG40I;b*!kOo9`;cpml;g5+@MUNDO%LkDU(W+4(4D_ eRDjx5QvJ2wrNaWvsxL5Z8-=~YIf{>;D0~2OdU9d_ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..b3e1c2aa067c3f42f54b135b7de891335de835d8 GIT binary patch literal 452 zcma)2-%G+!7(LgiGqX}F5PIrOBe)P0gc0cSVK5S!2=x+kUdA2Uu58z+|EivZg8qR1 zsOVc!k}vi0{XE~{JLm2F`4zwscB?33!^CCGiE4S zYAR^zr^3@z^xL+h(txWt;MVY}-{Y2wXOYlSC9d}LJnME=0PaJkMLf9o#Vkj4Yp7t2 zq4k@_zO+Yn&#`X?49Fon496nlT2A@MzEJ5Ta-p?Bx; z$V&n~oP@&H45$B~T6y$`?xgK330kwvME-nYfvVcC><=o fo~Qt|>m>VY-J(N-X0;a-uA9c*;R40SPZT}?HUV%Q%ho6@y{dhYWc~ zjs;CaB?3)F+jc#vA}*&9cY6JHi#u{UON5SP>gzx+=FR#Vz<-!)G40%kVwRzrWt6bN zaPXVP?G8HqZp&jp2H0ab6LYTPF(0_sQjI1&luGc0juS3cTzqwP>tz2)#ZZ|9cL7g= zG~&I{M1-2*;vYn7Pkz&#+ujeMuT`8z&A%NO;ur<;n875&bCgLkMT@#BWfFa=k|VSM?+m^au1u zMc;~&e5sf3=lKrbIdAXJuKv`McB(3{UOf!^IMiFZa z_1`q!b?<7>ZQXQy24s*OhGQ|~Iv(+!cPZ6y%tNUJpX+$S#Wx#Y-VNOBN2wSpRZ*7P|yeH zLq+e3iX^C;^Zq%{`SHHbd3k+&25^Q$17+;!*sWmCKmj!!bsY^I`wZpFD2Y^uL2I?g z3`JYc1a*T{_==Kl%jwHBwT&PGUp7PZyGus;i?=DkfadjJrWv()- zs9=ks`4i)~W2^7RqRGL_j&H&p7Zwp{0iUzn-*tH-059++T4-pI1xIQnWqCio!G4ffcG%bB0awk#W+XVRaCIV zu=Sh9z4H4P-S#B|a=-?|p_p(T5BZIICe>iXL#YIx>Nw$I&c)|feJB4sM-A?^t6hz$o|^_AG;`##|$PJUZ6~pDO%LkDU(Q)_GVyD eRDjxL68*K_rbB~f)fW_Q8^+H548_M!6g~h@hjF9; literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..55f8cce205226eb8f7cd633ab9a30edadb5bb7a1 GIT binary patch literal 450 zcma)2-%G+!7(I7WXUj^hDCnuT8NmgKAQnMR9|oe3GU!R>yo`-)SLQY9zp5vppg*8L zD*7xk@}*wBpXWP#=e)f?zXE7t-$V&p2DZ!CF`=Pqpk|R4i02Y%>&2Wg^WPL$==NGvr(~ z5;P692n-cY-RmeFaTQ10?e?5=?y7h?5k{)SH-VX@t;Pz#e@Kmp+xMZEE>Nu!idbW) z{igA*`-84?)oWieU;)`-Xo{2@IpR0oh0?<@50w^tX5@s6Z#KTX8@P)fm1Zc9gS&uF zf+XVI;aG%*;p87wE06xr9oIWcLf>eaM6JJF=wlyw@|nRR(=(JwHbtAd3T2Xs{J|XT ei3(7=PO`t&H9E}Ftn`A+Z8f`hI7jaB6NL|3wQ}SD literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..84fa2b6e714f366deee40accc95a3747a9ed9722 GIT binary patch literal 452 zcma)2T}uK%6g}grYi6ZZAoSGR8o@wd5Jr$&4-1l!vEY-e>#)qS?#MVs{i}Ks3i<*4 zsOWA{k}vggKhHhfbKc&cUjZCpw~Qh-Y;2aWRYnd~8#Nns8`})UQ<+M0#$Y*3pCRw6 zv7l+FMPR7tI9^xjh^tA&-QG>-oV#i=O@xsu?VG^NXYJ++p#Ly4Vsd#OifM*wS5U$l zL*qA%cjXVSdtJ{RFd&2MFto&s8#(5;-i6Ymn1@OWJ~uMq;+u^x?}l#nqtXo3IJgUV z5~LCDjbafRhLe9#tvvceckFbRgngrB8nyp+!N)!dH*-YLrPP3I_|Y eCn`YgI?4W8H|Wr!S>*+}LEYLrTp<7WiNXhrYjYF; literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..64e3c29ac24c01768d001f903ac19628ed58702a GIT binary patch literal 446 zcma)2%SyvQ6g`tZQft+=S`b{hYeg97q973=je>Dg@{W;x2Lp@KDr z)^C{$d*q$lE(7xY4ntSWxsIm%a&RiuB<6usf-iKGaPcL@KS|e4ew|bd_1M4hdE#dw zA5LNsXojPI=&YRhE!S(iKZ2fCQ5IT%`yXQ;CHgRfN$)l&lVOTg>Kc^EBT5HLum>tY b?K*k>Snm?CK(pEtjH_m0?{JCY{W}V8E*Nm; literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..de80b5a0007a199e92c81f21c95b2e122ed74523 GIT binary patch literal 456 zcma)2%SyvQ6g|^dYOUH<1<{qeRD^*p6p08nc2VdZqlguT z-QP65{;1u(?6kVA-hcrM&=$k7NV%31K4@R4WE^l$C4$ei47vE^<3BG)_To>KFjNBf z#^s?K`@BC6gr^x!{z10%>=)gU+4&}PbRuKl`rC;i_K_#A84NN$Lz$#gEKygbOhS=A hn1ek~0cuxC_{VyO4zn~XKOu8n%kCY{k-L9K;SF`ybS?k@ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..dc93c6a5c45b14fd4a8a6c0cd3c19b64ce54c933 GIT binary patch literal 450 zcma)2-%G+!7(I7WXUj^hDCnuT8Nr2!AQnL`9|UdSLhwoEyo`z4mF*h!U)7UP&>zqr z6@4o*@}*wBpXWP#=e)f?zXCYHu89&h3~ZLMWkN&MK+Qniz&1naB1$54$)H<}K10Eg zV?om(6~3aPX|+2t4Y`a%?zp|?6?bGjn+g@l#8bYSXLe%+;5}qY#I5^4%yN`nK^bcd zd%tOJ++nxXb$bH_B939|q>ah0v4Cc^MmSSGH@^e^pOHL4QDh zRP?Q=(3g7oexC2}o%8no{0iU*y9UbG(6L#;mVp9lI_f$aI<^_gXJHbma|W%|9x@ay zIT1AVQ{gEpIxV{=(}2r3;FdG!TyRUqv#C&_OkCxud1kg(0PaJkMBKgi#VkjeRaCIX z&|IeJJEQCF;L3Jg+vzhPN9{12h>WXn!f)(LnT{jw%T(~W3a4Cr6Y{0gk(GZcQ-)gP z-FbZKB>{KFk?R+YCBcU!Y9lDH_z(DU(u^ h4i;cfRDjxbQvS8xqeG2m)fW_Q8(Q;lf#TyQ3Ll=;bnE~C literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..4979a893dd56187f7da318192f3b7169022cc0ba GIT binary patch literal 456 zcma)2%SyvQ6g`u)O^sFCsvx>@mx?gpLXnDKV;6;DAkl)WlBPpQXfkCw75yt+6%_mc zKT5n+e08In`#kq>&v|)$d{C~Ns=e}l)-cwJ%)lS zhk~Y&5}~G|<#f7I#aw1FcRjy##$B0>M?xnu4|J%flV)Q95Zq0)$lAA&7|&773d&ew z*#1p(;r0D?;9dD{J7B;Zw83yBCR`^&e%U#fYLN0sD#52Z8FBH+$A4b--T9wVF;vs= zCgh_qkGVHUMWh*y|3S9!>=)gk)BPq4v`X^0`L`22?4n3sGgxH2L7Ajew5h96CZQ!bWQ*O literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..6ba8d7da0552b593311e396d4b7c7bece8f8836d GIT binary patch literal 454 zcma)2O-lk%6g_W79hS4ntF9Tt^dr)xD5vJmrB@g3omnbMZ;Xe;kgS<(E=1l&AiU z&tpFgxjUYUKr@{DgKOp0FS=%}_f6<&6{TV8Zy$y@M4p^xu*i0UG6|<>Q&*u(I*~tG gfIUzFYS&5k$9j(rO`4USU|d(tgX0Bq_wOjY0hC#Dv;Y7A literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..89dcd866acc8e9d9da90c7a63648ba6a4557574a GIT binary patch literal 464 zcma)3%Syvg5Ir}2q{gakRS*QhT`R(cE(D1PHf9ki223crDrtHN2~BQEZ$ zz>g9qii+LnW}asbGiP4ko?ZZSv2CD=H680UY#7kc(9zV<(y_@wKMqIk>Pw{=ic|l_ z=aCMH+!L|147hTQieiQbMmT_4B+lL{Jks+rUY_i>=Ou{MVsVh+?oyeRl g!5*jpwVR~-V|_q}DVi0YU|p9}N2g1q@83~)12DaFQ~&?~ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..0282b7377f65f3ef33f3b4a8ab814995e3fd4a0e GIT binary patch literal 458 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 D05|E( literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..cc96d138e37e5bba26c8b502d90dce52ecfacbb6 GIT binary patch literal 446 zcma)2%SyvQ6g|^dYOUH<3xX?mtq22M6eJ?p*hQccFtOlD(sT$Dl1xdaqJO2Uf`T95 zM~Sx;6}!>ReVua;_uRMl=T`tdv}>qf%fNOOJ2e#0Fwiv6GO)`~IhCo@XAH$ocg#?- z)Kt(k$b_${7S6ot?9FEv(etAgN4SE&dCT?i6U+O&&6X)%cfS0zn{kdkIfIu(5@T@@63 z03S-cRa7j3Zsz{XxgU4Vyu3a>1E^zHM*$leHjCKOkwIBQMMG7?HbdboN+Na6kTq(3 zhMXlwg1SK}d__squsbphxtxUD>N(8@x8!6R3l+)4Rlb_f%-V{;y_+d9Y2OB7x>T7Z z6tTu|_!Hwfjjr3UJiFH&IPJ?T+iABLuoUkwT!Ei%-@}5DXkH}CY rE9lgzs!*f{BY(62d!PhVu9E>D*LyUWrC#X?nd@qH|9FAi{ksZpvn6=^ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..9834c4c3de182db6362dd24e5fb71e76030b04bd GIT binary patch literal 476 zcma)(UrWMJ7{;ID)Y-C9D+sy@y3hy?coBpVY|{&AIB+6#C37CeM0aF6Mt!Tg5(@eN zeW>VNQIQ07bKXDad4HVuIWMn|&j6a(H&Dcuj_ne54CGMJQPok?vCB}rh~h|HGHCV2 zkRfl&iJ)$f2wzcR)w_;NLN4bax81&Fa$C+9God0Gd&*bKwAEM>cz3B1^UiG`7MZG5 zMhP1X$3HQHzS;9kd(d@zqrU4nowjA#R}9GHdkm&Xxr!!y&~3|PJmrB*1YfFX#>FR@ z|IQfM+1q8pP?`ESKA-t<$ldW&1d8GOAK0}8zHn!C=Nss$B#Oh<-|h@?gaY}`pwnmM tD3Tp?8dOy&(#j~DtiT>90hOC%!N>Ih4QkXYKOuKr(+*Ep$lt%K@CJYrdE@{9 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.class b/source/.class/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.class new file mode 100644 index 0000000000000000000000000000000000000000..87fff07800e94058e5fc7eee6bcdc00a2d8f3e1e GIT binary patch literal 450 zcma)2O-lk%6g_W79WyJnqM%i~F@gsYK}-ZXxfl=yM}$@}j*nr)nI~_aQU9t|LP0;E z9~E7TjNH`bex7@{=e)f?zXE7rzk~v|ENmCCQ-Xntg{p;`gv`HitTR*&;xtx=47$}GFq9lQ z5;P4n5hyCUR$l8>d+K_ZE(41F217^WT*V`P-aD4raLhxQ2|iQtgo`gJ{zl zG|_;P=y!jV@eW-iB|wN~vpaX@o^$SF?*97y{Re=@m@{GFP7*QPHE_?Qb<)HXYy*yg ztO*0tdVfEK2Y9G0*T5qNqh5LE)pj`p+hXWm2pWNU!4S8%oDEv?qDrnIU(`d%o6SHp zD!k!s*Lam7W;;Ylg`yVtt%_=egru_q(R>lM7&5j~6mrKE^&K}~UR}(&D@WLQ3R~q( zB?WKLpP^)*BIX*cd8f#mt_rH|dSOY(?KiG3BzHdqB6Ra7`7P`8g2ql; zs!$JW6s~todH&my7q08vsU-~N@}AE_MHMwEVTw)_ZQEyt@T=0zFRd0D;jUU!1g-y1 zE{XRtP}HjR3xkz+)k(C!&DbiGSI#eX-r2Cwj}Z&K=wq1uw{~fX0RuA@4b>Bdbmt8& z=9Vfexz${WVWiX3Zuqj4LTZVp7RK?+z^sKU7_u;d=M3&K<>Eq$!uM*6UX!{sb2-L_ zp5a%#7II0$#rKr-e8n()<{Z(~#_csdc2lSQp^!?Ch}&`5M3}r>9t_U8k{wq{zZbP6 zM*l3p=%pK@Zx7kjefkd4ZWvwk0A_X{EIalUU7u;E@zl`>Gf1oEC$eAA^)Yf^#kI)Y zAGu=#FOQwWNJq{L#n)Wx5V1|o-$(pYB$2^LgzBXejbiQKNsMBQ($Wdek$_GxlRZFU zL92{uiQ*xQ&F+2l{5&G+(z?mIPDol`8@Pd+WXI{uK$6Df7Fk+vG}7xMz2u1=c|f=c V+>UVRs4=PR^f#Cc2S~M(!yi{iIYn{FSLk?c){JGj__biN=$kou}NzQkS6%jEZYrP-7=f$V5z^! z2Te4fB>L`;GM;G*NeLQaHoND{obP<+y1#yZ{{dhHD;Cn2Pa%Q3919l7dlv5F0mnm* zMGG8{(s1CK%N)lN18+Cqd(nQtz$y$AtKnX#Uos?}irXMjk}Wc&BH2BGB^;N4=~zag z-)rh#O!lNN;~qoSajR183fbNjrTRv(AlCb+JcVfm9jzpR$e)O9Uj?2H26l#;bH=f- z*UP)rpd)nH5?htBR6B2lFI6BugfbQ-*^X7v>4b8xD!UC+z<{dKjw1>;xv4$>UCoQP zyqzeZ>KUxH13!p0d2|@YyDHR__?B~S48NsBsk~9&*YUpI)RbyFf12Q%N`3wB3FO^| zjmyZ`urbN-{QpWY6jwMN+jxSf44Kic77OL(dSRnbW0)Pa44SZ}lvIX7a6GdyjjJ|p zW0^smp#NP%Rr+33^g7g_<%@arC-5qW;y}@?g9EKRUo*^{J62ksq_b(ZVDVz?4DMN? zSSoEsD@JBSJBtNc`ZWCvj9wZ6eL3mWPWn#KX$E8T09Ni0EI0QRW1s0{@YJUvW}2k& zAJ2Wk*vFyy+Ns%48FON)cw)Sc8+2v(vlPD{`xuFB<9~?cry<1*GDDQf%b?gGc#7O+ zDJ?_rf(T54+1wGvR}IUYp{O2%Z%-WJ($Bu*B$YHl+D$@|e9bY3TcjuHjw40$zC)Vf T%M1%n=a#-9#c%{`5EOp^jLiEa literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a45969a30676c7b0e116677a7b4e467a08b0e5ea GIT binary patch literal 1081 zcmbVL`)kus6#i~sv1zKCkG1nXt261;xCtUugg!P_Xx(T_Vg6FGG>mB58*XoP^=}eU zP&OUt@BUHZxl0r_rVI(meVp%n=R1%5`1$o4fE7H_k-^P0;#kmdOQ*G<<2LSSSk!P= zhXykP3q^Igq~RWeHtfB21{05gtudsY`XgUHV@Q~5R+pA4?~^Gh9O-k0xM>k66YzoW zPJ411kd5x@1ax^YWyqUWgNq%T4|nY9Mypb`HxIET3e@+;Qg8y12T>cY@Eqxdc7~>T z%&|P0maK+1wx!>8H+ZT4V*4miJU?SU+qz+4e1iq+mZ2nz9 z$?6(7i@X5?S%$~|mx7`=r{TVV2e27(N2^*X*Ls`fR=LSAf7B8dVO0n&6vaag%LZm~ z-oSONFxbD*|IVSoU1v~n##Er?(|L5&5UqQIz!TJKZ&wP(l?-zywv~n`VYby2ES`>? z!8%S9a3NJ|?IS&+sl@_~eTIGqMlZF1z8dYRob;Wc(;Q;-0D5r`tXTMr*he}kJk=?} z%+jj-lf_Sny^qWna4|9~DrJt(RNqC$OT-)U=PCYS>;uHNl>Z(QA0ku^`3R+SDHIEX zr!kMqBufc=LIg@+zPOKMO|cXdMdJY4R%#Dtz8^YfDWw$ct`L&e=Nhi!8toHwry))K WzCk<1mx~h46qmjr&9DzW42oYnK>7Fp literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.class b/source/.class/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..84f48e9a94f172d5dbb96c91bf7462c48d2209d9 GIT binary patch literal 1534 zcmbtUYfsZq7=8{Lly&9i1qNR6+IDKiD+y{cE{RJ9TYxM**p?hXtrjoQV=^b^qtk>JQwS)9FL2@ zc^mTR_o0-+ShmTEjYy4XU`4v#>qR$Ob=T_wErCH_*!F@*(om`AH0AdheDjY}ijEK?p7s#RCJE@KD1e1E+A>z$6|sOm#v| zYNo_Jw?6B}G%KeQbL`uo7XLh`M}Z)b1=~`%o@99XM?G~f^0c|4RJwGOCgMUWJvoPz z(LJx(>FK07FjW4U`;bh!&23d_6Dj(O0vLTsD)j6po0d+`5xR|{hdzLA?||9)Pw4qT zH-)D~CYTXAReZ1g5k2n{_Zgf`+(U^wHC%X?I7cy-ICGR=#Ts9cT2t{mNOvf57*9|G zgit8fPM*O8&QV#az-b~-1?KEs^p+G$UQv*xt@Z7o|NCB`YORl~^Ms^xNy7zPBs)#N qX~>W|FO#MCCKA3u;>#THkq3mE#FYd$mJB9q=RZSd*hRKo9DV`KQI@*^ literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/core/ziop/ZIOP.class b/source/.class/es/tid/TIDorbj/core/ziop/ZIOP.class new file mode 100644 index 0000000000000000000000000000000000000000..19d510a45cbba066426e7fe291006c26b754c507 GIT binary patch literal 2250 zcmcIk-%}e^6#g!|o10A*4A8W0OWOLQH6+-aHB8qon+w_NPJLz7 zEID<{Tyv^+>1%VoHD#QdYklQTjV>|t7u;g$Zoas-AOILX>%qSlCXPvl;fm#Es%NnS@KU_c zL#_peut0G(7K_y{Nz`yIpi`r$>OB93N&t9T8|5buWFt*Pl~SIl<3b9TdRqux1Yj~o%H zUuGZkr78L4^bd}R%W&uhAILZnf6>54t20FxtMmeB+4A24dNSySEAc`>JRN5b@O4!q z^)kjTr-^gG=XC1JcDcbo5g%XA{tj;jMh!IRuTcXmSH zFq>-PoYBOYR14)kBF4VKGY z17()jejuj6q)eO}L>HJ;bh!yzSDGm6@)K}|$$+kS2A9&oXiyLAeveyHT8*kYCo`=F zqQUV;2h`8gnf!U6wp4`Yq5>35 zjOl+7tcvs0P+kM2XciqZM6!qc?g)2wM-c28A{?)i=Novli>Ky$_A@*TKWvNQdtLzk E1!tC0jsO4v literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynAnyBase.class b/source/.class/es/tid/TIDorbj/dynAny/DynAnyBase.class new file mode 100644 index 0000000000000000000000000000000000000000..5442832a03664f858658d062ae92299861225602 GIT binary patch literal 4219 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 lmwt{%5>Dx#Z!G;R_P)|T{x{cGw;ot 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynArrayImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynArrayImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..7973e22bb1dc7bf34513938056ad84ba27600614 GIT binary patch literal 6863 zcmcIo2Y3|M5uQOOt#qsa9Yu5m7^4Cl;Epg@4LB?iK?<=T$z^r7h{Jcg;_ie|n$vqv zoP_jF3UPqgQeqO5?!@W6_uhL??99LYPU7yqOY-T{XlLKN|DQMS?aVyg|G+)>646%P z8>TqD1>#JY-b!z4phkMTLhn%MY?$ikofx?jFW;rmxq3PurZ8Pl=-qgA7sTBVlMqv3 z5qCno2T<=-=$`46=Y0_GhqzavOZD`DFfF4CnDD^{`Vf5>vpxd#qps9%NpHK<>Q`VFYxg!(P0 z--h}fsNaS9J*eM@`U9vxg!&_>KZg1fs6U1H8N|;aegW}Ih+jec8saw)zlHc6#P1>g z0P#nNKSBH%;x7r9-y!}1@lUY*3s3)sc%YshtY-={^DNQ1M&XdcwM=!}Q${Mk zgK1A|zn+WcQ_1L1tk=wr9FHa^j4op$+H3vUr6uxab|RJ;OLrC=fI`x0?%X6ZXbD@MeHo>%_wav4V@M@V<0Gb-)-@xZ(@!wfwjMc* z!FkT0naIn++@Wp^&2@$n$F!_B(i5DNJ7x;5J82L@P0pn8z?ch^HjPowIu-;P_lI1E zj;2k`$KDmhPMYI#Fg>JRjLmm=0px?pD)(Y^f$LS_u*-Fuzr?xNqk>3y3*vngY=v+b}-8jV0CB^Riya-+&~ zcrMer!W`p%SqCJOXrp?xTT9-YGLlS73+=kQdgDXG2l{#jdiw;H=K(vdauY}7t0=S` z=-%7cGZf!HFcj~*B{n!D>yZO5pM6VG&*ih`gr3|4jQLD!E}w|ASEC#&=%5!?ZF1JtKL-3WCPJx!&jir^^J%}}2Xbqmz3^h}kWA%d@h zdNn;;rDuuYYoK0B&sFI;BKSI}*F$|C)El5~gB#C>8=dq*m0lo%x6_MNdXWgek?v6G zB_enSy-cN-ir}4idO4nMqF1PNS_F6D>6LiurdO-Ghi~Uzx)w1CIYoyj(m}2pxDb1c1gSbE`dJI z?&Q6s$Qe_HST{RS|1iiq>$#VD!;g> zYP-P`J8^hK%ju3`9U6%tQ#P_hGvl2Gt1(g&rjeKaz(H6V=s~9S6B}mQbhwz1HY@6S z<(v~)Lq6eF9j1;M*E?;p)k(@!{ls`mc2OKdlXJQCx5)-Aa>}4v-!gh;M9)gQQ!n&Z zZSzZ|UFtjwMJ!O}{7P#TJ#QQcR>AWT?E2?fG>C;=`{bm!^|;6eEGSPti&Y#w46s;* z(Py#iWPycMDt!yPa(Wi*dXA5InZY-T%t*uFFu_ZFU=>iT0FE_Rm%b-L$PmG%9y zi>`+?KiGMAZ>^GDv=?Y@t<8uRniT~z66iKOLu+oKYkpTygjW)zZZ9PN$WhkPavlpZ$-u~QJ&~8@gI3FpEKW?1k~{Po3ZWMfEg{-`s*xWe zrM+Xr6!Cd^B+DS_7#yNnxmOdlh{47sp(&cxz9ckBHFs0!3^i`6y-0P#Q>0uvFZK-- zkqdOKJn1rHIn80$HNR7kta*q7YmEU>t+cZUy{`QVZn%{9w=Gg10A#M`4r2}yw zw+J9&*Mu39wBX#ni?mRJvFMT*NJy#Pi$xvr9$B`$moCVe-XwovSKB^C&7c91^hbh< zor%a_I9%7>F-42*jTwh7Z%@)~Vk>QwNZ1CUmbg&TV9f-zbS5b2pB&pkSrTYFWl@E3 z>bMV4TQ(e7K1C}owbxA2$_un=l3GsFY{Y8y8LEe`Yd~O!td2rWjSE9m=(lud)se0B z$*yq7)|DfZ-mf~cD}A!{4q0nCGU+U5$!2j!bS+)sc1iWZe!~PdPHVtT|*mB{w2tw@u59 z1=+A(5_<1B5q*B~2+^#jNKqb?yI-ZicIE@{E&%T?4J=p5N`dVx2jD#bj+F+Mn`x!M zc18p6UI5=*8dxs6l>*z@3&8yV-d7q}?#-0~+nEZ$`vE*q8d$F3l>*yY3BU&c{E*VX za;vWt*v>!zJ_z8!(!lahf=YqyYy;pS06(-eu>8-VQeZo?0QeAqA66Rp4IXerzB_z* zb?uXM3u6`)eN6J7j!K=dlK`9;h7*TNJ0bt~5NdQ;yPei(dJE~bMn}*ZbwnOMNsl;9 XwV|`CNr751QG}k5?~OOFad%f)Us(vf(8j71QAh(AsJvW$;8QoMQ!bZ z-KRe?M`Oh!$&i1ZWoD;p004r14#4^d#Rc#XF?9M~Zu;cxM2`9a4Lj6z>kub$p++ z-7mwANbw#YKTu8+`9XPjue^JobbWt-hxh~1|AX@QAs>IZj345U1ZWz6)W;w5^TPqE z*sWbw7V2K&$yVKYvr6pA*8*3RB;b;@f`yjtu{U zNbQW&UXa>9f8lk4K)HJD;NX;WPuhdGV=98LVYGqOjNUdCIy3{J9Rw=~yQDiQAc~42XE2w0Fe^`;uy)z^b+Zrt0eE?cSFR3<3n+MJh7)K z-n*x%1@xPnIuG?nh5m|>+J%FG{|hv-d_mT$Tp<+ui(sg}Dq`xz=s|V_s zxF?!yvCJV-Fx54*&l^b$5a@{vq(?A$!qBW;x#E(iJuPcPHY#;Yi;h$dQa2m70cZ z%L+Yoh?x5EMsFC5^c2$5)nF8IhNC^vUaV}T|9LxHIQ40l8ZtS$PHk}ODI8CA(hNri z!celo_sj+d`CM^*+GQ9G)!8r^qh~n~a|a7@mF2r^&%`vtp{v|cOcU(BmS@8XgU|B} zM5EW^2bPDPN)yooaEN#oZ>d%xS}S9H1JOh>yel5>iAFFlJq=e2ALV9y*WO4%8e61M zHyaNat=40_D=Ev`)3CXk3nLC7|d%4VW+w^{UGE9pJ)B=Ac4W_YG-Ly2` zt})-5=0wXD!x4rp3oB}d+0U?S_HtFgpZDb#M$YO^F_GN8)3{mKo86s6jPZ zmYIw-qPB0R4Kah#15fb~@z15<%2r2U!udF6zLA$qFkrr*kl=eHdEGL<`*6gs~szpE9;wtmCg{7vc zF=B$4IYUz(cx^a4HO(Aal4eX~W&X5=q!p82b#`b#nlZ;Kg}5=t4K#Z~8;{ZrzBfIi zjb`=i(1&!xv{uxdx{!8>hy^86P4(w)2 z@k$4FtJT@if!$nV*&(alA|kAX?cNp7s$P<&*+G6Av_;tj_J!jY^!WsA8BV%2!V;u^6@ z8$UiX^wsHe^mz!EeQ1*QujuqFeO9Mu=xLokBgLoaDV;uzLc2oStZQ3P@Z0zjoxV@c z>slwXu5Hz@C)QdHFelK_`R$;qZ4=^OmfBU?cAs{&uI->d>Do2gwYqkl7Dm8mQ7~Nh z#x?8OS~|lUHg<;Fu4>=X>C<-VT149gHnlFqYMH&)G`EH~HE(W)ed;z0_Vfgu@qf_v z)iStSr=QW!nSvw6eD-C3l3ESEjU=& zrw?7*tHpfUK3%(BL!43trUlHL1<~$>m^q3C^M$P>pVq5ueOep?=|x@Z=ktKnmPo`C z!2_}6-e69o3$1cJ((CKUR zb)Pn%Ye{X8X{DvR99^3yc1z{$eO)+d#Rif%Ms%8IXiSf^W{efFW-!*%9Yshy+c_X; zjSzMWpRzotYx}hWQXmCU5?qMqLyQwndGJ7FAeh{nh#%43|CebmmxVT4rytUfboO$o&K_Ap|AkHH zxAc3RH7?PSBw?NYLVtyUEsYto4Yr1(>65h(QAV-tdo~lfy$_`acz3)<19Zii0SQvHbje& zC`!+$*g$Z>1wQQ-U3-Q0N}YYMj`k|4m2p7VUM;n9sU4P@&K0_LtJErag08(rY7?dQ zTB%iWwXVHRYLle)dZ|t38eMyX)TT)7HmObJX}b1CsnzmyUAtX-lg@QquWN7C-lFpi zsl8R+&V-}nSumpZHhB!frhE?1(fM3HPuJcqZRhh`og2i&^Ejk)qZIRbfzAuLN#{jU zTmU=sVkwsLg*q?em*{*Ezf|Ytyh7)dQmlfb;?Z{L|A__Lp^WhOPJ2d@^jsGVov!C z$%t6{lsX+40XQ5@dU1Ekay0T#liiX6@LcKU99M!>tx0^TNi?ZR@Tf_ss7WBGNtmZe zOs7fs7U)&E1Y;|mmKE+>UPQb^Z+I8>4r}Wjh}{So%FH#;tWJQ)=cEO&4;593Xm5Of zw7I9J&CZEqNv7#pdQ|&`k+%fnUC6E>KN}H$5Rgopm2kZ{`+(`1ZyQNe zIS4~odpm(Af+n*zaj_$^!|?e?8YTx3$?7c|J2tIv>uhVq){ad$i+uI~X!Kl1p2~1- zIh}-;WiGjZ?9`X*z;cyKw3IT*R98$=)nOb!k*mgzoO8l+)fF7BIUGBjbNt+q$2$WR zNINIfi`y{HZV2flt;iGtSvT9errWck5o^w3QeYd7!QEp6mDFvPMXY`+Bo`Hkba$K6 z6SKNEyxYj0Gv)A+Udz}CoJn@1LbF&NsVfp_rZ&+-=5JW#BV`F9UnZIOr6V(IOX0TY zOC$aLQAw#SaG5mD)tM1Hz&iDkj7=}z?AQKe+-QRDLoRVEGIXs*z8MXfvM?>mW*&-K zkxnGI@ogUFO$&%OLDo9Wj_FI(>3)8el9f*o)rscpj}4|_VAy1rb@FCvbe&W=gVi?^ zBvvp~j#+lEoXEo_)~6G*tVz|48?ctL%ijgO;6G+e6aT7 z4^C1jNe)x$7so60i?f#c#lZ`|2gxJnGh+Gzo)%LH{wF#=)Hwe*ap(kT+mBPpG4g~^ zcthGTDh=^5@=4)8s_4l0FPh_LVzgjatMO%_1;;25s`VVB@^s%XnSIYU`%bs|4wG(o z4=os`3Tq5bapss9X^OwgLywa8UMg1%4Uu2CD@B`Um?~G6tg5ejfNJHjewZdaK@(F{ z#dKKXp%;H;bgIr2g6XSZS|`s0&kOj9%cp6&$0O$hw0h_pHvCk;Gup~ChZ7nRnwvb% z1&5-;y3jC90^HU!H$tjUbL^8DErIMPesq|wsc+fNlqYEG6l$|5-`B0Npg<((mlFJ1K?#T1p^51<2PX$aGFW{NHpW|pdH`m-Ub z>=0{JFFQ^zQTAFwowUui*F-9jab!LYnbTcpa;9*6mZkSdM(<)4` z<(?s0yxc1)J3$viZI@Ix57QcSXsK>RrPe!4ZTPKTi(;5AJx-UMs`Zo%Q@c>D1@KZ- z{7;i!E2RCyv`+B6p6(-5p&W}^UJITYqQLUf1y9wMo|1u}FKhW>sC_LoaW$=`i|8aA z9^ubt)URQ+c~n+adWNR(iHzhXZ69%Es)pav66*}XHazraYWW7?PA^#A(14iIasUg*J zv}46~Xf#Aiuud~oYxFa;i)E6nTv;SUNjdVP^+DefN(k>mMSyDBvraZ8EWyrEIy~xVYUwEBR=P(CL z?!siT9Sq9aUV@?7z7b93a4Lp@GFGwp8nuHM8Ucw(H5po9$+VekxfKxNvzy!@#D%YK zgm2h1Ojm&J<_>Y=TN)q65QBUP@g!9LY&)d8K~MA=6FxdY7Tc9ayaJ~ADtMl)O!rXP zVeQ4C7ypJw94Ks;UK^T$mTgR?OSnoo@ShJMgD38(u|7rHHQKh|l-l*IN0|iksGZi^ zK4LQYD$Y}gL~?U-xJJ>tg1xm+urY(=N+Vcip=Xl}nUjtX?cvqf+;v zs!1#j6Cj4JgumIdO$qZ?EFx=hR8VPEz+Wc5^H+C7Y!4)@A5EuFOqHqUXagzmck=-u} zchD7ge?eS)ODGEWfGh67g1Go{Q55bWSKJ#5;^I4r16RD==+^H|xwx}ZbaP3e^^31E zMd7~875C)@aq$hvfh%5ebn@Pki#sPpuPCTzd~tH%j$Y5N%*CCXqE{7^7vHxWxTBZ% z)w#F`AP*Om7hltg!oAfM_caA^@$IfC+}FC|zOEoHJ{SHUa9>{#H^{S#!hM6Qytfs^ z#rIGXx7FPD7oN?&KTI)9pEo+mOZ-xmwY%d(t4Y1hq;8%o5kp8?N{&?$$7Dqnpl+n^ zZcj%KZshUxwkV~&$yI4@c1qoXs|m=p{u*oYdW7mlkgQ{}IRKv!WE{5*VfEJx-Ba7Xz-lnXsK^xF>n<%9ML{p01X#m#}VzJ0%*8#JC0}{ zDS(Eny(XF*y5;>6pZAXThD}VyJ&CKXqJ2E{6KU`KjZUb1~G9=BJM9 z)5TDKBtLcB%Pxlc$MaLih3{ghKboI9Zju*6{aAkLxT0PR_2K-~areC#>c{g_$EEsW zs6UpUI&SM1Lp_y`x`*R-JhlyfMv~Pl8c!l3^IG4zKcPP2;UhS{ayFjCB`kdAj5XFT zQD5%TpFDqo>WQ>Z3sA|VGq^l;n(8z1eID+&L$Xl=;uF>w0B^AU_UHgFOcA~jjsY-X zhf1RZT$&<$EE@yhz}Nxtm23=vNjqQ~orDWhgwJDR02~}UAij%@0dT(^q>WC(Md}05 z7yu90aoXqrFHm2G#sGNG4xUB_*rY!BjREk`*a7jaZw!Dpj(y?dBmEcvZ?a>y%gx(6 zk__;E(qrD$3EFpc(s!DW((g3xG&wHF>7>ckCB9j%E@k=8m)W6PCWt=|2vXW3gS^}Y z++2y)`1137F5UYU{v z@<@UV_{I?>xz$CI*Ng!K`R>tyyw(o#G9@X^BMI`oSBxmh>s%yxy&daig81@)AiKMH zM36VQfZS#WWtkx5c|bnNv}r_;H@bk_J_Znc3>Y2Ao5rvh@$GCBi*aJJ{KZe4GUcki zTu#yOTN-LSPLHdra(Iuw6KcLs-=sTECndNfyvDye;PU#E^&0=kfXnMABwoaS{{tNA B=Slzo literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynEnumImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynEnumImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..ff66d8628bf67569adb526c87a64fd1c49df7b84 GIT binary patch literal 9838 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 Pja`fvSEc*i?o9MQFqw}J literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynExceptImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynExceptImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..d277c59455580bd0224975bca89a688abc801553 GIT binary patch literal 2369 zcmcImSyS6q7(JK8*9egY5(uG9;*=)w0#WzPDXp=c;KX1G4vo`A6_#)W))HAJ_@}gg zpf7!BW-|6nnJI65=x^$@{jR(On?n20j>p%wbiVVQZpAyo6P(iEjmAvd-~& z7#k9%vBa?{E)~V`P#jyr9huJJ3*qAtM~NYH$FxmPj(}alGwaMQ_+C zyP;%)kGopgcf3ZiD9P~l`e0Tt7f zv5P&18~yy5r zknkSfm*K!A$^8_C<@?!mQC%w()$F6(W|3jCJs=U?sQI4LF!b9D^QVqdyN+UvWITl@ zqXu6_9Tge-cqZcj)w9g0n)R|T%&G9FI-$}Wn^#K10P@(tlK%bx$(H)C|5`V{42#_x zCz_y}dx2dwYnJAhpZptq&JHGWORLtYGpD2ZU2R`es+wI~)Y z3~LZkS@)E5X5)CF_PR73K~aFH7Rgc1T->b6!hRG*?`nC;C(dpC9S zlw=q(sr}9mGSI#?p4PQ$Z6MOZ_AU)YGWIywNHp*B-8{F6dn0{(K53Z+^W4)+;(ATU zz=&+jQg_;mn;|y1w)NBYJM9)rrAGk6YlAk&I){Rk$YI0oBqJm?MbQZs(m>8%dP+N% z>(poowYOSr&ve^W#&vowU84si5T-{V?GrG(PQNZ-m|g&nCl*>@&jlg?%y$4;jM58u zl>m#EM_L$)H!=J@CJr%Dni_2(bR>)z-k@_9>`%;Ll;Z}+O^#a}QI1$ZNt>%fnZyvi z1mz3xCc^YF)`Zl=_>cKROq5zUcSKNN5>t>n)FH49j)g$mVuxs^qfP2+d!?D$dUYJuq zKwj+zDr8-FPGDdh=X&9C46RYPVY=}FKJ0Ln0&Tz&QC<8_lwi6vHPgbSqeIM==;CF1 o&(T|CcC1DH6;CwDGo|@gNaCZ3tBIe;Rl8hc7@GVYajF*Z7s*Xm(f|Me literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynFixedImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynFixedImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..55a90cd28cfbcc283a05548aae76f2608702c37d GIT binary patch literal 9638 zcmcIo2Y6h?5uUM6dZ+WcNS45|F_y8xr<3u~48b-<%~(dVjHMW4lU$xoPx6`5owz%> zP!dW4DG)*mU{VNaPJ$^0tOHCiq>+$Ldhb1?_x{hmazzUy-Wcbtwh50mr)pdZ=BYXzG zK!nb;c#XwtBQ%%SMQ9$MCG4{;J}1oQMyQd`64E-0+r!)up#|=5J=ke+SD3pav>1cD zp3e*OhC1%yjUslwsOb%JpU9j)i#Ne0OxbVo<_NX&1r~3aMQuC~0c|kMFSK}Tm@f?T zMKZA3;vrFcfhgG);q82}#V?X4SlAi-Vu6JGe2K+&gx0x64Tm`?>mIS#5y4Sm#KJrl z<{d&BmWL^UodTB#qy@$WG6GqF34u!masqjQg21G}E`i+wdj$3hTqbb2z!d^l3cOU{ zWdc_TTrF^oz_kJ|7kGuhbpqE5yi(v*0?K7rc>-YoDIfwv00P2diJw+q}U@D71@3cO3;-2(3s*e~#2f%gf#U*Il* z0|Ivo+#_(WzP1rIGbrhwAabU3#pO#U{6;zH@q`GvNzM7*&FZDAM5R8A)DLVGd_`CTTM)6bB;*$ zZ|PXux|J!^nH|BL`Tvc^-fV6xo*f^HcS3)A944);8XDX?;mDMF@;(2TS%WE_YwFnp z1v`03pFJ^X52qb$1dAWA_(6*gVVg76jX4EB9*xmfHzH{}GZr5x^Q+7Ag%&5-QWOf4c zFD_F(-DGicDxa{K>XVbXoRcXelG*WzYzE(u?iptfKA;a%)aIPssSLsq$~(>__=xt% z@Z5k8$w`p{y@yFjPT0e+3j2$xGA;UtcRI-e7HD~y!?eK9n^ZPF;N((vI(3=E7^GQ3 z!k%?~rA4%B_4sbgfE4qRaCdTtozo_CGR+pb$#ga|CjWYLqi0xYP}?afkkngS%jBF< z2fj!mEyS$Kv8$PgWW6_{4MK{Dv}>1^oy_k*R%_V- zkLitQrn@e^(Xz>c;}SbO-wbE7X~#x-&P`?VPOjYV6?@GyU9uzMF>#7AHG3Pf+Vw)5 z;}HY@`;s~Y{?i}|74r?ayI<5OPmLF#P_$D<=Xs-LK?+4T$`gMjr9k;3rC2Sh-de$q zE!SNZOsvxwOQFy9Oz{Ki|Mp`VigpRjUxydhP;`Cys25w=8sN_IRJu|275ae=MF+}7 zypn92s&KU!o$b^#;+aFAXELOM9&}?4JTvN?iw(Xh?T0tv%ol>rE*xaDVE@+6N^m zx60W?62?@9_p;IyjO>!H_#h# zP@BprdG=dHH`D7ao>KH)dY_Eks<_AxF)gnuuXNQkSxBYh>!niLkWG&`ImHk2BO>*T zqIc1|6(1I5hZH|bUse18evIk(%FXHT=FKQQ>@g?aVUL`zUqA~hc^&OtiNT@G-JShi z-HMOU9Wu+06hF>S;LTad?eEyw-8q=p)IXT$zNlwl5W4~|MZ9cVJTEvStC)_i6p{%x zw{L0h13NRBPPe#cM2oIK6@QR0&xyXsw0Ep;eoqGc)W}x1Y@LhMwCF;%C7-mVruvZL z5A#QmywwI-{87bE^2e|&{UDOruijwDX0ajzdOm$`)E|F;;8xr5f}S z#PxywSeI{tTPyXoZyDIo-mCc2{2A1nia$$e02Z0@4T_|Mm*jj#@#pwyMem{gaA(Ol z_jRQB^ZW&-&JnkuaLs8M$vXL#3=G9qDcG4p$}Tv8$xB;?C-J0^Z;=DGC6#w0w^q?1 z@!N4#_CPbNk@i9_SewOP3&5YlbC&+o>KG)`lO;y34B^M z?`P<@jY#E+#^qTP1Nl+bccS~KVwN?YXdx=6^3O$_MwJhslxcnv^B0^%N?Ic+ zPhkzy3De5hz~J&83N_1kV%W|*UL~=hs$TM^mexd{eh?Vd-MBu)P|xep{!!_tHuiX( z;Pl=+T*$hcQBN2gy-bX^ca5iOS>@^igUdTO$m@cc~tc(=tQ4`SfbTL zb6c21zo|O=`!@G>4|aFq1;Nx(wfJfQIN@|dC)@LUVq!~VTsJgwoWN**p_Mydhcki> zFa@XTe(X64Uh&&_0=FADj-Trm154f z-)O+9y79!Qd&9!iT5VbBq^#T!YiTL9(@ivk+URwJBSA_J;8u*FO2NpR@M{Ux&`f;J zkF~8V62}hHjG;M2nt6yq2Qf?(0{Iq?ybfdwV<&-p;uO_1hl*5-FV>ox!xSEhJxFy$ zima(^u5GTFqFJ%#+6PHhXu8$YWJ6OeG_{E)ttM6{;!`yHA({h`{nQ{z=M9Ob`XV(P zISA1@T0o0vF23Cc;bUmVzwoohqJ0+KZqb`9dJF!DEqd!5aPYSErdx$IiU*o8$NYUX z`!F>QH8d6Js3RB%P0`W!;i0P(#Cm+iOB#L>4_yV>5I!%QCfoL;Xj(AT&|IX2N5pe& zMOxIia*B@e)^djs77sNXTcjmN_S3vgvLZN4FDSMW>kJ*hWKlYoI)i1+rJDNLf2S6U z-qC@TD0(MmuZ10R*en7G81Xw1qTUh4&zLjm_`IY64XL*ZzGELAk12T1O?#f%- zD6`a~9wm<0h_e>D3$EABS~~N7I<82|#9_-TywwEq`{^#vTeo`oGzRBD63#i^l{`Tt z;d@tIQ<=KDwufm2(-cK-r&))ob*Mlcg zP#zTXDGj~g1?#U)|%U53q z2O}pdjl~|AqEq&hf^CbjfYWrko<-fXfll=-icn2MV-u{oFI*MUgLFSQ64D;ep3};m zRX+RbDLVaeI-|EOHbpO(qBCL4n!XrPZf)DNs60RqdTOuM`9qWnmib>rrDo=VwkN1< z9~}p?LXzl*Y28o|p(34yyq}`859k=3BZ0wM+&I)ysG+g`c=#T5o@dTc@V;bNBvzzz zV;r0iOhtOg;|#(RlBnkxJ#m=Y<+$m<|LP)j!W}RSdgOEYAzChU}XG3@8_4g^aH(Tq8fdF@g@dg&u4g)F273)vu3Q7O+r zM2YFmRZi>?jfBT2J`ImI>K%#4C`-M^4VX?Wt&J@z()qqPDprGdum2detij5@l9k?( zf|*e98mOC0RMf==YQKq!>e)cuY@(vZHc&4xQBjE-s9W@^%eNJlg?c@px(O$78n|2B zUqwY#Z=epEsHpt|YAO0JG}(#{!9d+=qN0y5P%ku5(QO3O(y}hP*RU+~BmuQ#>(D(0 zDmoVfb(_hr=x+?v?ItR^AOrPc6BWIZf%+m76&;m<`eG9meV2inFj3K+8K^HYQPIPB z)Y8_(Sz)^`)3Wz9vJkDFi92lKq9ZhMlO`@2M-z9%#6^E;;yNZS+R$lS96O^XF1po# z>((N*u_Z+sGjY+>nz%bmT=c#H*FXB;-;{}q7TLtzY2u=jHgPX8anW!GTz_pVij+2S z(U%8Y-`-_K8aHv#zE9)AzZnx3UA~E%HF0qnVB$`gxVSSgaW6G-akXIL=1g4NK$y6B z6Bid1CT_vN#Vgh?PRn1UllpX=*Dg05o~rW4y9|e?+=m#byG>Nwni!~iOjO*h7^r(q zRNTNAsF#_jxTi5tFE>$fn`59}VWQ&B$3VT(M8(aJf%;Mt757I5>dQ=2+%g%cSDC1| zi!xBJHc@e7Ii|a)b_eK*Jw~&VF__Z#T F{tXQaWz_%x literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynSequenceImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynSequenceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..866706c5e3148156d310f07e6b6c6ed71c51db96 GIT binary patch literal 9308 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 b*kt`OLR9E_g)VO$>Aj-)S-MgZ5dM4tR8m#d literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynSingleton.class b/source/.class/es/tid/TIDorbj/dynAny/DynSingleton.class new file mode 100644 index 0000000000000000000000000000000000000000..b104ff748e2daa6e170830c4b6906d52a580af46 GIT binary patch literal 4043 zcmb`I`%>FR6vjV+vB8*Y0trb&XxgUc7Nu#LUP#m83ymoR8oM;mizCaz2yDrfWx#op zzC-WRDKpJX^M4tYw3E_vjq1%rnJdUqvHQCmSaxRlHt-`)s zY#7T%LrytAD~f8HRwGlXmX|s~)wDF0wed8uG`l4slr)Q)gya9G;+kodWV2F|lT?3M z&NZqUtG{$woOLj)8#T?c^99o^Yl=ZF#dladnm$&ws;!$wEdonIjB}=HYc``2j2h%o zbx$EC6i>3Ci`Mo`%R#d&I>gaB54)*l(2)^%n~1+O~P6KrNB4J5=?_G+5GnChCpP?noG5 zF>V-&Bqa2+NOQ9kNOFWbf+ATm9z$G{IDAtpdYa)pcZXA+TZ5ji@Lbmx6iV@stLNqT zY_})Knrum*9j+4Aew6q|$=eKVS>ak2>3M;(EgMijt9&h=1)NRr`8yhV!;i3~oOw=k zt-?l6r;icd)NlBx?y*a7>Nyi<`wJX7@3}SYcELOqMpUy>H4V+6VVZS=Y%!Fz74=|U zspgn>=uFl$?Vx$A$p~RfJJOA!1k!*`LdejLDQ8TrTXX=e#)9{(q%exDn!jDlo}~@ zeq$MfrluFSlyaT;7;|5%&%sLG+p`3T#O}~4N#asBbdl4D?0StVBsbPK*V4IkiWH@q6Gd-` zqtm!4T6IPoeI2(%tGFN%JE4>`)tA>FKJ(a~mcGNk1h9{h;p`{oau z%x+^xnEjfp)_f-}&Jkt9+`cE+Ms)s2f;T!tyg)~8bev9vX zne1W-&U8+1TV@{5dFDJ{b24yE_D*d}ROo&XX*Sf=Y{8TIK40=?;F2#9-5wu2LF`rg M+U)KL(b`eqKb7{-xBvhE literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynStructBase.class b/source/.class/es/tid/TIDorbj/dynAny/DynStructBase.class new file mode 100644 index 0000000000000000000000000000000000000000..98507fd817cdfa5cf32bdaf069d7f4a2cbe229f0 GIT binary patch literal 4377 zcmcIn`F9gl6#ibDcG55uQc6oHEh$AvH&PZssi57^Ko@KyT2SLO8A>3V$pl;XeZzeR z7ZjJe3ku0Oa-{z35B?4Q9e4!qoy;VeH06K?PtKWn^WJ^;e)s$CyEFOY(ytc)Y(mu4@o#I z;fMpv5O$yzDo;lE5|t2hpn|6xczPS+5*~D*2?>rvGh30ApgGV2za1&QALYwKc1-g< zEMcaK%pc~^fEHUMYMW#Ic!gkvP5!1VuuD+l6A;FbkaiG&)}{1G)WsV4kUB|=2iy4!{hD@PSiScy(~#q#MS}t>XtR|eU;iFj=@D2orJ9jw`wi~41360)Rf&WG ztnUb6*r$Y3>Ru(3ps=q+Ud z*U3*oc#EI)3nM9T!%&tIl>S&G9*Yv;td2mV+dGdevvy?Mgq!(76daTB2HuqM7TzY_ zir6(a?4>GGrc_U#5@fmsR$A@)dI$WziM@mUqXUEN_8l4T;%y%F%Xkm(3p86djP~sw z?DzRcMt%Old%WX50cSQNS5QrAiP(%9+`!vE5a=>@l7T6snSBp7QaEENq>8P!?Myd%EBv60>(86Si4 z`~-K)I0^67VB`qHp=3nS0*7RLiq8aGrt^ZtEcM9*oRaZ5-VvxTJ~Mr(P&lY2NM|E` zS2V@P%oRImq@UdGlJNz;^&IL)Nn``v#D?=c-{fLVb=8Xkn)ZV@(qxpD>-36&Z!eH|$AxXR6~tHj>< zV2uMvm{*m`CBIxj-6=)2x2!~bfwB-qtSLps(qeiDqWWM;2~*w{HAW{7)4A?xBb8)+ zmE`HEFL;6E+2N$?3wgA>bean(EvVL99d?(XCzsm%4IHiU3hRWW5VQr$>H_?wJlk66 z^KKh`$pQ}8sHfZvf$j9P4CV9#r1p-^48$3>&<%PFgD`!JR?^%SGU#fsWl+}MU`wO? z9Bi{#yuIQ)Dkn0K=GxD~b^?pq%g(_*3wt{m*w2uUD%4;(`4G5;yfnjhnI9$Wkg!w2 ztrBjN&`tXL=0Q0Z`X6Ty0)Tgn6@iZ`ul^Hb7nGb}iF^g#<{jXt68*!@@ z(+FW2nvZEW_88Kff<#gQ{`r_PSj9+fzoBWkd}k96PocT9={%Yy=)u`UM0GT6%Ak4t z*>W*^`LE6_ZCRMB8K#9gr>;u{_&%0{*@6n^B~(iwn8V^C)?6lJR75-UO46|lj9@g& zp{S!g8SkI-@uuPGxWFh+qJ!x=j~1%uH8rhitmWx6Zm3yD@HoFj{Fq+ z2mIoPI#a_;Gt+$ROn+3{_k=(LBle3OW?#xu}$32ew41wD%yXDi(YG^pU(Fx<-PH}xar;H9 z(@sw-8jfoUtMX0i<(!7e(0w}|OOD%A9jmG4$bUwql+sg2)qckmArFFww>;hW zVO{T3^?KVRd^n064>%rjln7IXr~gY{<0RgcoMbqiKEt_Ke5^(A>Q>A67wI&EUu$(W zona|f+R=Z~)wXUo)h*9$+0Ar(TfsT32oa@<6s%)IK^YZ>OOr^AGO7?Bdec<1dgEcs zZZMpg)XQe_TD4Xwgn8_(Br)PMAPYNF4D+P~HQ?QM%6?`MaxA>0X)MQ|hX(h9nStn>V zdhK?Uq7f!h*L-5Srfm@EE*A5p6tQJhSWaR)jF`HvO}Bke;-j-rg&&Tw+_Z1k=Sie*}L)71>8XL}63SiDFcEZSQg z$2M(mbi?SJZmBnq(QVHqusn^pU_ND-x3uxIF|h3!v?JS)r9Byr0fzYW5NOPr7DQ)D zqk%#QPTL%*oLDbYB7Ix)sGAv1j~iqN#HeV}qlD}9B8Q3r(Na~19^egaofCj`Ti$R) z9G`9~8iVGKJ-ywXs=Zv_F%6Ge4(Dl>o&}Xa^V$!I$h|_l_h@$lKKcPXk-Rzpdr3wck(Sh-hc53C q%CC2s{6hp-szpu?aB4ppIlYVJXYfle63GG1ycoOm!?zfgfqwuQ#oGh` literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynUnionImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynUnionImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..ddbf038499f88fbe3520423b8742bd6a9e9f47f8 GIT binary patch literal 18619 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 literal 0 HcmV?d00001 diff --git a/source/.class/es/tid/TIDorbj/dynAny/DynValueImpl.class b/source/.class/es/tid/TIDorbj/dynAny/DynValueImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..91c471d984c40ab99358add2bef0870404653671 GIT binary patch literal 2092 zcmcIlYjYA;7=BKG9M~+;piyIt#iUj)nvK@pg4%LZQ3y1lX|R{=0vk#SyL4F``6>1f z_{9%(M#D@qV?H|5AJz6f+zd3>FLs!HIp^K?`n;F@^RGW%1Gs^zgeBY*;xi9s z@j1sA9P1LM5fS%W;`MEDy2J6M8(&G7L6jpVSaCrTf+PjGD-pRZ$UTnxZlom4BkINj z2@jDLhB6!*5*88R$a3Turf*e^s(pvyeju$k6}wti@~MPr759{K+lU%%CDHx6tCeii zYNzUrT4Y?XWLmn=%5KIY!EFX-+$`%1&G%z5ZCVw@tXGsc*^ep|Qe=#kZ#Q(|vg_Qt zWoxBhGFl_A6>B=-#PK!9CdU>>p0H(j^1sA24B}nEIZI}v&9D>*4y6cQtzIp?MLNRZ zQmai>W0()5_q4~FQqzozvSnLUqY?=|V&L@JXw_;Aj)1t&G<93G&9^)%g52jl)@m(X z#s}~VvP>Yz_y*fDzQqp1KRF{5{g%F~Te?vqjg?d)y-xkL zDl|u{(RH|feRYjvS4IUt%eaQsf1$CFRa2QcU+sXspd-2h%YA_w zT=Yo*Zj!*Y1!o6Sp#|qY9IxPf2JgD-0MmsI_+jWJoWEfvH1!JZXK;r|!2N=3c;KUt zfs0NnWaT29e~T-}ha8tVKH|8-5dh-|dS;zn&!I`4J@46b;HYPYFs}AJCn@78igt~X zlAgkQfSH0%?!bF^fY|~uPtbFco;iAa9h^#s!uvQK{+)Dsc{;%6=txuBH+hdxKHg;b zjc_nu@SW-4>|xk literal 0 HcmV?d00001 diff --git a/source/.cvsignore b/source/.cvsignore new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/source/.cvsignore @@ -0,0 +1 @@ +.class diff --git a/source/.svn/all-wcprops b/source/.svn/all-wcprops new file mode 100644 index 0000000..e346dc7 --- /dev/null +++ b/source/.svn/all-wcprops @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 54 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source +END +properties.xml +K 25 +svn:wc:ra_dav:version-url +V 69 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/properties.xml +END +.cvsignore +K 25 +svn:wc:ra_dav:version-url +V 65 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/.cvsignore +END +build.xml +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/build.xml +END diff --git a/source/.svn/dir-prop-base b/source/.svn/dir-prop-base new file mode 100644 index 0000000..b15a857 --- /dev/null +++ b/source/.svn/dir-prop-base @@ -0,0 +1,5 @@ +K 10 +svn:ignore +V 6 +.class +END diff --git a/source/.svn/entries b/source/.svn/entries new file mode 100644 index 0000000..0d974c2 --- /dev/null +++ b/source/.svn/entries @@ -0,0 +1,133 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +es +dir + +properties.xml +file + + + + +2009-05-27T12:24:02.000000Z +393940abe72f9ac0293352812327df25 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1670 + +.cvsignore +file + + + + +2009-05-27T12:24:02.000000Z +9139eabf1b8942aaa41f16fe329f2507 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7 + +build.xml +file + + + + +2009-05-27T12:24:02.000000Z +44e25077210f3da89335608b150d9e6c +2008-02-25T10:57:48.454081Z +212 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2446 + diff --git a/source/.svn/prop-base/.cvsignore.svn-base b/source/.svn/prop-base/.cvsignore.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/.svn/prop-base/.cvsignore.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/.svn/prop-base/build.xml.svn-base b/source/.svn/prop-base/build.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/.svn/prop-base/build.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/.svn/prop-base/properties.xml.svn-base b/source/.svn/prop-base/properties.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/.svn/prop-base/properties.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/.svn/text-base/.cvsignore.svn-base b/source/.svn/text-base/.cvsignore.svn-base new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/source/.svn/text-base/.cvsignore.svn-base @@ -0,0 +1 @@ +.class diff --git a/source/.svn/text-base/build.xml.svn-base b/source/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..e9b78e8 --- /dev/null +++ b/source/.svn/text-base/build.xml.svn-base @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/.svn/text-base/properties.xml.svn-base b/source/.svn/text-base/properties.xml.svn-base new file mode 100644 index 0000000..95cf74f --- /dev/null +++ b/source/.svn/text-base/properties.xml.svn-base @@ -0,0 +1,51 @@ + + + + + + + + + + \ No newline at end of file diff --git a/source/build.xml b/source/build.xml new file mode 100644 index 0000000..8ed6920 --- /dev/null +++ b/source/build.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/es/.svn/all-wcprops b/source/es/.svn/all-wcprops new file mode 100644 index 0000000..bd97c56 --- /dev/null +++ b/source/es/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 57 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es +END diff --git a/source/es/.svn/entries b/source/es/.svn/entries new file mode 100644 index 0000000..98c9d68 --- /dev/null +++ b/source/es/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +tid +dir + diff --git a/source/es/tid/.svn/all-wcprops b/source/es/tid/.svn/all-wcprops new file mode 100644 index 0000000..8b8a6e4 --- /dev/null +++ b/source/es/tid/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 61 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid +END diff --git a/source/es/tid/.svn/entries b/source/es/tid/.svn/entries new file mode 100644 index 0000000..05e6d76 --- /dev/null +++ b/source/es/tid/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +PortableServer +dir + +TIDorbj +dir + diff --git a/source/es/tid/PortableServer/.svn/all-wcprops b/source/es/tid/PortableServer/.svn/all-wcprops new file mode 100644 index 0000000..4d69121 --- /dev/null +++ b/source/es/tid/PortableServer/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/PortableServer +END +POAManager.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/PortableServer/POAManager.java +END diff --git a/source/es/tid/PortableServer/.svn/entries b/source/es/tid/PortableServer/.svn/entries new file mode 100644 index 0000000..2b663db --- /dev/null +++ b/source/es/tid/PortableServer/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/PortableServer +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +POAManager.java +file + + + + +2009-05-27T12:24:00.000000Z +8c2bbb8d50defa401a0e8325bdacd411 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3100 + diff --git a/source/es/tid/PortableServer/.svn/prop-base/POAManager.java.svn-base b/source/es/tid/PortableServer/.svn/prop-base/POAManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/PortableServer/.svn/prop-base/POAManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/PortableServer/.svn/text-base/POAManager.java.svn-base b/source/es/tid/PortableServer/.svn/text-base/POAManager.java.svn-base new file mode 100644 index 0000000..bde49ae --- /dev/null +++ b/source/es/tid/PortableServer/.svn/text-base/POAManager.java.svn-base @@ -0,0 +1,115 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.PortableServer; + +/** + * TIDorbj POAManager extended interface. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public interface POAManager + extends org.omg.PortableServer.POAManager +{ + + /** + * Sets the mininum number of execution threads + */ + void set_min_threads(int min_threads); + + /** + * Sets the maximun number of execution threads + */ + void set_max_threads(int max_threads); + + /** + * Sets the maximun number of request queued in the POAManager + */ + void set_max_queued_requests(int max_queued_requests); + + /** + * Sets the maximun time an execution thread is inactive. + */ + void set_starving_time(int millisecs); + + /** + * Sets the queue order, see Messaging module in CORBA specification + */ + + void set_queue_order(short order); + + /** + * @return maximun number of request queued in the POAManager + */ + int get_max_queued_requests(); + + /** + * @return the maximun number of execution threads + */ + int get_max_threads(); + + /** + * @return the mininum number of execution threads + */ + int get_min_threads(); + + /** + * @return the maximun time an execution thread is inactive. + */ + int get_starving_time(); + + /** + * @return the state of the POA manager. + */ + org.omg.PortableServer.POAManagerPackage.State get_state(); + + + /** + * + * @return the queue order used defined as vaulue of the Messaging policy + * + */ + + short get_queue_order(); + +} \ No newline at end of file diff --git a/source/es/tid/PortableServer/POAManager.java b/source/es/tid/PortableServer/POAManager.java new file mode 100644 index 0000000..76af598 --- /dev/null +++ b/source/es/tid/PortableServer/POAManager.java @@ -0,0 +1,115 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.PortableServer; + +/** + * TIDorbj POAManager extended interface. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public interface POAManager + extends org.omg.PortableServer.POAManager +{ + + /** + * Sets the mininum number of execution threads + */ + void set_min_threads(int min_threads); + + /** + * Sets the maximun number of execution threads + */ + void set_max_threads(int max_threads); + + /** + * Sets the maximun number of request queued in the POAManager + */ + void set_max_queued_requests(int max_queued_requests); + + /** + * Sets the maximun time an execution thread is inactive. + */ + void set_starving_time(int millisecs); + + /** + * Sets the queue order, see Messaging module in CORBA specification + */ + + void set_queue_order(short order); + + /** + * @return maximun number of request queued in the POAManager + */ + int get_max_queued_requests(); + + /** + * @return the maximun number of execution threads + */ + int get_max_threads(); + + /** + * @return the mininum number of execution threads + */ + int get_min_threads(); + + /** + * @return the maximun time an execution thread is inactive. + */ + int get_starving_time(); + + /** + * @return the state of the POA manager. + */ + org.omg.PortableServer.POAManagerPackage.State get_state(); + + + /** + * + * @return the queue order used defined as vaulue of the Messaging policy + * + */ + + short get_queue_order(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/.svn/all-wcprops b/source/es/tid/TIDorbj/.svn/all-wcprops new file mode 100644 index 0000000..b9f0783 --- /dev/null +++ b/source/es/tid/TIDorbj/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 69 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj +END diff --git a/source/es/tid/TIDorbj/.svn/entries b/source/es/tid/TIDorbj/.svn/entries new file mode 100644 index 0000000..52a852c --- /dev/null +++ b/source/es/tid/TIDorbj/.svn/entries @@ -0,0 +1,34 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +dynAny +dir + +core +dir + diff --git a/source/es/tid/TIDorbj/core/.svn/all-wcprops b/source/es/tid/TIDorbj/core/.svn/all-wcprops new file mode 100644 index 0000000..b9d631a --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/all-wcprops @@ -0,0 +1,155 @@ +K 25 +svn:wc:ra_dav:version-url +V 74 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core +END +CodecImpl.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/CodecImpl.java +END +ServerRequestImpl.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ServerRequestImpl.java +END +NVListImpl.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/NVListImpl.java +END +ContextListImpl.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ContextListImpl.java +END +NamedValueImpl.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/NamedValueImpl.java +END +ShutdownThread.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ShutdownThread.java +END +SingletonORB.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/SingletonORB.java +END +ORBComponent.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ORBComponent.java +END +ContextImpl.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ContextImpl.java +END +AnyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/AnyImpl.java +END +BidirectionalPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/BidirectionalPolicyImpl.java +END +RequestImpl.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/RequestImpl.java +END +ExceptionListImpl.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ExceptionListImpl.java +END +ProcessingState.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ProcessingState.java +END +ForwardRequest.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ForwardRequest.java +END +ObjectKey.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ObjectKey.java +END +TIDORB.java +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/TIDORB.java +END +StreamRequestImpl.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/StreamRequestImpl.java +END +ORBServices.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ORBServices.java +END +PseudoObject.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/PseudoObject.java +END +EnvironmentImpl.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/EnvironmentImpl.java +END +CodecFactoryImpl.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/CodecFactoryImpl.java +END +ObjectImpl.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ObjectImpl.java +END +RequestCounter.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/RequestCounter.java +END +ConfORB.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ConfORB.java +END diff --git a/source/es/tid/TIDorbj/core/.svn/entries b/source/es/tid/TIDorbj/core/.svn/entries new file mode 100644 index 0000000..ea84545 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/entries @@ -0,0 +1,920 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + + + + + + + + +() + +ShutdownThread.java +file + + + + +2009-05-27T12:24:02.000000Z +b1bec33a48e4b2301c8976e6416b9125 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1778 + +NamedValueImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +885ed7fb8c64a3039fc3c9e0137c90f0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3102 + +SingletonORB.java +file + + + + +2009-05-27T12:24:02.000000Z +9f46431d3368bbbb1ee078ee86196d40 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +12370 + +BidirectionalPolicyImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +7f8607c6b701ebbdccc945db0430202e +2007-07-05T05:42:09.781394Z +82 +avega +has-props + + + + + + + + + + + + + + + + + + + + +4699 + +ExceptionListImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +bc4e79d231e6d5b55e0cfdb92005e286 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2965 + +ForwardRequest.java +file + + + + +2009-05-27T12:24:02.000000Z +e81cfbc16b20b521d0a99cc3157ea707 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1771 + +ObjectKey.java +file + + + + +2009-05-27T12:24:02.000000Z +1095809f2ea58393b17a6e487c7a5f7d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3941 + +TIDORB.java +file +478 + + + +2011-04-29T14:42:47.000000Z +6b766501fff9807d978117b9a7b8ec37 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +50308 + +StreamRequestImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +f6c33b15e2de57994ff7198ba9d430bf +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3573 + +PseudoObject.java +file + + + + +2009-05-27T12:24:02.000000Z +d691730889b4f0d4fafef5cf6a7bf72e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5033 + +EnvironmentImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +2b3646a22da15d4a7fa2b7926bbcc7e5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2119 + +CodecFactoryImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +8a4dcfcbbb716bc89d46f0840182574e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3125 + +messaging +dir + +poa +dir + +CodecImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +1103fbbab002a64513b6240944592705 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5236 + +ziop +dir + +NVListImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +fae04b462985efdf6b902ab160bae76e +2006-02-22T12:30:10.000000Z +14 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +9733 + +ServerRequestImpl.java +file + + + + +2009-05-27T14:10:33.000000Z +d8a4a4bb0a3afa19b259f0f75a3b942a +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +6935 + +ContextListImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +ce69d348cbdb04873ec790203702266f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2490 + +ORBComponent.java +file + + + + +2009-05-27T12:24:02.000000Z +cffb7894dc5ca0c127ec4f010b709cba +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1967 + +ContextImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +3d83ee7ea22c2283c9426486d7650c0e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9207 + +iop +dir + +AnyImpl.java +file + + + + +2010-04-28T10:47:58.000000Z +18a2d815069e4e7fb7c1715b6361713f +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +40740 + +RequestImpl.java +file + + + + +2010-04-28T10:50:56.000000Z +3991d7cac7ca57cfa5197a0822609de8 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +14536 + +comm +dir + +ProcessingState.java +file + + + + +2009-05-27T12:24:02.000000Z +06a7b50094b4510553ef652595c0b06a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3441 + +policy +dir + +compression +dir + +ORBServices.java +file + + + + +2009-05-27T14:10:33.000000Z +f2bb60f44d8943326e945aed53b5d568 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +12217 + +security +dir + +cdr +dir + +RequestCounter.java +file + + + + +2009-05-27T12:24:02.000000Z +2d44b656e3315aab5c4c25f72c37cdba +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +239 + +ConfORB.java +file +478 + + + +2011-04-29T14:42:47.000000Z +06e7509f06f0f61c4eeaf9877d1c7381 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +48556 + +ObjectImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +ce18d6b788cd4cdd0af8baa788f3dc46 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2284 + +typecode +dir + +util +dir + diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/AnyImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/AnyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/AnyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/BidirectionalPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/BidirectionalPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/BidirectionalPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/CodecFactoryImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/CodecFactoryImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/CodecFactoryImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/CodecImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/CodecImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/CodecImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ConfORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ConfORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ConfORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ContextImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ContextImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ContextImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ContextListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ContextListImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ContextListImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/EnvironmentImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/EnvironmentImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/EnvironmentImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ExceptionListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ExceptionListImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ExceptionListImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ForwardRequest.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ForwardRequest.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ForwardRequest.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/NVListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/NVListImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/NVListImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/NamedValueImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/NamedValueImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/NamedValueImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ORBComponent.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ORBComponent.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ORBComponent.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ORBServices.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ORBServices.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ORBServices.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectKey.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectKey.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ObjectKey.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ProcessingState.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ProcessingState.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ProcessingState.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/PseudoObject.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/PseudoObject.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/PseudoObject.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/RequestCounter.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/RequestCounter.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/RequestCounter.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/RequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/RequestImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/RequestImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ServerRequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ServerRequestImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ServerRequestImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/ShutdownThread.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/ShutdownThread.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/ShutdownThread.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/SingletonORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/SingletonORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/SingletonORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/StreamRequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/StreamRequestImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/StreamRequestImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/prop-base/TIDORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/prop-base/TIDORB.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/prop-base/TIDORB.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/AnyImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/AnyImpl.java.svn-base new file mode 100644 index 0000000..0df3684 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/AnyImpl.java.svn-base @@ -0,0 +1,1282 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeDumper; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; +import es.tid.TIDorbj.core.util.AbstractInterfaceHolder; +import es.tid.TIDorbj.core.util.FixedHolder; +import es.tid.TIDorbj.core.util.StringHolder; +import es.tid.TIDorbj.core.util.ULongHolder; +import es.tid.TIDorbj.core.util.ULongLongHolder; +import es.tid.TIDorbj.core.util.UShortHolder; +import es.tid.TIDorbj.core.util.ValueHolder; +import es.tid.TIDorbj.core.util.WCharHolder; +import es.tid.TIDorbj.core.util.WStringHolder; + +/** + * TIDorb Any pseudobject implementation. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class AnyImpl extends es.tid.CORBA.Any +{ + + /** + * ORB where the any has been created. If null is a ORB + * singleton. + */ + + TIDORB m_orb; + + protected TypeCode m_type; + + protected CDRInputStream m_marshaled_value; + + protected org.omg.CORBA.portable.Streamable m_value; + + protected org.omg.CORBA.Any m_wrapped_any; + + /** + * The Streamable value has been inserted by the user with + * insert_Streamable() + */ + protected boolean m_user_value; + + public AnyImpl(TIDORB orb) + { + m_orb = orb; + m_type = TypeCodeFactory.tc_null; + if ((m_orb != null) && (m_orb.m_conf.exhaustive_equal)) { + ((es.tid.TIDorbj.core.typecode.TypeCodeImpl)m_type).setExhaustiveEqual(m_orb.m_conf.exhaustive_equal); + } + m_marshaled_value = null; + m_value = null; + m_user_value = false; + m_wrapped_any = null; + } + + private synchronized void reset_value() + { + m_value = null; + m_marshaled_value = null; + m_user_value = false; + m_wrapped_any = null; + } + + protected boolean hasStreamable() + { + return m_value != null; + } + + // asigns the new vaule and reads from the _marshaled value. + private void initValue(org.omg.CORBA.portable.Streamable holder) + { + if (m_marshaled_value != null) { + m_marshaled_value.rewind(); + m_value = holder; + m_value._read(m_marshaled_value); + } else { + throw new BAD_OPERATION("Any without value.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized boolean equal(org.omg.CORBA.Any a) + { + if (a == null) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + if (m_wrapped_any != null) { + return m_wrapped_any.equal(a); + } + + if (!m_type.equal(a.type())) { + return false; + } + + switch (m_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + return true; + case TCKind._tk_short: + return extract_short() == a.extract_short(); + case TCKind._tk_long: + return extract_long() == a.extract_long(); + case TCKind._tk_longlong: + return extract_longlong() == a.extract_longlong(); + case TCKind._tk_ushort: + return extract_ushort() == a.extract_ushort(); + case TCKind._tk_ulong: + return extract_ulong() == a.extract_ulong(); + case TCKind._tk_ulonglong: + return extract_longlong() == a.extract_longlong(); + case TCKind._tk_float: + return extract_float() == a.extract_float(); + case TCKind._tk_double: + return extract_double() == a.extract_double(); + case TCKind._tk_boolean: + return extract_boolean() == a.extract_boolean(); + case TCKind._tk_char: + return extract_char() == a.extract_char(); + case TCKind._tk_wchar: + return extract_wchar() == a.extract_wchar(); + case TCKind._tk_octet: + return extract_octet() == a.extract_octet(); + case TCKind._tk_any: + return extract_any().equal(a.extract_any()); + case TCKind._tk_objref: + { + org.omg.CORBA.Object obj_ref, obj_ref_a; + obj_ref = extract_Object(); + obj_ref_a = a.extract_Object(); + if (obj_ref == null) { + if (obj_ref_a == null) { + return true; + } else { + return false; + } + } else { + return obj_ref._is_equivalent(obj_ref_a); + } + } + case TCKind._tk_string: + try { + if (m_type.length() == 0) { //unbounded string + return extract_string().equals(a.extract_string()); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_wstring: + try { + if (m_type.length() == 0) { //unbounded string + return extract_wstring().equals(a.extract_wstring()); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_TypeCode: + return extract_TypeCode().equal(a.extract_TypeCode()); + case TCKind._tk_fixed: + return extract_fixed().equals(a.extract_fixed()); + } + + return TypeCodeMarshaler.valuesEqual(m_type, create_input_stream(), + a.create_input_stream()); + } + + protected synchronized void wrapValue(org.omg.CORBA.Any a) + { + reset_value(); + m_wrapped_any = a; + } + + public static void assign(org.omg.CORBA.Any from, org.omg.CORBA.Any to) + { + assign(from, to, false); + } + + public static void assign(org.omg.CORBA.Any from, org.omg.CORBA.Any to, + boolean wrap) + { + if ((from == null) || (to == null)) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + TypeCode type = from.type(); + + switch (type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + to.type(type); + return; + case TCKind._tk_short: + to.insert_short(from.extract_short()); + return; + case TCKind._tk_long: + to.insert_long(from.extract_long()); + return; + case TCKind._tk_longlong: + to.insert_longlong(from.extract_longlong()); + return; + case TCKind._tk_ushort: + to.insert_ushort(from.extract_ushort()); + return; + case TCKind._tk_ulong: + to.insert_ulong(from.extract_ulong()); + return; + case TCKind._tk_ulonglong: + to.insert_ulonglong(from.extract_ulonglong()); + return; + case TCKind._tk_float: + to.insert_float(from.extract_float()); + return; + case TCKind._tk_double: + to.insert_double(from.extract_double()); + return; + case TCKind._tk_boolean: + to.insert_boolean(from.extract_boolean()); + return; + case TCKind._tk_char: + to.insert_char(from.extract_char()); + return; + case TCKind._tk_wchar: + to.insert_wchar(from.extract_wchar()); + return; + case TCKind._tk_octet: + to.insert_octet(from.extract_octet()); + return; + case TCKind._tk_any: + to.insert_any(from.extract_any()); + return; + case TCKind._tk_objref: + to.insert_Object(from.extract_Object()); + return; + case TCKind._tk_value: + to.insert_Value(from.extract_Value(), from.type()); + return; + + case TCKind._tk_string: + try { + if (type.length() == 0) { //unbounded string + to.insert_string(from.extract_string()); + return; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_wstring: + try { + if (type.length() == 0) { //unbounded string + to.insert_wstring(from.extract_wstring()); + return; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_TypeCode: + to.insert_TypeCode(from.extract_TypeCode()); + return; + case TCKind._tk_fixed: + to.insert_fixed(from.extract_fixed(), type); + return; + } + + // while JDKs API Any had no extract_Streamable() + if (from instanceof AnyImpl) { + AnyImpl tidorb_from = (AnyImpl) from; + if (tidorb_from.hasStreamable()) { + to.insert_Streamable(tidorb_from.extract_Streamable()); + return; + } + } + + // Only wraps complex types + + if (wrap && (to instanceof AnyImpl)) { + ((AnyImpl) to).wrapValue(from); + return; + } + + to.read_value(from.create_input_stream(), type); + } + + public static void assignValue(org.omg.CORBA.Any from, org.omg.CORBA.Any to) + { + assignValue(from, to, false); + } + + public static void assignValue(org.omg.CORBA.Any from, + org.omg.CORBA.Any to, boolean wrap) + { + if ((from == null) || (to == null)) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + if (!to.type().equivalent(from.type())) + throw new BAD_OPERATION("No Equivalent types.", 0, + CompletionStatus.COMPLETED_NO); + + assign(from, to, wrap); + } + + public org.omg.CORBA.TypeCode type() + { + return m_type; + } + + /** + * Changes the any typecode, is needed to minizimie overhead in any creation + * of alias types: first create the any, and then change the typecode. + */ + + public synchronized void setEquivalentType(TypeCode type) + { + if (!m_type.equivalent(type)) { + throw new BAD_OPERATION("Types are not equivalent.", 0, + CompletionStatus.COMPLETED_NO); + } else { + m_type = type; + } + } + + public synchronized void type(org.omg.CORBA.TypeCode type) + { + if (type == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + m_type = type; + reset_value(); + } + + public synchronized void read_value(org.omg.CORBA.portable.InputStream is, + org.omg.CORBA.TypeCode type) + { + if ((is == null) || (type == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + // basic types are read directly from the stream + + switch (type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + this.type(type); + return; + case TCKind._tk_short: + insert_short(is.read_short()); + return; + case TCKind._tk_long: + insert_long(is.read_long()); + return; + case TCKind._tk_longlong: + insert_longlong(is.read_longlong()); + return; + case TCKind._tk_ushort: + insert_ushort(is.read_ushort()); + return; + case TCKind._tk_ulong: + insert_ulong(is.read_ulong()); + return; + case TCKind._tk_ulonglong: + insert_ulonglong(is.read_ulonglong()); + return; + case TCKind._tk_float: + insert_float(is.read_float()); + return; + case TCKind._tk_double: + insert_double(is.read_double()); + return; + case TCKind._tk_boolean: + insert_boolean(is.read_boolean()); + return; + case TCKind._tk_char: + insert_char(is.read_char()); + return; + case TCKind._tk_wchar: + insert_wchar(is.read_wchar()); + return; + case TCKind._tk_octet: + insert_octet(is.read_octet()); + return; + case TCKind._tk_any: + insert_any(is.read_any()); + return; + case TCKind._tk_fixed: //special case: fixed values + { + FixedHolder fixed_holder = new FixedHolder(m_type); + fixed_holder._read(is); + insert_Streamable(fixed_holder); + return; + } + case TCKind._tk_value: + case TCKind._tk_value_box: + { + ValueHolder value_holder = new ValueHolder(m_type); + value_holder._read(is); + insert_Streamable(value_holder); + return; + } + case TCKind._tk_abstract_interface: + { + + AbstractInterfaceHolder interface_holder = + new AbstractInterfaceHolder(m_type); + interface_holder._read(is); + insert_Streamable(interface_holder); + return; + } + } + + this.type(type); + + if (is instanceof CDRInputStream) { + // the value is not a streamable value + m_marshaled_value = ((CDRInputStream) is).copy(); + + // saves the actual position + m_marshaled_value.fixStarting(); + + // set the input stream to the end of the value + TypeCodeMarshaler.skipValue(m_type, (CDRInputStream) is); + } else { + // I only can remarshal the value in my own buffer + CDROutputStream out = null; + + if (m_orb != null) { // orbsingleton + out = (CDROutputStream) m_orb.create_output_stream(); + } else { + out = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } + + TypeCodeMarshaler.remarshalValue(m_type, is, out); + m_marshaled_value = (CDRInputStream) out.create_input_stream(); + } + } + + public synchronized void write_value(org.omg.CORBA.portable.OutputStream os) + { + if (os == null) { + throw new BAD_PARAM("Null OutputStream reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + if (m_wrapped_any != null) { + m_wrapped_any.write_value(os); + return; + } + + int kind = m_type.kind().value(); + + if ((kind == TCKind._tk_null) || (kind == TCKind._tk_void)) { + return; + } else if (m_value != null) { + m_value._write(os); + } else if (m_marshaled_value != null) { + CDRInputStream _marshaled_value_copy = m_marshaled_value.copy(); + _marshaled_value_copy.rewind(); + TypeCodeMarshaler.remarshalValue(m_type, _marshaled_value_copy, os); + } else { + throw new BAD_OPERATION("Uncompleted Any.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized org.omg.CORBA.portable.OutputStream create_output_stream() + { + org.omg.CORBA.portable.OutputStream out = null; + + if (m_orb == null) { + out = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } else { + out = m_orb.create_output_stream(); + } + m_marshaled_value = (CDRInputStream) out.create_input_stream(); + + return out; + } + + public synchronized org.omg.CORBA.portable.InputStream create_input_stream() + { + if (m_wrapped_any != null) { + return m_wrapped_any.create_input_stream(); + } + + if (m_marshaled_value == null) { + createMarshaledValue(); + } + + CDRInputStream new_stream = m_marshaled_value.copy(); + new_stream.rewind(); + return new_stream; + } + + protected void createMarshaledValue() + { + if (m_marshaled_value != null) + return; + + int kind = m_type.kind().value(); + + if ((kind == TCKind._tk_null) || (kind == TCKind._tk_void)) { + m_marshaled_value = new CDRInputStream(m_orb, new byte[0]); + return; + } + + if (m_value != null) { + CDROutputStream output; + + if (m_orb == null) { + output = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } else { + output = (CDROutputStream) m_orb.create_output_stream(); + } + m_value._write(output); + m_marshaled_value = (CDRInputStream) output.create_input_stream(); + } else { + throw new BAD_OPERATION("Any without value.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized short extract_short() + { + if (m_type.kind().value() != TCKind._tk_short) { + throw new BAD_OPERATION("No short in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + try { + return ((org.omg.CORBA.ShortHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_short(); + } + } + + public synchronized void insert_short(short s) + { + m_value = new org.omg.CORBA.ShortHolder(s); + m_type = m_value._type(); + } + + public synchronized int extract_long() + { + if (m_type.kind().value() != TCKind._tk_long) { + throw new BAD_OPERATION("No long in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) { + initValue(new org.omg.CORBA.IntHolder()); + } + + try { + return ((org.omg.CORBA.IntHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_long(); + } + } + + public synchronized void insert_long(int i) + { + reset_value(); + m_value = new org.omg.CORBA.IntHolder(i); + m_type = m_value._type(); + } + + public synchronized long extract_longlong() + { + if (m_type.kind().value() != TCKind._tk_longlong) { + throw new BAD_OPERATION("No longlong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + if (m_value == null) { + initValue(new org.omg.CORBA.LongHolder()); + } + + try { + return ((org.omg.CORBA.LongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_longlong(); + } + } + + public synchronized void insert_longlong(long l) + { + reset_value(); + m_value = new org.omg.CORBA.LongHolder(l); + m_type = m_value._type(); + } + + public synchronized short extract_ushort() + { + if (m_type.kind().value() != TCKind._tk_ushort) { + throw new BAD_OPERATION("No ushort in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + if (m_value == null) + initValue(new UShortHolder()); + + try { + return ((UShortHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ushort(); + } + } + + public synchronized void insert_ushort(short s) + { + reset_value(); + m_value = new UShortHolder(s); + m_type = TypeCodeFactory.tc_ushort; + } + + public synchronized int extract_ulong() + { + if (m_type.kind().value() != TCKind._tk_ulong) { + throw new BAD_OPERATION("No ulong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new ULongHolder()); + + try { + return ((ULongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ulong(); + } + } + + public synchronized void insert_ulong(int i) + { + reset_value(); + m_value = new ULongHolder(i); + m_type = TypeCodeFactory.tc_ulong; + } + + public synchronized long extract_ulonglong() + { + if (m_type.kind().value() != TCKind._tk_ulonglong) { + throw new BAD_OPERATION("No ulonglong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new ULongLongHolder()); + try { + return ((ULongLongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ulonglong(); + } + + } + + public synchronized void insert_ulonglong(long l) + { + reset_value(); + m_value = new ULongLongHolder(l); + m_type = TypeCodeFactory.tc_ulonglong; + } + + public synchronized float extract_float() + { + if (m_type.kind().value() != TCKind._tk_float) { + throw new BAD_OPERATION("No float in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.FloatHolder()); + try { + return ((org.omg.CORBA.FloatHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_float(); + } + } + + public synchronized void insert_float(float f) + { + reset_value(); + m_value = new org.omg.CORBA.FloatHolder(f); + m_type = m_value._type(); + } + + public synchronized double extract_double() + { + if (m_type.kind().value() != TCKind._tk_double) + throw new BAD_OPERATION("No float in Any.", 0, + CompletionStatus.COMPLETED_NO); + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.DoubleHolder()); + + try { + return ((org.omg.CORBA.DoubleHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_double(); + } + } + + public synchronized void insert_double(double d) + { + reset_value(); + m_value = new org.omg.CORBA.DoubleHolder(d); + m_type = m_value._type(); + } + + public synchronized boolean extract_boolean() + { + if (m_type.kind().value() != TCKind._tk_boolean) { + throw new BAD_OPERATION("No boolean in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.BooleanHolder()); + + try { + return ((org.omg.CORBA.BooleanHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_boolean(); + } + } + + public synchronized void insert_boolean(boolean b) + { + reset_value(); + m_value = new org.omg.CORBA.BooleanHolder(b); + m_type = m_value._type(); + } + + public synchronized char extract_char() + { + if (m_type.kind().value() != TCKind._tk_char) { + throw new BAD_OPERATION("No char in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.CharHolder()); + + try { + return ((org.omg.CORBA.CharHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_char(); + } + + } + + public synchronized void insert_char(char c) + { + reset_value(); + m_value = new org.omg.CORBA.CharHolder(c); + m_type = m_value._type(); + } + + public synchronized char extract_wchar() + { + if (m_type.kind().value() != TCKind._tk_wchar) { + throw new BAD_OPERATION("No wchar in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new WCharHolder()); + try { + return ((WCharHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_wchar(); + } + } + + public synchronized void insert_wchar(char c) + { + reset_value(); + m_value = new WCharHolder(c); + m_type = m_value._type(); + } + + public synchronized byte extract_octet() + { + if (m_type.kind().value() != TCKind._tk_octet) { + throw new BAD_OPERATION("No octet in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.ByteHolder()); + + try { + return ((org.omg.CORBA.ByteHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_octet(); + } + + } + + public synchronized void insert_octet(byte b) + { + reset_value(); + m_value = new org.omg.CORBA.ByteHolder(b); + m_type = m_value._type(); + } + + public synchronized org.omg.CORBA.Any extract_any() + { + if (m_type.kind().value() != TCKind._tk_any) { + throw new BAD_OPERATION("No any in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.AnyHolder()); + + try { + return ((org.omg.CORBA.AnyHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_any(); + } + } + + public synchronized void insert_any(org.omg.CORBA.Any a) + { + if (a == null) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.AnyHolder(a); + m_type = TypeCodeFactory.tc_any; + } + + public synchronized org.omg.CORBA.TypeCode extract_TypeCode() + { + if (m_type.kind().value() != TCKind._tk_TypeCode) { + throw new BAD_OPERATION("No TypeCode in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.TypeCodeHolder()); + + try { + return ((org.omg.CORBA.TypeCodeHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_TypeCode(); + } + } + + public synchronized void insert_TypeCode(org.omg.CORBA.TypeCode t) + { + if (t == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new org.omg.CORBA.TypeCodeHolder(t); + m_type = m_value._type(); + } + + public synchronized String extract_string() + { + try { + if ((m_type.kind().value() != TCKind._tk_string) + || (m_type.length() != 0)) { + throw new BAD_OPERATION("No unbounded string in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new StringHolder(m_type)); + + try { + + return ((StringHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_string(); + } + } + + public synchronized void insert_string(String s) + { + if (s == null) { + throw new BAD_PARAM("Null String reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.StringHolder(s); + m_type = m_value._type(); + } + + public synchronized String extract_wstring() + { + if (m_type.kind().value() != TCKind._tk_wstring) { + throw new BAD_OPERATION("No wstring in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new WStringHolder(m_type)); + + try { + return ((WStringHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_wstring(); + } + } + + public synchronized void insert_wstring(String s) + { + if (s == null) { + throw new BAD_PARAM("Null String reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new WStringHolder(s); + m_type = m_value._type(); + } + + public synchronized java.math.BigDecimal extract_fixed() + { + if (m_type.kind().value() != TCKind._tk_fixed) { + throw new BAD_OPERATION("No fixed in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new FixedHolder(m_type)); + + try { + return ((FixedHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + throw new BAD_OPERATION("Can not obtain fixed", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized void insert_fixed(java.math.BigDecimal f, + org.omg.CORBA.TypeCode t) + throws BAD_INV_ORDER + { + if ((f == null) || (t == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new FixedHolder(t, f); + m_type = t; + } + + /** + * @ deprecated + */ + public org.omg.CORBA.Principal extract_Principal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @ deprecated + */ + public void insert_Principal(org.omg.CORBA.Principal p) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public synchronized org.omg.CORBA.portable.Streamable extract_Streamable() + { + //if(!m_type.equivalent(m_value._type())) + // System.out.println("AnyImpl.extract_Streamable no equivalente"); + if (m_user_value) { + if (m_value != null) { + return m_value; + } else { + throw new org.omg.CORBA.INTERNAL("No Streamable in Any."); + } + } else { + throw new BAD_INV_ORDER("No Streamable in Any."); + } + } + + public synchronized void + insert_Streamable(org.omg.CORBA.portable.Streamable s) + { + if (s == null) { + throw new BAD_PARAM("Null Streamable reference.", 0, + CompletionStatus.COMPLETED_NO); + } + //if(!m_type.equivalent(s._type())) + // System.out.println("AnyImpl.insert_Streamable no equivalente"); + reset_value(); + m_user_value = true; + m_value = s; + m_type = m_value._type(); + } + + public synchronized org.omg.CORBA.Object extract_Object() + { + if (m_type.kind().value() != TCKind._tk_objref) { + throw new BAD_OPERATION("No Object in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.ObjectHolder()); + + try { + return ((org.omg.CORBA.ObjectHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_Object(); + } + } + + public synchronized void insert_Object(org.omg.CORBA.Object obj) + { + if (obj instanceof org.omg.CORBA.LocalObject) { + throw new MARSHAL("Impossible to marshall a local object.", 4, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new org.omg.CORBA.ObjectHolder(obj); + m_type = m_value._type(); + } + + public synchronized void insert_Object(org.omg.CORBA.Object obj, + org.omg.CORBA.TypeCode type) + { + if (type == null) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.ObjectHolder(obj); + m_type = type; + } + + public synchronized java.io.Serializable extract_Value() + { + int kind = m_type.kind().value(); + + if ((kind != TCKind._tk_value) && (kind != TCKind._tk_value_box)) { + throw new BAD_OPERATION("No Value in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value != null) { + if (m_value instanceof ValueHolder) { + + java.io.Serializable js = ((ValueHolder) m_value).value; + + return js; + } else { // there is another holder + createMarshaledValue(); + } + } + + if (m_marshaled_value != null) { + m_marshaled_value.rewind(); + return m_marshaled_value.read_value(); + } + + throw new BAD_OPERATION("Any without value"); + } + + public synchronized void insert_Value(java.io.Serializable v) + { + reset_value(); + + if (v instanceof org.omg.CORBA.portable.StreamableValue) { + org.omg.CORBA.portable.StreamableValue val = + (org.omg.CORBA.portable.StreamableValue) v; + + insert_Streamable(new ValueHolder(val._type(), val)); + m_type = val._type(); + return; + } else { + throw new BAD_PARAM("It is not StreamableValue"); + } + } + + public synchronized void insert_Value(java.io.Serializable v, + org.omg.CORBA.TypeCode t) + { + if (t == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + int kind = t.kind().value(); + + if ((kind == TCKind._tk_value) || (kind == TCKind._tk_value_box)) { + insert_Streamable(new ValueHolder(t, v)); + m_type = t; + } else { + throw new BAD_OPERATION(); + } + } + + public static boolean dump(org.omg.CORBA.Any any, + java.io.PrintWriter output) + throws java.io.IOException + { + if ((any == null) || (output == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + output.print("[ANY]"); + TypeCodeDumper.dump(any.type(), output); + + org.omg.CORBA.portable.InputStream input = any.create_input_stream(); + + return TypeCodeDumper.dumpValue(any.type(), input, output); + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/BidirectionalPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/BidirectionalPolicyImpl.java.svn-base new file mode 100644 index 0000000..72751b9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/BidirectionalPolicyImpl.java.svn-base @@ -0,0 +1,170 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.BiDirPolicy.BOTH; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.BidirectionalPolicyHelper; +import org.omg.BiDirPolicy.BidirectionalPolicyValueHelper; +import org.omg.BiDirPolicy.NORMAL; +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * Implementation of BidirectionalPolicy + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class BidirectionalPolicyImpl extends PseudoObject + implements org.omg.BiDirPolicy.BidirectionalPolicy +{ + /** + * The policy value: BidirPolicy::BOTH or BiDirPolicy::NORMAL + */ + private short m_value; + + public BidirectionalPolicyImpl(short value) + { + m_value = value; + } + + public short value() + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST(); + } + + return m_value; + } + + public int policy_type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return new BidirectionalPolicyImpl(m_value); + } + + public void destroy() + { + m_destroyed = true; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST("Policy destroyed."); + } + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals( + "IDL:omg.org/BiDirPolicy/BidirectionalPolicy:1.0")) { + return true; + } + + return super._is_a(repositoryIdentifier); + + } + + public static Policy read(CDRInputStream input) + { + short value = input.read_short(); + + if(value != BOTH.value && value != NORMAL.value) { + throw new MARSHAL(); + } + + return new BidirectionalPolicyImpl(value); + } + + /** + * @param output + */ + public static void write(CDROutputStream output, Policy policy) + { + BidirectionalPolicy bidir_policy = + BidirectionalPolicyHelper.narrow(policy); + + output.write_ushort(bidir_policy.value()); + + } + + public static BidirectionalPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + short policy_value = BidirectionalPolicyValueHelper.extract(val); + + if ((policy_value != org.omg.BiDirPolicy.BOTH.value) + && (policy_value != org.omg.BiDirPolicy.NORMAL.value)) + throw new PolicyError(BAD_POLICY_VALUE.value); + + return new BidirectionalPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/CodecFactoryImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/CodecFactoryImpl.java.svn-base new file mode 100644 index 0000000..0835a16 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/CodecFactoryImpl.java.svn-base @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.OBJECT_NOT_EXIST; + +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +public class CodecFactoryImpl extends org.omg.IOP.CodecFactoryLocalBase +{ + + private boolean m_destroyed; + + private es.tid.TIDorbj.core.TIDORB m_orb; + + public CodecFactoryImpl(es.tid.TIDorbj.core.TIDORB orb) + { + m_destroyed = false; + this.m_orb = orb; + } + + public synchronized void destroy() + { + m_destroyed = true; + m_orb = null; + } + + public synchronized org.omg.IOP.Codec create_codec(org.omg.IOP.Encoding enc) + throws org.omg.IOP.CodecFactoryPackage.UnknownEncoding + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST(); + } + + if (enc == null) { + throw new BAD_PARAM("Null Object reference"); + } + + if (enc.format != org.omg.IOP.ENCODING_CDR_ENCAPS.value) { + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + if (enc.major_version != 1) { + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + switch (enc.minor_version) + { + case 0: + return new + CodecImpl(m_orb,GIOPVersion.VERSION_1_0); + case 1: + return new CodecImpl(m_orb,GIOPVersion.VERSION_1_1); + case 2: + return new CodecImpl(m_orb,GIOPVersion.VERSION_1_2); + default: + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/CodecImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/CodecImpl.java.svn-base new file mode 100644 index 0000000..b6f9d63 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/CodecImpl.java.svn-base @@ -0,0 +1,187 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class CodecImpl extends org.omg.IOP.CodecLocalBase +{ + + private es.tid.TIDorbj.core.TIDORB m_orb; + + private es.tid.TIDorbj.core.comm.giop.GIOPVersion m_version; + + public CodecImpl(es.tid.TIDorbj.core.TIDORB orb, + es.tid.TIDorbj.core.comm.giop.GIOPVersion version) + { + m_orb = orb; + m_version = version; + } + + public byte[] encode(org.omg.CORBA.Any data) + throws org.omg.IOP.CodecPackage.InvalidTypeForEncoding + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDROutputStream out = (CDROutputStream) m_orb.create_output_stream(); + + out.setVersion(m_version); + // write the any into an encapsulation + + out.enterEncapsulation(); + + try { + out.write_any(data); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.InvalidTypeForEncoding(); + } + + out.exitEncapsulation(); + + // read the byte array + + InputStream input = out.create_input_stream(); + + int length = input.read_ulong(); + + byte[] value = new byte[length]; + + input.read_octet_array(value, 0, length); + + return value; + + } + + public org.omg.CORBA.Any decode(byte[] data) + throws org.omg.IOP.CodecPackage.FormatMismatch + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDRInputStream input = new CDRInputStream(m_orb, data); + + input.setByteOrder(input.read_boolean()); + + input.setVersion(m_version); + try { + return input.read_any(); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.FormatMismatch(); + } + } + + public byte[] encode_value(org.omg.CORBA.Any data) + throws org.omg.IOP.CodecPackage.InvalidTypeForEncoding + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDROutputStream out = (CDROutputStream) m_orb.create_output_stream(); + + out.setVersion(m_version); + + // write the any into an encapsulation + out.enterEncapsulation(); + + try { + data.write_value(out); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.InvalidTypeForEncoding(); + } + + out.exitEncapsulation(); + + // read the byte array + + InputStream input = out.create_input_stream(); + + int length = input.read_ulong(); + + byte[] value = new byte[length]; + + input.read_octet_array(value, 0, length); + + return value; + } + + public org.omg.CORBA.Any decode_value(byte[] data, + org.omg.CORBA.TypeCode tc) + throws org.omg.IOP.CodecPackage.FormatMismatch, + org.omg.IOP.CodecPackage.TypeMismatch + { + if ((data == null) || (tc == null)) { + throw new BAD_PARAM(); + } + + CDRInputStream input = new CDRInputStream(m_orb, data); + + input.setVersion(m_version); + + input.setByteOrder(input.read_boolean()); + + org.omg.CORBA.Any any = m_orb.create_any(); + + try { + any.read_value(input, tc); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.TypeMismatch(); + } + catch (org.omg.CORBA.MARSHAL bo) { + throw new org.omg.IOP.CodecPackage.FormatMismatch(); + } + + return any; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ConfORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ConfORB.java.svn-base new file mode 100644 index 0000000..d8b01c7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ConfORB.java.svn-base @@ -0,0 +1,1662 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.applet.Applet; +import java.util.Arrays; +import java.util.Properties; +import java.util.Vector; + +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.PolicyError; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.SystemProperties; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.util.UTC; + +/** + * Configuration set for TIDorb. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ConfORB +{ + + /** + * ORB Policies + */ + + PolicyContext policy_context; + + /** + * Default ORB Policies + */ + + final static PolicyContext st_default_policy_context = + createDefaultPolicies(); + + /** + * TIDorb ORB Identifier: 666. This value must be registered in OMG. + */ + + public final static es.tid.TIDorbj.core.iop.ORBComponent ORB_TYPE = + new es.tid.TIDorbj.core.iop.ORBComponent(1414087680); + + /** + * TIDorb ORB_id + */ + + public final static String orb_id_name = "-ORBid"; + + public final static String DEFAULT_ORB_ID = "TIDorbJ"; + + public String orb_id = DEFAULT_ORB_ID; + + /** + * TIDorb Initial References + */ + + public java.util.Vector initial_references = new java.util.Vector(); + + /** + * TIDorb Default Initial References + */ + public final static String init_refs_name = "-ORBInitRef"; + + /** + * TIDorb Default Initial References + */ + + public String default_initial_reference = null; + + public final static String def_init_ref_name = "-ORBDefaultInitRef"; + + /** + * NamingService Property name. + */ + + public final static String naming_service_name = + "es.tid.TIDorbj.naming_service"; + + /** + * Default chunk size for CDR buffers. Default value: 256. + */ + + public final static int DEFAULT_BLOCK_SIZE = 256; + + /** + * Chunk size for CDR buffers. + *

+ * Values must be > 256 and multiple of 8 + */ + + public int block_size = DEFAULT_BLOCK_SIZE; + + /** + * Block_size Property name. + */ + + public final static String block_size_name = "es.tid.TIDorbj.block_size"; + + /** + * Default exhaustive TypeCode matching. + */ + public final static boolean DEFAULT_EXHAUSTIVE_EQUAL = false; + + /** + * Make or not an exhaustive TypeCode matching: + *

+ * Values must be "true" or "false". + */ + + public boolean exhaustive_equal = DEFAULT_EXHAUSTIVE_EQUAL; + + /** + * Exhaustive equal Property name. + */ + + public final static String exhaustive_equal_name = + "es.tid.TIDorbj.exhaustive_equal"; + + + /** + * Maximun time, in miliseconds, waiting a request reply. + *

+ * Values must be greater or equal than 0. Default value: 5000. + */ + + public final static long DEFAULT_MAX_BLOCKED_TIME = 5000; + + /** + * max_blocked_time Property name. + */ + + public final static String max_blocked_time_name = + "es.tid.TIDorbj.max_blocked_time"; + + + + public long max_blocked_time = DEFAULT_MAX_BLOCKED_TIME; + + /** + * Default TypeCode Cache Size. Default value: 0, no cache. + */ + + public final static int DEFAULT_TYPECODE_CACHE_SIZE = 0; + + /** + * Maximum of TypeCodes stored in the TypeCodeCache. + *

+ * Values must be greater or equal than 0. + */ + + public int typecode_cache_size = DEFAULT_TYPECODE_CACHE_SIZE; + + /** + * typecode_cache_size Property name. + */ + + public final static String typecode_cache_size_name = + "es.tid.TIDorbj.typecode_cache_size"; + + + /** + * Comma separated list of CommunicationLayer implementatios to be loaded at + * ORB's startup. By default, only IIOP comm layer will be loaded. + */ + public final static String DEFAULT_COMM_LAYER = + "es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer"; + + public String comm_layers = DEFAULT_COMM_LAYER; + + public final static String comm_layers_name = + "es.tid.TIDorbj.comm_layers"; + + + /** + * BidirectionalPolicy used. Values allowed NORMAL or BOTH + */ + public final static short DEFAULT_BIDIRECTIONAL = + org.omg.BiDirPolicy.NORMAL.value; + /** + * BIDIRECTIONAL Property name. + */ + public final static String bidirectional_name = + "es.tid.TIDorbj.bidirectional"; + + + /** + * Default ORB's maximum threads number per POAManager. + *

+ * Default value: 20. + */ + + public final static int DEFAULT_POA_MAX_THREADS = 20; + + /** + * ORB's maximum threads number per POAManager. + *

+ * Values must be greater than 0. + */ + + public int poa_max_threads = DEFAULT_POA_MAX_THREADS; + + /** + * max_threads Property name. + */ + + public final static String poa_max_threads_name = + "es.tid.TIDorbj.poa.max_threads"; + + /** + * Default ORB's minimum threads number per POAManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_POA_MIN_THREADS = 1; + + /** + * ORB's minimum threads number per POAManager. + *

+ * Values must be greater or equal than 0. + */ + + public int poa_min_threads = DEFAULT_POA_MIN_THREADS; + + /** + * min_threads Property name. + */ + + public final static String poa_min_threads_name = + "es.tid.TIDorbj.poa.min_threads"; + + /** + * Default ORB's queued requests number per POAManager. + *

+ * Default value: 1000. + */ + + public final static int DEFAULT_POA_MAX_QUEUED_REQUESTS = 1000; + + /** + * ORB's maximum queued requests number per POAManager. + *

+ * Values must be greater or equal than 0. + */ + + public int poa_max_queued_requests = DEFAULT_POA_MAX_QUEUED_REQUESTS; + + /** + * max_queued_requests Property name. + */ + + public final static String poa_max_queued_requests_name = + "es.tid.TIDorbj.poa.max_queued_requests"; + + /** + * Default thread's maximum idle time per POAManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_POA_STARVING_TIME = 0; + + /** + * Thread's maximum idle time per per POAManager. + *

+ * If it is 0, a thread can be idle forever. + */ + + public int poa_starving_time = DEFAULT_POA_STARVING_TIME; + + /** + * max_queued_requests Property name. + */ + + public final static String poa_starving_time_name = + "es.tid.TIDorbj.poa.starving_time"; + + + + /** + * Default AMIManager's maximum threads number + *

+ * Default value: 20. + */ + + public final static int DEFAULT_AMI_MAX_THREADS = 20; + + /** + * AMIManager's maximum threads number + *

+ * Values must be greater than 0. + */ + + public int ami_max_threads = DEFAULT_AMI_MAX_THREADS; + + /** + * max_threads Property name. + */ + + public final static String ami_max_threads_name = + "es.tid.TIDorbj.ami.max_threads"; + + /** + * Default AMIManager's minimum threads number. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_AMI_MIN_THREADS = 1; + + /** + * AMIManager's minimum threads number. + *

+ * Values must be greater or equal than 0. + */ + + public int ami_min_threads = DEFAULT_AMI_MIN_THREADS; + + /** + * ami_threads Property name. + */ + + public final static String ami_min_threads_name = + "es.tid.TIDorbj.ami.min_threads"; + + /** + * Default AMIManager's queued handled requests number . + *

+ * Default value: 1000. + */ + + public final static int DEFAULT_AMI_MAX_QUEUED_HANDLED_REQUESTS = 1000; + + /** + * AMIManager's maximum queued handled requests number . + *

+ * Values must be greater or equal than 0. + */ + + public int ami_max_queued_handled_requests = DEFAULT_AMI_MAX_QUEUED_HANDLED_REQUESTS; + + /** + * max_queued_requests Property name. + */ + + public final static String ami_max_queued_handled_requests_name = + "es.tid.TIDorbj.ami.max_queued_handled_requests"; + + /** + * Default thread's maximum idle time at AMIManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_AMI_STARVING_TIME = 0; + + /** + * Thread's maximum idle time per at AMIManager. + *

+ * If it is 0, a thread can be idle forever. + */ + + public int ami_starving_time = DEFAULT_AMI_STARVING_TIME; + + /** + * max_queued_requests Property name. + */ + + public final static String ami_starving_time_name = + "es.tid.TIDorbj.ami.starving_time"; + + /** + * Default Maximun blocket time waiting for the shutdown completion. Default + * value: 5000. + */ + + public final static int DEFAULT_MAX_TIME_IN_SHUTDOWN = 5000; + + /** + * Maximun time, in miliseconds, waiting for the shutdown completion. + *

+ * Values must be greater or equal than 0. + */ + + public int max_time_in_shutdown = DEFAULT_MAX_TIME_IN_SHUTDOWN; + + /** + * max_time_in_shutdown Property name. + */ + + public final static String max_time_in_shutdown_name = + "es.tid.TIDorbj.max_time_in_shutdown"; + + /** + * Default Trace Level. Default value: Traces.NONE. + */ + + public final static int DEFAULT_TRACE_LEVEL = Trace.NONE; + + /** + * Trace Level. Values must be between 0 and 4. + */ + + public int trace_level = DEFAULT_TRACE_LEVEL; + + /** + * Trace Level Property name. + */ + + public final static String trace_level_name = + "es.tid.TIDorbj.trace.level"; + + /** + * Trace file name. + */ + + public String trace_file = null; + + /** + * Trace file property name. + */ + + public final static String trace_file_name = + "es.tid.TIDorbj.trace.file"; + + /** + * Default Trace file size. Default value: 10 K. + */ + public final static long DEFAULT_FILE_SIZE = 10240; + + /** + * Trace list files size + */ + public long trace_file_size = DEFAULT_FILE_SIZE; + + /** + * Trace list files size property name + */ + public final static String trace_file_size_name = + "es.tid.TIDorbj.trace.file_size"; + + /** + * Default Trace files list length. Default value: 1 file. + */ + public final static int DEFAULT_NUM_FILES = 1; + + /** + * Trace files list length + */ + public int trace_num_files = DEFAULT_NUM_FILES; + + /** + * Trace files list length property name + */ + public final static String trace_num_files_name = + "es.tid.TIDorbj.trace.num_files"; + + + /** + * Default qos. + */ + public final static boolean DEFAULT_QOS_ENABLED = true; + + /** + * Enable QoS policies for client and server side. + *

    + *
  • If true enabled QoS policies + *
  • If false disabled QoS policies. + *
+ * Values must be "true" or "false". + */ + + public boolean qos_enabled = DEFAULT_QOS_ENABLED; + + /** + * Exhaustive equal Property name. + */ + + public final static String qos_enabled_name = + "es.tid.TIDorbj.qos_enabled"; + + + + + /** + * Default ORB's ZIOP internal chunk size. + *

+ * Default value: 32768. + */ + + public final static int DEFAULT_ZIOP_CHUNK_SIZE = 32768; + + /** + * ORB's ZIOP internal chunk size. + *

+ * Values must be greater or equal than 0. + */ + + public int ziop_chunk_size = DEFAULT_ZIOP_CHUNK_SIZE; + + /** + * ziop_chunk_size Property name. + */ + + public final static String ziop_chunk_size_name = + "es.tid.TIDorbj.ziop_chunk_size"; + + + /** + * Default assume ziop at server side. + */ + public final static boolean DEFAULT_ASSUME_ZIOP_SERVER = false; + + /** + * Assume ZIOP policies enabled at server side. Useful to connect through + * corbaloc or Unicast/Multicast + *

    + *
  • If true server has ZIOP policies defined and known by client + *
  • If false server has not ZIOP policies. + *
+ * Values must be "true" or "false". + */ + + public boolean assume_ziop_server = DEFAULT_ASSUME_ZIOP_SERVER; + + /** + * Exhaustive equal Property name. + */ + + public final static String assume_ziop_server_name = + "es.tid.TIDorbj.assume_ziop_server"; + + + + private Applet parameters; + private Properties properties; + private Vector arguments; + + + protected static PolicyContext createDefaultPolicies() + { + PolicyContext context = new PolicyContext(null); + + try { + context.setPolicy( + new RelativeRoundtripTimeoutPolicyImpl( + UTC.toTimeT(DEFAULT_MAX_BLOCKED_TIME))); + context.setPolicy( + new BidirectionalPolicyImpl(DEFAULT_BIDIRECTIONAL)); + } + catch (PolicyError pe) {} + + return context; + } + + public ConfORB() + { + policy_context = new PolicyContext(st_default_policy_context); + } + + public PolicyContext getPolicyContext() + { + return policy_context; + } + + /** + * Initialize the ORB properties. + * + * @param args + * the arguments vector. + * @param props + * the properties. + */ + public void init(String[] args, java.util.Properties props) + { + parse_system_properties(); + + if (props != null) + init(props); + + if (args != null) + init(args); + } + + /** + * Initialize the ORB properties with the Applet arguments. + * + * @param app + * the applet that has created the ORB. + * @param props + * the properties. + */ + public void init(java.applet.Applet app, java.util.Properties props) + { + // parse_system_properties(); + + if (props != null) + init(props); + + if (app != null) + init(app); + + } + + /** + * Initialize the ORB properties with the arguments vector. + * + * @param app + * the applet that has created the ORB. + */ + + public void init(String[] args) + { + if ( this.arguments == null ){ + this.arguments = new Vector( args.length ); + } + this.arguments.addAll( Arrays.asList( args ) ); + + + int i = 0; + String name; + + while (i < args.length - 1) { + if ((args[i] == null) || (args[i].length() == 0)) { + i++; + } else { + if ( args[i].equals(comm_layers_name) ) + parse_comm_layers( args[++i] ); + if (args[i].equals(def_init_ref_name)) + default_initial_reference = args[++i]; + if (args[i].equals(orb_id_name)) + orb_id = args[++i]; + else if (args[i].equals(init_refs_name)) + parse_init_ref(args[++i]); + else if (args[i].equals(naming_service_name)) + parse_naming_service(args[++i]); + else if (args[i].equals(block_size_name)) + parse_block_size(args[++i]); + else if (args[i].equals(exhaustive_equal_name)) + parse_exhaustive_equal(args[++i]); + else if (args[i].equals(typecode_cache_size_name)) + parse_typecode_cache_size(args[++i]); + else if (args[i].equals(bidirectional_name)) + parse_bidirectional(args[++i]); + else if (args[i].equals(max_blocked_time_name)) + parse_max_blocked_time(args[++i]); + else if (args[i].equals(poa_max_threads_name)) + parse_poa_max_threads(args[++i]); + else if (args[i].equals(poa_min_threads_name)) + parse_poa_min_threads(args[++i]); + else if (args[i].equals(poa_max_queued_requests_name)) + parse_poa_max_queued_requests(args[++i]); + else if (args[i].equals(poa_starving_time_name)) + parse_poa_starving_time(args[++i]); + else if (args[i].equals(max_time_in_shutdown_name)) + parse_max_time_in_shutdown(args[++i]); + else if (args[i].equals(ami_max_threads_name)) + parse_ami_max_threads(args[++i]); + else if (args[i].equals(ami_min_threads_name)) + parse_ami_min_threads(args[++i]); + else if (args[i].equals(ami_max_queued_handled_requests_name)) + parse_ami_max_queued_handled_requests(args[++i]); + else if (args[i].equals(ami_starving_time_name)) + parse_ami_starving_time(args[++i]); + else if (args[i].equals(trace_file_name)) + trace_file = args[++i]; + else if (args[i].equals(trace_level_name)) + parse_trace_level(args[++i]); + else if (args[i].equals(trace_file_size_name)) + parse_trace_file_size(args[++i]); + else if (args[i].equals(trace_num_files_name)) + parse_trace_num_files(args[++i]); + else if (args[i].equals(qos_enabled_name)) + parse_qos_enabled(args[++i]); + else if (args[i].equals(ziop_chunk_size_name)) + parse_ziop_chunk_size(args[++i]); + else if (args[i].equals(assume_ziop_server_name)) + parse_assume_ziop_server(args[++i]); + else + i++; + } + } + + } + + + + /** + * Initialize the ORB properties with the Applet arguments. + * + * @param app + * the applet that has created the ORB. + */ + + public void init(Applet app) + { + this.parameters = app; + + parse_init_ref(app.getParameter(init_refs_name)); + + String aux_initial = app.getParameter(def_init_ref_name); + + if (aux_initial != null) + default_initial_reference = aux_initial; + + String id = app.getParameter(orb_id_name); + if (id != null) + orb_id = id; + + parse_comm_layers( app.getParameter(comm_layers_name)); + parse_naming_service(app.getParameter(naming_service_name)); + parse_block_size(app.getParameter(block_size_name)); + parse_exhaustive_equal(app.getParameter(exhaustive_equal_name)); + parse_typecode_cache_size(app.getParameter(typecode_cache_size_name)); + parse_bidirectional(app.getParameter(bidirectional_name)); + parse_max_blocked_time(app.getParameter(max_blocked_time_name)); + parse_poa_max_threads(app.getParameter(poa_max_threads_name)); + parse_poa_min_threads(app.getParameter(poa_min_threads_name)); + parse_poa_max_queued_requests( + app.getParameter(poa_max_queued_requests_name)); + parse_poa_starving_time(app.getParameter(poa_starving_time_name)); + parse_max_time_in_shutdown(app.getParameter(max_time_in_shutdown_name)); + + parse_ami_max_threads(app.getParameter(ami_max_threads_name)); + parse_ami_min_threads(app.getParameter(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + app.getParameter(ami_max_queued_handled_requests_name)); + parse_ami_starving_time(app.getParameter(poa_starving_time_name)); + + String aux_trace = app.getParameter(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(app.getParameter(trace_level_name)); + parse_trace_file_size(app.getParameter(trace_file_size_name)); + parse_trace_num_files(app.getParameter(trace_num_files_name)); + + parse_qos_enabled(app.getParameter(qos_enabled_name)); + parse_ziop_chunk_size(app.getParameter(ziop_chunk_size_name)); + parse_assume_ziop_server(app.getParameter(assume_ziop_server_name)); + } + + /** + * Initialize the ORB properties with the Properties object. + * + * @param props + * the properties. + */ + + public void init(java.util.Properties props) + { + if ( this.properties == null ){ + this.properties = new Properties(); + } + this.properties.putAll( props ); + + parse_comm_layers(props.getProperty(comm_layers_name)); + parse_naming_service(props.getProperty(naming_service_name)); + parse_block_size(props.getProperty(block_size_name)); + parse_exhaustive_equal(props.getProperty(exhaustive_equal_name)); + parse_typecode_cache_size(props.getProperty(typecode_cache_size_name)); + parse_bidirectional(props.getProperty(bidirectional_name)); + parse_max_blocked_time(props.getProperty(max_blocked_time_name)); + parse_poa_max_threads(props.getProperty(poa_max_threads_name)); + parse_poa_min_threads(props.getProperty(poa_min_threads_name)); + parse_poa_max_queued_requests( + props.getProperty(poa_max_queued_requests_name)); + parse_poa_starving_time(props.getProperty(poa_starving_time_name)); + parse_max_time_in_shutdown(props.getProperty(max_time_in_shutdown_name)); + + parse_ami_max_threads(props.getProperty(ami_max_threads_name)); + parse_ami_min_threads(props.getProperty(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + props.getProperty(ami_max_queued_handled_requests_name)); + parse_ami_starving_time(props.getProperty(ami_starving_time_name)); + + String aux_trace = props.getProperty(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(props.getProperty(trace_level_name)); + parse_trace_file_size(props.getProperty(trace_file_size_name)); + parse_trace_num_files(props.getProperty(trace_num_files_name)); + + parse_qos_enabled(props.getProperty(qos_enabled_name)); + parse_ziop_chunk_size(props.getProperty(ziop_chunk_size_name)); + parse_assume_ziop_server(props.getProperty(assume_ziop_server_name)); + } + + /** + * Search the ORB properties in the SystemProperties. + */ + + public void parse_system_properties() + { + parse_comm_layers( SystemProperties.findProperty(comm_layers_name) ); + parse_naming_service( + SystemProperties.findProperty(naming_service_name)); + parse_block_size(SystemProperties.findProperty(block_size_name)); + parse_exhaustive_equal( + SystemProperties.findProperty(exhaustive_equal_name)); + parse_max_blocked_time( + SystemProperties.findProperty(max_blocked_time_name)); + parse_poa_max_threads( + SystemProperties.findProperty(poa_max_threads_name)); + parse_poa_min_threads( + SystemProperties.findProperty(poa_min_threads_name)); + parse_poa_max_queued_requests( + SystemProperties.findProperty(poa_max_queued_requests_name)); + parse_poa_starving_time( + SystemProperties.findProperty(poa_starving_time_name)); + parse_max_time_in_shutdown( + SystemProperties.findProperty(max_time_in_shutdown_name)); + + parse_ami_max_threads( + SystemProperties.findProperty(ami_max_threads_name)); + parse_ami_min_threads( + SystemProperties.findProperty(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + SystemProperties.findProperty(ami_max_queued_handled_requests_name)); + parse_ami_starving_time( + SystemProperties.findProperty(ami_starving_time_name)); + + String aux_trace = SystemProperties.findProperty(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(SystemProperties.findProperty(trace_level_name)); + parse_trace_file_size( + SystemProperties.findProperty(trace_file_size_name)); + parse_trace_num_files( + SystemProperties.findProperty(trace_num_files_name)); + + parse_qos_enabled( + SystemProperties.findProperty(qos_enabled_name)); + parse_ziop_chunk_size( + SystemProperties.findProperty(ziop_chunk_size_name)); + parse_assume_ziop_server( + SystemProperties.findProperty(assume_ziop_server_name)); + } + + /********************************************************************/ + /* COMPATIBILIDAD CON VERSIONES ANTIGUAS */ + /********************************************************************/ + public void fillPropertyInfoOldValues( PropertyInfo pi ){ + if ( pi != null ){ + + boolean old_property_name_founded = false; + String old_property_name = ""; + String new_property_name = pi.getName(); + + if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.PORT)){ + old_property_name = "es.tid.TIDorbj.iiop.orb_port"; + old_property_name_founded = true; + } else if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS)){ + old_property_name = "es.tid.TIDorbj.iiop.ip_address"; + old_property_name_founded = true; + } else if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY)){ + old_property_name = "es.tid.TIDorbj.reliable_oneway"; + old_property_name_founded = true; + } + + if (old_property_name_founded){ + boolean found = false; + if ( !found && this.parameters != null ){ + String value; + value = this.parameters.getParameter(old_property_name ); + found = value != null; + if ( found ) { + pi.setValue( value ); + } + } + if ( !found && this.arguments != null ){ + int index; + index = this.arguments.indexOf( old_property_name ); + found = index > -1; + if ( found ){ + pi.setValue( (String)this.arguments.elementAt( ++index ) ); + } + } + if ( !found && this.properties != null ){ + String value; + value = this.properties.getProperty( old_property_name ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + if ( !found ){ + String value; + value = SystemProperties.findProperty( old_property_name ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + } + } + }//fillPropertyInfoOldValues + + /********************************************************************/ + + + public void fillPropertyInfo( PropertyInfo pi ){ + if ( pi != null ){ + fillPropertyInfoOldValues(pi); + boolean found = false; + if ( !found && this.parameters != null ){ + String value; + value = this.parameters.getParameter( pi.getName() ); + found = value != null; + if ( found ) { + pi.setValue( value ); + } + } + if ( !found && this.arguments != null ){ + int index; + index = this.arguments.indexOf( pi.getName() ); + found = index > -1; + if ( found ){ + pi.setValue( (String)this.arguments.elementAt( ++index ) ); + } + } + if ( !found && this.properties != null ){ + String value; + value = this.properties.getProperty( pi.getName() ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + if ( !found ){ + String value; + value = SystemProperties.findProperty( pi.getName() ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + } + } + + public void fillPropertyInfo( PropertyInfo[] pis ){ + if ( pis != null ){ + PropertyInfo pi; + for ( int i=0; i < pis.length; i++ ) { + this.fillPropertyInfo( pis[ i ] ); + } + } + } + + public void parse_init_ref(String str) + { + if (str == null) + return; + + InitialReference init_ref = new InitialReference(); + + init_ref.parse(str); + + initial_references.addElement(init_ref); + } + + public void parse_naming_service(String str) + { + if (str == null) + return; + InitialReference init_ref = new InitialReference("NameService", str); + + initial_references.addElement(init_ref); + } + + /** + * Parse the communications layer instances that should be passed to the + * CommunicationManager to be initialized. + * This method will check for the existence of the default communication + * layer (DEFAULT_COMM_LAYER)... which will represent both the IIOP and the + * local comm layers... + * @param str + */ + public void parse_comm_layers( String str ){ + if ( str != null ){ + if ( (str.indexOf( DEFAULT_COMM_LAYER ) == -1 && + str.indexOf( "es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer" ) == -1 )&& + str.trim().length() > 0 ) { + //must include default comm layer + comm_layers = DEFAULT_COMM_LAYER + ":" + str; + } else { + //default comm layer already present, + comm_layers = str; + } + } + } + + + /** + * Parse the block_size value. + * + * @param str + * the value digits. + * @pre Values must be > 256 and multiple of 8. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_block_size(String str) + { + if (str == null) + return; + + int value = parse_int(block_size_name, str); + + if ((value < 256) || (value % CDR.LONG_SIZE != 0)) + throw new INITIALIZE(block_size_name + ":invalid value " + value + + " (minimum fragment size: 256)"); + + block_size = value; + } + + /** + * Parse the exhaustive_equal boolean value. + * + * @param str + * the value representation. + * @pre Values must be "true" or "false". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_exhaustive_equal(String str) + { + if (str == null) + return; + + exhaustive_equal = parse_boolean(exhaustive_equal_name, str); + } + + /** + * Parse the typecode_cache_size value. + * + * @param str + * the value digits. + * @pre Value must be > 1024 and multiple of 8. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_typecode_cache_size(String str) + { + if (str == null) + return; + + int value = parse_int(typecode_cache_size_name, str); + + if (value < 0) + throw new INITIALIZE(typecode_cache_size_name + ": invalid value " + + value + " (fragment size must be > 0)"); + + typecode_cache_size = value; + + } + + /** + * Parse the ORB nominal Bidirectional Policy. + * + * @param str + * the policy value. + * @pre Values must be "NORMAL", "BOTH". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + //TODO: remove iiop, this is por ORB's policy manager... + public void parse_bidirectional(String str) + { + if (str == null) + return; + + short value = 0; + + if (str.equals("NORMAL")) { + return; + } else if (str.equals("BOTH")) { + try { + policy_context.setPolicy( + new BidirectionalPolicyImpl(org.omg.BiDirPolicy.BOTH.value)); + } + catch (PolicyError pe) {} + } else { + throw new org.omg.CORBA.INITIALIZE("Invalid value" + + bidirectional_name + + "=" + str); + } + } + + /** + * Parse the max_blocked_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_max_blocked_time(String str) + { + if (str == null) + return; + + long value = parse_long(max_blocked_time_name, str); + + if (value < 0) + throw new INITIALIZE(max_blocked_time_name + ":invalid value " + + value + " (minimum blocked 0)"); + + if (value != DEFAULT_MAX_BLOCKED_TIME) { + // converts to TimeT (from ms to units of 100 ns) + value = UTC.toTimeT(value); + try { + policy_context.setPolicy( + new RelativeRoundtripTimeoutPolicyImpl(value)); + } + catch (PolicyError pe) {} + max_blocked_time = value; + } + + } + + /** + * Parse the poa_max_threads value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_max_threads(String str) + { + if (str == null) + return; + + int value = parse_int(poa_max_threads_name, str); + + if (value < 1) + throw new INITIALIZE(poa_max_threads_name + ":invalid value " + + value + " (minimum 1)"); + + poa_max_threads = value; + + } + + /** + * Parse the poa_min_threads value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_min_threads(String str) + { + if (str == null) + return; + + int value = parse_int(poa_min_threads_name, str); + + if (value < 1) + throw new INITIALIZE(poa_min_threads_name + ":invalid value " + + value + " (minimum 1)"); + + poa_min_threads = value; + + } + + /** + * Parse the poa_max_queued_requests value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_max_queued_requests(String str) + { + if (str == null) + return; + + int value = parse_int(poa_max_queued_requests_name, str); + + if (value < 1) + throw new INITIALIZE(poa_max_queued_requests_name + + ":invalid value " + value + " (minimum 1)"); + + poa_max_queued_requests = value; + + } + + /** + * Parse the poa_starving_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_starving_time(String str) + { + if (str == null) + return; + + int value = parse_int(poa_starving_time_name, str); + + if (value < 0) + throw new INITIALIZE(poa_starving_time_name + ":invalid value " + + value + " (minimum 0)"); + + poa_starving_time = value; + + } + + /** + * Parse the ami_max_threads value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_max_threads(String str) + { + if (str == null) + return; + + int value = parse_int(ami_max_threads_name, str); + + if (value < 1) + throw new INITIALIZE(ami_max_threads_name + ":invalid value " + + value + " (minimum 1)"); + + ami_max_threads = value; + + } + + /** + * Parse the ami_min_threads value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_min_threads(String str) + { + if (str == null) + return; + + int value = parse_int(ami_min_threads_name, str); + + if (value < 1) + throw new INITIALIZE(ami_min_threads_name + ":invalid value " + + value + " (minimum 1)"); + + ami_min_threads = value; + + } + + /** + * Parse the ami_max_queued_requests value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_max_queued_handled_requests(String str) + { + if (str == null) + return; + + int value = parse_int(ami_max_queued_handled_requests_name, str); + + if (value < 1) + throw new INITIALIZE(ami_max_queued_handled_requests_name + + ":invalid value " + value + " (minimum 1)"); + + ami_max_queued_handled_requests = value; + + } + + /** + * Parse the ami_starving_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_starving_time(String str) + { + if (str == null) + return; + + int value = parse_int(ami_starving_time_name, str); + + if (value < 0) + throw new INITIALIZE(ami_starving_time_name + ":invalid value " + + value + " (minimum 0)"); + + ami_starving_time = value; + + } + + + + + /** + * Parse the max_time_in_shutdown value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_max_time_in_shutdown(String str) + { + if (str == null) + return; + + int value = parse_int(max_time_in_shutdown_name, str); + + if (value < 0) + throw new INITIALIZE(max_time_in_shutdown_name + ":invalid value " + + value + " (minimum blocked 0)"); + + max_time_in_shutdown = value; + + } + + + /** + * Parse the trace_level value. + * + * @param str + * the value digits. + * @pre Values must be between 0 and 4. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_trace_level(String str) + { + if (str == null) + return; + + int value = parse_int(trace_level_name, str); + + if ((value < Trace.NONE) || (value > Trace.DUMP)) + throw new INITIALIZE(trace_level_name + ":invalid value " + value + + " (valid value between 0 and 5)"); + + trace_level = value; + + } + + public void parse_trace_file_size(String size) + { + if (size == null) + return; + + long value = parse_long(trace_file_size_name, size); + + if (value < 1024L) + throw new INITIALIZE(trace_file_size_name + ": invalid value " + + value + " (valid value greater than 1024)"); + trace_file_size = value; + } + + public void parse_trace_num_files(String length) + { + if (length == null) + return; + + int value = parse_int(trace_num_files_name, length); + + if ((value < 1) || (value > 10)) + throw new INITIALIZE(trace_num_files_name + ": invalid value " + + value + " (valid value between 1 and 10)"); + + trace_num_files = value; + } + + + + + /** + * Parse the qos_enabled value. + * + * @param str + * the value digits. + * @pre Values must be true or false + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_qos_enabled(String str) + { + if (str == null) + return; + + qos_enabled = parse_boolean(qos_enabled_name, str); + + } + + /** + * Parse the ziop_chunk_size value. + * + * @param str + * the value digits. + * @pre Values must be > 0 + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ziop_chunk_size(String str) + { + if (str == null) + return; + + int value = parse_int(ziop_chunk_size_name, str); + + if (value > 0) + throw new INITIALIZE(ziop_chunk_size_name + ":invalid value " + value + + " (value must be > 0)"); + + ziop_chunk_size = value; + } + + + + /** + * Parse the assume_ziop_server value. + * + * @param str + * the value digits. + * @pre Values must be true or false + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_assume_ziop_server(String str) + { + if (str == null) + return; + + assume_ziop_server = parse_boolean(assume_ziop_server_name, str); + + } + + + + /** + * Parse the an int value. + * + * @param str + * the value digits. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid number. + */ + protected static int parse_int(String prop_name, String str) + { + try { + return Integer.parseInt(str); + } + catch (NumberFormatException num) { + throw new INITIALIZE(prop_name + ": int value expected."); + } + } + + /** + * Parse an long value + * + * @param str + * the value digits + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid number + */ + protected static long parse_long(String prop_name, String str) + { + try { + return Long.parseLong(str); + } + catch (NumberFormatException num) { + throw new INITIALIZE(prop_name + ": long value expected"); + } + } + + /** + * Parse the a boolean value. + * + * @param str + * the value representation: "true" or "false". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + protected static boolean parse_boolean(String prop_name, String str) + { + if (str.equals("true")) + return true; + else if (str.equals("false")) + return false; + else + throw new INITIALIZE(prop_name + ": boolean value expected."); + } + + public void dump(java.io.PrintWriter writer) + { + //TODO: complete dump with CommLayers stuff + writer.println("TIDorb properties:"); + + writer.print('\t'); + writer.print(block_size_name); + writer.print('='); + writer.println(block_size); + writer.print('\t'); + writer.print(exhaustive_equal_name); + writer.print('='); + writer.println(exhaustive_equal); + writer.print('\t'); + + writer.print(typecode_cache_size_name); + writer.print('='); + writer.println(typecode_cache_size); + + writer.println(); + + writer.print('\t'); + writer.print(poa_max_threads_name); + writer.print('='); + writer.println(poa_max_threads); + writer.print('\t'); + writer.print(poa_min_threads_name); + writer.print('='); + writer.println(poa_min_threads); + writer.print('\t'); + writer.print(poa_max_queued_requests_name); + writer.print('='); + writer.println(poa_max_queued_requests); + writer.print('\t'); + writer.print(poa_starving_time_name); + writer.print('='); + writer.println(poa_starving_time); + + writer.print('\t'); + writer.print(ami_max_threads_name); + writer.print('='); + writer.println(ami_max_threads); + writer.print('\t'); + writer.print(ami_min_threads_name); + writer.print('='); + writer.println(ami_min_threads); + writer.print('\t'); + writer.print(ami_max_queued_handled_requests_name); + writer.print('='); + writer.println(ami_max_queued_handled_requests); + writer.print('\t'); + writer.print(ami_starving_time_name); + writer.print('='); + writer.println(ami_starving_time); + + + writer.print('\t'); + writer.print(max_time_in_shutdown_name); + writer.print('='); + writer.println(max_time_in_shutdown); + writer.println(); + writer.print('\t'); + writer.print(trace_level_name); + writer.print('='); + writer.println(trace_level); + + if (trace_file != null) { + writer.print('\t'); + writer.print(trace_file_name); + writer.print('='); + writer.println(trace_file); + + writer.print('\t'); + writer.print(trace_file_size_name); + writer.print('='); + writer.println(trace_file_size); + + writer.print('\t'); + writer.print(trace_num_files_name); + writer.print('='); + writer.println(trace_num_files); + } + + writer.print("Default Policies:"); + st_default_policy_context.dump(writer); + writer.print('\n'); + writer.print("User Policies:"); + policy_context.dump(writer); + writer.print('\n'); + + writer.flush(); + } +} + diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ContextImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ContextImpl.java.svn-base new file mode 100644 index 0000000..8c31210 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ContextImpl.java.svn-base @@ -0,0 +1,325 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CTX_RESTRICT_SCOPE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Context; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.CORBA.NamedValue; +import org.omg.CORBA.TCKind; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * TIDorb ContextImpl pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ContextImpl extends org.omg.CORBA.Context +{ + + public ContextImpl(TIDORB orb, String name) + { + this(orb, name, null); + } + + public ContextImpl(TIDORB orb, String name, Context parent) + { + m_orb = orb; + m_name = name; + m_parent = parent; + m_values = null; + m_childs = null; + } + + public String context_name() + { + return m_name; + } + + public org.omg.CORBA.Context parent() + { + return m_parent; + } + + public org.omg.CORBA.Context create_child(String child_context_name) + { + if (child_context_name == null) { + + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + ContextImpl child = new ContextImpl(m_orb, child_context_name, this); + + if (m_childs == null) { + m_childs = new java.util.Vector(); + } + m_childs.addElement(child); + return child; + } + + public void set_one_value(String prop_name, org.omg.CORBA.Any value) + { + if ((prop_name == null) || (value == null)) { + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (m_values == null) { + m_values = new NVListImpl(m_orb); + } + + if (value.type().kind().value() != TCKind._tk_string) { + throw new BAD_PARAM("Value must have a string TypeCode."); + } + // new value + m_values.add_value(prop_name, value, 0); + } + + public void set_values(org.omg.CORBA.NVList values) + { + if (values == null) { + throw new BAD_PARAM("Null NVList reference", 0, + CompletionStatus.COMPLETED_NO); + } + + m_values = new NVListImpl(m_orb); + + int list_size = values.count(); + try { + for (int i = 0; i < list_size; i++) { + set_one_value(values.item(i).name(), values.item(i).value()); + } + } + catch (Bounds bds) {} + } + + public void delete_values(String prop_name) + { + if (prop_name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_values != null) { + int list_size = m_values.count(); + try { + for (int i = 0; i < list_size; i++) { + if (prop_name.equals(m_values.item(i).name())) { + m_values.remove(i); + } + } + } + catch (Bounds bds) {} + } + } + + public org.omg.CORBA.NVList get_values(String start_scope, int op_flags, + String pattern) + { + if ((start_scope == null) || (pattern == null)) { + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + NVListImpl list = new NVListImpl(m_orb); + + if (start_scope.equals(m_name)) { + int list_size = m_values.count(); + + try { + for (int i = 0; i < list_size; i++) { + + if (matchPattern(m_values.item(i).name(), pattern)) { + + list.add_value(m_values.item(i).name(), m_values + .item(i).value(), 0); + } + } + } + catch (Bounds bds) {}; + } + + if ((m_childs != null) && (op_flags != CTX_RESTRICT_SCOPE.value)) { + int child_size = m_childs.size(); + try { + NVList aux_list; + int list_size; + + for (int i = 0; i < child_size; i++) { + aux_list = ((Context) m_childs.elementAt(i)) + .get_values(start_scope, op_flags, pattern); + list_size = aux_list.count(); + + for (int j = 0; j < list_size; j++) { + list.add_value(aux_list.item(i).name(), aux_list + .item(i).value(), 0); + } + } + } + catch (Bounds bds) {} + + } + + return list; + } + + public String item(int i) + throws org.omg.CORBA.Bounds + { + return (m_values.item(i)).value().extract_string(); + } + + protected boolean matchPattern(String name, String pattern) + { + if (pattern.equals("*")) { + return true; + } + + int position = pattern.indexOf("*", 0); + if (position == -1) { + return name.equals(pattern); + } + if (position > name.length()) { + return false; + } + + String sub1 = pattern.substring(0, position); + String sub2 = name.substring(0, position); + return sub1.equals(sub2); + + } + + public static ContextImpl read(CDRInputStream input) + { + int pair_count = input.read_ulong(); + + if (pair_count == 0) { + return null; + } + + if ((pair_count < 1) || (pair_count % 2 != 0)) { + throw new MARSHAL("Malformed context name-value pairs", 0, + CompletionStatus.COMPLETED_NO); + } + + int num_values = pair_count / 2; + + ContextImpl context = new ContextImpl((TIDORB) input.orb(), ""); + + String name; + Any value; + + for (int i = 0; i < num_values; i++) { + name = input.read_string(); + value = input.orb().create_any(); + + value.insert_string(input.read_string()); + + context.set_one_value(name, value); + } + + return context; + } + + public static void write(CDROutputStream output, org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) + { + int contexts_count = contexts.count(); + + if (contexts_count == 0) { + //no context + output.write_ulong(0); + return; + } + + java.util.Vector nv_context = new java.util.Vector(); + + try { + NVList aux_list = null; + NamedValue nam_val = null; + int aux_list_size = 0; + + for (int i = 0; i < contexts_count; i++) { + aux_list = ctx.get_values("", 0, contexts.item(i)); + aux_list_size = aux_list.count(); + for (int j = 0; j < aux_list_size; j++) { + nam_val = aux_list.item(j); + nv_context.addElement(nam_val.name()); + nv_context.addElement(nam_val.value().extract_string()); + } + + } + } + catch (Bounds bds) {} + + int total_ctx_size = nv_context.size(); + + output.write_ulong(total_ctx_size); + + for (int i = 0; i < total_ctx_size; i++) { + output.write_string((String) nv_context.elementAt(i)); + } + } + + // members + + protected TIDORB m_orb; + + protected String m_name; + + protected Context m_parent; + + protected NVList m_values; + + protected java.util.Vector m_childs; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ContextListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ContextListImpl.java.svn-base new file mode 100644 index 0000000..485fa6c --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ContextListImpl.java.svn-base @@ -0,0 +1,90 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * TIDorb ContextList pseudobject implementation. + * + * @autor Juan A. Ca´ceres + * @version 0.1 + */ + +public class ContextListImpl extends org.omg.CORBA.ContextList +{ + + public ContextListImpl() + { + m_elements = new java.util.Vector(); + } + + public int count() + { + return m_elements.size(); + } + + public void add(String ctx) + { + m_elements.addElement(ctx); + } + + public String item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_elements.size()) { + throw new org.omg.CORBA.Bounds(); + } + + return (String) m_elements.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_elements.size()) { + throw new org.omg.CORBA.Bounds(); + } + m_elements.removeElementAt(index); + } + + protected java.util.Vector m_elements; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/EnvironmentImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/EnvironmentImpl.java.svn-base new file mode 100644 index 0000000..1bcc5de --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/EnvironmentImpl.java.svn-base @@ -0,0 +1,76 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * TIDorb Environment pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class EnvironmentImpl extends org.omg.CORBA.Environment +{ + + protected java.lang.Exception m_exception; + + public EnvironmentImpl() + { + m_exception = null; + } + + public void exception(java.lang.Exception exception) + { + m_exception = exception; + } + + public java.lang.Exception exception() + { + return m_exception; + } + + public void clear() + { + m_exception = null; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ExceptionListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ExceptionListImpl.java.svn-base new file mode 100644 index 0000000..563f684 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ExceptionListImpl.java.svn-base @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TCKind; + +/** + * TIDorb ExceptionList pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ExceptionListImpl extends org.omg.CORBA.ExceptionList +{ + + java.util.Vector m_exceptions; + + public ExceptionListImpl() + { + m_exceptions = new java.util.Vector(); + } + + public int count() + { + return m_exceptions.size(); + } + + public void add(org.omg.CORBA.TypeCode exc) + { + if (exc == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + if (exc.kind().value() != TCKind._tk_except) + throw new BAD_PARAM("Exception TypeCode expected", 0, + CompletionStatus.COMPLETED_NO); + + m_exceptions.addElement(exc); + } + + public org.omg.CORBA.TypeCode item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_exceptions.size()) + throw new org.omg.CORBA.Bounds(); + return (org.omg.CORBA.TypeCode) m_exceptions.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_exceptions.size()) + throw new org.omg.CORBA.Bounds(); + m_exceptions.removeElementAt(index); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ForwardRequest.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ForwardRequest.java.svn-base new file mode 100644 index 0000000..640ad01 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ForwardRequest.java.svn-base @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.iop.IOR; + +public class ForwardRequest extends java.lang.Exception +{ + public IOR m_reference; + + public ForwardRequest(IOR ref) + { + m_reference = ref; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/NVListImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/NVListImpl.java.svn-base new file mode 100644 index 0000000..5646c63 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/NVListImpl.java.svn-base @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.CORBA.NamedValue; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.CORBA_2_3.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class NVListImpl extends org.omg.CORBA.NVList +{ + TIDORB m_orb; + + protected java.util.Vector m_components; + + public NVListImpl(TIDORB orb) + { + m_orb = orb; + m_components = new java.util.Vector(); + } + + public NVListImpl(TIDORB orb, int count) + { + m_components = new java.util.Vector(count); + } + + public int count() + { + return m_components.size(); + } + + public org.omg.CORBA.NamedValue add(int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, "", + m_orb.create_any()); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue add_item(String item_name, int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, item_name, + m_orb.create_any()); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue add_value(String name, + org.omg.CORBA.Any value, + int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, name, value); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_components.size()) + throw new Bounds(); + + return (org.omg.CORBA.NamedValue) m_components.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_components.size()) + throw new Bounds(); + m_components.removeElementAt(index); + } + + // TIDorb Operations + + public static void destroy(NVList list) + { + try { + int size = list.count(); + for (int i = 0; i < size; i++) + list.remove(i); + } + catch (org.omg.CORBA.Bounds b) {} + } + + public static void assignOutArguments(NVList from_list, NVList to_list) + { + assignOutArguments(from_list, to_list, false); + } + + public static void assignOutArguments(NVList from_list, NVList to_list, + boolean wrap_anys) + { + int length = to_list.count(); + + if (length < from_list.count()) + throw new MARSHAL("Invalid number of out arguments.", 0, + CompletionStatus.COMPLETED_NO); + + NamedValue to_nam_val = null; + + try { + for (int i = 0; i < length; i++) { + to_nam_val = to_list.item(i); + if (to_nam_val.flags() != ARG_IN.value) + AnyImpl.assignValue(from_list.item(i).value(), + to_nam_val.value(), wrap_anys); + } + + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + public static void assignInArguments(NVList from_list, NVList to_list) + { + assignInArguments(from_list, to_list, false); + } + + public static void assignInArguments(NVList from_list, NVList to_list, + boolean wrap_anys) + { + int length = to_list.count(); + + if (length < from_list.count()) + throw new MARSHAL("Invalid number of out arguments.", 0, + CompletionStatus.COMPLETED_NO); + + NamedValue to_nam_val = null; + + try { + for (int i = 0; i < length; i++) { + to_nam_val = to_list.item(i); + if (to_nam_val.flags() != ARG_OUT.value) + AnyImpl.assignValue(from_list.item(i).value(), + to_nam_val.value(), wrap_anys); + } + + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void readOutParams(NVList list, InputStream input) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) + nam_val.value().read_value(input, nam_val.value().type()); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void writeOutParams(NVList list, OutputStream output) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) + nam_val.value().write_value(output); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void readInParams(NVList list, InputStream input) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_OUT.value) + nam_val.value().read_value(input, nam_val.value().type()); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + public static void writeInParams(NVList list, OutputStream output) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_OUT.value) + nam_val.value().write_value(output); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + // AMI operations + + public static void setOutParamsAsIn(NVList list, RequestImpl replyHandlerRequest) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) { + org.omg.CORBA.Any $arg = replyHandlerRequest.add_named_in_arg(nam_val.name()); + $arg.type(nam_val.value().type()); + } + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + + public NVList removeInParams() { + NVList listWithoutIn = new NVListImpl(m_orb); + int length = m_components.size(); + + NamedValue nam_val = null; + for (int i = 0; i < length; i++) { + nam_val = (NamedValue) m_components.elementAt(i); + if (nam_val.flags() != ARG_IN.value) + listWithoutIn.add_value(nam_val.name(), nam_val.value(), nam_val.flags()); + } + + return listWithoutIn; + } + + public NVList removeOutParams() { + NVList listWithoutOut = new NVListImpl(m_orb); + int length = m_components.size(); + + NamedValue nam_val = null; + for (int i = 0; i < length; i++) { + nam_val = (NamedValue) m_components.elementAt(i); + if (nam_val.flags() != ARG_OUT.value) + listWithoutOut.add_value(nam_val.name(), nam_val.value(), nam_val.flags()); + } + + return listWithoutOut; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/NamedValueImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/NamedValueImpl.java.svn-base new file mode 100644 index 0000000..284770c --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/NamedValueImpl.java.svn-base @@ -0,0 +1,109 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_INOUT; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; + +/** + * TIDorb NameValueImpl pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class NamedValueImpl extends org.omg.CORBA.NamedValue +{ + + protected java.lang.String m_name; + + protected org.omg.CORBA.Any m_value; + + protected int m_flags; + + protected NamedValueImpl() + {} + + public static NamedValueImpl from_int(int flags, java.lang.String name, + org.omg.CORBA.Any value) + throws org.omg.CORBA.BAD_PARAM + { + if ((name == null) || (value == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + verifyFlags(flags); + NamedValueImpl named = new NamedValueImpl(); + named.m_name = name; + named.m_value = value; + named.m_flags = flags; + return named; + + } + + private static void verifyFlags(int flags) + { + if ((flags != ARG_IN.value) && (flags != ARG_INOUT.value) + && (flags != ARG_OUT.value)) + throw new BAD_PARAM("Invalid flag argument", 0, + CompletionStatus.COMPLETED_NO); + } + + public String name() + { + return m_name; + } + + public org.omg.CORBA.Any value() + { + return m_value; + } + + public int flags() + { + return m_flags; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ORBComponent.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ORBComponent.java.svn-base new file mode 100644 index 0000000..13122a8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ORBComponent.java.svn-base @@ -0,0 +1,71 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * Base class for TIDorb Components. It defines the basic methods for accessing + * the ORB. + *

+ * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class ORBComponent extends Object +{ + + /** + * The ORB. + */ + protected TIDORB m_orb; + + public ORBComponent(TIDORB orb) + { + m_orb = orb; + } + + public TIDORB orb() + { + return m_orb; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ORBServices.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ORBServices.java.svn-base new file mode 100644 index 0000000..2cefbfe --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ORBServices.java.svn-base @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; + +class ORBServices +{ + public final static String ROOT_POA_ID = "RootPOA"; + + public final static int ROOT_POA = 0; + + public final static String POA_CURRENT_ID = "POACurrent"; + + public final static int POA_CURRENT = 1; + + public final static String INTERFACE_REPOSITORY_ID = "InterfaceRepository"; + + public final static int INTERFACE_REPOSITORY = 2; + + public final static String NAME_SERVICE_ID = "NameService"; + + public final static int NAME_SERVICE = 3; + + public final static String TRADING_SERVICE_ID = "TradingService"; + + public final static int TRADING_SERVICE = 4; + + public final static String SECURITY_CURRENT_ID = "SecurityCurrent"; + + public final static int SECURITY_CURRENT = 5; + + public final static String TRANSACTION_CURRENT_ID = "TransactionCurrent"; + + public final static int TRANSACTION_CURRENT = 6; + + public final static String DYN_ANY_FACTORY_ID = "DynAnyFactory"; + + public final static int DYN_ANY_FACTORY = 7; + + public final static String ORB_POLICY_MANAGER_ID = "ORBPolicyManager"; + + public final static int ORB_POLICY_MANAGER = 8; + + public final static String POLICY_CURRENT_ID = "PolicyCurrent"; + + public final static int POLICY_CURRENT = 9; + + public final static String NOTIFICATION_SERVICE_ID = "NotificationService"; + + public final static int NOTIFICATION_SERVICE = 10; + + public final static String TYPED_NOTIFICATION_SERVICE_ID = + "TypedNotificationService"; + + public final static int TYPED_NOTIFICATION_SERVICE = 11; + + public final static String CODEC_FACTORY_ID = "CodecFactory"; + + public final static int CODEC_FACTORY = 12; + + public final static String PI_CURRENT_ID = "PICurrent"; + + public final static int PI_CURRENT = 13; + + public final static String RT_ORB_ID = "RTORB"; + + public final static int RT_ORB = 14; + + public final static String COMPRESSION_MANAGER_ID = "CompressionManager"; + + public final static int COMPRESSION_MANAGER = 15; + + + + private TIDORB m_orb; + + private java.util.Hashtable m_corba_services_ids; + + private java.util.Hashtable m_service_table; + + private final static Integer NULL_SERVICE = new Integer(0); + + public ORBServices(TIDORB orb) + { + m_orb = orb; + + m_corba_services_ids = new java.util.Hashtable(); + + m_corba_services_ids.put(ROOT_POA_ID, new Integer(ROOT_POA)); + m_corba_services_ids.put(POA_CURRENT_ID, new Integer(POA_CURRENT)); + m_corba_services_ids.put(INTERFACE_REPOSITORY_ID, + new Integer(INTERFACE_REPOSITORY)); + m_corba_services_ids.put(NAME_SERVICE_ID, new Integer(NAME_SERVICE)); + m_corba_services_ids.put(TRADING_SERVICE_ID, + new Integer(TRADING_SERVICE)); + m_corba_services_ids.put(SECURITY_CURRENT_ID, + new Integer(SECURITY_CURRENT)); + m_corba_services_ids.put(TRANSACTION_CURRENT_ID, + new Integer(TRANSACTION_CURRENT)); + m_corba_services_ids.put(DYN_ANY_FACTORY_ID, + new Integer(DYN_ANY_FACTORY)); + m_corba_services_ids.put(ORB_POLICY_MANAGER_ID, + new Integer(ORB_POLICY_MANAGER)); + m_corba_services_ids.put(POLICY_CURRENT_ID, + new Integer(POLICY_CURRENT)); + m_corba_services_ids.put(NOTIFICATION_SERVICE_ID, + new Integer(NOTIFICATION_SERVICE)); + m_corba_services_ids.put(TYPED_NOTIFICATION_SERVICE_ID, + new Integer(TYPED_NOTIFICATION_SERVICE)); + m_corba_services_ids.put(CODEC_FACTORY_ID, new Integer(CODEC_FACTORY)); + m_corba_services_ids.put(PI_CURRENT_ID, new Integer(PI_CURRENT)); + m_corba_services_ids.put(RT_ORB_ID, new Integer(RT_ORB)); + m_corba_services_ids.put(COMPRESSION_MANAGER_ID, new Integer(COMPRESSION_MANAGER)); + + m_service_table = new java.util.Hashtable(); + + m_service_table.put(ROOT_POA_ID, NULL_SERVICE); + m_service_table.put(POA_CURRENT_ID, NULL_SERVICE); + m_service_table.put(INTERFACE_REPOSITORY_ID, NULL_SERVICE); + m_service_table.put(NAME_SERVICE_ID, NULL_SERVICE); + m_service_table.put(TRADING_SERVICE_ID, NULL_SERVICE); + m_service_table.put(SECURITY_CURRENT_ID, NULL_SERVICE); + m_service_table.put(TRANSACTION_CURRENT_ID, NULL_SERVICE); + m_service_table.put(DYN_ANY_FACTORY_ID, NULL_SERVICE); + m_service_table.put(ORB_POLICY_MANAGER_ID, NULL_SERVICE); + m_service_table.put(POLICY_CURRENT_ID, NULL_SERVICE); + m_service_table.put(NOTIFICATION_SERVICE_ID, NULL_SERVICE); + m_service_table.put(TYPED_NOTIFICATION_SERVICE_ID, NULL_SERVICE); + m_service_table.put(CODEC_FACTORY_ID, NULL_SERVICE); + m_service_table.put(PI_CURRENT_ID, NULL_SERVICE); + m_service_table.put(RT_ORB_ID, NULL_SERVICE); + m_service_table.put(COMPRESSION_MANAGER_ID, NULL_SERVICE); + + } + + public synchronized void destroy() + { + m_service_table.clear(); + m_service_table = null; + + m_corba_services_ids.clear(); + m_corba_services_ids = null; + } + + public synchronized org.omg.CORBA.Object resolveService(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + java.lang.Object table_value = m_service_table.get(object_name); + + if (table_value == null) { + if (m_orb.m_conf.default_initial_reference == null) + throw new org.omg.CORBA.BAD_PARAM(object_name); + + return m_orb.string_to_object( + m_orb.m_conf.default_initial_reference + + object_name); + } + + org.omg.CORBA.Object obj = null; + + if (table_value instanceof org.omg.CORBA.Object) + return (org.omg.CORBA.Object) table_value; + + if ((table_value instanceof Integer) + && (((Integer) table_value) != NULL_SERVICE)) { + //TODO: recomment this + //known services are registered as NULL_SERVICE to + //mark them as known initially, and instantiated when + //requested... if a service is registered with neither + //its ior nor the null service, will be an error + throw new org.omg.CORBA.INTERNAL(); + } + + Integer orb_service_val = + (Integer) m_corba_services_ids.get(object_name); + + switch (orb_service_val.intValue()) + { + case ROOT_POA: + obj = m_orb.initPOA(); + m_service_table.put(ROOT_POA_ID, obj); + return obj; + case POA_CURRENT: + obj = m_orb.initPOACurrent(); + m_service_table.put(POA_CURRENT_ID, obj); + return obj; + case DYN_ANY_FACTORY: + obj = m_orb.initDynAnyFactory(); + m_service_table.put(DYN_ANY_FACTORY_ID, obj); + + return obj; + case CODEC_FACTORY: + obj = m_orb.initCodecFactory(); + m_service_table.put(CODEC_FACTORY_ID, obj); + return obj; + case ORB_POLICY_MANAGER: + obj = m_orb.initPolicyManager(); + m_service_table.put(ORB_POLICY_MANAGER_ID, obj); + return obj; + case POLICY_CURRENT: + obj = m_orb.initPolicyCurrent(); + m_service_table.put(POLICY_CURRENT_ID, obj); + return obj; + case COMPRESSION_MANAGER: + obj = m_orb.initCompressionManager(); + m_service_table.put(COMPRESSION_MANAGER_ID, obj); + return obj; + case RT_ORB: + case INTERFACE_REPOSITORY: + case NAME_SERVICE: + case TRADING_SERVICE: + case SECURITY_CURRENT: + case TRANSACTION_CURRENT: + case NOTIFICATION_SERVICE: + case TYPED_NOTIFICATION_SERVICE: + case PI_CURRENT: + throw new org.omg.CORBA.BAD_OPERATION("Service not available"); + default: + throw new org.omg.CORBA.INTERNAL(); + } + } + + public synchronized void registerInitialReference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + if (object_name == null) + throw new BAD_PARAM("Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + if (obj == null) + throw new BAD_PARAM("Null Object reference", + 24, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + if (m_corba_services_ids.containsKey(object_name)) + throw new org.omg.CORBA.ORBPackage.InvalidName(object_name); + + m_service_table.put(object_name, obj); + } + + public synchronized String[] listInitialServices() + { + java.util.Vector list = new java.util.Vector(); + + java.util.Enumeration e = m_service_table.keys(); + + while (e.hasMoreElements()) { + list.addElement(e.nextElement()); + } + + int ids_size = list.size(); + + String[] ids = new String[ids_size]; + + for (int i = 0; i < ids_size; i++) + ids[i] = (String) list.elementAt(i); + + return ids; + } + + protected synchronized void setService(String object_name, + org.omg.CORBA.Object obj) + { + if (object_name == null) + throw new BAD_PARAM( "Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + if (obj == null) + throw new BAD_PARAM("Null Object reference", + 24, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + m_service_table.put(object_name, obj); + } + + protected synchronized void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (object_name == null) + throw new BAD_PARAM("Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + if (m_service_table.containsKey(object_name)) + m_service_table.remove(object_name); + else + throw new org.omg.CORBA.ORBPackage.InvalidName(object_name); + } +} diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ObjectImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ObjectImpl.java.svn-base new file mode 100644 index 0000000..e4cb57c --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ObjectImpl.java.svn-base @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.comm.CommunicationException; + +public class ObjectImpl extends org.omg.CORBA_2_3.portable.ObjectImpl +{ + + protected final static String[] __ids = { "IDL:omg.org/CORBA/Object:1.0" }; + + public ObjectImpl() + {} + + public static ObjectImpl fromIOR(es.tid.TIDorbj.core.TIDORB orb, + es.tid.TIDorbj.core.iop.IOR ior) + { + ObjectImpl obj = new ObjectImpl(); + try { + obj._set_delegate( + orb.getCommunicationManager().createDelegate( ior ) + ); + } catch (CommunicationException ce ){ + //TODO: ¿? + } + return obj; + } + + public String[] _ids() + { + return __ids; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ObjectKey.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ObjectKey.java.svn-base new file mode 100644 index 0000000..4e07356 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ObjectKey.java.svn-base @@ -0,0 +1,135 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.util.Base64Codec; + +/** + * ObjectKey data structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ObjectKey +{ + private String str; + + Encapsulation m_marshaled_key; + + public ObjectKey(){ + } + + public ObjectKey(Encapsulation key) { + this.m_marshaled_key = key; + } + + public boolean equal(ObjectKey other) + { + return ( m_marshaled_key == null && m_marshaled_key == other.m_marshaled_key ) || + ( m_marshaled_key.equal( other.m_marshaled_key ) ); + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_marshaled_key = input.readEncapsulation(); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_marshaled_key != null) { + output.writeEncapsulation(m_marshaled_key); + } else { + throw new org.omg.CORBA.INTERNAL("Malformed Objectkey"); + } + } + + public void setMarshaledKey( Encapsulation marshaled_key ) { + this.m_marshaled_key = marshaled_key; + } + + public Encapsulation getMarshaledKey() { + return m_marshaled_key; + } + + //TODO: tryToGetURLKey should be removed, and also the one in IIOPCorbaLoc + public String getURL() { + //TODO: check if this should be stored locally for further invocations + String url; + try { + int size = this.m_marshaled_key.getLength(); + int offset = this.m_marshaled_key.getOffset(); + + CDRInputStream input = new CDRInputStream( + this.m_marshaled_key.getORB(), + this.m_marshaled_key.getOctetSequence() + ); + + if (offset > 0) { + input.skip(offset); + } + + char[] url_key = new char[size]; + + input.read_char_array(url_key, 0, size); + + + + url = new String(url_key); + } catch ( Throwable th ){ + th.printStackTrace(); + url = null; + } + return url; + }//getURL + + public synchronized String toString() + { + if(str == null) { + str = Base64Codec.encode(m_marshaled_key.getOctetSequence()); + } + + return str; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ProcessingState.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ProcessingState.java.svn-base new file mode 100644 index 0000000..1f52a20 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ProcessingState.java.svn-base @@ -0,0 +1,133 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +class ProcessingState +{ + + final static short CLIENT = 0; + + final static short RUNNING = 1; + + final static short SHUTDOWNING = 2; + + final static short SHUTDOWNED = 3; + + short m_state; + + TIDORB m_orb; + + public ProcessingState(TIDORB orb) + { + this.m_orb = orb; + m_state = CLIENT; + } + + public short state() + { + return m_state; + } + + public synchronized void running() + { + if (m_state == CLIENT) { + m_state = RUNNING; + } + } + + public boolean isShutdowned() + { + return m_state == SHUTDOWNED; + } + + public synchronized void shutdown() + { + if (m_state == RUNNING) { + m_state = SHUTDOWNING; + ShutdownThread thread = new ShutdownThread(m_orb); + thread.start(); + } + } + + public synchronized void shutdowned() + { + if (m_state == SHUTDOWNING) { + m_state = SHUTDOWNED; + notifyAll(); + } + } + + public synchronized void waitForShutdown() + { + if (m_state == SHUTDOWNING) { + try { + wait(m_orb.m_conf.max_time_in_shutdown); + } + catch (InterruptedException ie) {} + } else if (m_state == RUNNING) { + try { + wait(); + } + catch (InterruptedException ie) {} + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public synchronized boolean waitForShutdown(long millis) + { + if ((m_state == RUNNING) || (m_state == CLIENT)) { + try { + wait(millis); + } + catch (InterruptedException ie) {} + } + + return (m_state == RUNNING) ? false : true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/PseudoObject.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/PseudoObject.java.svn-base new file mode 100644 index 0000000..25d1e12 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/PseudoObject.java.svn-base @@ -0,0 +1,187 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.OBJECT_NOT_EXIST; + +/** + * Base class for all TIDorb's pseudobjects. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public abstract class PseudoObject + implements org.omg.CORBA.Object +{ + + /** + * If true the Object has been destroyed and it will throw a + * org.omg.CORBA.OBJECT_NOT_EXIST exception. + * Many Objects has the destroy method, this method will change + * this attribute. + */ + + protected boolean m_destroyed; + + /** + * Object hashcode. + */ + + protected int m_hash_code; + + protected PseudoObject() + { + m_destroyed = false; + m_hash_code = -1; + } + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + return repositoryIdentifier.equals("IDL:omg.org/CORBA/Object:1.0"); + } + + public boolean _non_existent() + { + return m_destroyed; + } + + public int _hash(int maximum) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (m_hash_code == -1) { + m_hash_code = hashCode(); + while (m_hash_code > maximum) + m_hash_code %= maximum; + } + + return m_hash_code; + } + + public boolean _is_equivalent(org.omg.CORBA.Object other) + { + if (other == null) + throw new BAD_PARAM("Null Object reference"); + + return (this == other); + } + + public org.omg.CORBA.Object _duplicate() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return this; + } + + public void _release() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + } + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + + public org.omg.CORBA.InterfaceDef _get_interface() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object _get_interface_def() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request _request(java.lang.String operation) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Request + _create_request(org.omg.CORBA.Context ctx, + java.lang.String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Request + _create_request(org.omg.CORBA.Context ctx, + java.lang.String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Policy _get_policy(int policy_type) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.DomainManager[] _get_domain_managers() + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Object + _set_policy_override(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/RequestCounter.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/RequestCounter.java.svn-base new file mode 100644 index 0000000..27fdeb9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/RequestCounter.java.svn-base @@ -0,0 +1,18 @@ +package es.tid.TIDorbj.core; + + +public class RequestCounter +{ + private long m_serial; + + public RequestCounter() + { + m_serial = 0L; + } + + public synchronized long next() + { + return m_serial++; + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/RequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/RequestImpl.java.svn-base new file mode 100644 index 0000000..67bd5ee --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/RequestImpl.java.svn-base @@ -0,0 +1,559 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_INOUT; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging.ReplyHandlerOperations; +import org.omg.Messaging.ReplyHandlerPOA; +import org.omg.Messaging._ReplyHandlerStub; + +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb DII Request implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class RequestImpl extends org.omg.CORBA.Request +{ + /** + * The orb. + */ + TIDORB m_orb; + + /** + * Target CORBA object. + */ + org.omg.CORBA.portable.ObjectImpl m_target; + + /** + * operation name. + */ + String m_operation_name; + + /** + * Request identifier. + */ + RequestId m_request_id; + + /** + * Needs response. + */ + boolean m_with_response = false; + + /** + * Reliable oneway request that needs response. + */ + boolean m_reliable_oneway = false; + + /** + * Completion status needed in exception throwing. Initialy, the status is + * COMPLETED_NO + */ + CompletionStatus m_completed; + + /** + * Request context + */ + org.omg.CORBA.Context m_context; + + /** + * Request arguments + */ + org.omg.CORBA.NVList m_arguments; + + /** + * Request result value + */ + org.omg.CORBA.NamedValue m_result; + + /** + * Request exception list + */ + org.omg.CORBA.ExceptionList m_exceptions; + + /** + * Request context list + */ + org.omg.CORBA.ContextList m_contextlist; + + /** + * Request environment + */ + EnvironmentImpl m_environment; + + /** + * Request Policy Context + */ + PolicyContext m_policy_context; + + /** + * ReplyHandler object reference for AMI callback model + */ + Object m_handler; + + + public RequestImpl(org.omg.CORBA.Object target, org.omg.CORBA.Context ctx, + String operation, org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist) + { + m_completed = CompletionStatus.COMPLETED_NO; + + m_target = (org.omg.CORBA.portable.ObjectImpl) target; + + org.omg.CORBA.ORB obj_orb = m_target._orb(); + + if ((obj_orb != null) && (obj_orb instanceof TIDORB)) + m_orb = (TIDORB) obj_orb; + else + throw new BAD_PARAM("Invalid ORB"); + + m_request_id = null; + + m_operation_name = operation; + m_context = ctx; + m_arguments = arg_list; + m_result = result; + m_exceptions = exclist; + m_contextlist = ctxlist; + m_environment = new EnvironmentImpl(); + m_policy_context = null; + m_handler = null; + } + + /** + * Set the completion status to COMPLETED_MAYBE + */ + public void setCompletedMaybe() + { + m_completed = CompletionStatus.COMPLETED_MAYBE; + } + + /** + * Set the completion status to COMPLETED_YES + */ + public void setCompletedYes() + { + m_completed = CompletionStatus.COMPLETED_YES; + } + + /** + * @return the current completion status + */ + public CompletionStatus getCompleted() + { + return m_completed; + } + + public org.omg.CORBA.Object target() + { + return m_target; + } + + public String operation() + { + return m_operation_name; + } + + public org.omg.CORBA.NVList arguments() + { + return m_arguments; + } + + public org.omg.CORBA.NamedValue result() + { + return m_result; + } + + public org.omg.CORBA.Environment env() + { + return m_environment; + } + + public void setUserException(Any exc) + { + m_environment.exception(new UnknownUserException(exc)); + } + + public void setSystemException(org.omg.CORBA.SystemException exc) + { + m_environment.exception(exc); + } + + public org.omg.CORBA.ExceptionList exceptions() + { + return m_exceptions; + } + + public org.omg.CORBA.ContextList contexts() + { + return m_contextlist; + } + + public void ctx(org.omg.CORBA.Context ctx) + { + if (ctx == null) + throw new BAD_PARAM("Null Context reference", 0, + CompletionStatus.COMPLETED_NO); + + m_context = ctx; + } + + public org.omg.CORBA.Context ctx() + { + return m_context; + } + + public org.omg.CORBA.Any add_in_arg() + { + return addArg(ARG_IN.value); + } + + public org.omg.CORBA.Any add_named_in_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_IN.value); + } + + public org.omg.CORBA.Any add_inout_arg() + { + return addArg(ARG_INOUT.value); + } + + public org.omg.CORBA.Any add_named_inout_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_INOUT.value); + } + + public org.omg.CORBA.Any add_out_arg() + { + return addArg(ARG_OUT.value); + } + + public org.omg.CORBA.Any add_named_out_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_OUT.value); + } + + public void set_return_type(org.omg.CORBA.TypeCode tc) + { + if (tc == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + Any result_any = m_orb.create_any(); + result_any.type(tc); + m_result = NamedValueImpl.from_int(ARG_OUT.value, "", result_any); + } + + public org.omg.CORBA.Any return_value() + { + if (m_result != null) + return m_result.value(); + else + throw new BAD_OPERATION("No result defined."); + } + + public void readResult(InputStream input) + { + if (m_result != null) + m_result.value().read_value(input, m_result.value().type()); + } + + public void invoke() + { + try { + m_with_response = true; + + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + + delegate.invoke(this); + + } + catch (org.omg.CORBA.SystemException se) { + setSystemException(se); + if (m_orb.m_trace != null) { + m_orb.m_trace.printStackTrace(Trace.DEEP_DEBUG, + "RequestImpl.invoke():" + + " system exception", + se); + } + } + catch (Throwable th) { + org.omg.CORBA.SystemException se = new org.omg.CORBA.UNKNOWN(); + setSystemException(se); + if (m_orb.m_trace != null) { + m_orb.m_trace.printStackTrace(Trace.ERROR, + "RequestImpl.invoke():" + + " Unexpected exception", + th); + } + } + + Exception e = m_environment.exception(); + + if ((e != null) && (e instanceof org.omg.CORBA.SystemException)) + throw (org.omg.CORBA.SystemException) e; + } + + public void send_oneway() + { + + try { + m_with_response = false; + + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + + delegate.onewayRequest(this); + + } + catch (org.omg.CORBA.SystemException se) { + se.completed = m_completed; + throw se; + } + + } + + public void send_deferred () { + throw new org.omg.CORBA.NO_IMPLEMENT(); + + + /*try { + m_handler = m_arguments.item(0).value().extract_Object(); + m_arguments.remove(0); + } catch (BAD_OPERATION e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Bounds e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + m_with_response = true; + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + delegate.asyncRequest(this);*/ + } + + public void get_response() + throws org.omg.CORBA.WrongTransaction + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_response() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +// BUG [#956] Invalid call to org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI +// //Additional Messaging Operations +// public void sendc(org.omg.CORBA.Object handler) { +// m_handler = handler; + +// try { +// m_with_response = true; +// CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); +// //delegate.asyncRequest(this); +// delegate.asyncRequest(this, m_handler); +// } +// catch (org.omg.CORBA.SystemException se) { +// setSystemException(se); +// if (m_orb.m_trace != null) { +// m_orb.m_trace.printStackTrace(Trace.DEEP_DEBUG, +// "RequestImpl.send_deferred():" + +// " system exception", +// se); +// } +// } +// catch (Throwable th) { +// org.omg.CORBA.SystemException se = new org.omg.CORBA.UNKNOWN(); +// setSystemException(se); +// if (m_orb.m_trace != null) { +// m_orb.m_trace.printStackTrace(Trace.ERROR, +// "RequestImpl.send_deferred():" + +// " Unexpected exception", +// th); +// } +// } + +// Exception e = m_environment.exception(); + +// if ((e != null) && (e instanceof org.omg.CORBA.SystemException)) +// throw (org.omg.CORBA.SystemException) e; +// } + + public Object sendp() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void prepare(Object p) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // TIDOrb operations + + public TIDORB orb() + { + return m_orb; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public void reliableOneway(boolean value) + { + m_reliable_oneway = value; + } + + public boolean reliableOneway() + { + return m_reliable_oneway; + } + + public void withResponse(boolean value) + { + m_with_response = value; + } + + public boolean withResponse() + { + return m_with_response; + } + + private org.omg.CORBA.Any addArg(String name, int flag_value) + { + if (m_arguments == null) + m_arguments = new NVListImpl(m_orb); + + NamedValueImpl arg; + arg = (NamedValueImpl) m_arguments.add_item(name, flag_value); + return arg.value(); + } + + private org.omg.CORBA.Any addArg(int flag_value) + { + if (m_arguments == null) + m_arguments = new NVListImpl(m_orb); + + NamedValueImpl arg; + arg = (NamedValueImpl) m_arguments.add(flag_value); + return arg.value(); + } + + public void writeInParams(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_arguments != null) + NVListImpl.writeInParams(m_arguments, output); + } + + public void setPolicyContext(PolicyContext context) + { + m_policy_context = context; + } + + public PolicyContext getPolicyContext() + { + if (m_policy_context == null) { + + CommunicationDelegate delegate = + (CommunicationDelegate) m_target._get_delegate(); + + + m_policy_context = delegate.createRequestPolicyContext(); + } + + return m_policy_context; + } + + public void set_ami_handler(Object handler) + { + m_handler = handler; + } + + public Object get_ami_handler() + { + return m_handler; + } + + public void setOperationName (String operName) { + m_operation_name = operName; + } +} diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ServerRequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ServerRequestImpl.java.svn-base new file mode 100644 index 0000000..6a7704a --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ServerRequestImpl.java.svn-base @@ -0,0 +1,279 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TCKind; +import org.omg.Compression.CompressorIdLevel; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +//TODO: make TargetAddress generic and move it to giop package +/** + * TIDorb DSI ServerRequest implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ServerRequestImpl extends org.omg.CORBA.ServerRequest +{ + + private final static int NO_ARGUMENTS_FIXED = 0; + + private final static int ARGUMENTS_FIXED = 1; + + private final static int RESULT_FIXED = 2; + + public final static int NO_EXCEPTION = 0; + + public final static int USER_EXCEPTION = 1; + + public final static int SYSTEM_EXCEPTION = 2; + + public final static int LOCATION_FORWARD = 3; + + private int m_completion_state; + + private int m_return_state; + + RequestId m_request_id; + + boolean m_with_response = false; + + String m_operation_name; + + TargetAddress m_target; + + GIOPVersion m_version; + + org.omg.CORBA.Context m_context; + + org.omg.CORBA.NVList m_server_parameters; + + Any m_result; + + Any m_exception; + + SystemException m_system_exception; + + org.omg.CORBA.Object m_forward_obj; + + CDRInputStream m_marshaled_parameters; + + CompressorIdLevel m_compressor; + + public ServerRequestImpl(GIOPVersion ver, + RequestId id, + String operation, + CDRInputStream cdr_parameters, + TargetAddress target) + { + m_completion_state = NO_ARGUMENTS_FIXED; + m_return_state = NO_EXCEPTION; + + m_version = ver; + m_request_id = id; + m_operation_name = operation; + m_context = null; + m_server_parameters = null; + m_marshaled_parameters = cdr_parameters; + m_target = target; + m_forward_obj = null; + m_compressor = new CompressorIdLevel((short)0,(short)0); + } + + public String operation() + { + return m_operation_name; + } + + public org.omg.CORBA.Context ctx() + { + if (m_completion_state != ARGUMENTS_FIXED) + throw new BAD_INV_ORDER( + "ctx() called after arguments() or set_result()."); + + return m_context; + } + + public void arguments(org.omg.CORBA.NVList nv) + { + if (m_completion_state != NO_ARGUMENTS_FIXED) + throw new BAD_INV_ORDER("arguments() called again."); + + m_completion_state = ARGUMENTS_FIXED; + + m_server_parameters = nv; + NVListImpl.readInParams(m_server_parameters, m_marshaled_parameters); + try { + m_context = (ContextImpl) m_marshaled_parameters.read_Context(); + } + catch (org.omg.CORBA.MARSHAL me) {} + } + + public void set_result(org.omg.CORBA.Any result) + { + if (m_completion_state != ARGUMENTS_FIXED) + throw new BAD_INV_ORDER("arguments() called again."); + + m_completion_state = RESULT_FIXED; + + m_return_state = NO_EXCEPTION; + + this.m_result = result; + } + + public void set_exception(org.omg.CORBA.Any except) + { + if (except.type().kind().value() != TCKind._tk_except) + throw new BAD_PARAM("Any value must be a user exception."); + + m_completion_state = RESULT_FIXED; + m_return_state = USER_EXCEPTION; + + m_exception = except; + } + + // TIDorb operations + + public void setSystemException(org.omg.CORBA.SystemException except) + { + m_completion_state = RESULT_FIXED; + m_return_state = SYSTEM_EXCEPTION; + + m_system_exception = except; + } + + public void setForward(org.omg.CORBA.Object obj) + { + m_completion_state = RESULT_FIXED; + m_return_state = LOCATION_FORWARD; + + m_forward_obj = obj; + } + + public TargetAddress getTarget() + { + return m_target; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public void withResponse(boolean value) + { + m_with_response = value; + } + + public boolean withResponse() + { + return m_with_response; + } + + public int getReturnState() + { + return m_return_state; + + } + + public Any getResult() + { + return m_result; + } + + public Any getException() + { + return m_exception; + } + + public SystemException getSystemException() + { + return m_system_exception; + } + + public org.omg.CORBA.NVList getParameters() + { + return m_server_parameters; + } + + public org.omg.CORBA.Object getForward() + { + return m_forward_obj; + } + + public GIOPVersion getVersion() + { + return m_version; + } + + public void destroy() + { + NVListImpl.destroy(m_server_parameters); + } + + public CompressorIdLevel get_compressor() + { + return m_compressor; + } + + public void set_compressor(CompressorIdLevel compressor) + { + m_compressor = compressor; + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/ShutdownThread.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/ShutdownThread.java.svn-base new file mode 100644 index 0000000..97e047d --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/ShutdownThread.java.svn-base @@ -0,0 +1,60 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +class ShutdownThread extends Thread +{ + + TIDORB m_orb; + + public ShutdownThread(TIDORB orb) + { + this.m_orb = orb; + } + + public void run() + { + m_orb.doCompleteShutdown(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/SingletonORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/SingletonORB.java.svn-base new file mode 100644 index 0000000..42d2340 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/SingletonORB.java.svn-base @@ -0,0 +1,420 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; + +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; + +/** + * TIDorb Version 2.3 CORBA ORB Singleton. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SingletonORB extends org.omg.CORBA_2_3.ORB +{ + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * ORB singleton static reference: only a instance will be for all orb. + * This rerefence will be returned by init() method. + */ + + protected static SingletonORB st_orb = null; + + public SingletonORB() + { + m_conf = new ConfORB(); + } + + public static org.omg.CORBA.ORB init() + { + if (st_orb == null) + st_orb = new SingletonORB(); + + return st_orb; + } + + public static org.omg.CORBA.ORB init(String[] args, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public static org.omg.CORBA.ORB init(java.applet.Applet app, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + protected void set_parameters(String[] args, java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void connect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void disconnect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public String[] list_initial_services() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object string_to_object(String str) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NVList create_list(int count) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ContextList create_context_list() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Context get_default_context() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Environment create_environment() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference"); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc(String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_alias_tc(String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference"); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.TypeCode + create_exception_tc(java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc(int bound, + org.omg.CORBA.TypeCode element_type) + { + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode + create_recursive_sequence_tc(int bound,int offset) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode + create_array_tc(int length, org.omg.CORBA.TypeCode element_type) + { + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference"); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference"); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference"); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.Any create_any() + { + return new es.tid.TIDorbj.core.AnyImpl(null); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void unregister_value_factory(String id) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_delegate(java.lang.Object wrapper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/StreamRequestImpl.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/StreamRequestImpl.java.svn-base new file mode 100644 index 0000000..0a46e8a --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/StreamRequestImpl.java.svn-base @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.CompletionStatus; + +import es.tid.TIDorbj.core.comm.giop.RequestId; + +public class StreamRequestImpl +{ + /** + * The orb. + */ + TIDORB m_orb; + + /** + * Target CORBA object. + */ + org.omg.CORBA.portable.ObjectImpl m_target; + + /** + * operation name. + */ + String m_operation_name; + + /** + * Request identifier. + */ + RequestId m_request_id = null; + + /** + * Needs response. + */ + boolean m_with_response = false; + + es.tid.TIDorbj.core.cdr.CDRInputStream m_response = null; + + es.tid.TIDorbj.core.cdr.CDROutputStream m_request = null; + + /** + * Completion status needed in exception throwing. Initialy, the status is + * COMPLETED_NO + */ + CompletionStatus m_completed; + + public StreamRequestImpl(TIDORB orb, + org.omg.CORBA.portable.ObjectImpl target, + String operation, boolean response) + { + m_orb = orb; + m_target = target; + m_operation_name = operation; + m_with_response = response; + } + + public TIDORB orb() + { + return m_orb; + } + + public void setInputStream(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_response = input; + } + + public es.tid.TIDorbj.core.cdr.CDRInputStream getInputStream() + { + return m_response; + } + + public void setOutputStream(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + m_request = output; + } + + public es.tid.TIDorbj.core.cdr.CDROutputStream getOutputStream() + { + return m_request; + } + + public org.omg.CORBA.portable.ObjectImpl getTarget() + { + return m_target; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public boolean withResponse() + { + return m_with_response; + } + + public String operation() + { + return m_operation_name; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/.svn/text-base/TIDORB.java.svn-base b/source/es/tid/TIDorbj/core/.svn/text-base/TIDORB.java.svn-base new file mode 100644 index 0000000..15f4fbd --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/text-base/TIDORB.java.svn-base @@ -0,0 +1,1653 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.io.IOException; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServiceInformationHolder; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.ORBPackage.InvalidName; +import org.omg.CORBA.portable.Delegate; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMIManager; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.typecode.AbstractInterfaceTypeCode; +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.core.util.Corbaname; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.CircularTraceFile; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb GIOPVersion 2.6 CORBA ORB. + *

+ * + * @autor Juan A. Cáceres + * @version 2.0 + */ +public class TIDORB extends org.omg.CORBA_2_5.ORB +{ + + /** + * ORB GIOPVersion + */ + + public final static String st_version = "6.5.0rc1"; + + /** + * @return the ORB Singleton instance. + */ + public static org.omg.CORBA.ORB init() + { + return SingletonORB.init(); + } + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * Local POAManagers. + */ + public java.util.Vector m_POAManagers; + + /** + * TraceService reference. + */ + public es.tid.TIDorbj.util.Trace m_trace; + + /** + * Local Codec factory. + */ + private CodecFactoryImpl m_codec_factory; + + /** TODO: remove me + * ORB Communication layer, drives request to the local layer or the + * external layer. + + private es.tid.TIDorbj.core.comm.iiop.CommLayer m_comm_layer;*/ + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + private CommunicationManager communicationManager; + + + /** + * Local CurrentImpl. + */ + private es.tid.TIDorbj.core.poa.CurrentImpl m_current; + + /** + * The ORB has been destroyed. + */ + + private boolean m_destroyed; + + /** + * Local DynAny factory. + */ + private es.tid.TIDorbj.dynAny.DynAnyFactoryImpl m_dyn_factory; + + /** + * ORB PolicyManager. + */ + private es.tid.TIDorbj.core.policy.PolicyManagerImpl m_orb_policy_manager; + + /** + * ORB Services + */ + + private ORBServices m_orb_services; + + /** + * Thread Policy Current. + */ + private es.tid.TIDorbj.core.policy.PolicyCurrentImpl m_policy_current; + + + /** + * Compression Manager. + */ + private es.tid.TIDorbj.core.compression.CompressionManagerImpl m_compression_manager; + + + /** + * Local rootPOA. + */ + private es.tid.TIDorbj.core.poa.POAImpl m_root_POA; + + /** + * Processing state: controls the ORB shutdown. + */ + + private ProcessingState m_state; + + /** + * Thread Policy Context Manager. + */ + private es.tid.TIDorbj.core.policy.PolicyContextManager + m_thread_policy_context_manager; + + /** + * Maintains the order which the request was created + */ + private RequestCounter requestCounter; + + /** + * TypeCode Cache. + */ + + private es.tid.TIDorbj.core.typecode.TypeCodeCache m_typecode_cache; + + /** + * ORB ValueFactoryList + */ + + private java.util.Hashtable m_value_factories; + + /** + * ORB Name + */ + + String m_orb_name; + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + + + /** + * Constructor. The orb must be initialized using the set_parameters(). + */ + public TIDORB() + { + m_conf = null; + m_state = new ProcessingState(this); + m_destroyed = false; + + this.communicationManager = null; + this.requestCounter = new RequestCounter(); + + m_dyn_factory = null; + m_root_POA = null; + m_trace = null; + m_current = null; + m_typecode_cache = null; + m_ami_manager = null; + } + + public void connect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + + public TypeCode create_abstract_interface_tc(String id, String name) + { + return new AbstractInterfaceTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode + create_alias_tc( String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.Any create_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.AnyImpl(this); + } + + public org.omg.CORBA.TypeCode + create_array_tc( int length, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.ContextList create_context_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ContextListImpl(); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.Environment create_environment() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.EnvironmentImpl(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ExceptionListImpl(); + } + + public org.omg.CORBA.TypeCode + create_exception_tc( java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_list(int count) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (count < 0) + throw new BAD_PARAM("Count < 0", 0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.NVListImpl(this, count); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((s == null) || (any == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return es.tid.TIDorbj.core.NamedValueImpl.from_int(flags, s, any); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new CDROutputStream(this, m_conf.block_size); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (val == null) + throw new BAD_PARAM("Null any reference"); + + return es.tid.TIDorbj.core.policy.PolicyFactory.createPolicy(type, val); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode create_recursive_sequence_tc(int bound, + int offset) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc( int bound, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc( String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (concrete_base == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + /** + * Free all the ORB resources: connections and threads. + */ + + synchronized public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + // The thread is serving a request? + + if (initPOACurrent().inContext()) { // yes, it is in the serving request + // context + + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.shutdown(); + + m_state.waitForShutdown(); + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + * m_comm_layer.destroy(); + */ + this.communicationManager.destroy(); + this.communicationManager = null; + + + if (m_trace != null) { + try { + printTrace(Trace.USER, "Closing ORB Session."); + m_trace.close(); + } + catch (Throwable th) {} + + m_trace = null; + } + + if (m_value_factories != null) + m_value_factories.clear(); + + m_value_factories = null; + + if (m_codec_factory != null) { + m_codec_factory.destroy(); + m_codec_factory = null; + } + + if (m_dyn_factory != null) { + m_dyn_factory.destroy(); + m_dyn_factory = null; + } + + m_orb_services.destroy(); + m_orb_services = null; + + m_root_POA = null; + + if (m_current != null) { + m_current.destroy(); + m_current = null; + } + + m_destroyed = true; + } + + public boolean destroyed() + { + return m_destroyed; + } + + public void disconnect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated + */ + public org.omg.CORBA.Current get_current() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + return m_current; + } + + public org.omg.CORBA.Context get_default_context() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference", 0, + CompletionStatus.COMPLETED_NO); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public boolean + get_service_information( short service_type, + ServiceInformationHolder service_info) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + public CommunicationManager getCommunicationManager(){ + if ( m_destroyed ){ + throw new OBJECT_NOT_EXIST(); + } + return this.communicationManager; + } + + + + public es.tid.TIDorbj.core.policy.PolicyContextManager + getPolicyContextManager() + { + return m_thread_policy_context_manager; + } + + public es.tid.TIDorbj.core.policy.PolicyManagerImpl getPolicyManager() + { + return initPolicyManager(); + } + + public es.tid.TIDorbj.core.compression.CompressionManagerImpl getCompressionManager() + { + return initCompressionManager(); + } + + public es.tid.TIDorbj.core.typecode.TypeCodeCache getTypeCodeCache() + { + return m_typecode_cache; + } + + public RequestCounter getRequestCounter() + { + return this.requestCounter; + } + + + // CORBA 2.5 + public String id() + { + return m_conf.orb_id; + } + + // ORB Services + + public es.tid.TIDorbj.core.poa.POAImpl initPOA() { + synchronized (this) { + if (m_root_POA == null) { + m_root_POA = + es.tid.TIDorbj.core.poa.POAImpl.createRootPOA(this); + + + // init the orb listening points (usually one for each layer) + try { + this.communicationManager.setServerModeEnabled( true ); + } catch ( CommunicationException ce ) { + throw new INITIALIZE( "Unable to activate server mode: " + ce.getMessage() ); + } + + m_state.running(); + } + } + + return m_root_POA; + } + + public es.tid.TIDorbj.core.poa.CurrentImpl initPOACurrent() + { + synchronized (this) { + if (m_current == null) { + m_current = new es.tid.TIDorbj.core.poa.CurrentImpl(this); + } + } + + return m_current; + } + + public String[] list_initial_services() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_orb_services.listInitialServices(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + return (org.omg.CORBA.portable.ValueFactory) m_value_factories.get(id); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return IOR.nullIOR().toString(); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj) + ._get_delegate(); + + if (obj instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, + CompletionStatus.COMPLETED_NO); + + if (delegate instanceof CommunicationDelegate) + return ((CommunicationDelegate) delegate).toString(); + else + throw new BAD_PARAM("This Object has not been create by TIDorb", + 0, + CompletionStatus.COMPLETED_NO); + } + + public String objectToURL(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return Corbaloc.toURL(IOR.nullIOR()); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + //TODO: refactor URL/String IOR stuff + return ((CommunicationDelegate) delegate).getReference().toURL(); + } else + throw new BAD_PARAM("This Object has not been create by TIDorb", 0, + CompletionStatus.COMPLETED_NO); + } + + public void perform_work() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void printTrace(int level, String message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printTrace(int level, String message, Throwable e) + { + if (m_trace != null) + m_trace.printStackTrace(level, message, e); + } + + public void printTrace(int level, String[] message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printDump(int level, byte[] message, int length) + { + if (m_trace != null) + m_trace.dump(level, message, length); + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.registerInitialReference(object_name, obj); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + synchronized (m_value_factories) { + if (m_value_factories.containsKey(id)) + return null; + m_value_factories.put(id, factory); + } + + return factory; + } + + public void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.removeInitialReference(object_name); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (object_name == null) + throw new BAD_PARAM("Null String reference", 24, + CompletionStatus.COMPLETED_NO); + + return m_orb_services.resolveService(object_name); + } + + public void run() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (m_root_POA == null) { + throw new org.omg.CORBA.INTERNAL("RootPOA has not been created."); + } + + m_state.waitForShutdown(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < req.length; i++) + req[i].send_oneway(); + } + + public void set_delegate(java.lang.Object wrapper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (wrapper instanceof org.omg.PortableServer.Servant) { + org.omg.PortableServer.Servant servant = + (org.omg.PortableServer.Servant) wrapper; + + if (m_root_POA == null) { + initPOA(); + } + + try { + org.omg.CORBA.ORB servantOrb = servant._orb(); + if ( servantOrb != this ) { + throw new + BAD_PARAM("Servant is already active in another ORB"); + } + } + catch (org.omg.CORBA.BAD_INV_ORDER e) { + try { + m_root_POA.activate_object(servant); + + // Exceptions should never be thrown + } catch (org.omg.PortableServer.POAPackage.WrongPolicy wp) + { + } + catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive s) + { + } + } + } else + throw new BAD_PARAM("Servant expected"); + + } + + public void shutdown(boolean wait_for_completion) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + m_state.shutdown(); + + if (wait_for_completion) { + if (initPOACurrent().inContext()) { + // yes, it is in the serving request context + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.waitForShutdown(); + } + } + + public org.omg.CORBA.Object string_to_object(String str) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (str == null) { + throw new BAD_PARAM("Null String reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (str.startsWith("corbaname:")) + return corbanameUrlToObject(str); + + if (str.startsWith("file://")) + return fileUrlToObject(str); + + if (str.startsWith("corbaloc:rir:")) + return rirUrlToObject(str); + + if (str.startsWith("corbaloc:tidorbj:")) + return tidorbjUrlToObject(str); + + + Delegate delegate; + try { + delegate = this.communicationManager.createDelegate( str ); + } catch ( CommunicationException ce){ + delegate = null; + } + if ( delegate != null ){ + ObjectImpl o = new ObjectImpl(); + o._set_delegate( delegate ); + return o; + } else { + throw new BAD_PARAM( + "UNKNOWN String reference", 0, CompletionStatus.COMPLETED_NO + ); + } + /* + return iorToObject(str); + */ + } + + /* + * PRIVATE METHODS + * */ + public POAKey resolvePOAKey( ObjectKey objectKey ) + throws ForwardRequest + { + if( objectKey != null ){ + //not initialized to check every condition against compiler :) + POAKey key; + try { + /* + * Usually successfull for local requests, because objectKey + * comes directly from an IOR. We shouldn't know this right here + */ + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } catch (Throwable th) { + key = null; + } + + if(key != null) { + return key; + } + + + /* + * If objectKey comes from a remote request, it must be resolved + * through the ORB. + * First: try to get the URL, and after that, resolve it against + * registered initial references + */ + String urlKey = objectKey.getURL(); + org.omg.CORBA.Object reference = null; + + if ( urlKey != null ) { + + if ( urlKey != null ) { + + String initialReference; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + /* + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve url reference: ", + urlKey, " ", ce.getMessage() + } + ); + } + */ + initialReference = null; + }//initialReference retrieval + + if(initialReference == null) { + initialReference = urlKey; + } + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( Throwable th ){ + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve initial reference reference: ", + initialReference, " ", th.getMessage() + } + ); + } + reference = null; + } + if ( reference != null ) { + if ( reference instanceof IOR ){ + objectKey = (( IOR )reference ).getObjectKey(); + } else { + org.omg.CORBA.portable.ObjectImpl ref = + (org.omg.CORBA.portable.ObjectImpl)reference; + CommunicationDelegate delegate = + ( CommunicationDelegate ) ref._get_delegate(); + objectKey = delegate.getReference().getObjectKey(); + } + if ( objectKey != null ) { + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } else { + throw new INTERNAL(); + } + } else { + key = null; + }//reference = null + }//generic url, delegate in communication layers + // URL resolution: object key = service url + // it must throw a ForwardRequest + if ( key != null ){ + return key; + } else { + throw new ForwardRequest(resolveGenericURL(urlKey)); + } + + } else { //unable to get url from objectKey + throw new INV_OBJREF( "Invalid Object Key" ); + } + } else { + throw new INV_OBJREF( "ObjectKey cannot be null" ); + } + }//resolvePOAKey + + + /** + * Generic URL resolution + * @throws ForwardRequest + */ + protected org.omg.CORBA.Object resolveGenericURL(String urlKey) + { + POAKey key; + + + String initialReference = null; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + throw new OBJECT_NOT_EXIST("Invalid object key: " + urlKey); + }//initialReference retrieval + + + org.omg.CORBA.Object reference = null; + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( InvalidName th ){ + StringBuffer msg = new StringBuffer(); + msg.append("Unable to resolve initial reference reference: "); + msg.append(initialReference); + msg.append(" from "); + msg.append(urlKey); + throw new OBJECT_NOT_EXIST(msg.toString()); + } + + return reference; + } + + + + public String toString() + { + if (m_orb_name == null) { + + java.util.Date date; + + date = new java.util.Date(System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + name.append("TIDorbj "); + name.append(st_version); + name.append(" (id=\""); + name.append(m_conf.orb_id); + name.append("\") ["); + + name.append( this.communicationManager.toString() ); + + name.append("] created at "); + name.append(date.toString()); + + m_orb_name = name.toString(); + } + + return m_orb_name; + + } + + public void unregister_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + synchronized (m_value_factories) { + if (m_value_factories.remove(id) == null) + throw new BAD_PARAM(); + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public boolean waitShutdown(long millis) + { + return m_state.waitForShutdown(millis); + } + + public boolean work_pending() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + //PRE: str starts with corbaname: + + protected org.omg.CORBA.Object corbanameUrlToObject(String str) + { + try { + return Corbaname.toObject(this, str); + } + catch (Exception e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void doCompleteShutdown() + { + java.lang.Object[] mgrs = new java.lang.Object[m_POAManagers.size()]; + + m_POAManagers.copyInto(mgrs); + + for (int i = 0; i < mgrs.length; i++) { + org.omg.PortableServer.POAManager mgr = + (org.omg.PortableServer.POAManager) mgrs[i]; + try { + mgr.deactivate(true /* etherealize objects */, + true /* wait_for_completion */); + } + catch (Exception e) {} + } + + try { + if (m_root_POA != null) + m_root_POA.destroy(false, true); + } + catch (Exception e) {} + + try { + if ( this.communicationManager != null ){ + this.communicationManager.shutdown( true ); + } + } + catch (Exception e) {} + + m_state.shutdowned(); + } + + // PRE str starts with file: + + protected org.omg.CORBA.Object fileUrlToObject(String str) + { + String file_str = str.substring(7); + String file_url = null; + + if (file_str.length() == 0) + throw new BAD_PARAM(file_str); + try { + java.io.FileReader file_r = new java.io.FileReader(file_str); + java.io.BufferedReader url_r = new java.io.BufferedReader(file_r); + + file_url = url_r.readLine(); + url_r.close(); + + } catch (java.io.FileNotFoundException fnf) { + throw new BAD_PARAM("Invalid file url"); + } catch (SecurityException se) { + throw new NO_PERMISSION( + se.getMessage(), 0, CompletionStatus.COMPLETED_NO + ); + } catch (Throwable th) { + throw new UNKNOWN( + th.toString(), 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( file_url != null && !file_url.startsWith("file:") ) { + return string_to_object( file_url ); + } else { + throw new BAD_PARAM( "No file url allowed in a file" ); + } + } + + /** + * Destructor. + */ + + protected void finalize() + { + if (!m_destroyed) + destroy(); + } + + // PRE str starts with corbaloc:iiop: or corbaloc:: + + //TODO: this should come from the communications layers + protected org.omg.CORBA.Object iiopUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + CommunicationDelegate delegate = null; + + try { + ior = IIOPCorbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + //TODO: should the communicationsManager (or the related layer) store + //a cache of delegates for each IOR? + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + protected es.tid.TIDorbj.core.CodecFactoryImpl initCodecFactory() + { + synchronized (this) { + if (m_codec_factory == null) + m_codec_factory = new CodecFactoryImpl(this); + } + return m_codec_factory; + } + + protected es.tid.TIDorbj.dynAny.DynAnyFactoryImpl initDynAnyFactory() + { + synchronized (this) { + if (m_dyn_factory == null) { + try { + m_dyn_factory = + new es.tid.TIDorbj.dynAny.DynAnyFactoryImpl(); + m_dyn_factory.set_orb(this); + } + catch (Throwable th) { + throw new INITIALIZE("Cannot Initialize DynAnyFactory", 0, + CompletionStatus.COMPLETED_NO); + } + } + } + return m_dyn_factory; + } + + /** + * ORB initialization. This method will be invoked by + * set_parametres(). + */ + + protected void initOrb() + { + try { + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + this.communicationManager = CommunicationManager.getInstance( this ); + + m_POAManagers = new java.util.Vector(); + + m_value_factories = new java.util.Hashtable(); + + m_orb_services = new ORBServices(this); + + m_thread_policy_context_manager = + new es.tid.TIDorbj.core.policy.PolicyContextManager(this); + + setupInitialReferences(); + + if (m_conf.typecode_cache_size > 0) + m_typecode_cache = + new es.tid.TIDorbj.core.typecode.TypeCodeCache( + m_conf.typecode_cache_size); + + if (m_conf.trace_level != Trace.NONE) { + m_trace = getTrace(); + + + m_trace.print(Trace.ERROR, "ORB initialization OK!"); + + m_conf.dump(m_trace.getLog()); + m_trace.flush(); + } + + } + catch (Throwable e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + public synchronized Trace getTrace() + throws IOException + { + if (m_trace == null) { + if (m_conf.trace_file != null) { + if (m_conf.trace_num_files > 1) { + + CircularTraceFile ctf = + new CircularTraceFile(m_conf.trace_num_files, + m_conf.trace_file_size, + m_conf.trace_file); + m_trace = Trace.createTrace(ctf, toString(), + m_conf.trace_level); + } else { + m_trace = Trace.createTrace(m_conf.trace_file, toString(), + m_conf.trace_level); + } + + } else { + m_trace = Trace.createTrace(toString(), m_conf.trace_level); + } + } + + return m_trace; + } + + protected es.tid.TIDorbj.core.policy.PolicyCurrentImpl initPolicyCurrent() + { + synchronized (this) { + if (m_policy_current == null) + m_policy_current = + new es.tid.TIDorbj.core.policy.PolicyCurrentImpl + (m_thread_policy_context_manager); + } + return m_policy_current; + } + + protected es.tid.TIDorbj.core.compression.CompressionManagerImpl initCompressionManager() + { + synchronized (this) { + if (m_compression_manager == null) + m_compression_manager = + new es.tid.TIDorbj.core.compression.CompressionManagerImpl + (this); + } + return m_compression_manager; + } + + protected es.tid.TIDorbj.core.messaging.AMIManager initAMIManager() + { + synchronized (this) { + if (m_ami_manager == null) + m_ami_manager = + new es.tid.TIDorbj.core.messaging.AMIManager(this); + } + return m_ami_manager; + } + + protected es.tid.TIDorbj.core.policy.PolicyManagerImpl initPolicyManager() + { + synchronized (this) { + if (m_orb_policy_manager == null) + m_orb_policy_manager = + new es.tid.TIDorbj.core.policy.PolicyManagerImpl(this); + } + return m_orb_policy_manager; + } + + //PRE: str starts with corbaloc:rir: + + protected org.omg.CORBA.Object rirUrlToObject(String str) + { + if (!str.startsWith("corbaloc:rir:/")) + throw new BAD_PARAM(str); + try { + return resolve_initial_references(str.substring(14)); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(app, props); + initOrb(); + } + + // CORBA ORB standard methods + + protected void set_parameters(String[] args, java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(args, props); + initOrb(); + } + + protected void setupInitialReferences() + { + int references = m_conf.initial_references.size(); + + InitialReference ref = null; + + for (int i = 0; i < references; i++) { + ref = (InitialReference) m_conf.initial_references.elementAt(i); + m_orb_services.setService(ref.getName(), + string_to_object(ref.getURL())); + } + + } + + //PRE: str starts with corbaloc:tidorbj: + protected org.omg.CORBA.Object tidorbjUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + Delegate delegate = null; + + try { + ior = Corbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } + + public void setORBservice(String object_name, + org.omg.CORBA.Object obj) { + m_orb_services.setService(object_name, obj); + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/tmp/TIDORB.java.tmp b/source/es/tid/TIDorbj/core/.svn/tmp/TIDORB.java.tmp new file mode 100644 index 0000000..e0e322a --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/tmp/TIDORB.java.tmp @@ -0,0 +1,1690 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.io.IOException; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServiceInformationHolder; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.ORBPackage.InvalidName; +import org.omg.CORBA.portable.Delegate; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMIManager; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.typecode.AbstractInterfaceTypeCode; +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.core.util.Corbaname; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.CircularTraceFile; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb GIOPVersion 2.6 CORBA ORB. + *

+ * + * @autor Juan A. Cáceres + * @version 2.0 + */ +public class TIDORB extends org.omg.CORBA_2_5.ORB +{ + + /** + * ORB GIOPVersion + */ + +<<<<<<< .mine +<<<<<<< .working +<<<<<<< .working + public final static String st_version = "6.3.3"; +======= + public final static String st_version = "6.3.5"; +>>>>>>> .r454 +======= + public final static String st_version = "6.3.2"; +======= + public final static String st_version = "6.3.3"; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + + /** + * @return the ORB Singleton instance. + */ + public static org.omg.CORBA.ORB init() + { + return SingletonORB.init(); + } + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * Local POAManagers. + */ + public java.util.Vector m_POAManagers; + + /** + * TraceService reference. + */ + public es.tid.TIDorbj.util.Trace m_trace; + + /** + * Local Codec factory. + */ + private CodecFactoryImpl m_codec_factory; + + /** TODO: remove me + * ORB Communication layer, drives request to the local layer or the + * external layer. + + private es.tid.TIDorbj.core.comm.iiop.CommLayer m_comm_layer;*/ + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + private CommunicationManager communicationManager; + + + /** + * Local CurrentImpl. + */ + private es.tid.TIDorbj.core.poa.CurrentImpl m_current; + + /** + * The ORB has been destroyed. + */ + + private boolean m_destroyed; + + /** + * Local DynAny factory. + */ + private es.tid.TIDorbj.dynAny.DynAnyFactoryImpl m_dyn_factory; + + /** + * ORB PolicyManager. + */ + private es.tid.TIDorbj.core.policy.PolicyManagerImpl m_orb_policy_manager; + + /** + * ORB Services + */ + + private ORBServices m_orb_services; + + /** + * Thread Policy Current. + */ + private es.tid.TIDorbj.core.policy.PolicyCurrentImpl m_policy_current; + + + /** + * Compression Manager. + */ + private es.tid.TIDorbj.core.compression.CompressionManagerImpl m_compression_manager; + + + /** + * Local rootPOA. + */ + private es.tid.TIDorbj.core.poa.POAImpl m_root_POA; + + /** + * Processing state: controls the ORB shutdown. + */ + + private ProcessingState m_state; + + /** + * Thread Policy Context Manager. + */ + private es.tid.TIDorbj.core.policy.PolicyContextManager + m_thread_policy_context_manager; + + /** + * Maintains the order which the request was created + */ + private RequestCounter requestCounter; + + /** + * TypeCode Cache. + */ + + private es.tid.TIDorbj.core.typecode.TypeCodeCache m_typecode_cache; + + /** + * ORB ValueFactoryList + */ + + private java.util.Hashtable m_value_factories; + + /** + * ORB Name + */ + + String m_orb_name; +<<<<<<< .working + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +======= + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +>>>>>>> .merge-right.r354 + + /** + * Constructor. The orb must be initialized using the set_parameters(). + */ + public TIDORB() + { + m_conf = null; + m_state = new ProcessingState(this); + m_destroyed = false; + + this.communicationManager = null; + this.requestCounter = new RequestCounter(); + + m_dyn_factory = null; + m_root_POA = null; + m_trace = null; + m_current = null; + m_typecode_cache = null; +<<<<<<< .working +<<<<<<< .working + m_ami_manager = null; +======= + m_ami_manager = new AMIManager(this); +======= + m_ami_manager = null; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + } + + public void connect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + + public TypeCode create_abstract_interface_tc(String id, String name) + { + return new AbstractInterfaceTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode + create_alias_tc( String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.Any create_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.AnyImpl(this); + } + + public org.omg.CORBA.TypeCode + create_array_tc( int length, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.ContextList create_context_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ContextListImpl(); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.Environment create_environment() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.EnvironmentImpl(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ExceptionListImpl(); + } + + public org.omg.CORBA.TypeCode + create_exception_tc( java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_list(int count) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (count < 0) + throw new BAD_PARAM("Count < 0", 0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.NVListImpl(this, count); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((s == null) || (any == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return es.tid.TIDorbj.core.NamedValueImpl.from_int(flags, s, any); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new CDROutputStream(this, m_conf.block_size); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (val == null) + throw new BAD_PARAM("Null any reference"); + + return es.tid.TIDorbj.core.policy.PolicyFactory.createPolicy(type, val); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode create_recursive_sequence_tc(int bound, + int offset) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc( int bound, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc( String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (concrete_base == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + /** + * Free all the ORB resources: connections and threads. + */ + + synchronized public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + // The thread is serving a request? + + if (initPOACurrent().inContext()) { // yes, it is in the serving request + // context + + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.shutdown(); + + m_state.waitForShutdown(); + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + * m_comm_layer.destroy(); + */ + this.communicationManager.destroy(); + this.communicationManager = null; + + + if (m_trace != null) { + try { + printTrace(Trace.USER, "Closing ORB Session."); + m_trace.close(); + } + catch (Throwable th) {} + + m_trace = null; + } + + if (m_value_factories != null) + m_value_factories.clear(); + + m_value_factories = null; + + if (m_codec_factory != null) { + m_codec_factory.destroy(); + m_codec_factory = null; + } + + if (m_dyn_factory != null) { + m_dyn_factory.destroy(); + m_dyn_factory = null; + } + + m_orb_services.destroy(); + m_orb_services = null; + + m_root_POA = null; + + if (m_current != null) { + m_current.destroy(); + m_current = null; + } + + m_destroyed = true; + } + + public boolean destroyed() + { + return m_destroyed; + } + + public void disconnect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated + */ + public org.omg.CORBA.Current get_current() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + return m_current; + } + + public org.omg.CORBA.Context get_default_context() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference", 0, + CompletionStatus.COMPLETED_NO); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public boolean + get_service_information( short service_type, + ServiceInformationHolder service_info) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + public CommunicationManager getCommunicationManager(){ + if ( m_destroyed ){ + throw new OBJECT_NOT_EXIST(); + } + return this.communicationManager; + } + + + + public es.tid.TIDorbj.core.policy.PolicyContextManager + getPolicyContextManager() + { + return m_thread_policy_context_manager; + } + + public es.tid.TIDorbj.core.policy.PolicyManagerImpl getPolicyManager() + { + return initPolicyManager(); + } + + public es.tid.TIDorbj.core.compression.CompressionManagerImpl getCompressionManager() + { + return initCompressionManager(); + } + + public es.tid.TIDorbj.core.typecode.TypeCodeCache getTypeCodeCache() + { + return m_typecode_cache; + } + + public RequestCounter getRequestCounter() + { + return this.requestCounter; + } + + + // CORBA 2.5 + public String id() + { + return m_conf.orb_id; + } + + // ORB Services + + public es.tid.TIDorbj.core.poa.POAImpl initPOA() { + synchronized (this) { + if (m_root_POA == null) { + m_root_POA = + es.tid.TIDorbj.core.poa.POAImpl.createRootPOA(this); + + + // init the orb listening points (usually one for each layer) + try { + this.communicationManager.setServerModeEnabled( true ); + } catch ( CommunicationException ce ) { + throw new INITIALIZE( "Unable to activate server mode: " + ce.getMessage() ); + } + + m_state.running(); + } + } + + return m_root_POA; + } + + public es.tid.TIDorbj.core.poa.CurrentImpl initPOACurrent() + { + synchronized (this) { + if (m_current == null) { + m_current = new es.tid.TIDorbj.core.poa.CurrentImpl(this); + } + } + + return m_current; + } + + public String[] list_initial_services() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_orb_services.listInitialServices(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + return (org.omg.CORBA.portable.ValueFactory) m_value_factories.get(id); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return IOR.nullIOR().toString(); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj) + ._get_delegate(); + + if (obj instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, + CompletionStatus.COMPLETED_NO); + + if (delegate instanceof CommunicationDelegate) + return ((CommunicationDelegate) delegate).toString(); + else + throw new BAD_PARAM("This Object has not been create by TIDorb", + 0, + CompletionStatus.COMPLETED_NO); + } + + public String objectToURL(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return Corbaloc.toURL(IOR.nullIOR()); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + //TODO: refactor URL/String IOR stuff + return ((CommunicationDelegate) delegate).getReference().toURL(); + } else + throw new BAD_PARAM("This Object has not been create by TIDorb", 0, + CompletionStatus.COMPLETED_NO); + } + + public void perform_work() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void printTrace(int level, String message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printTrace(int level, String message, Throwable e) + { + if (m_trace != null) + m_trace.printStackTrace(level, message, e); + } + + public void printTrace(int level, String[] message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printDump(int level, byte[] message, int length) + { + if (m_trace != null) + m_trace.dump(level, message, length); + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.registerInitialReference(object_name, obj); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + synchronized (m_value_factories) { + if (m_value_factories.containsKey(id)) + return null; + m_value_factories.put(id, factory); + } + + return factory; + } + + public void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.removeInitialReference(object_name); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (object_name == null) + throw new BAD_PARAM("Null String reference", 24, + CompletionStatus.COMPLETED_NO); + + return m_orb_services.resolveService(object_name); + } + + public void run() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (m_root_POA == null) { + throw new org.omg.CORBA.INTERNAL("RootPOA has not been created."); + } + + m_state.waitForShutdown(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < req.length; i++) + req[i].send_oneway(); + } + + public void set_delegate(java.lang.Object wrapper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (wrapper instanceof org.omg.PortableServer.Servant) { + org.omg.PortableServer.Servant servant = + (org.omg.PortableServer.Servant) wrapper; + + if (m_root_POA == null) { + initPOA(); + } + + try { + org.omg.CORBA.ORB servantOrb = servant._orb(); + if ( servantOrb != this ) { + throw new + BAD_PARAM("Servant is already active in another ORB"); + } + } + catch (org.omg.CORBA.BAD_INV_ORDER e) { + try { + m_root_POA.activate_object(servant); + + // Exceptions should never be thrown + } catch (org.omg.PortableServer.POAPackage.WrongPolicy wp) + { + } + catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive s) + { + } + } + } else + throw new BAD_PARAM("Servant expected"); + + } + + public void shutdown(boolean wait_for_completion) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + m_state.shutdown(); + + if (wait_for_completion) { + if (initPOACurrent().inContext()) { + // yes, it is in the serving request context + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.waitForShutdown(); + } + } + + public org.omg.CORBA.Object string_to_object(String str) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (str == null) { + throw new BAD_PARAM("Null String reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (str.startsWith("corbaname:")) + return corbanameUrlToObject(str); + + if (str.startsWith("file://")) + return fileUrlToObject(str); + + if (str.startsWith("corbaloc:rir:")) + return rirUrlToObject(str); + + if (str.startsWith("corbaloc:tidorbj:")) + return tidorbjUrlToObject(str); + + + Delegate delegate; + try { + delegate = this.communicationManager.createDelegate( str ); + } catch ( CommunicationException ce){ + delegate = null; + } + if ( delegate != null ){ + ObjectImpl o = new ObjectImpl(); + o._set_delegate( delegate ); + return o; + } else { + throw new BAD_PARAM( + "UNKNOWN String reference", 0, CompletionStatus.COMPLETED_NO + ); + } + /* + return iorToObject(str); + */ + } + + /* + * PRIVATE METHODS + * */ + public POAKey resolvePOAKey( ObjectKey objectKey ) + throws ForwardRequest + { + if( objectKey != null ){ + //not initialized to check every condition against compiler :) + POAKey key; + try { + /* + * Usually successfull for local requests, because objectKey + * comes directly from an IOR. We shouldn't know this right here + */ + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } catch (Throwable th) { + key = null; + } + + if(key != null) { + return key; + } + + + /* + * If objectKey comes from a remote request, it must be resolved + * through the ORB. + * First: try to get the URL, and after that, resolve it against + * registered initial references + */ + String urlKey = objectKey.getURL(); + org.omg.CORBA.Object reference = null; + + if ( urlKey != null ) { + + if ( urlKey != null ) { + + String initialReference; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + /* + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve url reference: ", + urlKey, " ", ce.getMessage() + } + ); + } + */ + initialReference = null; + }//initialReference retrieval + + if(initialReference == null) { + initialReference = urlKey; + } + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( Throwable th ){ + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve initial reference reference: ", + initialReference, " ", th.getMessage() + } + ); + } + reference = null; + } + if ( reference != null ) { + if ( reference instanceof IOR ){ + objectKey = (( IOR )reference ).getObjectKey(); + } else { + org.omg.CORBA.portable.ObjectImpl ref = + (org.omg.CORBA.portable.ObjectImpl)reference; + CommunicationDelegate delegate = + ( CommunicationDelegate ) ref._get_delegate(); + objectKey = delegate.getReference().getObjectKey(); + } + if ( objectKey != null ) { + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } else { + throw new INTERNAL(); + } + } else { + key = null; + }//reference = null + }//generic url, delegate in communication layers + // URL resolution: object key = service url + // it must throw a ForwardRequest + if ( key != null ){ + return key; + } else { + throw new ForwardRequest(resolveGenericURL(urlKey)); + } + + } else { //unable to get url from objectKey + throw new INV_OBJREF( "Invalid Object Key" ); + } + } else { + throw new INV_OBJREF( "ObjectKey cannot be null" ); + } + }//resolvePOAKey + + + /** + * Generic URL resolution + * @throws ForwardRequest + */ + protected org.omg.CORBA.Object resolveGenericURL(String urlKey) + { + POAKey key; + + + String initialReference = null; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + throw new OBJECT_NOT_EXIST("Invalid object key: " + urlKey); + }//initialReference retrieval + + + org.omg.CORBA.Object reference = null; + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( InvalidName th ){ + StringBuffer msg = new StringBuffer(); + msg.append("Unable to resolve initial reference reference: "); + msg.append(initialReference); + msg.append(" from "); + msg.append(urlKey); + throw new OBJECT_NOT_EXIST(msg.toString()); + } + + return reference; + } + + + + public String toString() + { + if (m_orb_name == null) { + + java.util.Date date; + + date = new java.util.Date(System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + name.append("TIDorbj "); + name.append(st_version); + name.append(" (id=\""); + name.append(m_conf.orb_id); + name.append("\") ["); + + name.append( this.communicationManager.toString() ); + + name.append("] created at "); + name.append(date.toString()); + + m_orb_name = name.toString(); + } + + return m_orb_name; + + } + + public void unregister_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + synchronized (m_value_factories) { + if (m_value_factories.remove(id) == null) + throw new BAD_PARAM(); + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public boolean waitShutdown(long millis) + { + return m_state.waitForShutdown(millis); + } + + public boolean work_pending() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + //PRE: str starts with corbaname: + + protected org.omg.CORBA.Object corbanameUrlToObject(String str) + { + try { + return Corbaname.toObject(this, str); + } + catch (Exception e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void doCompleteShutdown() + { + java.lang.Object[] mgrs = new java.lang.Object[m_POAManagers.size()]; + + m_POAManagers.copyInto(mgrs); + + for (int i = 0; i < mgrs.length; i++) { + org.omg.PortableServer.POAManager mgr = + (org.omg.PortableServer.POAManager) mgrs[i]; + try { + mgr.deactivate(true /* etherealize objects */, + true /* wait_for_completion */); + } + catch (Exception e) {} + } + + try { + if (m_root_POA != null) + m_root_POA.destroy(false, true); + } + catch (Exception e) {} + + try { + if ( this.communicationManager != null ){ + this.communicationManager.shutdown( true ); + } + } + catch (Exception e) {} + + m_state.shutdowned(); + } + + // PRE str starts with file: + + protected org.omg.CORBA.Object fileUrlToObject(String str) + { + String file_str = str.substring(7); + String file_url = null; + + if (file_str.length() == 0) + throw new BAD_PARAM(file_str); + try { + java.io.FileReader file_r = new java.io.FileReader(file_str); + java.io.BufferedReader url_r = new java.io.BufferedReader(file_r); + + file_url = url_r.readLine(); + url_r.close(); + + } catch (java.io.FileNotFoundException fnf) { + throw new BAD_PARAM("Invalid file url"); + } catch (SecurityException se) { + throw new NO_PERMISSION( + se.getMessage(), 0, CompletionStatus.COMPLETED_NO + ); + } catch (Throwable th) { + throw new UNKNOWN( + th.toString(), 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( file_url != null && !file_url.startsWith("file:") ) { + return string_to_object( file_url ); + } else { + throw new BAD_PARAM( "No file url allowed in a file" ); + } + } + + /** + * Destructor. + */ + + protected void finalize() + { + if (!m_destroyed) + destroy(); + } + + // PRE str starts with corbaloc:iiop: or corbaloc:: + + //TODO: this should come from the communications layers + protected org.omg.CORBA.Object iiopUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + CommunicationDelegate delegate = null; + + try { + ior = IIOPCorbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + //TODO: should the communicationsManager (or the related layer) store + //a cache of delegates for each IOR? + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + protected es.tid.TIDorbj.core.CodecFactoryImpl initCodecFactory() + { + synchronized (this) { + if (m_codec_factory == null) + m_codec_factory = new CodecFactoryImpl(this); + } + return m_codec_factory; + } + + protected es.tid.TIDorbj.dynAny.DynAnyFactoryImpl initDynAnyFactory() + { + synchronized (this) { + if (m_dyn_factory == null) { + try { + m_dyn_factory = + new es.tid.TIDorbj.dynAny.DynAnyFactoryImpl(); + m_dyn_factory.set_orb(this); + } + catch (Throwable th) { + throw new INITIALIZE("Cannot Initialize DynAnyFactory", 0, + CompletionStatus.COMPLETED_NO); + } + } + } + return m_dyn_factory; + } + + /** + * ORB initialization. This method will be invoked by + * set_parametres(). + */ + + protected void initOrb() + { + try { + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + this.communicationManager = CommunicationManager.getInstance( this ); + + m_POAManagers = new java.util.Vector(); + + m_value_factories = new java.util.Hashtable(); + + m_orb_services = new ORBServices(this); + + m_thread_policy_context_manager = + new es.tid.TIDorbj.core.policy.PolicyContextManager(this); + + setupInitialReferences(); + + if (m_conf.typecode_cache_size > 0) + m_typecode_cache = + new es.tid.TIDorbj.core.typecode.TypeCodeCache( + m_conf.typecode_cache_size); + + if (m_conf.trace_level != Trace.NONE) { + m_trace = getTrace(); + + + m_trace.print(Trace.ERROR, "ORB initialization OK!"); + + m_conf.dump(m_trace.getLog()); + m_trace.flush(); + } + + } + catch (Throwable e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + public synchronized Trace getTrace() + throws IOException + { + if (m_trace == null) { + if (m_conf.trace_file != null) { + if (m_conf.trace_num_files > 1) { + + CircularTraceFile ctf = + new CircularTraceFile(m_conf.trace_num_files, + m_conf.trace_file_size, + m_conf.trace_file); + m_trace = Trace.createTrace(ctf, toString(), + m_conf.trace_level); + } else { + m_trace = Trace.createTrace(m_conf.trace_file, toString(), + m_conf.trace_level); + } + + } else { + m_trace = Trace.createTrace(toString(), m_conf.trace_level); + } + } + + return m_trace; + } + + protected es.tid.TIDorbj.core.policy.PolicyCurrentImpl initPolicyCurrent() + { + synchronized (this) { + if (m_policy_current == null) + m_policy_current = + new es.tid.TIDorbj.core.policy.PolicyCurrentImpl + (m_thread_policy_context_manager); + } + return m_policy_current; + } + + protected es.tid.TIDorbj.core.compression.CompressionManagerImpl initCompressionManager() + { + synchronized (this) { + if (m_compression_manager == null) + m_compression_manager = + new es.tid.TIDorbj.core.compression.CompressionManagerImpl + (this); + } + return m_compression_manager; + } + + protected es.tid.TIDorbj.core.messaging.AMIManager initAMIManager() + { + synchronized (this) { + if (m_ami_manager == null) + m_ami_manager = + new es.tid.TIDorbj.core.messaging.AMIManager(this); + } + return m_ami_manager; + } + + protected es.tid.TIDorbj.core.policy.PolicyManagerImpl initPolicyManager() + { + synchronized (this) { + if (m_orb_policy_manager == null) + m_orb_policy_manager = + new es.tid.TIDorbj.core.policy.PolicyManagerImpl(this); + } + return m_orb_policy_manager; + } + + //PRE: str starts with corbaloc:rir: + + protected org.omg.CORBA.Object rirUrlToObject(String str) + { + if (!str.startsWith("corbaloc:rir:/")) + throw new BAD_PARAM(str); + try { + return resolve_initial_references(str.substring(14)); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(app, props); + initOrb(); + } + + // CORBA ORB standard methods + + protected void set_parameters(String[] args, java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(args, props); + initOrb(); + } + + protected void setupInitialReferences() + { + int references = m_conf.initial_references.size(); + + InitialReference ref = null; + + for (int i = 0; i < references; i++) { + ref = (InitialReference) m_conf.initial_references.elementAt(i); + m_orb_services.setService(ref.getName(), + string_to_object(ref.getURL())); + } + + } + + //PRE: str starts with corbaloc:tidorbj: + protected org.omg.CORBA.Object tidorbjUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + Delegate delegate = null; + + try { + ior = Corbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } +<<<<<<< .working + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +======= + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +>>>>>>> .merge-right.r354 + + public void setORBservice(String object_name, + org.omg.CORBA.Object obj) { + m_orb_services.setService(object_name, obj); + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.2.tmp b/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.2.tmp new file mode 100644 index 0000000..91c5062 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.2.tmp @@ -0,0 +1,1684 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.io.IOException; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServiceInformationHolder; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.ORBPackage.InvalidName; +import org.omg.CORBA.portable.Delegate; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMIManager; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.typecode.AbstractInterfaceTypeCode; +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.core.util.Corbaname; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.CircularTraceFile; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb GIOPVersion 2.6 CORBA ORB. + *

+ * + * @autor Juan A. Cáceres + * @version 2.0 + */ +public class TIDORB extends org.omg.CORBA_2_5.ORB +{ + + /** + * ORB GIOPVersion + */ + +<<<<<<< .working +<<<<<<< .working + public final static String st_version = "6.3.3"; +======= + public final static String st_version = "6.3.2"; +======= + public final static String st_version = "6.3.3"; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + + /** + * @return the ORB Singleton instance. + */ + public static org.omg.CORBA.ORB init() + { + return SingletonORB.init(); + } + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * Local POAManagers. + */ + public java.util.Vector m_POAManagers; + + /** + * TraceService reference. + */ + public es.tid.TIDorbj.util.Trace m_trace; + + /** + * Local Codec factory. + */ + private CodecFactoryImpl m_codec_factory; + + /** TODO: remove me + * ORB Communication layer, drives request to the local layer or the + * external layer. + + private es.tid.TIDorbj.core.comm.iiop.CommLayer m_comm_layer;*/ + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + private CommunicationManager communicationManager; + + + /** + * Local CurrentImpl. + */ + private es.tid.TIDorbj.core.poa.CurrentImpl m_current; + + /** + * The ORB has been destroyed. + */ + + private boolean m_destroyed; + + /** + * Local DynAny factory. + */ + private es.tid.TIDorbj.dynAny.DynAnyFactoryImpl m_dyn_factory; + + /** + * ORB PolicyManager. + */ + private es.tid.TIDorbj.core.policy.PolicyManagerImpl m_orb_policy_manager; + + /** + * ORB Services + */ + + private ORBServices m_orb_services; + + /** + * Thread Policy Current. + */ + private es.tid.TIDorbj.core.policy.PolicyCurrentImpl m_policy_current; + + /** + * Compression Manager. + */ + private es.tid.TIDorbj.core.compression.CompressionManagerImpl m_compression_manager; + + /** + * Local rootPOA. + */ + private es.tid.TIDorbj.core.poa.POAImpl m_root_POA; + + /** + * Processing state: controls the ORB shutdown. + */ + + private ProcessingState m_state; + + /** + * Thread Policy Context Manager. + */ + private es.tid.TIDorbj.core.policy.PolicyContextManager + m_thread_policy_context_manager; + + /** + * Maintains the order which the request was created + */ + private RequestCounter requestCounter; + + /** + * TypeCode Cache. + */ + + private es.tid.TIDorbj.core.typecode.TypeCodeCache m_typecode_cache; + + /** + * ORB ValueFactoryList + */ + + private java.util.Hashtable m_value_factories; + + /** + * ORB Name + */ + + String m_orb_name; +<<<<<<< .working + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +======= + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +>>>>>>> .merge-right.r354 + + /** + * Constructor. The orb must be initialized using the set_parameters(). + */ + public TIDORB() + { + m_conf = null; + m_state = new ProcessingState(this); + m_destroyed = false; + + this.communicationManager = null; + this.requestCounter = new RequestCounter(); + + m_dyn_factory = null; + m_root_POA = null; + m_trace = null; + m_current = null; + m_typecode_cache = null; +<<<<<<< .working +<<<<<<< .working + m_ami_manager = null; +======= + m_ami_manager = new AMIManager(this); +======= + m_ami_manager = null; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + } + + public void connect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + + public TypeCode create_abstract_interface_tc(String id, String name) + { + return new AbstractInterfaceTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode + create_alias_tc( String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.Any create_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.AnyImpl(this); + } + + public org.omg.CORBA.TypeCode + create_array_tc( int length, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.ContextList create_context_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ContextListImpl(); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.Environment create_environment() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.EnvironmentImpl(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ExceptionListImpl(); + } + + public org.omg.CORBA.TypeCode + create_exception_tc( java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_list(int count) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (count < 0) + throw new BAD_PARAM("Count < 0", 0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.NVListImpl(this, count); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((s == null) || (any == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return es.tid.TIDorbj.core.NamedValueImpl.from_int(flags, s, any); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new CDROutputStream(this, m_conf.block_size); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (val == null) + throw new BAD_PARAM("Null any reference"); + + return es.tid.TIDorbj.core.policy.PolicyFactory.createPolicy(type, val); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode create_recursive_sequence_tc(int bound, + int offset) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc( int bound, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc( String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (concrete_base == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + /** + * Free all the ORB resources: connections and threads. + */ + + synchronized public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + // The thread is serving a request? + + if (initPOACurrent().inContext()) { // yes, it is in the serving request + // context + + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.shutdown(); + + m_state.waitForShutdown(); + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + * m_comm_layer.destroy(); + */ + this.communicationManager.destroy(); + this.communicationManager = null; + + + if (m_trace != null) { + try { + printTrace(Trace.USER, "Closing ORB Session."); + m_trace.close(); + } + catch (Throwable th) {} + + m_trace = null; + } + + if (m_value_factories != null) + m_value_factories.clear(); + + m_value_factories = null; + + if (m_codec_factory != null) { + m_codec_factory.destroy(); + m_codec_factory = null; + } + + if (m_dyn_factory != null) { + m_dyn_factory.destroy(); + m_dyn_factory = null; + } + + m_orb_services.destroy(); + m_orb_services = null; + + m_root_POA = null; + + if (m_current != null) { + m_current.destroy(); + m_current = null; + } + + m_destroyed = true; + } + + public boolean destroyed() + { + return m_destroyed; + } + + public void disconnect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated + */ + public org.omg.CORBA.Current get_current() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + return m_current; + } + + public org.omg.CORBA.Context get_default_context() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference", 0, + CompletionStatus.COMPLETED_NO); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public boolean + get_service_information( short service_type, + ServiceInformationHolder service_info) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + public CommunicationManager getCommunicationManager(){ + if ( m_destroyed ){ + throw new OBJECT_NOT_EXIST(); + } + return this.communicationManager; + } + + + + public es.tid.TIDorbj.core.policy.PolicyContextManager + getPolicyContextManager() + { + return m_thread_policy_context_manager; + } + + public es.tid.TIDorbj.core.policy.PolicyManagerImpl getPolicyManager() + { + return initPolicyManager(); + } + + public es.tid.TIDorbj.core.compression.CompressionManagerImpl getCompressionManager() + { + return initCompressionManager(); + } + + public es.tid.TIDorbj.core.typecode.TypeCodeCache getTypeCodeCache() + { + return m_typecode_cache; + } + + public RequestCounter getRequestCounter() + { + return this.requestCounter; + } + + + // CORBA 2.5 + public String id() + { + return m_conf.orb_id; + } + + // ORB Services + + public es.tid.TIDorbj.core.poa.POAImpl initPOA() { + synchronized (this) { + if (m_root_POA == null) { + m_root_POA = + es.tid.TIDorbj.core.poa.POAImpl.createRootPOA(this); + + + // init the orb listening points (usually one for each layer) + try { + this.communicationManager.setServerModeEnabled( true ); + } catch ( CommunicationException ce ) { + throw new INITIALIZE( "Unable to activate server mode: " + ce.getMessage() ); + } + + m_state.running(); + } + } + + return m_root_POA; + } + + public es.tid.TIDorbj.core.poa.CurrentImpl initPOACurrent() + { + synchronized (this) { + if (m_current == null) { + m_current = new es.tid.TIDorbj.core.poa.CurrentImpl(this); + } + } + + return m_current; + } + + public String[] list_initial_services() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_orb_services.listInitialServices(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + return (org.omg.CORBA.portable.ValueFactory) m_value_factories.get(id); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return IOR.nullIOR().toString(); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj) + ._get_delegate(); + + if (obj instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, + CompletionStatus.COMPLETED_NO); + + if (delegate instanceof CommunicationDelegate) + return ((CommunicationDelegate) delegate).toString(); + else + throw new BAD_PARAM("This Object has not been create by TIDorb", + 0, + CompletionStatus.COMPLETED_NO); + } + + public String objectToURL(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return Corbaloc.toURL(IOR.nullIOR()); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + //TODO: refactor URL/String IOR stuff + return ((CommunicationDelegate) delegate).getReference().toURL(); + } else + throw new BAD_PARAM("This Object has not been create by TIDorb", 0, + CompletionStatus.COMPLETED_NO); + } + + public void perform_work() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void printTrace(int level, String message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printTrace(int level, String message, Throwable e) + { + if (m_trace != null) + m_trace.printStackTrace(level, message, e); + } + + public void printTrace(int level, String[] message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printDump(int level, byte[] message, int length) + { + if (m_trace != null) + m_trace.dump(level, message, length); + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.registerInitialReference(object_name, obj); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + synchronized (m_value_factories) { + if (m_value_factories.containsKey(id)) + return null; + m_value_factories.put(id, factory); + } + + return factory; + } + + public void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.removeInitialReference(object_name); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (object_name == null) + throw new BAD_PARAM("Null String reference", 24, + CompletionStatus.COMPLETED_NO); + + return m_orb_services.resolveService(object_name); + } + + public void run() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (m_root_POA == null) { + throw new org.omg.CORBA.INTERNAL("RootPOA has not been created."); + } + + m_state.waitForShutdown(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < req.length; i++) + req[i].send_oneway(); + } + + public void set_delegate(java.lang.Object wrapper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (wrapper instanceof org.omg.PortableServer.Servant) { + org.omg.PortableServer.Servant servant = + (org.omg.PortableServer.Servant) wrapper; + + if (m_root_POA == null) { + initPOA(); + } + + try { + org.omg.CORBA.ORB servantOrb = servant._orb(); + if ( servantOrb != this ) { + throw new + BAD_PARAM("Servant is already active in another ORB"); + } + } + catch (org.omg.CORBA.BAD_INV_ORDER e) { + try { + m_root_POA.activate_object(servant); + + // Exceptions should never be thrown + } catch (org.omg.PortableServer.POAPackage.WrongPolicy wp) + { + } + catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive s) + { + } + } + } else + throw new BAD_PARAM("Servant expected"); + + } + + public void shutdown(boolean wait_for_completion) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + m_state.shutdown(); + + if (wait_for_completion) { + if (initPOACurrent().inContext()) { + // yes, it is in the serving request context + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.waitForShutdown(); + } + } + + public org.omg.CORBA.Object string_to_object(String str) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (str == null) { + throw new BAD_PARAM("Null String reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (str.startsWith("corbaname:")) + return corbanameUrlToObject(str); + + if (str.startsWith("file://")) + return fileUrlToObject(str); + + if (str.startsWith("corbaloc:rir:")) + return rirUrlToObject(str); + + if (str.startsWith("corbaloc:tidorbj:")) + return tidorbjUrlToObject(str); + + + Delegate delegate; + try { + delegate = this.communicationManager.createDelegate( str ); + } catch ( CommunicationException ce){ + delegate = null; + } + if ( delegate != null ){ + ObjectImpl o = new ObjectImpl(); + o._set_delegate( delegate ); + return o; + } else { + throw new BAD_PARAM( + "UNKNOWN String reference", 0, CompletionStatus.COMPLETED_NO + ); + } + /* + return iorToObject(str); + */ + } + + /* + * PRIVATE METHODS + * */ + public POAKey resolvePOAKey( ObjectKey objectKey ) + throws ForwardRequest + { + if( objectKey != null ){ + //not initialized to check every condition against compiler :) + POAKey key; + try { + /* + * Usually successfull for local requests, because objectKey + * comes directly from an IOR. We shouldn't know this right here + */ + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } catch (Throwable th) { + key = null; + } + + if(key != null) { + return key; + } + + + /* + * If objectKey comes from a remote request, it must be resolved + * through the ORB. + * First: try to get the URL, and after that, resolve it against + * registered initial references + */ + String urlKey = objectKey.getURL(); + org.omg.CORBA.Object reference = null; + + if ( urlKey != null ) { + + if ( urlKey != null ) { + + String initialReference; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + /* + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve url reference: ", + urlKey, " ", ce.getMessage() + } + ); + } + */ + initialReference = null; + }//initialReference retrieval + + if(initialReference == null) { + initialReference = urlKey; + } + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( Throwable th ){ + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve initial reference reference: ", + initialReference, " ", th.getMessage() + } + ); + } + reference = null; + } + if ( reference != null ) { + if ( reference instanceof IOR ){ + objectKey = (( IOR )reference ).getObjectKey(); + } else { + org.omg.CORBA.portable.ObjectImpl ref = + (org.omg.CORBA.portable.ObjectImpl)reference; + CommunicationDelegate delegate = + ( CommunicationDelegate ) ref._get_delegate(); + objectKey = delegate.getReference().getObjectKey(); + } + if ( objectKey != null ) { + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } else { + throw new INTERNAL(); + } + } else { + key = null; + }//reference = null + }//generic url, delegate in communication layers + // URL resolution: object key = service url + // it must throw a ForwardRequest + if ( key != null ){ + return key; + } else { + throw new ForwardRequest(resolveGenericURL(urlKey)); + } + + } else { //unable to get url from objectKey + throw new INV_OBJREF( "Invalid Object Key" ); + } + } else { + throw new INV_OBJREF( "ObjectKey cannot be null" ); + } + }//resolvePOAKey + + + /** + * Generic URL resolution + * @throws ForwardRequest + */ + protected org.omg.CORBA.Object resolveGenericURL(String urlKey) + { + POAKey key; + + + String initialReference = null; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + throw new OBJECT_NOT_EXIST("Invalid object key: " + urlKey); + }//initialReference retrieval + + + org.omg.CORBA.Object reference = null; + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( InvalidName th ){ + StringBuffer msg = new StringBuffer(); + msg.append("Unable to resolve initial reference reference: "); + msg.append(initialReference); + msg.append(" from "); + msg.append(urlKey); + throw new OBJECT_NOT_EXIST(msg.toString()); + } + + return reference; + } + + + + public String toString() + { + if (m_orb_name == null) { + + java.util.Date date; + + date = new java.util.Date(System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + name.append("TIDorbj "); + name.append(st_version); + name.append(" (id=\""); + name.append(m_conf.orb_id); + name.append("\") ["); + + name.append( this.communicationManager.toString() ); + + name.append("] created at "); + name.append(date.toString()); + + m_orb_name = name.toString(); + } + + return m_orb_name; + + } + + public void unregister_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + synchronized (m_value_factories) { + if (m_value_factories.remove(id) == null) + throw new BAD_PARAM(); + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public boolean waitShutdown(long millis) + { + return m_state.waitForShutdown(millis); + } + + public boolean work_pending() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + //PRE: str starts with corbaname: + + protected org.omg.CORBA.Object corbanameUrlToObject(String str) + { + try { + return Corbaname.toObject(this, str); + } + catch (Exception e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void doCompleteShutdown() + { + java.lang.Object[] mgrs = new java.lang.Object[m_POAManagers.size()]; + + m_POAManagers.copyInto(mgrs); + + for (int i = 0; i < mgrs.length; i++) { + org.omg.PortableServer.POAManager mgr = + (org.omg.PortableServer.POAManager) mgrs[i]; + try { + mgr.deactivate(true /* etherealize objects */, + true /* wait_for_completion */); + } + catch (Exception e) {} + } + + try { + if (m_root_POA != null) + m_root_POA.destroy(false, true); + } + catch (Exception e) {} + + try { + if ( this.communicationManager != null ){ + this.communicationManager.shutdown( true ); + } + } + catch (Exception e) {} + + m_state.shutdowned(); + } + + // PRE str starts with file: + + protected org.omg.CORBA.Object fileUrlToObject(String str) + { + String file_str = str.substring(7); + String file_url = null; + + if (file_str.length() == 0) + throw new BAD_PARAM(file_str); + try { + java.io.FileReader file_r = new java.io.FileReader(file_str); + java.io.BufferedReader url_r = new java.io.BufferedReader(file_r); + + file_url = url_r.readLine(); + url_r.close(); + + } catch (java.io.FileNotFoundException fnf) { + throw new BAD_PARAM("Invalid file url"); + } catch (SecurityException se) { + throw new NO_PERMISSION( + se.getMessage(), 0, CompletionStatus.COMPLETED_NO + ); + } catch (Throwable th) { + throw new UNKNOWN( + th.toString(), 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( file_url != null && !file_url.startsWith("file:") ) { + return string_to_object( file_url ); + } else { + throw new BAD_PARAM( "No file url allowed in a file" ); + } + } + + /** + * Destructor. + */ + + protected void finalize() + { + if (!m_destroyed) + destroy(); + } + + // PRE str starts with corbaloc:iiop: or corbaloc:: + + //TODO: this should come from the communications layers + protected org.omg.CORBA.Object iiopUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + CommunicationDelegate delegate = null; + + try { + ior = IIOPCorbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + //TODO: should the communicationsManager (or the related layer) store + //a cache of delegates for each IOR? + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + protected es.tid.TIDorbj.core.CodecFactoryImpl initCodecFactory() + { + synchronized (this) { + if (m_codec_factory == null) + m_codec_factory = new CodecFactoryImpl(this); + } + return m_codec_factory; + } + + protected es.tid.TIDorbj.dynAny.DynAnyFactoryImpl initDynAnyFactory() + { + synchronized (this) { + if (m_dyn_factory == null) { + try { + m_dyn_factory = + new es.tid.TIDorbj.dynAny.DynAnyFactoryImpl(); + m_dyn_factory.set_orb(this); + } + catch (Throwable th) { + throw new INITIALIZE("Cannot Initialize DynAnyFactory", 0, + CompletionStatus.COMPLETED_NO); + } + } + } + return m_dyn_factory; + } + + /** + * ORB initialization. This method will be invoked by + * set_parametres(). + */ + + protected void initOrb() + { + try { + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + this.communicationManager = CommunicationManager.getInstance( this ); + + m_POAManagers = new java.util.Vector(); + + m_value_factories = new java.util.Hashtable(); + + m_orb_services = new ORBServices(this); + + m_thread_policy_context_manager = + new es.tid.TIDorbj.core.policy.PolicyContextManager(this); + + setupInitialReferences(); + + if (m_conf.typecode_cache_size > 0) + m_typecode_cache = + new es.tid.TIDorbj.core.typecode.TypeCodeCache( + m_conf.typecode_cache_size); + + if (m_conf.trace_level != Trace.NONE) { + m_trace = getTrace(); + + + m_trace.print(Trace.ERROR, "ORB initialization OK!"); + + m_conf.dump(m_trace.getLog()); + m_trace.flush(); + } + + } + catch (Throwable e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + public synchronized Trace getTrace() + throws IOException + { + if (m_trace == null) { + if (m_conf.trace_file != null) { + if (m_conf.trace_num_files > 1) { + + CircularTraceFile ctf = + new CircularTraceFile(m_conf.trace_num_files, + m_conf.trace_file_size, + m_conf.trace_file); + m_trace = Trace.createTrace(ctf, toString(), + m_conf.trace_level); + } else { + m_trace = Trace.createTrace(m_conf.trace_file, toString(), + m_conf.trace_level); + } + + } else { + m_trace = Trace.createTrace(toString(), m_conf.trace_level); + } + } + + return m_trace; + } + + protected es.tid.TIDorbj.core.policy.PolicyCurrentImpl initPolicyCurrent() + { + synchronized (this) { + if (m_policy_current == null) + m_policy_current = + new es.tid.TIDorbj.core.policy.PolicyCurrentImpl + (m_thread_policy_context_manager); + } + return m_policy_current; + } + + protected es.tid.TIDorbj.core.compression.CompressionManagerImpl initCompressionManager() + { + synchronized (this) { + if (m_compression_manager == null) + m_compression_manager = + new es.tid.TIDorbj.core.compression.CompressionManagerImpl + (this); + } + return m_compression_manager; + } + + protected es.tid.TIDorbj.core.messaging.AMIManager initAMIManager() + { + synchronized (this) { + if (m_ami_manager == null) + m_ami_manager = + new es.tid.TIDorbj.core.messaging.AMIManager(this); + } + return m_ami_manager; + } + + protected es.tid.TIDorbj.core.policy.PolicyManagerImpl initPolicyManager() + { + synchronized (this) { + if (m_orb_policy_manager == null) + m_orb_policy_manager = + new es.tid.TIDorbj.core.policy.PolicyManagerImpl(this); + } + return m_orb_policy_manager; + } + + //PRE: str starts with corbaloc:rir: + + protected org.omg.CORBA.Object rirUrlToObject(String str) + { + if (!str.startsWith("corbaloc:rir:/")) + throw new BAD_PARAM(str); + try { + return resolve_initial_references(str.substring(14)); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(app, props); + initOrb(); + } + + // CORBA ORB standard methods + + protected void set_parameters(String[] args, java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(args, props); + initOrb(); + } + + protected void setupInitialReferences() + { + int references = m_conf.initial_references.size(); + + InitialReference ref = null; + + for (int i = 0; i < references; i++) { + ref = (InitialReference) m_conf.initial_references.elementAt(i); + m_orb_services.setService(ref.getName(), + string_to_object(ref.getURL())); + } + + } + + //PRE: str starts with corbaloc:tidorbj: + protected org.omg.CORBA.Object tidorbjUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + Delegate delegate = null; + + try { + ior = Corbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } +<<<<<<< .working + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +======= + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +>>>>>>> .merge-right.r354 + + public void setORBservice(String object_name, + org.omg.CORBA.Object obj) { + m_orb_services.setService(object_name, obj); + } + +} diff --git a/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.tmp b/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.tmp new file mode 100644 index 0000000..91c5062 --- /dev/null +++ b/source/es/tid/TIDorbj/core/.svn/tmp/tempfile.tmp @@ -0,0 +1,1684 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.io.IOException; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServiceInformationHolder; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.ORBPackage.InvalidName; +import org.omg.CORBA.portable.Delegate; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMIManager; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.typecode.AbstractInterfaceTypeCode; +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.core.util.Corbaname; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.CircularTraceFile; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb GIOPVersion 2.6 CORBA ORB. + *

+ * + * @autor Juan A. Cáceres + * @version 2.0 + */ +public class TIDORB extends org.omg.CORBA_2_5.ORB +{ + + /** + * ORB GIOPVersion + */ + +<<<<<<< .working +<<<<<<< .working + public final static String st_version = "6.3.3"; +======= + public final static String st_version = "6.3.2"; +======= + public final static String st_version = "6.3.3"; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + + /** + * @return the ORB Singleton instance. + */ + public static org.omg.CORBA.ORB init() + { + return SingletonORB.init(); + } + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * Local POAManagers. + */ + public java.util.Vector m_POAManagers; + + /** + * TraceService reference. + */ + public es.tid.TIDorbj.util.Trace m_trace; + + /** + * Local Codec factory. + */ + private CodecFactoryImpl m_codec_factory; + + /** TODO: remove me + * ORB Communication layer, drives request to the local layer or the + * external layer. + + private es.tid.TIDorbj.core.comm.iiop.CommLayer m_comm_layer;*/ + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + private CommunicationManager communicationManager; + + + /** + * Local CurrentImpl. + */ + private es.tid.TIDorbj.core.poa.CurrentImpl m_current; + + /** + * The ORB has been destroyed. + */ + + private boolean m_destroyed; + + /** + * Local DynAny factory. + */ + private es.tid.TIDorbj.dynAny.DynAnyFactoryImpl m_dyn_factory; + + /** + * ORB PolicyManager. + */ + private es.tid.TIDorbj.core.policy.PolicyManagerImpl m_orb_policy_manager; + + /** + * ORB Services + */ + + private ORBServices m_orb_services; + + /** + * Thread Policy Current. + */ + private es.tid.TIDorbj.core.policy.PolicyCurrentImpl m_policy_current; + + /** + * Compression Manager. + */ + private es.tid.TIDorbj.core.compression.CompressionManagerImpl m_compression_manager; + + /** + * Local rootPOA. + */ + private es.tid.TIDorbj.core.poa.POAImpl m_root_POA; + + /** + * Processing state: controls the ORB shutdown. + */ + + private ProcessingState m_state; + + /** + * Thread Policy Context Manager. + */ + private es.tid.TIDorbj.core.policy.PolicyContextManager + m_thread_policy_context_manager; + + /** + * Maintains the order which the request was created + */ + private RequestCounter requestCounter; + + /** + * TypeCode Cache. + */ + + private es.tid.TIDorbj.core.typecode.TypeCodeCache m_typecode_cache; + + /** + * ORB ValueFactoryList + */ + + private java.util.Hashtable m_value_factories; + + /** + * ORB Name + */ + + String m_orb_name; +<<<<<<< .working + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +======= + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + +>>>>>>> .merge-right.r354 + + /** + * Constructor. The orb must be initialized using the set_parameters(). + */ + public TIDORB() + { + m_conf = null; + m_state = new ProcessingState(this); + m_destroyed = false; + + this.communicationManager = null; + this.requestCounter = new RequestCounter(); + + m_dyn_factory = null; + m_root_POA = null; + m_trace = null; + m_current = null; + m_typecode_cache = null; +<<<<<<< .working +<<<<<<< .working + m_ami_manager = null; +======= + m_ami_manager = new AMIManager(this); +======= + m_ami_manager = null; +>>>>>>> .merge-right.r452 +>>>>>>> .merge-right.r354 + } + + public void connect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + + public TypeCode create_abstract_interface_tc(String id, String name) + { + return new AbstractInterfaceTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode + create_alias_tc( String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.Any create_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.AnyImpl(this); + } + + public org.omg.CORBA.TypeCode + create_array_tc( int length, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.ContextList create_context_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ContextListImpl(); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.Environment create_environment() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.EnvironmentImpl(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ExceptionListImpl(); + } + + public org.omg.CORBA.TypeCode + create_exception_tc( java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_list(int count) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (count < 0) + throw new BAD_PARAM("Count < 0", 0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.NVListImpl(this, count); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((s == null) || (any == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return es.tid.TIDorbj.core.NamedValueImpl.from_int(flags, s, any); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new CDROutputStream(this, m_conf.block_size); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (val == null) + throw new BAD_PARAM("Null any reference"); + + return es.tid.TIDorbj.core.policy.PolicyFactory.createPolicy(type, val); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode create_recursive_sequence_tc(int bound, + int offset) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc( int bound, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc( String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (concrete_base == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + /** + * Free all the ORB resources: connections and threads. + */ + + synchronized public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + // The thread is serving a request? + + if (initPOACurrent().inContext()) { // yes, it is in the serving request + // context + + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.shutdown(); + + m_state.waitForShutdown(); + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + * m_comm_layer.destroy(); + */ + this.communicationManager.destroy(); + this.communicationManager = null; + + + if (m_trace != null) { + try { + printTrace(Trace.USER, "Closing ORB Session."); + m_trace.close(); + } + catch (Throwable th) {} + + m_trace = null; + } + + if (m_value_factories != null) + m_value_factories.clear(); + + m_value_factories = null; + + if (m_codec_factory != null) { + m_codec_factory.destroy(); + m_codec_factory = null; + } + + if (m_dyn_factory != null) { + m_dyn_factory.destroy(); + m_dyn_factory = null; + } + + m_orb_services.destroy(); + m_orb_services = null; + + m_root_POA = null; + + if (m_current != null) { + m_current.destroy(); + m_current = null; + } + + m_destroyed = true; + } + + public boolean destroyed() + { + return m_destroyed; + } + + public void disconnect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated + */ + public org.omg.CORBA.Current get_current() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + return m_current; + } + + public org.omg.CORBA.Context get_default_context() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference", 0, + CompletionStatus.COMPLETED_NO); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public boolean + get_service_information( short service_type, + ServiceInformationHolder service_info) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + public CommunicationManager getCommunicationManager(){ + if ( m_destroyed ){ + throw new OBJECT_NOT_EXIST(); + } + return this.communicationManager; + } + + + + public es.tid.TIDorbj.core.policy.PolicyContextManager + getPolicyContextManager() + { + return m_thread_policy_context_manager; + } + + public es.tid.TIDorbj.core.policy.PolicyManagerImpl getPolicyManager() + { + return initPolicyManager(); + } + + public es.tid.TIDorbj.core.compression.CompressionManagerImpl getCompressionManager() + { + return initCompressionManager(); + } + + public es.tid.TIDorbj.core.typecode.TypeCodeCache getTypeCodeCache() + { + return m_typecode_cache; + } + + public RequestCounter getRequestCounter() + { + return this.requestCounter; + } + + + // CORBA 2.5 + public String id() + { + return m_conf.orb_id; + } + + // ORB Services + + public es.tid.TIDorbj.core.poa.POAImpl initPOA() { + synchronized (this) { + if (m_root_POA == null) { + m_root_POA = + es.tid.TIDorbj.core.poa.POAImpl.createRootPOA(this); + + + // init the orb listening points (usually one for each layer) + try { + this.communicationManager.setServerModeEnabled( true ); + } catch ( CommunicationException ce ) { + throw new INITIALIZE( "Unable to activate server mode: " + ce.getMessage() ); + } + + m_state.running(); + } + } + + return m_root_POA; + } + + public es.tid.TIDorbj.core.poa.CurrentImpl initPOACurrent() + { + synchronized (this) { + if (m_current == null) { + m_current = new es.tid.TIDorbj.core.poa.CurrentImpl(this); + } + } + + return m_current; + } + + public String[] list_initial_services() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_orb_services.listInitialServices(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + return (org.omg.CORBA.portable.ValueFactory) m_value_factories.get(id); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return IOR.nullIOR().toString(); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj) + ._get_delegate(); + + if (obj instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, + CompletionStatus.COMPLETED_NO); + + if (delegate instanceof CommunicationDelegate) + return ((CommunicationDelegate) delegate).toString(); + else + throw new BAD_PARAM("This Object has not been create by TIDorb", + 0, + CompletionStatus.COMPLETED_NO); + } + + public String objectToURL(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return Corbaloc.toURL(IOR.nullIOR()); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + //TODO: refactor URL/String IOR stuff + return ((CommunicationDelegate) delegate).getReference().toURL(); + } else + throw new BAD_PARAM("This Object has not been create by TIDorb", 0, + CompletionStatus.COMPLETED_NO); + } + + public void perform_work() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void printTrace(int level, String message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printTrace(int level, String message, Throwable e) + { + if (m_trace != null) + m_trace.printStackTrace(level, message, e); + } + + public void printTrace(int level, String[] message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printDump(int level, byte[] message, int length) + { + if (m_trace != null) + m_trace.dump(level, message, length); + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.registerInitialReference(object_name, obj); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + synchronized (m_value_factories) { + if (m_value_factories.containsKey(id)) + return null; + m_value_factories.put(id, factory); + } + + return factory; + } + + public void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.removeInitialReference(object_name); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (object_name == null) + throw new BAD_PARAM("Null String reference", 24, + CompletionStatus.COMPLETED_NO); + + return m_orb_services.resolveService(object_name); + } + + public void run() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (m_root_POA == null) { + throw new org.omg.CORBA.INTERNAL("RootPOA has not been created."); + } + + m_state.waitForShutdown(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < req.length; i++) + req[i].send_oneway(); + } + + public void set_delegate(java.lang.Object wrapper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (wrapper instanceof org.omg.PortableServer.Servant) { + org.omg.PortableServer.Servant servant = + (org.omg.PortableServer.Servant) wrapper; + + if (m_root_POA == null) { + initPOA(); + } + + try { + org.omg.CORBA.ORB servantOrb = servant._orb(); + if ( servantOrb != this ) { + throw new + BAD_PARAM("Servant is already active in another ORB"); + } + } + catch (org.omg.CORBA.BAD_INV_ORDER e) { + try { + m_root_POA.activate_object(servant); + + // Exceptions should never be thrown + } catch (org.omg.PortableServer.POAPackage.WrongPolicy wp) + { + } + catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive s) + { + } + } + } else + throw new BAD_PARAM("Servant expected"); + + } + + public void shutdown(boolean wait_for_completion) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + m_state.shutdown(); + + if (wait_for_completion) { + if (initPOACurrent().inContext()) { + // yes, it is in the serving request context + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.waitForShutdown(); + } + } + + public org.omg.CORBA.Object string_to_object(String str) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (str == null) { + throw new BAD_PARAM("Null String reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (str.startsWith("corbaname:")) + return corbanameUrlToObject(str); + + if (str.startsWith("file://")) + return fileUrlToObject(str); + + if (str.startsWith("corbaloc:rir:")) + return rirUrlToObject(str); + + if (str.startsWith("corbaloc:tidorbj:")) + return tidorbjUrlToObject(str); + + + Delegate delegate; + try { + delegate = this.communicationManager.createDelegate( str ); + } catch ( CommunicationException ce){ + delegate = null; + } + if ( delegate != null ){ + ObjectImpl o = new ObjectImpl(); + o._set_delegate( delegate ); + return o; + } else { + throw new BAD_PARAM( + "UNKNOWN String reference", 0, CompletionStatus.COMPLETED_NO + ); + } + /* + return iorToObject(str); + */ + } + + /* + * PRIVATE METHODS + * */ + public POAKey resolvePOAKey( ObjectKey objectKey ) + throws ForwardRequest + { + if( objectKey != null ){ + //not initialized to check every condition against compiler :) + POAKey key; + try { + /* + * Usually successfull for local requests, because objectKey + * comes directly from an IOR. We shouldn't know this right here + */ + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } catch (Throwable th) { + key = null; + } + + if(key != null) { + return key; + } + + + /* + * If objectKey comes from a remote request, it must be resolved + * through the ORB. + * First: try to get the URL, and after that, resolve it against + * registered initial references + */ + String urlKey = objectKey.getURL(); + org.omg.CORBA.Object reference = null; + + if ( urlKey != null ) { + + if ( urlKey != null ) { + + String initialReference; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + /* + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve url reference: ", + urlKey, " ", ce.getMessage() + } + ); + } + */ + initialReference = null; + }//initialReference retrieval + + if(initialReference == null) { + initialReference = urlKey; + } + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( Throwable th ){ + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve initial reference reference: ", + initialReference, " ", th.getMessage() + } + ); + } + reference = null; + } + if ( reference != null ) { + if ( reference instanceof IOR ){ + objectKey = (( IOR )reference ).getObjectKey(); + } else { + org.omg.CORBA.portable.ObjectImpl ref = + (org.omg.CORBA.portable.ObjectImpl)reference; + CommunicationDelegate delegate = + ( CommunicationDelegate ) ref._get_delegate(); + objectKey = delegate.getReference().getObjectKey(); + } + if ( objectKey != null ) { + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } else { + throw new INTERNAL(); + } + } else { + key = null; + }//reference = null + }//generic url, delegate in communication layers + // URL resolution: object key = service url + // it must throw a ForwardRequest + if ( key != null ){ + return key; + } else { + throw new ForwardRequest(resolveGenericURL(urlKey)); + } + + } else { //unable to get url from objectKey + throw new INV_OBJREF( "Invalid Object Key" ); + } + } else { + throw new INV_OBJREF( "ObjectKey cannot be null" ); + } + }//resolvePOAKey + + + /** + * Generic URL resolution + * @throws ForwardRequest + */ + protected org.omg.CORBA.Object resolveGenericURL(String urlKey) + { + POAKey key; + + + String initialReference = null; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + throw new OBJECT_NOT_EXIST("Invalid object key: " + urlKey); + }//initialReference retrieval + + + org.omg.CORBA.Object reference = null; + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( InvalidName th ){ + StringBuffer msg = new StringBuffer(); + msg.append("Unable to resolve initial reference reference: "); + msg.append(initialReference); + msg.append(" from "); + msg.append(urlKey); + throw new OBJECT_NOT_EXIST(msg.toString()); + } + + return reference; + } + + + + public String toString() + { + if (m_orb_name == null) { + + java.util.Date date; + + date = new java.util.Date(System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + name.append("TIDorbj "); + name.append(st_version); + name.append(" (id=\""); + name.append(m_conf.orb_id); + name.append("\") ["); + + name.append( this.communicationManager.toString() ); + + name.append("] created at "); + name.append(date.toString()); + + m_orb_name = name.toString(); + } + + return m_orb_name; + + } + + public void unregister_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + synchronized (m_value_factories) { + if (m_value_factories.remove(id) == null) + throw new BAD_PARAM(); + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public boolean waitShutdown(long millis) + { + return m_state.waitForShutdown(millis); + } + + public boolean work_pending() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + //PRE: str starts with corbaname: + + protected org.omg.CORBA.Object corbanameUrlToObject(String str) + { + try { + return Corbaname.toObject(this, str); + } + catch (Exception e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void doCompleteShutdown() + { + java.lang.Object[] mgrs = new java.lang.Object[m_POAManagers.size()]; + + m_POAManagers.copyInto(mgrs); + + for (int i = 0; i < mgrs.length; i++) { + org.omg.PortableServer.POAManager mgr = + (org.omg.PortableServer.POAManager) mgrs[i]; + try { + mgr.deactivate(true /* etherealize objects */, + true /* wait_for_completion */); + } + catch (Exception e) {} + } + + try { + if (m_root_POA != null) + m_root_POA.destroy(false, true); + } + catch (Exception e) {} + + try { + if ( this.communicationManager != null ){ + this.communicationManager.shutdown( true ); + } + } + catch (Exception e) {} + + m_state.shutdowned(); + } + + // PRE str starts with file: + + protected org.omg.CORBA.Object fileUrlToObject(String str) + { + String file_str = str.substring(7); + String file_url = null; + + if (file_str.length() == 0) + throw new BAD_PARAM(file_str); + try { + java.io.FileReader file_r = new java.io.FileReader(file_str); + java.io.BufferedReader url_r = new java.io.BufferedReader(file_r); + + file_url = url_r.readLine(); + url_r.close(); + + } catch (java.io.FileNotFoundException fnf) { + throw new BAD_PARAM("Invalid file url"); + } catch (SecurityException se) { + throw new NO_PERMISSION( + se.getMessage(), 0, CompletionStatus.COMPLETED_NO + ); + } catch (Throwable th) { + throw new UNKNOWN( + th.toString(), 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( file_url != null && !file_url.startsWith("file:") ) { + return string_to_object( file_url ); + } else { + throw new BAD_PARAM( "No file url allowed in a file" ); + } + } + + /** + * Destructor. + */ + + protected void finalize() + { + if (!m_destroyed) + destroy(); + } + + // PRE str starts with corbaloc:iiop: or corbaloc:: + + //TODO: this should come from the communications layers + protected org.omg.CORBA.Object iiopUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + CommunicationDelegate delegate = null; + + try { + ior = IIOPCorbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + //TODO: should the communicationsManager (or the related layer) store + //a cache of delegates for each IOR? + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + protected es.tid.TIDorbj.core.CodecFactoryImpl initCodecFactory() + { + synchronized (this) { + if (m_codec_factory == null) + m_codec_factory = new CodecFactoryImpl(this); + } + return m_codec_factory; + } + + protected es.tid.TIDorbj.dynAny.DynAnyFactoryImpl initDynAnyFactory() + { + synchronized (this) { + if (m_dyn_factory == null) { + try { + m_dyn_factory = + new es.tid.TIDorbj.dynAny.DynAnyFactoryImpl(); + m_dyn_factory.set_orb(this); + } + catch (Throwable th) { + throw new INITIALIZE("Cannot Initialize DynAnyFactory", 0, + CompletionStatus.COMPLETED_NO); + } + } + } + return m_dyn_factory; + } + + /** + * ORB initialization. This method will be invoked by + * set_parametres(). + */ + + protected void initOrb() + { + try { + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + this.communicationManager = CommunicationManager.getInstance( this ); + + m_POAManagers = new java.util.Vector(); + + m_value_factories = new java.util.Hashtable(); + + m_orb_services = new ORBServices(this); + + m_thread_policy_context_manager = + new es.tid.TIDorbj.core.policy.PolicyContextManager(this); + + setupInitialReferences(); + + if (m_conf.typecode_cache_size > 0) + m_typecode_cache = + new es.tid.TIDorbj.core.typecode.TypeCodeCache( + m_conf.typecode_cache_size); + + if (m_conf.trace_level != Trace.NONE) { + m_trace = getTrace(); + + + m_trace.print(Trace.ERROR, "ORB initialization OK!"); + + m_conf.dump(m_trace.getLog()); + m_trace.flush(); + } + + } + catch (Throwable e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + public synchronized Trace getTrace() + throws IOException + { + if (m_trace == null) { + if (m_conf.trace_file != null) { + if (m_conf.trace_num_files > 1) { + + CircularTraceFile ctf = + new CircularTraceFile(m_conf.trace_num_files, + m_conf.trace_file_size, + m_conf.trace_file); + m_trace = Trace.createTrace(ctf, toString(), + m_conf.trace_level); + } else { + m_trace = Trace.createTrace(m_conf.trace_file, toString(), + m_conf.trace_level); + } + + } else { + m_trace = Trace.createTrace(toString(), m_conf.trace_level); + } + } + + return m_trace; + } + + protected es.tid.TIDorbj.core.policy.PolicyCurrentImpl initPolicyCurrent() + { + synchronized (this) { + if (m_policy_current == null) + m_policy_current = + new es.tid.TIDorbj.core.policy.PolicyCurrentImpl + (m_thread_policy_context_manager); + } + return m_policy_current; + } + + protected es.tid.TIDorbj.core.compression.CompressionManagerImpl initCompressionManager() + { + synchronized (this) { + if (m_compression_manager == null) + m_compression_manager = + new es.tid.TIDorbj.core.compression.CompressionManagerImpl + (this); + } + return m_compression_manager; + } + + protected es.tid.TIDorbj.core.messaging.AMIManager initAMIManager() + { + synchronized (this) { + if (m_ami_manager == null) + m_ami_manager = + new es.tid.TIDorbj.core.messaging.AMIManager(this); + } + return m_ami_manager; + } + + protected es.tid.TIDorbj.core.policy.PolicyManagerImpl initPolicyManager() + { + synchronized (this) { + if (m_orb_policy_manager == null) + m_orb_policy_manager = + new es.tid.TIDorbj.core.policy.PolicyManagerImpl(this); + } + return m_orb_policy_manager; + } + + //PRE: str starts with corbaloc:rir: + + protected org.omg.CORBA.Object rirUrlToObject(String str) + { + if (!str.startsWith("corbaloc:rir:/")) + throw new BAD_PARAM(str); + try { + return resolve_initial_references(str.substring(14)); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(app, props); + initOrb(); + } + + // CORBA ORB standard methods + + protected void set_parameters(String[] args, java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(args, props); + initOrb(); + } + + protected void setupInitialReferences() + { + int references = m_conf.initial_references.size(); + + InitialReference ref = null; + + for (int i = 0; i < references; i++) { + ref = (InitialReference) m_conf.initial_references.elementAt(i); + m_orb_services.setService(ref.getName(), + string_to_object(ref.getURL())); + } + + } + + //PRE: str starts with corbaloc:tidorbj: + protected org.omg.CORBA.Object tidorbjUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + Delegate delegate = null; + + try { + ior = Corbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } +<<<<<<< .working + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +======= + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } +>>>>>>> .merge-right.r354 + + public void setORBservice(String object_name, + org.omg.CORBA.Object obj) { + m_orb_services.setService(object_name, obj); + } + +} diff --git a/source/es/tid/TIDorbj/core/AnyImpl.java b/source/es/tid/TIDorbj/core/AnyImpl.java new file mode 100644 index 0000000..1b643ac --- /dev/null +++ b/source/es/tid/TIDorbj/core/AnyImpl.java @@ -0,0 +1,1282 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeDumper; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; +import es.tid.TIDorbj.core.util.AbstractInterfaceHolder; +import es.tid.TIDorbj.core.util.FixedHolder; +import es.tid.TIDorbj.core.util.StringHolder; +import es.tid.TIDorbj.core.util.ULongHolder; +import es.tid.TIDorbj.core.util.ULongLongHolder; +import es.tid.TIDorbj.core.util.UShortHolder; +import es.tid.TIDorbj.core.util.ValueHolder; +import es.tid.TIDorbj.core.util.WCharHolder; +import es.tid.TIDorbj.core.util.WStringHolder; + +/** + * TIDorb Any pseudobject implementation. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class AnyImpl extends es.tid.CORBA.Any +{ + + /** + * ORB where the any has been created. If null is a ORB + * singleton. + */ + + TIDORB m_orb; + + protected TypeCode m_type; + + protected CDRInputStream m_marshaled_value; + + protected org.omg.CORBA.portable.Streamable m_value; + + protected org.omg.CORBA.Any m_wrapped_any; + + /** + * The Streamable value has been inserted by the user with + * insert_Streamable() + */ + protected boolean m_user_value; + + public AnyImpl(TIDORB orb) + { + m_orb = orb; + m_type = TypeCodeFactory.tc_null; + if ((m_orb != null) && (m_orb.m_conf.exhaustive_equal)) { + ((es.tid.TIDorbj.core.typecode.TypeCodeImpl)m_type).setExhaustiveEqual(m_orb.m_conf.exhaustive_equal); + } + m_marshaled_value = null; + m_value = null; + m_user_value = false; + m_wrapped_any = null; + } + + private synchronized void reset_value() + { + m_value = null; + m_marshaled_value = null; + m_user_value = false; + m_wrapped_any = null; + } + + protected boolean hasStreamable() + { + return m_value != null; + } + + // asigns the new vaule and reads from the _marshaled value. + private void initValue(org.omg.CORBA.portable.Streamable holder) + { + if (m_marshaled_value != null) { + m_marshaled_value.rewind(); + m_value = holder; + m_value._read(m_marshaled_value); + } else { + throw new BAD_OPERATION("Any without value.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized boolean equal(org.omg.CORBA.Any a) + { + if (a == null) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + if (m_wrapped_any != null) { + return m_wrapped_any.equal(a); + } + + if (!m_type.equal(a.type())) { + return false; + } + + switch (m_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + return true; + case TCKind._tk_short: + return extract_short() == a.extract_short(); + case TCKind._tk_long: + return extract_long() == a.extract_long(); + case TCKind._tk_longlong: + return extract_longlong() == a.extract_longlong(); + case TCKind._tk_ushort: + return extract_ushort() == a.extract_ushort(); + case TCKind._tk_ulong: + return extract_ulong() == a.extract_ulong(); + case TCKind._tk_ulonglong: + return extract_longlong() == a.extract_longlong(); + case TCKind._tk_float: + return extract_float() == a.extract_float(); + case TCKind._tk_double: + return extract_double() == a.extract_double(); + case TCKind._tk_boolean: + return extract_boolean() == a.extract_boolean(); + case TCKind._tk_char: + return extract_char() == a.extract_char(); + case TCKind._tk_wchar: + return extract_wchar() == a.extract_wchar(); + case TCKind._tk_octet: + return extract_octet() == a.extract_octet(); + case TCKind._tk_any: + return extract_any().equal(a.extract_any()); + case TCKind._tk_objref: + { + org.omg.CORBA.Object obj_ref, obj_ref_a; + obj_ref = extract_Object(); + obj_ref_a = a.extract_Object(); + if (obj_ref == null) { + if (obj_ref_a == null) { + return true; + } else { + return false; + } + } else { + return obj_ref._is_equivalent(obj_ref_a); + } + } + case TCKind._tk_string: + try { + if (m_type.length() == 0) { //unbounded string + return extract_string().equals(a.extract_string()); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_wstring: + try { + if (m_type.length() == 0) { //unbounded string + return extract_wstring().equals(a.extract_wstring()); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_TypeCode: + return extract_TypeCode().equal(a.extract_TypeCode()); + case TCKind._tk_fixed: + return extract_fixed().equals(a.extract_fixed()); + } + + return TypeCodeMarshaler.valuesEqual(m_type, create_input_stream(), + a.create_input_stream()); + } + + protected synchronized void wrapValue(org.omg.CORBA.Any a) + { + reset_value(); + m_wrapped_any = a; + } + + public static void assign(org.omg.CORBA.Any from, org.omg.CORBA.Any to) + { + assign(from, to, false); + } + + public static void assign(org.omg.CORBA.Any from, org.omg.CORBA.Any to, + boolean wrap) + { + if ((from == null) || (to == null)) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + TypeCode type = from.type(); + + switch (type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + to.type(type); + return; + case TCKind._tk_short: + to.insert_short(from.extract_short()); + return; + case TCKind._tk_long: + to.insert_long(from.extract_long()); + return; + case TCKind._tk_longlong: + to.insert_longlong(from.extract_longlong()); + return; + case TCKind._tk_ushort: + to.insert_ushort(from.extract_ushort()); + return; + case TCKind._tk_ulong: + to.insert_ulong(from.extract_ulong()); + return; + case TCKind._tk_ulonglong: + to.insert_ulonglong(from.extract_ulonglong()); + return; + case TCKind._tk_float: + to.insert_float(from.extract_float()); + return; + case TCKind._tk_double: + to.insert_double(from.extract_double()); + return; + case TCKind._tk_boolean: + to.insert_boolean(from.extract_boolean()); + return; + case TCKind._tk_char: + to.insert_char(from.extract_char()); + return; + case TCKind._tk_wchar: + to.insert_wchar(from.extract_wchar()); + return; + case TCKind._tk_octet: + to.insert_octet(from.extract_octet()); + return; + case TCKind._tk_any: + to.insert_any(from.extract_any()); + return; + case TCKind._tk_objref: + to.insert_Object(from.extract_Object()); + return; + case TCKind._tk_value: + to.insert_Value(from.extract_Value(), from.type()); + return; + + case TCKind._tk_string: + try { + if (type.length() == 0) { //unbounded string + to.insert_string(from.extract_string()); + return; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_wstring: + try { + if (type.length() == 0) { //unbounded string + to.insert_wstring(from.extract_wstring()); + return; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + // bounded string + break; + case TCKind._tk_TypeCode: + to.insert_TypeCode(from.extract_TypeCode()); + return; + case TCKind._tk_fixed: + to.insert_fixed(from.extract_fixed(), type); + return; + } + + // while JDKs API Any had no extract_Streamable() + if (from instanceof AnyImpl) { + AnyImpl tidorb_from = (AnyImpl) from; + if (tidorb_from.hasStreamable()) { + to.insert_Streamable(tidorb_from.extract_Streamable()); + return; + } + } + + // Only wraps complex types + + if (wrap && (to instanceof AnyImpl)) { + ((AnyImpl) to).wrapValue(from); + return; + } + + to.read_value(from.create_input_stream(), type); + } + + public static void assignValue(org.omg.CORBA.Any from, org.omg.CORBA.Any to) + { + assignValue(from, to, false); + } + + public static void assignValue(org.omg.CORBA.Any from, + org.omg.CORBA.Any to, boolean wrap) + { + if ((from == null) || (to == null)) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + if (!to.type().equivalent(from.type())) + throw new BAD_OPERATION("No Equivalent types.", 0, + CompletionStatus.COMPLETED_NO); + + assign(from, to, wrap); + } + + public org.omg.CORBA.TypeCode type() + { + return m_type; + } + + /** + * Changes the any typecode, is needed to minizimie overhead in any creation + * of alias types: first create the any, and then change the typecode. + */ + + public synchronized void setEquivalentType(TypeCode type) + { + if (!m_type.equivalent(type)) { + throw new BAD_OPERATION("Types are not equivalent.", 0, + CompletionStatus.COMPLETED_NO); + } else { + m_type = type; + } + } + + public synchronized void type(org.omg.CORBA.TypeCode type) + { + if (type == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + m_type = type; + reset_value(); + } + + public synchronized void read_value(org.omg.CORBA.portable.InputStream is, + org.omg.CORBA.TypeCode type) + { + if ((is == null) || (type == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + // basic types are read directly from the stream + + switch (type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + this.type(type); + return; + case TCKind._tk_short: + insert_short(is.read_short()); + return; + case TCKind._tk_long: + insert_long(is.read_long()); + return; + case TCKind._tk_longlong: + insert_longlong(is.read_longlong()); + return; + case TCKind._tk_ushort: + insert_ushort(is.read_ushort()); + return; + case TCKind._tk_ulong: + insert_ulong(is.read_ulong()); + return; + case TCKind._tk_ulonglong: + insert_ulonglong(is.read_ulonglong()); + return; + case TCKind._tk_float: + insert_float(is.read_float()); + return; + case TCKind._tk_double: + insert_double(is.read_double()); + return; + case TCKind._tk_boolean: + insert_boolean(is.read_boolean()); + return; + case TCKind._tk_char: + insert_char(is.read_char()); + return; + case TCKind._tk_wchar: + insert_wchar(is.read_wchar()); + return; + case TCKind._tk_octet: + insert_octet(is.read_octet()); + return; + case TCKind._tk_any: + insert_any(is.read_any()); + return; + case TCKind._tk_fixed: //special case: fixed values + { + FixedHolder fixed_holder = new FixedHolder(m_type); + fixed_holder._read(is); + insert_Streamable(fixed_holder); + return; + } + case TCKind._tk_value: + case TCKind._tk_value_box: + { + ValueHolder value_holder = new ValueHolder(m_type); + value_holder._read(is); + insert_Streamable(value_holder); + return; + } + case TCKind._tk_abstract_interface: + { + + AbstractInterfaceHolder interface_holder = + new AbstractInterfaceHolder(m_type); + interface_holder._read(is); + insert_Streamable(interface_holder); + return; + } + } + + this.type(type); + + if (is instanceof CDRInputStream) { + // the value is not a streamable value + m_marshaled_value = ((CDRInputStream) is).copy(); + + // saves the actual position + m_marshaled_value.fixStarting(); + + // set the input stream to the end of the value + TypeCodeMarshaler.skipValue(m_type, (CDRInputStream) is); + } else { + // I only can remarshal the value in my own buffer + CDROutputStream out = null; + + if (m_orb != null) { // orbsingleton + out = (CDROutputStream) m_orb.create_output_stream(); + } else { + out = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } + + TypeCodeMarshaler.remarshalValue(m_type, is, out); + m_marshaled_value = (CDRInputStream) out.create_input_stream(); + } + } + + public synchronized void write_value(org.omg.CORBA.portable.OutputStream os) + { + if (os == null) { + throw new BAD_PARAM("Null OutputStream reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + if (m_wrapped_any != null) { + m_wrapped_any.write_value(os); + return; + } + + int kind = m_type.kind().value(); + + if ((kind == TCKind._tk_null) || (kind == TCKind._tk_void)) { + return; + } else if (m_value != null) { + m_value._write(os); + } else if (m_marshaled_value != null) { + CDRInputStream _marshaled_value_copy = m_marshaled_value.copy(); + _marshaled_value_copy.rewind(); + TypeCodeMarshaler.remarshalValue(m_type, _marshaled_value_copy, os); + } else { + throw new BAD_OPERATION("Uncompleted Any.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized org.omg.CORBA.portable.OutputStream create_output_stream() + { + org.omg.CORBA.portable.OutputStream out = null; + + if (m_orb == null) { + out = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } else { + out = m_orb.create_output_stream(); + } + m_marshaled_value = (CDRInputStream) out.create_input_stream(); + + return out; + } + + public synchronized org.omg.CORBA.portable.InputStream create_input_stream() + { + if (m_wrapped_any != null) { + return m_wrapped_any.create_input_stream(); + } + + if (m_marshaled_value == null) { + createMarshaledValue(); + } + + CDRInputStream new_stream = m_marshaled_value.copy(); + new_stream.rewind(); + return new_stream; + } + + protected void createMarshaledValue() + { + if (m_marshaled_value != null) + return; + + int kind = m_type.kind().value(); + + if ((kind == TCKind._tk_null) || (kind == TCKind._tk_void)) { + m_marshaled_value = new CDRInputStream(m_orb, new byte[0]); + return; + } + + if (m_value != null) { + CDROutputStream output; + + if (m_orb == null) { + output = new CDROutputStream(null, ConfORB.DEFAULT_BLOCK_SIZE); + } else { + output = (CDROutputStream) m_orb.create_output_stream(); + } + m_value._write(output); + m_marshaled_value = (CDRInputStream) output.create_input_stream(); + } else { + throw new BAD_OPERATION("Any without value.", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized short extract_short() + { + if (m_type.kind().value() != TCKind._tk_short) { + throw new BAD_OPERATION("No short in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + try { + return ((org.omg.CORBA.ShortHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_short(); + } + } + + public synchronized void insert_short(short s) + { + m_value = new org.omg.CORBA.ShortHolder(s); + m_type = m_value._type(); + } + + public synchronized int extract_long() + { + if (m_type.kind().value() != TCKind._tk_long) { + throw new BAD_OPERATION("No long in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) { + initValue(new org.omg.CORBA.IntHolder()); + } + + try { + return ((org.omg.CORBA.IntHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_long(); + } + } + + public synchronized void insert_long(int i) + { + reset_value(); + m_value = new org.omg.CORBA.IntHolder(i); + m_type = m_value._type(); + } + + public synchronized long extract_longlong() + { + if (m_type.kind().value() != TCKind._tk_longlong) { + throw new BAD_OPERATION("No longlong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + if (m_value == null) { + initValue(new org.omg.CORBA.LongHolder()); + } + + try { + return ((org.omg.CORBA.LongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_longlong(); + } + } + + public synchronized void insert_longlong(long l) + { + reset_value(); + m_value = new org.omg.CORBA.LongHolder(l); + m_type = m_value._type(); + } + + public synchronized short extract_ushort() + { + if (m_type.kind().value() != TCKind._tk_ushort) { + throw new BAD_OPERATION("No ushort in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + if (m_value == null) + initValue(new UShortHolder()); + + try { + return ((UShortHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ushort(); + } + } + + public synchronized void insert_ushort(short s) + { + reset_value(); + m_value = new UShortHolder(s); + m_type = TypeCodeFactory.tc_ushort; + } + + public synchronized int extract_ulong() + { + if (m_type.kind().value() != TCKind._tk_ulong) { + throw new BAD_OPERATION("No ulong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new ULongHolder()); + + try { + return ((ULongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ulong(); + } + } + + public synchronized void insert_ulong(int i) + { + reset_value(); + m_value = new ULongHolder(i); + m_type = TypeCodeFactory.tc_ulong; + } + + public synchronized long extract_ulonglong() + { + if (m_type.kind().value() != TCKind._tk_ulonglong) { + throw new BAD_OPERATION("No ulonglong in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new ULongLongHolder()); + try { + return ((ULongLongHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_ulonglong(); + } + + } + + public synchronized void insert_ulonglong(long l) + { + reset_value(); + m_value = new ULongLongHolder(l); + m_type = TypeCodeFactory.tc_ulonglong; + } + + public synchronized float extract_float() + { + if (m_type.kind().value() != TCKind._tk_float) { + throw new BAD_OPERATION("No float in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.FloatHolder()); + try { + return ((org.omg.CORBA.FloatHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_float(); + } + } + + public synchronized void insert_float(float f) + { + reset_value(); + m_value = new org.omg.CORBA.FloatHolder(f); + m_type = m_value._type(); + } + + public synchronized double extract_double() + { + if (m_type.kind().value() != TCKind._tk_double) + throw new BAD_OPERATION("No float in Any.", 0, + CompletionStatus.COMPLETED_NO); + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.DoubleHolder()); + + try { + return ((org.omg.CORBA.DoubleHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_double(); + } + } + + public synchronized void insert_double(double d) + { + reset_value(); + m_value = new org.omg.CORBA.DoubleHolder(d); + m_type = m_value._type(); + } + + public synchronized boolean extract_boolean() + { + if (m_type.kind().value() != TCKind._tk_boolean) { + throw new BAD_OPERATION("No boolean in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.BooleanHolder()); + + try { + return ((org.omg.CORBA.BooleanHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_boolean(); + } + } + + public synchronized void insert_boolean(boolean b) + { + reset_value(); + m_value = new org.omg.CORBA.BooleanHolder(b); + m_type = m_value._type(); + } + + public synchronized char extract_char() + { + if (m_type.kind().value() != TCKind._tk_char) { + throw new BAD_OPERATION("No char in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.CharHolder()); + + try { + return ((org.omg.CORBA.CharHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_char(); + } + + } + + public synchronized void insert_char(char c) + { + reset_value(); + m_value = new org.omg.CORBA.CharHolder(c); + m_type = m_value._type(); + } + + public synchronized char extract_wchar() + { + if (m_type.kind().value() != TCKind._tk_wchar) { + throw new BAD_OPERATION("No wchar in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new WCharHolder()); + try { + return ((WCharHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_wchar(); + } + } + + public synchronized void insert_wchar(char c) + { + reset_value(); + m_value = new WCharHolder(c); + m_type = m_value._type(); + } + + public synchronized byte extract_octet() + { + if (m_type.kind().value() != TCKind._tk_octet) { + throw new BAD_OPERATION("No octet in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.ByteHolder()); + + try { + return ((org.omg.CORBA.ByteHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_octet(); + } + + } + + public synchronized void insert_octet(byte b) + { + reset_value(); + m_value = new org.omg.CORBA.ByteHolder(b); + m_type = m_value._type(); + } + + public synchronized org.omg.CORBA.Any extract_any() + { + if (m_type.kind().value() != TCKind._tk_any) { + throw new BAD_OPERATION("No any in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.AnyHolder()); + + try { + return ((org.omg.CORBA.AnyHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_any(); + } + } + + public synchronized void insert_any(org.omg.CORBA.Any a) + { + if (a == null) { + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.AnyHolder(a); + m_type = TypeCodeFactory.tc_any; + } + + public synchronized org.omg.CORBA.TypeCode extract_TypeCode() + { + if (m_type.kind().value() != TCKind._tk_TypeCode) { + throw new BAD_OPERATION("No TypeCode in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.TypeCodeHolder()); + + try { + return ((org.omg.CORBA.TypeCodeHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_TypeCode(); + } + } + + public synchronized void insert_TypeCode(org.omg.CORBA.TypeCode t) + { + if (t == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new org.omg.CORBA.TypeCodeHolder(t); + m_type = m_value._type(); + } + + public synchronized String extract_string() + { + try { + if ((m_type.kind().value() != TCKind._tk_string) + || (m_type.length() != 0)) { + throw new BAD_OPERATION("No unbounded string in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new StringHolder(m_type)); + + try { + + return ((StringHolder) m_value).value; + + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_string(); + } + } + + public synchronized void insert_string(String s) + { + if (s == null) { + throw new BAD_PARAM("Null String reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.StringHolder(s); + m_type = m_value._type(); + } + + public synchronized String extract_wstring() + { + if (m_type.kind().value() != TCKind._tk_wstring) { + throw new BAD_OPERATION("No wstring in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new WStringHolder(m_type)); + + try { + return ((WStringHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_wstring(); + } + } + + public synchronized void insert_wstring(String s) + { + if (s == null) { + throw new BAD_PARAM("Null String reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new WStringHolder(s); + m_type = m_value._type(); + } + + public synchronized java.math.BigDecimal extract_fixed() + { + if (m_type.kind().value() != TCKind._tk_fixed) { + throw new BAD_OPERATION("No fixed in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new FixedHolder(m_type)); + + try { + return ((FixedHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + throw new BAD_OPERATION("Can not obtain fixed", 0, + CompletionStatus.COMPLETED_NO); + } + } + + public synchronized void insert_fixed(java.math.BigDecimal f, + org.omg.CORBA.TypeCode t) + throws BAD_INV_ORDER + { + if ((f == null) || (t == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new FixedHolder(t, f); + m_type = t; + } + + /** + * @ deprecated + */ + public org.omg.CORBA.Principal extract_Principal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @ deprecated + */ + public void insert_Principal(org.omg.CORBA.Principal p) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public synchronized org.omg.CORBA.portable.Streamable extract_Streamable() + { + //if(!m_type.equivalent(m_value._type())) + // System.out.println("AnyImpl.extract_Streamable no equivalente"); + if (m_user_value) { + if (m_value != null) { + return m_value; + } else { + throw new org.omg.CORBA.INTERNAL("No Streamable in Any."); + } + } else { + throw new BAD_INV_ORDER("No Streamable in Any."); + } + } + + public synchronized void + insert_Streamable(org.omg.CORBA.portable.Streamable s) + { + if (s == null) { + throw new BAD_PARAM("Null Streamable reference.", 0, + CompletionStatus.COMPLETED_NO); + } + //if(!m_type.equivalent(s._type())) + // System.out.println("AnyImpl.insert_Streamable no equivalente"); + reset_value(); + m_user_value = true; + m_value = s; + m_type = m_value._type(); + } + + public synchronized org.omg.CORBA.Object extract_Object() + { + if (m_type.kind().value() != TCKind._tk_objref) { + throw new BAD_OPERATION("No Object in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + + // the value is marshaled in the inputstream + + if (m_value == null) + initValue(new org.omg.CORBA.ObjectHolder()); + + try { + return ((org.omg.CORBA.ObjectHolder) m_value).value; + } + catch (ClassCastException cce) { // there is another holder + createMarshaledValue(); + m_marshaled_value.rewind(); + return m_marshaled_value.read_Object(); + } + } + + public synchronized void insert_Object(org.omg.CORBA.Object obj) + { + if (obj instanceof org.omg.CORBA.LocalObject) { + throw new MARSHAL("Impossible to marshall a local object.", 4, + CompletionStatus.COMPLETED_NO); + } + + reset_value(); + m_value = new org.omg.CORBA.ObjectHolder(obj); + m_type = m_value._type(); + } + + public synchronized void insert_Object(org.omg.CORBA.Object obj, + org.omg.CORBA.TypeCode type) + { + if (type == null) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + reset_value(); + m_value = new org.omg.CORBA.ObjectHolder(obj); + m_type = type; + } + + public synchronized java.io.Serializable extract_Value() + { + int kind = m_type.kind().value(); + + if ((kind != TCKind._tk_value) && (kind != TCKind._tk_value_box)) { + throw new BAD_OPERATION("No Value in Any.", 0, + CompletionStatus.COMPLETED_NO); + } + // the value is marshaled in the inputstream + + if (m_value != null) { + if (m_value instanceof ValueHolder) { + + java.io.Serializable js = ((ValueHolder) m_value).value; + + return js; + } else { // there is another holder + createMarshaledValue(); + } + } + + if (m_marshaled_value != null) { + m_marshaled_value.rewind(); + return m_marshaled_value.read_value(); + } + + throw new BAD_OPERATION("Any without value"); + } + + public synchronized void insert_Value(java.io.Serializable v) + { + reset_value(); + + if (v instanceof org.omg.CORBA.portable.StreamableValue) { + org.omg.CORBA.portable.StreamableValue val = + (org.omg.CORBA.portable.StreamableValue) v; + + insert_Streamable(new ValueHolder(val._type(), val)); + m_type = val._type(); + return; + } else { + throw new BAD_PARAM("It is not StreamableValue"); + } + } + + public synchronized void insert_Value(java.io.Serializable v, + org.omg.CORBA.TypeCode t) + { + if (t == null) { + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + int kind = t.kind().value(); + + if ((kind == TCKind._tk_value) || (kind == TCKind._tk_value_box)) { + insert_Streamable(new ValueHolder(t, v)); + m_type = t; + } else { + throw new BAD_OPERATION(); + } + } + + public static boolean dump(org.omg.CORBA.Any any, + java.io.PrintWriter output) + throws java.io.IOException + { + if ((any == null) || (output == null)) { + throw new BAD_PARAM("Null reference.", 0, + CompletionStatus.COMPLETED_NO); + } + + output.print("[ANY]"); + TypeCodeDumper.dump(any.type(), output); + + org.omg.CORBA.portable.InputStream input = any.create_input_stream(); + + return TypeCodeDumper.dumpValue(any.type(), input, output); + } + +} diff --git a/source/es/tid/TIDorbj/core/BidirectionalPolicyImpl.java b/source/es/tid/TIDorbj/core/BidirectionalPolicyImpl.java new file mode 100644 index 0000000..cc78dc5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/BidirectionalPolicyImpl.java @@ -0,0 +1,170 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 82 $ +* Date: $Date: 2007-07-05 07:42:09 +0200 (Thu, 05 Jul 2007) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.BiDirPolicy.BOTH; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.BidirectionalPolicyHelper; +import org.omg.BiDirPolicy.BidirectionalPolicyValueHelper; +import org.omg.BiDirPolicy.NORMAL; +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * Implementation of BidirectionalPolicy + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class BidirectionalPolicyImpl extends PseudoObject + implements org.omg.BiDirPolicy.BidirectionalPolicy +{ + /** + * The policy value: BidirPolicy::BOTH or BiDirPolicy::NORMAL + */ + private short m_value; + + public BidirectionalPolicyImpl(short value) + { + m_value = value; + } + + public short value() + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST(); + } + + return m_value; + } + + public int policy_type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return new BidirectionalPolicyImpl(m_value); + } + + public void destroy() + { + m_destroyed = true; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST("Policy destroyed."); + } + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals( + "IDL:omg.org/BiDirPolicy/BidirectionalPolicy:1.0")) { + return true; + } + + return super._is_a(repositoryIdentifier); + + } + + public static Policy read(CDRInputStream input) + { + short value = input.read_short(); + + if(value != BOTH.value && value != NORMAL.value) { + throw new MARSHAL(); + } + + return new BidirectionalPolicyImpl(value); + } + + /** + * @param output + */ + public static void write(CDROutputStream output, Policy policy) + { + BidirectionalPolicy bidir_policy = + BidirectionalPolicyHelper.narrow(policy); + + output.write_ushort(bidir_policy.value()); + + } + + public static BidirectionalPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + short policy_value = BidirectionalPolicyValueHelper.extract(val); + + if ((policy_value != org.omg.BiDirPolicy.BOTH.value) + && (policy_value != org.omg.BiDirPolicy.NORMAL.value)) + throw new PolicyError(BAD_POLICY_VALUE.value); + + return new BidirectionalPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/CodecFactoryImpl.java b/source/es/tid/TIDorbj/core/CodecFactoryImpl.java new file mode 100644 index 0000000..1ea3366 --- /dev/null +++ b/source/es/tid/TIDorbj/core/CodecFactoryImpl.java @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.OBJECT_NOT_EXIST; + +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +public class CodecFactoryImpl extends org.omg.IOP.CodecFactoryLocalBase +{ + + private boolean m_destroyed; + + private es.tid.TIDorbj.core.TIDORB m_orb; + + public CodecFactoryImpl(es.tid.TIDorbj.core.TIDORB orb) + { + m_destroyed = false; + this.m_orb = orb; + } + + public synchronized void destroy() + { + m_destroyed = true; + m_orb = null; + } + + public synchronized org.omg.IOP.Codec create_codec(org.omg.IOP.Encoding enc) + throws org.omg.IOP.CodecFactoryPackage.UnknownEncoding + { + if (m_destroyed) { + throw new OBJECT_NOT_EXIST(); + } + + if (enc == null) { + throw new BAD_PARAM("Null Object reference"); + } + + if (enc.format != org.omg.IOP.ENCODING_CDR_ENCAPS.value) { + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + if (enc.major_version != 1) { + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + switch (enc.minor_version) + { + case 0: + return new + CodecImpl(m_orb,GIOPVersion.VERSION_1_0); + case 1: + return new CodecImpl(m_orb,GIOPVersion.VERSION_1_1); + case 2: + return new CodecImpl(m_orb,GIOPVersion.VERSION_1_2); + default: + throw new org.omg.IOP.CodecFactoryPackage.UnknownEncoding(); + } + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/CodecImpl.java b/source/es/tid/TIDorbj/core/CodecImpl.java new file mode 100644 index 0000000..1c50067 --- /dev/null +++ b/source/es/tid/TIDorbj/core/CodecImpl.java @@ -0,0 +1,187 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class CodecImpl extends org.omg.IOP.CodecLocalBase +{ + + private es.tid.TIDorbj.core.TIDORB m_orb; + + private es.tid.TIDorbj.core.comm.giop.GIOPVersion m_version; + + public CodecImpl(es.tid.TIDorbj.core.TIDORB orb, + es.tid.TIDorbj.core.comm.giop.GIOPVersion version) + { + m_orb = orb; + m_version = version; + } + + public byte[] encode(org.omg.CORBA.Any data) + throws org.omg.IOP.CodecPackage.InvalidTypeForEncoding + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDROutputStream out = (CDROutputStream) m_orb.create_output_stream(); + + out.setVersion(m_version); + // write the any into an encapsulation + + out.enterEncapsulation(); + + try { + out.write_any(data); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.InvalidTypeForEncoding(); + } + + out.exitEncapsulation(); + + // read the byte array + + InputStream input = out.create_input_stream(); + + int length = input.read_ulong(); + + byte[] value = new byte[length]; + + input.read_octet_array(value, 0, length); + + return value; + + } + + public org.omg.CORBA.Any decode(byte[] data) + throws org.omg.IOP.CodecPackage.FormatMismatch + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDRInputStream input = new CDRInputStream(m_orb, data); + + input.setByteOrder(input.read_boolean()); + + input.setVersion(m_version); + try { + return input.read_any(); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.FormatMismatch(); + } + } + + public byte[] encode_value(org.omg.CORBA.Any data) + throws org.omg.IOP.CodecPackage.InvalidTypeForEncoding + { + if (data == null) { + throw new BAD_PARAM(); + } + + CDROutputStream out = (CDROutputStream) m_orb.create_output_stream(); + + out.setVersion(m_version); + + // write the any into an encapsulation + out.enterEncapsulation(); + + try { + data.write_value(out); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.InvalidTypeForEncoding(); + } + + out.exitEncapsulation(); + + // read the byte array + + InputStream input = out.create_input_stream(); + + int length = input.read_ulong(); + + byte[] value = new byte[length]; + + input.read_octet_array(value, 0, length); + + return value; + } + + public org.omg.CORBA.Any decode_value(byte[] data, + org.omg.CORBA.TypeCode tc) + throws org.omg.IOP.CodecPackage.FormatMismatch, + org.omg.IOP.CodecPackage.TypeMismatch + { + if ((data == null) || (tc == null)) { + throw new BAD_PARAM(); + } + + CDRInputStream input = new CDRInputStream(m_orb, data); + + input.setVersion(m_version); + + input.setByteOrder(input.read_boolean()); + + org.omg.CORBA.Any any = m_orb.create_any(); + + try { + any.read_value(input, tc); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new org.omg.IOP.CodecPackage.TypeMismatch(); + } + catch (org.omg.CORBA.MARSHAL bo) { + throw new org.omg.IOP.CodecPackage.FormatMismatch(); + } + + return any; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ConfORB.java b/source/es/tid/TIDorbj/core/ConfORB.java new file mode 100644 index 0000000..dc3617b --- /dev/null +++ b/source/es/tid/TIDorbj/core/ConfORB.java @@ -0,0 +1,1662 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.applet.Applet; +import java.util.Arrays; +import java.util.Properties; +import java.util.Vector; + +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.PolicyError; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.SystemProperties; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.util.UTC; + +/** + * Configuration set for TIDorb. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ConfORB +{ + + /** + * ORB Policies + */ + + PolicyContext policy_context; + + /** + * Default ORB Policies + */ + + final static PolicyContext st_default_policy_context = + createDefaultPolicies(); + + /** + * TIDorb ORB Identifier: 666. This value must be registered in OMG. + */ + + public final static es.tid.TIDorbj.core.iop.ORBComponent ORB_TYPE = + new es.tid.TIDorbj.core.iop.ORBComponent(1414087680); + + /** + * TIDorb ORB_id + */ + + public final static String orb_id_name = "-ORBid"; + + public final static String DEFAULT_ORB_ID = "TIDorbJ"; + + public String orb_id = DEFAULT_ORB_ID; + + /** + * TIDorb Initial References + */ + + public java.util.Vector initial_references = new java.util.Vector(); + + /** + * TIDorb Default Initial References + */ + public final static String init_refs_name = "-ORBInitRef"; + + /** + * TIDorb Default Initial References + */ + + public String default_initial_reference = null; + + public final static String def_init_ref_name = "-ORBDefaultInitRef"; + + /** + * NamingService Property name. + */ + + public final static String naming_service_name = + "es.tid.TIDorbj.naming_service"; + + /** + * Default chunk size for CDR buffers. Default value: 256. + */ + + public final static int DEFAULT_BLOCK_SIZE = 256; + + /** + * Chunk size for CDR buffers. + *

+ * Values must be > 256 and multiple of 8 + */ + + public int block_size = DEFAULT_BLOCK_SIZE; + + /** + * Block_size Property name. + */ + + public final static String block_size_name = "es.tid.TIDorbj.block_size"; + + /** + * Default exhaustive TypeCode matching. + */ + public final static boolean DEFAULT_EXHAUSTIVE_EQUAL = false; + + /** + * Make or not an exhaustive TypeCode matching: + *

    + *
  • If true two TypeCodes equals each other if its + * RepositoryId and member names and TypeCodes equals. + *
  • If false only RepositoryIds are compared. + *
+ * Values must be "true" or "false". + */ + + public boolean exhaustive_equal = DEFAULT_EXHAUSTIVE_EQUAL; + + /** + * Exhaustive equal Property name. + */ + + public final static String exhaustive_equal_name = + "es.tid.TIDorbj.exhaustive_equal"; + + + /** + * Maximun time, in miliseconds, waiting a request reply. + *

+ * Values must be greater or equal than 0. Default value: 5000. + */ + + public final static long DEFAULT_MAX_BLOCKED_TIME = 5000; + + /** + * max_blocked_time Property name. + */ + + public final static String max_blocked_time_name = + "es.tid.TIDorbj.max_blocked_time"; + + + + public long max_blocked_time = DEFAULT_MAX_BLOCKED_TIME; + + /** + * Default TypeCode Cache Size. Default value: 0, no cache. + */ + + public final static int DEFAULT_TYPECODE_CACHE_SIZE = 0; + + /** + * Maximum of TypeCodes stored in the TypeCodeCache. + *

+ * Values must be greater or equal than 0. + */ + + public int typecode_cache_size = DEFAULT_TYPECODE_CACHE_SIZE; + + /** + * typecode_cache_size Property name. + */ + + public final static String typecode_cache_size_name = + "es.tid.TIDorbj.typecode_cache_size"; + + + /** + * Comma separated list of CommunicationLayer implementatios to be loaded at + * ORB's startup. By default, only IIOP comm layer will be loaded. + */ + public final static String DEFAULT_COMM_LAYER = + "es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer"; + + public String comm_layers = DEFAULT_COMM_LAYER; + + public final static String comm_layers_name = + "es.tid.TIDorbj.comm_layers"; + + + /** + * BidirectionalPolicy used. Values allowed NORMAL or BOTH + */ + public final static short DEFAULT_BIDIRECTIONAL = + org.omg.BiDirPolicy.NORMAL.value; + /** + * BIDIRECTIONAL Property name. + */ + public final static String bidirectional_name = + "es.tid.TIDorbj.bidirectional"; + + + /** + * Default ORB's maximum threads number per POAManager. + *

+ * Default value: 20. + */ + + public final static int DEFAULT_POA_MAX_THREADS = 20; + + /** + * ORB's maximum threads number per POAManager. + *

+ * Values must be greater than 0. + */ + + public int poa_max_threads = DEFAULT_POA_MAX_THREADS; + + /** + * max_threads Property name. + */ + + public final static String poa_max_threads_name = + "es.tid.TIDorbj.poa.max_threads"; + + /** + * Default ORB's minimum threads number per POAManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_POA_MIN_THREADS = 1; + + /** + * ORB's minimum threads number per POAManager. + *

+ * Values must be greater or equal than 0. + */ + + public int poa_min_threads = DEFAULT_POA_MIN_THREADS; + + /** + * min_threads Property name. + */ + + public final static String poa_min_threads_name = + "es.tid.TIDorbj.poa.min_threads"; + + /** + * Default ORB's queued requests number per POAManager. + *

+ * Default value: 1000. + */ + + public final static int DEFAULT_POA_MAX_QUEUED_REQUESTS = 1000; + + /** + * ORB's maximum queued requests number per POAManager. + *

+ * Values must be greater or equal than 0. + */ + + public int poa_max_queued_requests = DEFAULT_POA_MAX_QUEUED_REQUESTS; + + /** + * max_queued_requests Property name. + */ + + public final static String poa_max_queued_requests_name = + "es.tid.TIDorbj.poa.max_queued_requests"; + + /** + * Default thread's maximum idle time per POAManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_POA_STARVING_TIME = 0; + + /** + * Thread's maximum idle time per per POAManager. + *

+ * If it is 0, a thread can be idle forever. + */ + + public int poa_starving_time = DEFAULT_POA_STARVING_TIME; + + /** + * max_queued_requests Property name. + */ + + public final static String poa_starving_time_name = + "es.tid.TIDorbj.poa.starving_time"; + + + + /** + * Default AMIManager's maximum threads number + *

+ * Default value: 20. + */ + + public final static int DEFAULT_AMI_MAX_THREADS = 20; + + /** + * AMIManager's maximum threads number + *

+ * Values must be greater than 0. + */ + + public int ami_max_threads = DEFAULT_AMI_MAX_THREADS; + + /** + * max_threads Property name. + */ + + public final static String ami_max_threads_name = + "es.tid.TIDorbj.ami.max_threads"; + + /** + * Default AMIManager's minimum threads number. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_AMI_MIN_THREADS = 1; + + /** + * AMIManager's minimum threads number. + *

+ * Values must be greater or equal than 0. + */ + + public int ami_min_threads = DEFAULT_AMI_MIN_THREADS; + + /** + * ami_threads Property name. + */ + + public final static String ami_min_threads_name = + "es.tid.TIDorbj.ami.min_threads"; + + /** + * Default AMIManager's queued handled requests number . + *

+ * Default value: 1000. + */ + + public final static int DEFAULT_AMI_MAX_QUEUED_HANDLED_REQUESTS = 1000; + + /** + * AMIManager's maximum queued handled requests number . + *

+ * Values must be greater or equal than 0. + */ + + public int ami_max_queued_handled_requests = DEFAULT_AMI_MAX_QUEUED_HANDLED_REQUESTS; + + /** + * max_queued_requests Property name. + */ + + public final static String ami_max_queued_handled_requests_name = + "es.tid.TIDorbj.ami.max_queued_handled_requests"; + + /** + * Default thread's maximum idle time at AMIManager. + *

+ * Default value: 0. + */ + + public final static int DEFAULT_AMI_STARVING_TIME = 0; + + /** + * Thread's maximum idle time per at AMIManager. + *

+ * If it is 0, a thread can be idle forever. + */ + + public int ami_starving_time = DEFAULT_AMI_STARVING_TIME; + + /** + * max_queued_requests Property name. + */ + + public final static String ami_starving_time_name = + "es.tid.TIDorbj.ami.starving_time"; + + /** + * Default Maximun blocket time waiting for the shutdown completion. Default + * value: 5000. + */ + + public final static int DEFAULT_MAX_TIME_IN_SHUTDOWN = 5000; + + /** + * Maximun time, in miliseconds, waiting for the shutdown completion. + *

+ * Values must be greater or equal than 0. + */ + + public int max_time_in_shutdown = DEFAULT_MAX_TIME_IN_SHUTDOWN; + + /** + * max_time_in_shutdown Property name. + */ + + public final static String max_time_in_shutdown_name = + "es.tid.TIDorbj.max_time_in_shutdown"; + + /** + * Default Trace Level. Default value: Traces.NONE. + */ + + public final static int DEFAULT_TRACE_LEVEL = Trace.NONE; + + /** + * Trace Level. Values must be between 0 and 4. + */ + + public int trace_level = DEFAULT_TRACE_LEVEL; + + /** + * Trace Level Property name. + */ + + public final static String trace_level_name = + "es.tid.TIDorbj.trace.level"; + + /** + * Trace file name. + */ + + public String trace_file = null; + + /** + * Trace file property name. + */ + + public final static String trace_file_name = + "es.tid.TIDorbj.trace.file"; + + /** + * Default Trace file size. Default value: 10 K. + */ + public final static long DEFAULT_FILE_SIZE = 10240; + + /** + * Trace list files size + */ + public long trace_file_size = DEFAULT_FILE_SIZE; + + /** + * Trace list files size property name + */ + public final static String trace_file_size_name = + "es.tid.TIDorbj.trace.file_size"; + + /** + * Default Trace files list length. Default value: 1 file. + */ + public final static int DEFAULT_NUM_FILES = 1; + + /** + * Trace files list length + */ + public int trace_num_files = DEFAULT_NUM_FILES; + + /** + * Trace files list length property name + */ + public final static String trace_num_files_name = + "es.tid.TIDorbj.trace.num_files"; + + + /** + * Default qos. + */ + public final static boolean DEFAULT_QOS_ENABLED = true; + + /** + * Enable QoS policies for client and server side. + *

    + *
  • If true enabled QoS policies + *
  • If false disabled QoS policies. + *
+ * Values must be "true" or "false". + */ + + public boolean qos_enabled = DEFAULT_QOS_ENABLED; + + /** + * Exhaustive equal Property name. + */ + + public final static String qos_enabled_name = + "es.tid.TIDorbj.qos_enabled"; + + + + + /** + * Default ORB's ZIOP internal chunk size. + *

+ * Default value: 32768. + */ + + public final static int DEFAULT_ZIOP_CHUNK_SIZE = 32768; + + /** + * ORB's ZIOP internal chunk size. + *

+ * Values must be greater or equal than 0. + */ + + public int ziop_chunk_size = DEFAULT_ZIOP_CHUNK_SIZE; + + /** + * ziop_chunk_size Property name. + */ + + public final static String ziop_chunk_size_name = + "es.tid.TIDorbj.ziop_chunk_size"; + + + /** + * Default assume ziop at server side. + */ + public final static boolean DEFAULT_ASSUME_ZIOP_SERVER = false; + + /** + * Assume ZIOP policies enabled at server side. Useful to connect through + * corbaloc or Unicast/Multicast + *

    + *
  • If true server has ZIOP policies defined and known by client + *
  • If false server has not ZIOP policies. + *
+ * Values must be "true" or "false". + */ + + public boolean assume_ziop_server = DEFAULT_ASSUME_ZIOP_SERVER; + + /** + * Exhaustive equal Property name. + */ + + public final static String assume_ziop_server_name = + "es.tid.TIDorbj.assume_ziop_server"; + + + + private Applet parameters; + private Properties properties; + private Vector arguments; + + + protected static PolicyContext createDefaultPolicies() + { + PolicyContext context = new PolicyContext(null); + + try { + context.setPolicy( + new RelativeRoundtripTimeoutPolicyImpl( + UTC.toTimeT(DEFAULT_MAX_BLOCKED_TIME))); + context.setPolicy( + new BidirectionalPolicyImpl(DEFAULT_BIDIRECTIONAL)); + } + catch (PolicyError pe) {} + + return context; + } + + public ConfORB() + { + policy_context = new PolicyContext(st_default_policy_context); + } + + public PolicyContext getPolicyContext() + { + return policy_context; + } + + /** + * Initialize the ORB properties. + * + * @param args + * the arguments vector. + * @param props + * the properties. + */ + public void init(String[] args, java.util.Properties props) + { + parse_system_properties(); + + if (props != null) + init(props); + + if (args != null) + init(args); + } + + /** + * Initialize the ORB properties with the Applet arguments. + * + * @param app + * the applet that has created the ORB. + * @param props + * the properties. + */ + public void init(java.applet.Applet app, java.util.Properties props) + { + // parse_system_properties(); + + if (props != null) + init(props); + + if (app != null) + init(app); + + } + + /** + * Initialize the ORB properties with the arguments vector. + * + * @param app + * the applet that has created the ORB. + */ + + public void init(String[] args) + { + if ( this.arguments == null ){ + this.arguments = new Vector( args.length ); + } + this.arguments.addAll( Arrays.asList( args ) ); + + + int i = 0; + String name; + + while (i < args.length - 1) { + if ((args[i] == null) || (args[i].length() == 0)) { + i++; + } else { + if ( args[i].equals(comm_layers_name) ) + parse_comm_layers( args[++i] ); + if (args[i].equals(def_init_ref_name)) + default_initial_reference = args[++i]; + if (args[i].equals(orb_id_name)) + orb_id = args[++i]; + else if (args[i].equals(init_refs_name)) + parse_init_ref(args[++i]); + else if (args[i].equals(naming_service_name)) + parse_naming_service(args[++i]); + else if (args[i].equals(block_size_name)) + parse_block_size(args[++i]); + else if (args[i].equals(exhaustive_equal_name)) + parse_exhaustive_equal(args[++i]); + else if (args[i].equals(typecode_cache_size_name)) + parse_typecode_cache_size(args[++i]); + else if (args[i].equals(bidirectional_name)) + parse_bidirectional(args[++i]); + else if (args[i].equals(max_blocked_time_name)) + parse_max_blocked_time(args[++i]); + else if (args[i].equals(poa_max_threads_name)) + parse_poa_max_threads(args[++i]); + else if (args[i].equals(poa_min_threads_name)) + parse_poa_min_threads(args[++i]); + else if (args[i].equals(poa_max_queued_requests_name)) + parse_poa_max_queued_requests(args[++i]); + else if (args[i].equals(poa_starving_time_name)) + parse_poa_starving_time(args[++i]); + else if (args[i].equals(max_time_in_shutdown_name)) + parse_max_time_in_shutdown(args[++i]); + else if (args[i].equals(ami_max_threads_name)) + parse_ami_max_threads(args[++i]); + else if (args[i].equals(ami_min_threads_name)) + parse_ami_min_threads(args[++i]); + else if (args[i].equals(ami_max_queued_handled_requests_name)) + parse_ami_max_queued_handled_requests(args[++i]); + else if (args[i].equals(ami_starving_time_name)) + parse_ami_starving_time(args[++i]); + else if (args[i].equals(trace_file_name)) + trace_file = args[++i]; + else if (args[i].equals(trace_level_name)) + parse_trace_level(args[++i]); + else if (args[i].equals(trace_file_size_name)) + parse_trace_file_size(args[++i]); + else if (args[i].equals(trace_num_files_name)) + parse_trace_num_files(args[++i]); + else if (args[i].equals(qos_enabled_name)) + parse_qos_enabled(args[++i]); + else if (args[i].equals(ziop_chunk_size_name)) + parse_ziop_chunk_size(args[++i]); + else if (args[i].equals(assume_ziop_server_name)) + parse_assume_ziop_server(args[++i]); + else + i++; + } + } + + } + + + + /** + * Initialize the ORB properties with the Applet arguments. + * + * @param app + * the applet that has created the ORB. + */ + + public void init(Applet app) + { + this.parameters = app; + + parse_init_ref(app.getParameter(init_refs_name)); + + String aux_initial = app.getParameter(def_init_ref_name); + + if (aux_initial != null) + default_initial_reference = aux_initial; + + String id = app.getParameter(orb_id_name); + if (id != null) + orb_id = id; + + parse_comm_layers( app.getParameter(comm_layers_name)); + parse_naming_service(app.getParameter(naming_service_name)); + parse_block_size(app.getParameter(block_size_name)); + parse_exhaustive_equal(app.getParameter(exhaustive_equal_name)); + parse_typecode_cache_size(app.getParameter(typecode_cache_size_name)); + parse_bidirectional(app.getParameter(bidirectional_name)); + parse_max_blocked_time(app.getParameter(max_blocked_time_name)); + parse_poa_max_threads(app.getParameter(poa_max_threads_name)); + parse_poa_min_threads(app.getParameter(poa_min_threads_name)); + parse_poa_max_queued_requests( + app.getParameter(poa_max_queued_requests_name)); + parse_poa_starving_time(app.getParameter(poa_starving_time_name)); + parse_max_time_in_shutdown(app.getParameter(max_time_in_shutdown_name)); + + parse_ami_max_threads(app.getParameter(ami_max_threads_name)); + parse_ami_min_threads(app.getParameter(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + app.getParameter(ami_max_queued_handled_requests_name)); + parse_ami_starving_time(app.getParameter(poa_starving_time_name)); + + String aux_trace = app.getParameter(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(app.getParameter(trace_level_name)); + parse_trace_file_size(app.getParameter(trace_file_size_name)); + parse_trace_num_files(app.getParameter(trace_num_files_name)); + + parse_qos_enabled(app.getParameter(qos_enabled_name)); + parse_ziop_chunk_size(app.getParameter(ziop_chunk_size_name)); + parse_assume_ziop_server(app.getParameter(assume_ziop_server_name)); + } + + /** + * Initialize the ORB properties with the Properties object. + * + * @param props + * the properties. + */ + + public void init(java.util.Properties props) + { + if ( this.properties == null ){ + this.properties = new Properties(); + } + this.properties.putAll( props ); + + parse_comm_layers(props.getProperty(comm_layers_name)); + parse_naming_service(props.getProperty(naming_service_name)); + parse_block_size(props.getProperty(block_size_name)); + parse_exhaustive_equal(props.getProperty(exhaustive_equal_name)); + parse_typecode_cache_size(props.getProperty(typecode_cache_size_name)); + parse_bidirectional(props.getProperty(bidirectional_name)); + parse_max_blocked_time(props.getProperty(max_blocked_time_name)); + parse_poa_max_threads(props.getProperty(poa_max_threads_name)); + parse_poa_min_threads(props.getProperty(poa_min_threads_name)); + parse_poa_max_queued_requests( + props.getProperty(poa_max_queued_requests_name)); + parse_poa_starving_time(props.getProperty(poa_starving_time_name)); + parse_max_time_in_shutdown(props.getProperty(max_time_in_shutdown_name)); + + parse_ami_max_threads(props.getProperty(ami_max_threads_name)); + parse_ami_min_threads(props.getProperty(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + props.getProperty(ami_max_queued_handled_requests_name)); + parse_ami_starving_time(props.getProperty(ami_starving_time_name)); + + String aux_trace = props.getProperty(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(props.getProperty(trace_level_name)); + parse_trace_file_size(props.getProperty(trace_file_size_name)); + parse_trace_num_files(props.getProperty(trace_num_files_name)); + + parse_qos_enabled(props.getProperty(qos_enabled_name)); + parse_ziop_chunk_size(props.getProperty(ziop_chunk_size_name)); + parse_assume_ziop_server(props.getProperty(assume_ziop_server_name)); + } + + /** + * Search the ORB properties in the SystemProperties. + */ + + public void parse_system_properties() + { + parse_comm_layers( SystemProperties.findProperty(comm_layers_name) ); + parse_naming_service( + SystemProperties.findProperty(naming_service_name)); + parse_block_size(SystemProperties.findProperty(block_size_name)); + parse_exhaustive_equal( + SystemProperties.findProperty(exhaustive_equal_name)); + parse_max_blocked_time( + SystemProperties.findProperty(max_blocked_time_name)); + parse_poa_max_threads( + SystemProperties.findProperty(poa_max_threads_name)); + parse_poa_min_threads( + SystemProperties.findProperty(poa_min_threads_name)); + parse_poa_max_queued_requests( + SystemProperties.findProperty(poa_max_queued_requests_name)); + parse_poa_starving_time( + SystemProperties.findProperty(poa_starving_time_name)); + parse_max_time_in_shutdown( + SystemProperties.findProperty(max_time_in_shutdown_name)); + + parse_ami_max_threads( + SystemProperties.findProperty(ami_max_threads_name)); + parse_ami_min_threads( + SystemProperties.findProperty(ami_min_threads_name)); + parse_ami_max_queued_handled_requests( + SystemProperties.findProperty(ami_max_queued_handled_requests_name)); + parse_ami_starving_time( + SystemProperties.findProperty(ami_starving_time_name)); + + String aux_trace = SystemProperties.findProperty(trace_file_name); + if (aux_trace != null) + trace_file = aux_trace; + + parse_trace_level(SystemProperties.findProperty(trace_level_name)); + parse_trace_file_size( + SystemProperties.findProperty(trace_file_size_name)); + parse_trace_num_files( + SystemProperties.findProperty(trace_num_files_name)); + + parse_qos_enabled( + SystemProperties.findProperty(qos_enabled_name)); + parse_ziop_chunk_size( + SystemProperties.findProperty(ziop_chunk_size_name)); + parse_assume_ziop_server( + SystemProperties.findProperty(assume_ziop_server_name)); + } + + /********************************************************************/ + /* COMPATIBILIDAD CON VERSIONES ANTIGUAS */ + /********************************************************************/ + public void fillPropertyInfoOldValues( PropertyInfo pi ){ + if ( pi != null ){ + + boolean old_property_name_founded = false; + String old_property_name = ""; + String new_property_name = pi.getName(); + + if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.PORT)){ + old_property_name = "es.tid.TIDorbj.iiop.orb_port"; + old_property_name_founded = true; + } else if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS)){ + old_property_name = "es.tid.TIDorbj.iiop.ip_address"; + old_property_name_founded = true; + } else if (new_property_name.equals(IIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY)){ + old_property_name = "es.tid.TIDorbj.reliable_oneway"; + old_property_name_founded = true; + } + + if (old_property_name_founded){ + boolean found = false; + if ( !found && this.parameters != null ){ + String value; + value = this.parameters.getParameter(old_property_name ); + found = value != null; + if ( found ) { + pi.setValue( value ); + } + } + if ( !found && this.arguments != null ){ + int index; + index = this.arguments.indexOf( old_property_name ); + found = index > -1; + if ( found ){ + pi.setValue( (String)this.arguments.elementAt( ++index ) ); + } + } + if ( !found && this.properties != null ){ + String value; + value = this.properties.getProperty( old_property_name ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + if ( !found ){ + String value; + value = SystemProperties.findProperty( old_property_name ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + } + } + }//fillPropertyInfoOldValues + + /********************************************************************/ + + + public void fillPropertyInfo( PropertyInfo pi ){ + if ( pi != null ){ + fillPropertyInfoOldValues(pi); + boolean found = false; + if ( !found && this.parameters != null ){ + String value; + value = this.parameters.getParameter( pi.getName() ); + found = value != null; + if ( found ) { + pi.setValue( value ); + } + } + if ( !found && this.arguments != null ){ + int index; + index = this.arguments.indexOf( pi.getName() ); + found = index > -1; + if ( found ){ + pi.setValue( (String)this.arguments.elementAt( ++index ) ); + } + } + if ( !found && this.properties != null ){ + String value; + value = this.properties.getProperty( pi.getName() ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + if ( !found ){ + String value; + value = SystemProperties.findProperty( pi.getName() ); + found = value != null; + if ( found ){ + pi.setValue( value ); + } + } + } + } + + public void fillPropertyInfo( PropertyInfo[] pis ){ + if ( pis != null ){ + PropertyInfo pi; + for ( int i=0; i < pis.length; i++ ) { + this.fillPropertyInfo( pis[ i ] ); + } + } + } + + public void parse_init_ref(String str) + { + if (str == null) + return; + + InitialReference init_ref = new InitialReference(); + + init_ref.parse(str); + + initial_references.addElement(init_ref); + } + + public void parse_naming_service(String str) + { + if (str == null) + return; + InitialReference init_ref = new InitialReference("NameService", str); + + initial_references.addElement(init_ref); + } + + /** + * Parse the communications layer instances that should be passed to the + * CommunicationManager to be initialized. + * This method will check for the existence of the default communication + * layer (DEFAULT_COMM_LAYER)... which will represent both the IIOP and the + * local comm layers... + * @param str + */ + public void parse_comm_layers( String str ){ + if ( str != null ){ + if ( (str.indexOf( DEFAULT_COMM_LAYER ) == -1 && + str.indexOf( "es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer" ) == -1 )&& + str.trim().length() > 0 ) { + //must include default comm layer + comm_layers = DEFAULT_COMM_LAYER + ":" + str; + } else { + //default comm layer already present, + comm_layers = str; + } + } + } + + + /** + * Parse the block_size value. + * + * @param str + * the value digits. + * @pre Values must be > 256 and multiple of 8. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_block_size(String str) + { + if (str == null) + return; + + int value = parse_int(block_size_name, str); + + if ((value < 256) || (value % CDR.LONG_SIZE != 0)) + throw new INITIALIZE(block_size_name + ":invalid value " + value + + " (minimum fragment size: 256)"); + + block_size = value; + } + + /** + * Parse the exhaustive_equal boolean value. + * + * @param str + * the value representation. + * @pre Values must be "true" or "false". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_exhaustive_equal(String str) + { + if (str == null) + return; + + exhaustive_equal = parse_boolean(exhaustive_equal_name, str); + } + + /** + * Parse the typecode_cache_size value. + * + * @param str + * the value digits. + * @pre Value must be > 1024 and multiple of 8. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_typecode_cache_size(String str) + { + if (str == null) + return; + + int value = parse_int(typecode_cache_size_name, str); + + if (value < 0) + throw new INITIALIZE(typecode_cache_size_name + ": invalid value " + + value + " (fragment size must be > 0)"); + + typecode_cache_size = value; + + } + + /** + * Parse the ORB nominal Bidirectional Policy. + * + * @param str + * the policy value. + * @pre Values must be "NORMAL", "BOTH". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + //TODO: remove iiop, this is por ORB's policy manager... + public void parse_bidirectional(String str) + { + if (str == null) + return; + + short value = 0; + + if (str.equals("NORMAL")) { + return; + } else if (str.equals("BOTH")) { + try { + policy_context.setPolicy( + new BidirectionalPolicyImpl(org.omg.BiDirPolicy.BOTH.value)); + } + catch (PolicyError pe) {} + } else { + throw new org.omg.CORBA.INITIALIZE("Invalid value" + + bidirectional_name + + "=" + str); + } + } + + /** + * Parse the max_blocked_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_max_blocked_time(String str) + { + if (str == null) + return; + + long value = parse_long(max_blocked_time_name, str); + + if (value < 0) + throw new INITIALIZE(max_blocked_time_name + ":invalid value " + + value + " (minimum blocked 0)"); + + if (value != DEFAULT_MAX_BLOCKED_TIME) { + // converts to TimeT (from ms to units of 100 ns) + value = UTC.toTimeT(value); + try { + policy_context.setPolicy( + new RelativeRoundtripTimeoutPolicyImpl(value)); + } + catch (PolicyError pe) {} + max_blocked_time = value; + } + + } + + /** + * Parse the poa_max_threads value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_max_threads(String str) + { + if (str == null) + return; + + int value = parse_int(poa_max_threads_name, str); + + if (value < 1) + throw new INITIALIZE(poa_max_threads_name + ":invalid value " + + value + " (minimum 1)"); + + poa_max_threads = value; + + } + + /** + * Parse the poa_min_threads value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_min_threads(String str) + { + if (str == null) + return; + + int value = parse_int(poa_min_threads_name, str); + + if (value < 1) + throw new INITIALIZE(poa_min_threads_name + ":invalid value " + + value + " (minimum 1)"); + + poa_min_threads = value; + + } + + /** + * Parse the poa_max_queued_requests value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_max_queued_requests(String str) + { + if (str == null) + return; + + int value = parse_int(poa_max_queued_requests_name, str); + + if (value < 1) + throw new INITIALIZE(poa_max_queued_requests_name + + ":invalid value " + value + " (minimum 1)"); + + poa_max_queued_requests = value; + + } + + /** + * Parse the poa_starving_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_poa_starving_time(String str) + { + if (str == null) + return; + + int value = parse_int(poa_starving_time_name, str); + + if (value < 0) + throw new INITIALIZE(poa_starving_time_name + ":invalid value " + + value + " (minimum 0)"); + + poa_starving_time = value; + + } + + /** + * Parse the ami_max_threads value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_max_threads(String str) + { + if (str == null) + return; + + int value = parse_int(ami_max_threads_name, str); + + if (value < 1) + throw new INITIALIZE(ami_max_threads_name + ":invalid value " + + value + " (minimum 1)"); + + ami_max_threads = value; + + } + + /** + * Parse the ami_min_threads value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_min_threads(String str) + { + if (str == null) + return; + + int value = parse_int(ami_min_threads_name, str); + + if (value < 1) + throw new INITIALIZE(ami_min_threads_name + ":invalid value " + + value + " (minimum 1)"); + + ami_min_threads = value; + + } + + /** + * Parse the ami_max_queued_requests value. + * + * @param str + * the value digits. + * @pre Values must be > 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_max_queued_handled_requests(String str) + { + if (str == null) + return; + + int value = parse_int(ami_max_queued_handled_requests_name, str); + + if (value < 1) + throw new INITIALIZE(ami_max_queued_handled_requests_name + + ":invalid value " + value + " (minimum 1)"); + + ami_max_queued_handled_requests = value; + + } + + /** + * Parse the ami_starving_time value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ami_starving_time(String str) + { + if (str == null) + return; + + int value = parse_int(ami_starving_time_name, str); + + if (value < 0) + throw new INITIALIZE(ami_starving_time_name + ":invalid value " + + value + " (minimum 0)"); + + ami_starving_time = value; + + } + + + + + /** + * Parse the max_time_in_shutdown value. + * + * @param str + * the value digits. + * @pre Values must be >= 0. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_max_time_in_shutdown(String str) + { + if (str == null) + return; + + int value = parse_int(max_time_in_shutdown_name, str); + + if (value < 0) + throw new INITIALIZE(max_time_in_shutdown_name + ":invalid value " + + value + " (minimum blocked 0)"); + + max_time_in_shutdown = value; + + } + + + /** + * Parse the trace_level value. + * + * @param str + * the value digits. + * @pre Values must be between 0 and 4. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_trace_level(String str) + { + if (str == null) + return; + + int value = parse_int(trace_level_name, str); + + if ((value < Trace.NONE) || (value > Trace.DUMP)) + throw new INITIALIZE(trace_level_name + ":invalid value " + value + + " (valid value between 0 and 5)"); + + trace_level = value; + + } + + public void parse_trace_file_size(String size) + { + if (size == null) + return; + + long value = parse_long(trace_file_size_name, size); + + if (value < 1024L) + throw new INITIALIZE(trace_file_size_name + ": invalid value " + + value + " (valid value greater than 1024)"); + trace_file_size = value; + } + + public void parse_trace_num_files(String length) + { + if (length == null) + return; + + int value = parse_int(trace_num_files_name, length); + + if ((value < 1) || (value > 10)) + throw new INITIALIZE(trace_num_files_name + ": invalid value " + + value + " (valid value between 1 and 10)"); + + trace_num_files = value; + } + + + + + /** + * Parse the qos_enabled value. + * + * @param str + * the value digits. + * @pre Values must be true or false + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_qos_enabled(String str) + { + if (str == null) + return; + + qos_enabled = parse_boolean(qos_enabled_name, str); + + } + + /** + * Parse the ziop_chunk_size value. + * + * @param str + * the value digits. + * @pre Values must be > 0 + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_ziop_chunk_size(String str) + { + if (str == null) + return; + + int value = parse_int(ziop_chunk_size_name, str); + + if (value > 0) + throw new INITIALIZE(ziop_chunk_size_name + ":invalid value " + value + + " (value must be > 0)"); + + ziop_chunk_size = value; + } + + + + /** + * Parse the assume_ziop_server value. + * + * @param str + * the value digits. + * @pre Values must be true or false + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + public void parse_assume_ziop_server(String str) + { + if (str == null) + return; + + assume_ziop_server = parse_boolean(assume_ziop_server_name, str); + + } + + + + /** + * Parse the an int value. + * + * @param str + * the value digits. + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid number. + */ + protected static int parse_int(String prop_name, String str) + { + try { + return Integer.parseInt(str); + } + catch (NumberFormatException num) { + throw new INITIALIZE(prop_name + ": int value expected."); + } + } + + /** + * Parse an long value + * + * @param str + * the value digits + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid number + */ + protected static long parse_long(String prop_name, String str) + { + try { + return Long.parseLong(str); + } + catch (NumberFormatException num) { + throw new INITIALIZE(prop_name + ": long value expected"); + } + } + + /** + * Parse the a boolean value. + * + * @param str + * the value representation: "true" or "false". + * @exception org.omg.CORBA.INITIALIZE + * if the string does not contains a valid value. + */ + protected static boolean parse_boolean(String prop_name, String str) + { + if (str.equals("true")) + return true; + else if (str.equals("false")) + return false; + else + throw new INITIALIZE(prop_name + ": boolean value expected."); + } + + public void dump(java.io.PrintWriter writer) + { + //TODO: complete dump with CommLayers stuff + writer.println("TIDorb properties:"); + + writer.print('\t'); + writer.print(block_size_name); + writer.print('='); + writer.println(block_size); + writer.print('\t'); + writer.print(exhaustive_equal_name); + writer.print('='); + writer.println(exhaustive_equal); + writer.print('\t'); + + writer.print(typecode_cache_size_name); + writer.print('='); + writer.println(typecode_cache_size); + + writer.println(); + + writer.print('\t'); + writer.print(poa_max_threads_name); + writer.print('='); + writer.println(poa_max_threads); + writer.print('\t'); + writer.print(poa_min_threads_name); + writer.print('='); + writer.println(poa_min_threads); + writer.print('\t'); + writer.print(poa_max_queued_requests_name); + writer.print('='); + writer.println(poa_max_queued_requests); + writer.print('\t'); + writer.print(poa_starving_time_name); + writer.print('='); + writer.println(poa_starving_time); + + writer.print('\t'); + writer.print(ami_max_threads_name); + writer.print('='); + writer.println(ami_max_threads); + writer.print('\t'); + writer.print(ami_min_threads_name); + writer.print('='); + writer.println(ami_min_threads); + writer.print('\t'); + writer.print(ami_max_queued_handled_requests_name); + writer.print('='); + writer.println(ami_max_queued_handled_requests); + writer.print('\t'); + writer.print(ami_starving_time_name); + writer.print('='); + writer.println(ami_starving_time); + + + writer.print('\t'); + writer.print(max_time_in_shutdown_name); + writer.print('='); + writer.println(max_time_in_shutdown); + writer.println(); + writer.print('\t'); + writer.print(trace_level_name); + writer.print('='); + writer.println(trace_level); + + if (trace_file != null) { + writer.print('\t'); + writer.print(trace_file_name); + writer.print('='); + writer.println(trace_file); + + writer.print('\t'); + writer.print(trace_file_size_name); + writer.print('='); + writer.println(trace_file_size); + + writer.print('\t'); + writer.print(trace_num_files_name); + writer.print('='); + writer.println(trace_num_files); + } + + writer.print("Default Policies:"); + st_default_policy_context.dump(writer); + writer.print('\n'); + writer.print("User Policies:"); + policy_context.dump(writer); + writer.print('\n'); + + writer.flush(); + } +} + diff --git a/source/es/tid/TIDorbj/core/ContextImpl.java b/source/es/tid/TIDorbj/core/ContextImpl.java new file mode 100644 index 0000000..e12f926 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ContextImpl.java @@ -0,0 +1,325 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CTX_RESTRICT_SCOPE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Context; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.CORBA.NamedValue; +import org.omg.CORBA.TCKind; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * TIDorb ContextImpl pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ContextImpl extends org.omg.CORBA.Context +{ + + public ContextImpl(TIDORB orb, String name) + { + this(orb, name, null); + } + + public ContextImpl(TIDORB orb, String name, Context parent) + { + m_orb = orb; + m_name = name; + m_parent = parent; + m_values = null; + m_childs = null; + } + + public String context_name() + { + return m_name; + } + + public org.omg.CORBA.Context parent() + { + return m_parent; + } + + public org.omg.CORBA.Context create_child(String child_context_name) + { + if (child_context_name == null) { + + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + ContextImpl child = new ContextImpl(m_orb, child_context_name, this); + + if (m_childs == null) { + m_childs = new java.util.Vector(); + } + m_childs.addElement(child); + return child; + } + + public void set_one_value(String prop_name, org.omg.CORBA.Any value) + { + if ((prop_name == null) || (value == null)) { + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (m_values == null) { + m_values = new NVListImpl(m_orb); + } + + if (value.type().kind().value() != TCKind._tk_string) { + throw new BAD_PARAM("Value must have a string TypeCode."); + } + // new value + m_values.add_value(prop_name, value, 0); + } + + public void set_values(org.omg.CORBA.NVList values) + { + if (values == null) { + throw new BAD_PARAM("Null NVList reference", 0, + CompletionStatus.COMPLETED_NO); + } + + m_values = new NVListImpl(m_orb); + + int list_size = values.count(); + try { + for (int i = 0; i < list_size; i++) { + set_one_value(values.item(i).name(), values.item(i).value()); + } + } + catch (Bounds bds) {} + } + + public void delete_values(String prop_name) + { + if (prop_name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_values != null) { + int list_size = m_values.count(); + try { + for (int i = 0; i < list_size; i++) { + if (prop_name.equals(m_values.item(i).name())) { + m_values.remove(i); + } + } + } + catch (Bounds bds) {} + } + } + + public org.omg.CORBA.NVList get_values(String start_scope, int op_flags, + String pattern) + { + if ((start_scope == null) || (pattern == null)) { + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + NVListImpl list = new NVListImpl(m_orb); + + if (start_scope.equals(m_name)) { + int list_size = m_values.count(); + + try { + for (int i = 0; i < list_size; i++) { + + if (matchPattern(m_values.item(i).name(), pattern)) { + + list.add_value(m_values.item(i).name(), m_values + .item(i).value(), 0); + } + } + } + catch (Bounds bds) {}; + } + + if ((m_childs != null) && (op_flags != CTX_RESTRICT_SCOPE.value)) { + int child_size = m_childs.size(); + try { + NVList aux_list; + int list_size; + + for (int i = 0; i < child_size; i++) { + aux_list = ((Context) m_childs.elementAt(i)) + .get_values(start_scope, op_flags, pattern); + list_size = aux_list.count(); + + for (int j = 0; j < list_size; j++) { + list.add_value(aux_list.item(i).name(), aux_list + .item(i).value(), 0); + } + } + } + catch (Bounds bds) {} + + } + + return list; + } + + public String item(int i) + throws org.omg.CORBA.Bounds + { + return (m_values.item(i)).value().extract_string(); + } + + protected boolean matchPattern(String name, String pattern) + { + if (pattern.equals("*")) { + return true; + } + + int position = pattern.indexOf("*", 0); + if (position == -1) { + return name.equals(pattern); + } + if (position > name.length()) { + return false; + } + + String sub1 = pattern.substring(0, position); + String sub2 = name.substring(0, position); + return sub1.equals(sub2); + + } + + public static ContextImpl read(CDRInputStream input) + { + int pair_count = input.read_ulong(); + + if (pair_count == 0) { + return null; + } + + if ((pair_count < 1) || (pair_count % 2 != 0)) { + throw new MARSHAL("Malformed context name-value pairs", 0, + CompletionStatus.COMPLETED_NO); + } + + int num_values = pair_count / 2; + + ContextImpl context = new ContextImpl((TIDORB) input.orb(), ""); + + String name; + Any value; + + for (int i = 0; i < num_values; i++) { + name = input.read_string(); + value = input.orb().create_any(); + + value.insert_string(input.read_string()); + + context.set_one_value(name, value); + } + + return context; + } + + public static void write(CDROutputStream output, org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) + { + int contexts_count = contexts.count(); + + if (contexts_count == 0) { + //no context + output.write_ulong(0); + return; + } + + java.util.Vector nv_context = new java.util.Vector(); + + try { + NVList aux_list = null; + NamedValue nam_val = null; + int aux_list_size = 0; + + for (int i = 0; i < contexts_count; i++) { + aux_list = ctx.get_values("", 0, contexts.item(i)); + aux_list_size = aux_list.count(); + for (int j = 0; j < aux_list_size; j++) { + nam_val = aux_list.item(j); + nv_context.addElement(nam_val.name()); + nv_context.addElement(nam_val.value().extract_string()); + } + + } + } + catch (Bounds bds) {} + + int total_ctx_size = nv_context.size(); + + output.write_ulong(total_ctx_size); + + for (int i = 0; i < total_ctx_size; i++) { + output.write_string((String) nv_context.elementAt(i)); + } + } + + // members + + protected TIDORB m_orb; + + protected String m_name; + + protected Context m_parent; + + protected NVList m_values; + + protected java.util.Vector m_childs; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ContextListImpl.java b/source/es/tid/TIDorbj/core/ContextListImpl.java new file mode 100644 index 0000000..4eaf9d1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ContextListImpl.java @@ -0,0 +1,90 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * TIDorb ContextList pseudobject implementation. + * + * @autor Juan A. Ca´ceres + * @version 0.1 + */ + +public class ContextListImpl extends org.omg.CORBA.ContextList +{ + + public ContextListImpl() + { + m_elements = new java.util.Vector(); + } + + public int count() + { + return m_elements.size(); + } + + public void add(String ctx) + { + m_elements.addElement(ctx); + } + + public String item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_elements.size()) { + throw new org.omg.CORBA.Bounds(); + } + + return (String) m_elements.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_elements.size()) { + throw new org.omg.CORBA.Bounds(); + } + m_elements.removeElementAt(index); + } + + protected java.util.Vector m_elements; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/EnvironmentImpl.java b/source/es/tid/TIDorbj/core/EnvironmentImpl.java new file mode 100644 index 0000000..4659b07 --- /dev/null +++ b/source/es/tid/TIDorbj/core/EnvironmentImpl.java @@ -0,0 +1,76 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * TIDorb Environment pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class EnvironmentImpl extends org.omg.CORBA.Environment +{ + + protected java.lang.Exception m_exception; + + public EnvironmentImpl() + { + m_exception = null; + } + + public void exception(java.lang.Exception exception) + { + m_exception = exception; + } + + public java.lang.Exception exception() + { + return m_exception; + } + + public void clear() + { + m_exception = null; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ExceptionListImpl.java b/source/es/tid/TIDorbj/core/ExceptionListImpl.java new file mode 100644 index 0000000..700b7ce --- /dev/null +++ b/source/es/tid/TIDorbj/core/ExceptionListImpl.java @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TCKind; + +/** + * TIDorb ExceptionList pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ExceptionListImpl extends org.omg.CORBA.ExceptionList +{ + + java.util.Vector m_exceptions; + + public ExceptionListImpl() + { + m_exceptions = new java.util.Vector(); + } + + public int count() + { + return m_exceptions.size(); + } + + public void add(org.omg.CORBA.TypeCode exc) + { + if (exc == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + if (exc.kind().value() != TCKind._tk_except) + throw new BAD_PARAM("Exception TypeCode expected", 0, + CompletionStatus.COMPLETED_NO); + + m_exceptions.addElement(exc); + } + + public org.omg.CORBA.TypeCode item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_exceptions.size()) + throw new org.omg.CORBA.Bounds(); + return (org.omg.CORBA.TypeCode) m_exceptions.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_exceptions.size()) + throw new org.omg.CORBA.Bounds(); + m_exceptions.removeElementAt(index); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ForwardRequest.java b/source/es/tid/TIDorbj/core/ForwardRequest.java new file mode 100644 index 0000000..be07b49 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ForwardRequest.java @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.iop.IOR; + +public class ForwardRequest extends java.lang.Exception +{ + public IOR m_reference; + + public ForwardRequest(IOR ref) + { + m_reference = ref; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/NVListImpl.java b/source/es/tid/TIDorbj/core/NVListImpl.java new file mode 100644 index 0000000..6b9e532 --- /dev/null +++ b/source/es/tid/TIDorbj/core/NVListImpl.java @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 14 $ +* Date: $Date: 2006-02-22 13:30:10 +0100 (Wed, 22 Feb 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.CORBA.NamedValue; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.CORBA_2_3.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class NVListImpl extends org.omg.CORBA.NVList +{ + TIDORB m_orb; + + protected java.util.Vector m_components; + + public NVListImpl(TIDORB orb) + { + m_orb = orb; + m_components = new java.util.Vector(); + } + + public NVListImpl(TIDORB orb, int count) + { + m_components = new java.util.Vector(count); + } + + public int count() + { + return m_components.size(); + } + + public org.omg.CORBA.NamedValue add(int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, "", + m_orb.create_any()); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue add_item(String item_name, int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, item_name, + m_orb.create_any()); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue add_value(String name, + org.omg.CORBA.Any value, + int flags) + { + NamedValueImpl n_value = NamedValueImpl.from_int(flags, name, value); + m_components.addElement(n_value); + return n_value; + } + + public org.omg.CORBA.NamedValue item(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_components.size()) + throw new Bounds(); + + return (org.omg.CORBA.NamedValue) m_components.elementAt(index); + } + + public void remove(int index) + throws org.omg.CORBA.Bounds + { + if (index >= m_components.size()) + throw new Bounds(); + m_components.removeElementAt(index); + } + + // TIDorb Operations + + public static void destroy(NVList list) + { + try { + int size = list.count(); + for (int i = 0; i < size; i++) + list.remove(i); + } + catch (org.omg.CORBA.Bounds b) {} + } + + public static void assignOutArguments(NVList from_list, NVList to_list) + { + assignOutArguments(from_list, to_list, false); + } + + public static void assignOutArguments(NVList from_list, NVList to_list, + boolean wrap_anys) + { + int length = to_list.count(); + + if (length < from_list.count()) + throw new MARSHAL("Invalid number of out arguments.", 0, + CompletionStatus.COMPLETED_NO); + + NamedValue to_nam_val = null; + + try { + for (int i = 0; i < length; i++) { + to_nam_val = to_list.item(i); + if (to_nam_val.flags() != ARG_IN.value) + AnyImpl.assignValue(from_list.item(i).value(), + to_nam_val.value(), wrap_anys); + } + + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + public static void assignInArguments(NVList from_list, NVList to_list) + { + assignInArguments(from_list, to_list, false); + } + + public static void assignInArguments(NVList from_list, NVList to_list, + boolean wrap_anys) + { + int length = to_list.count(); + + if (length < from_list.count()) + throw new MARSHAL("Invalid number of out arguments.", 0, + CompletionStatus.COMPLETED_NO); + + NamedValue to_nam_val = null; + + try { + for (int i = 0; i < length; i++) { + to_nam_val = to_list.item(i); + if (to_nam_val.flags() != ARG_OUT.value) + AnyImpl.assignValue(from_list.item(i).value(), + to_nam_val.value(), wrap_anys); + } + + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void readOutParams(NVList list, InputStream input) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) + nam_val.value().read_value(input, nam_val.value().type()); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void writeOutParams(NVList list, OutputStream output) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) + nam_val.value().write_value(output); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + + } + + public static void readInParams(NVList list, InputStream input) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_OUT.value) + nam_val.value().read_value(input, nam_val.value().type()); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + public static void writeInParams(NVList list, OutputStream output) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_OUT.value) + nam_val.value().write_value(output); + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + // AMI operations + + public static void setOutParamsAsIn(NVList list, RequestImpl replyHandlerRequest) + { + if (list == null) + return; + + int length = list.count(); + + NamedValue nam_val = null; + + try { + for (int i = 0; i < length; i++) { + nam_val = list.item(i); + if (nam_val.flags() != ARG_IN.value) { + org.omg.CORBA.Any $arg = replyHandlerRequest.add_named_in_arg(nam_val.name()); + $arg.type(nam_val.value().type()); + } + } + } + catch (Bounds bds) { + throw new BAD_PARAM("Bad NVList"); + } + } + + + public NVList removeInParams() { + NVList listWithoutIn = new NVListImpl(m_orb); + int length = m_components.size(); + + NamedValue nam_val = null; + for (int i = 0; i < length; i++) { + nam_val = (NamedValue) m_components.elementAt(i); + if (nam_val.flags() != ARG_IN.value) + listWithoutIn.add_value(nam_val.name(), nam_val.value(), nam_val.flags()); + } + + return listWithoutIn; + } + + public NVList removeOutParams() { + NVList listWithoutOut = new NVListImpl(m_orb); + int length = m_components.size(); + + NamedValue nam_val = null; + for (int i = 0; i < length; i++) { + nam_val = (NamedValue) m_components.elementAt(i); + if (nam_val.flags() != ARG_OUT.value) + listWithoutOut.add_value(nam_val.name(), nam_val.value(), nam_val.flags()); + } + + return listWithoutOut; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/NamedValueImpl.java b/source/es/tid/TIDorbj/core/NamedValueImpl.java new file mode 100644 index 0000000..af3e99a --- /dev/null +++ b/source/es/tid/TIDorbj/core/NamedValueImpl.java @@ -0,0 +1,109 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_INOUT; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; + +/** + * TIDorb NameValueImpl pseudobject implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class NamedValueImpl extends org.omg.CORBA.NamedValue +{ + + protected java.lang.String m_name; + + protected org.omg.CORBA.Any m_value; + + protected int m_flags; + + protected NamedValueImpl() + {} + + public static NamedValueImpl from_int(int flags, java.lang.String name, + org.omg.CORBA.Any value) + throws org.omg.CORBA.BAD_PARAM + { + if ((name == null) || (value == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + verifyFlags(flags); + NamedValueImpl named = new NamedValueImpl(); + named.m_name = name; + named.m_value = value; + named.m_flags = flags; + return named; + + } + + private static void verifyFlags(int flags) + { + if ((flags != ARG_IN.value) && (flags != ARG_INOUT.value) + && (flags != ARG_OUT.value)) + throw new BAD_PARAM("Invalid flag argument", 0, + CompletionStatus.COMPLETED_NO); + } + + public String name() + { + return m_name; + } + + public org.omg.CORBA.Any value() + { + return m_value; + } + + public int flags() + { + return m_flags; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ORBComponent.java b/source/es/tid/TIDorbj/core/ORBComponent.java new file mode 100644 index 0000000..c9aa138 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ORBComponent.java @@ -0,0 +1,71 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +/** + * Base class for TIDorb Components. It defines the basic methods for accessing + * the ORB. + *

+ * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class ORBComponent extends Object +{ + + /** + * The ORB. + */ + protected TIDORB m_orb; + + public ORBComponent(TIDORB orb) + { + m_orb = orb; + } + + public TIDORB orb() + { + return m_orb; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ORBServices.java b/source/es/tid/TIDorbj/core/ORBServices.java new file mode 100644 index 0000000..08708b7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ORBServices.java @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; + +class ORBServices +{ + public final static String ROOT_POA_ID = "RootPOA"; + + public final static int ROOT_POA = 0; + + public final static String POA_CURRENT_ID = "POACurrent"; + + public final static int POA_CURRENT = 1; + + public final static String INTERFACE_REPOSITORY_ID = "InterfaceRepository"; + + public final static int INTERFACE_REPOSITORY = 2; + + public final static String NAME_SERVICE_ID = "NameService"; + + public final static int NAME_SERVICE = 3; + + public final static String TRADING_SERVICE_ID = "TradingService"; + + public final static int TRADING_SERVICE = 4; + + public final static String SECURITY_CURRENT_ID = "SecurityCurrent"; + + public final static int SECURITY_CURRENT = 5; + + public final static String TRANSACTION_CURRENT_ID = "TransactionCurrent"; + + public final static int TRANSACTION_CURRENT = 6; + + public final static String DYN_ANY_FACTORY_ID = "DynAnyFactory"; + + public final static int DYN_ANY_FACTORY = 7; + + public final static String ORB_POLICY_MANAGER_ID = "ORBPolicyManager"; + + public final static int ORB_POLICY_MANAGER = 8; + + public final static String POLICY_CURRENT_ID = "PolicyCurrent"; + + public final static int POLICY_CURRENT = 9; + + public final static String NOTIFICATION_SERVICE_ID = "NotificationService"; + + public final static int NOTIFICATION_SERVICE = 10; + + public final static String TYPED_NOTIFICATION_SERVICE_ID = + "TypedNotificationService"; + + public final static int TYPED_NOTIFICATION_SERVICE = 11; + + public final static String CODEC_FACTORY_ID = "CodecFactory"; + + public final static int CODEC_FACTORY = 12; + + public final static String PI_CURRENT_ID = "PICurrent"; + + public final static int PI_CURRENT = 13; + + public final static String RT_ORB_ID = "RTORB"; + + public final static int RT_ORB = 14; + + public final static String COMPRESSION_MANAGER_ID = "CompressionManager"; + + public final static int COMPRESSION_MANAGER = 15; + + + + private TIDORB m_orb; + + private java.util.Hashtable m_corba_services_ids; + + private java.util.Hashtable m_service_table; + + private final static Integer NULL_SERVICE = new Integer(0); + + public ORBServices(TIDORB orb) + { + m_orb = orb; + + m_corba_services_ids = new java.util.Hashtable(); + + m_corba_services_ids.put(ROOT_POA_ID, new Integer(ROOT_POA)); + m_corba_services_ids.put(POA_CURRENT_ID, new Integer(POA_CURRENT)); + m_corba_services_ids.put(INTERFACE_REPOSITORY_ID, + new Integer(INTERFACE_REPOSITORY)); + m_corba_services_ids.put(NAME_SERVICE_ID, new Integer(NAME_SERVICE)); + m_corba_services_ids.put(TRADING_SERVICE_ID, + new Integer(TRADING_SERVICE)); + m_corba_services_ids.put(SECURITY_CURRENT_ID, + new Integer(SECURITY_CURRENT)); + m_corba_services_ids.put(TRANSACTION_CURRENT_ID, + new Integer(TRANSACTION_CURRENT)); + m_corba_services_ids.put(DYN_ANY_FACTORY_ID, + new Integer(DYN_ANY_FACTORY)); + m_corba_services_ids.put(ORB_POLICY_MANAGER_ID, + new Integer(ORB_POLICY_MANAGER)); + m_corba_services_ids.put(POLICY_CURRENT_ID, + new Integer(POLICY_CURRENT)); + m_corba_services_ids.put(NOTIFICATION_SERVICE_ID, + new Integer(NOTIFICATION_SERVICE)); + m_corba_services_ids.put(TYPED_NOTIFICATION_SERVICE_ID, + new Integer(TYPED_NOTIFICATION_SERVICE)); + m_corba_services_ids.put(CODEC_FACTORY_ID, new Integer(CODEC_FACTORY)); + m_corba_services_ids.put(PI_CURRENT_ID, new Integer(PI_CURRENT)); + m_corba_services_ids.put(RT_ORB_ID, new Integer(RT_ORB)); + m_corba_services_ids.put(COMPRESSION_MANAGER_ID, new Integer(COMPRESSION_MANAGER)); + + m_service_table = new java.util.Hashtable(); + + m_service_table.put(ROOT_POA_ID, NULL_SERVICE); + m_service_table.put(POA_CURRENT_ID, NULL_SERVICE); + m_service_table.put(INTERFACE_REPOSITORY_ID, NULL_SERVICE); + m_service_table.put(NAME_SERVICE_ID, NULL_SERVICE); + m_service_table.put(TRADING_SERVICE_ID, NULL_SERVICE); + m_service_table.put(SECURITY_CURRENT_ID, NULL_SERVICE); + m_service_table.put(TRANSACTION_CURRENT_ID, NULL_SERVICE); + m_service_table.put(DYN_ANY_FACTORY_ID, NULL_SERVICE); + m_service_table.put(ORB_POLICY_MANAGER_ID, NULL_SERVICE); + m_service_table.put(POLICY_CURRENT_ID, NULL_SERVICE); + m_service_table.put(NOTIFICATION_SERVICE_ID, NULL_SERVICE); + m_service_table.put(TYPED_NOTIFICATION_SERVICE_ID, NULL_SERVICE); + m_service_table.put(CODEC_FACTORY_ID, NULL_SERVICE); + m_service_table.put(PI_CURRENT_ID, NULL_SERVICE); + m_service_table.put(RT_ORB_ID, NULL_SERVICE); + m_service_table.put(COMPRESSION_MANAGER_ID, NULL_SERVICE); + + } + + public synchronized void destroy() + { + m_service_table.clear(); + m_service_table = null; + + m_corba_services_ids.clear(); + m_corba_services_ids = null; + } + + public synchronized org.omg.CORBA.Object resolveService(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + java.lang.Object table_value = m_service_table.get(object_name); + + if (table_value == null) { + if (m_orb.m_conf.default_initial_reference == null) + throw new org.omg.CORBA.BAD_PARAM(object_name); + + return m_orb.string_to_object( + m_orb.m_conf.default_initial_reference + + object_name); + } + + org.omg.CORBA.Object obj = null; + + if (table_value instanceof org.omg.CORBA.Object) + return (org.omg.CORBA.Object) table_value; + + if ((table_value instanceof Integer) + && (((Integer) table_value) != NULL_SERVICE)) { + //TODO: recomment this + //known services are registered as NULL_SERVICE to + //mark them as known initially, and instantiated when + //requested... if a service is registered with neither + //its ior nor the null service, will be an error + throw new org.omg.CORBA.INTERNAL(); + } + + Integer orb_service_val = + (Integer) m_corba_services_ids.get(object_name); + + switch (orb_service_val.intValue()) + { + case ROOT_POA: + obj = m_orb.initPOA(); + m_service_table.put(ROOT_POA_ID, obj); + return obj; + case POA_CURRENT: + obj = m_orb.initPOACurrent(); + m_service_table.put(POA_CURRENT_ID, obj); + return obj; + case DYN_ANY_FACTORY: + obj = m_orb.initDynAnyFactory(); + m_service_table.put(DYN_ANY_FACTORY_ID, obj); + + return obj; + case CODEC_FACTORY: + obj = m_orb.initCodecFactory(); + m_service_table.put(CODEC_FACTORY_ID, obj); + return obj; + case ORB_POLICY_MANAGER: + obj = m_orb.initPolicyManager(); + m_service_table.put(ORB_POLICY_MANAGER_ID, obj); + return obj; + case POLICY_CURRENT: + obj = m_orb.initPolicyCurrent(); + m_service_table.put(POLICY_CURRENT_ID, obj); + return obj; + case COMPRESSION_MANAGER: + obj = m_orb.initCompressionManager(); + m_service_table.put(COMPRESSION_MANAGER_ID, obj); + return obj; + case RT_ORB: + case INTERFACE_REPOSITORY: + case NAME_SERVICE: + case TRADING_SERVICE: + case SECURITY_CURRENT: + case TRANSACTION_CURRENT: + case NOTIFICATION_SERVICE: + case TYPED_NOTIFICATION_SERVICE: + case PI_CURRENT: + throw new org.omg.CORBA.BAD_OPERATION("Service not available"); + default: + throw new org.omg.CORBA.INTERNAL(); + } + } + + public synchronized void registerInitialReference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + if (object_name == null) + throw new BAD_PARAM("Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + if (obj == null) + throw new BAD_PARAM("Null Object reference", + 24, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + if (m_corba_services_ids.containsKey(object_name)) + throw new org.omg.CORBA.ORBPackage.InvalidName(object_name); + + m_service_table.put(object_name, obj); + } + + public synchronized String[] listInitialServices() + { + java.util.Vector list = new java.util.Vector(); + + java.util.Enumeration e = m_service_table.keys(); + + while (e.hasMoreElements()) { + list.addElement(e.nextElement()); + } + + int ids_size = list.size(); + + String[] ids = new String[ids_size]; + + for (int i = 0; i < ids_size; i++) + ids[i] = (String) list.elementAt(i); + + return ids; + } + + protected synchronized void setService(String object_name, + org.omg.CORBA.Object obj) + { + if (object_name == null) + throw new BAD_PARAM( "Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + if (obj == null) + throw new BAD_PARAM("Null Object reference", + 24, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + m_service_table.put(object_name, obj); + } + + protected synchronized void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (object_name == null) + throw new BAD_PARAM("Null String reference", + 0, + org.omg.CORBA.CompletionStatus.COMPLETED_NO); + + if (m_service_table.containsKey(object_name)) + m_service_table.remove(object_name); + else + throw new org.omg.CORBA.ORBPackage.InvalidName(object_name); + } +} diff --git a/source/es/tid/TIDorbj/core/ObjectImpl.java b/source/es/tid/TIDorbj/core/ObjectImpl.java new file mode 100644 index 0000000..1166df1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ObjectImpl.java @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.comm.CommunicationException; + +public class ObjectImpl extends org.omg.CORBA_2_3.portable.ObjectImpl +{ + + protected final static String[] __ids = { "IDL:omg.org/CORBA/Object:1.0" }; + + public ObjectImpl() + {} + + public static ObjectImpl fromIOR(es.tid.TIDorbj.core.TIDORB orb, + es.tid.TIDorbj.core.iop.IOR ior) + { + ObjectImpl obj = new ObjectImpl(); + try { + obj._set_delegate( + orb.getCommunicationManager().createDelegate( ior ) + ); + } catch (CommunicationException ce ){ + //TODO: ¿? + } + return obj; + } + + public String[] _ids() + { + return __ids; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ObjectKey.java b/source/es/tid/TIDorbj/core/ObjectKey.java new file mode 100644 index 0000000..eb561b6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ObjectKey.java @@ -0,0 +1,135 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.util.Base64Codec; + +/** + * ObjectKey data structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ObjectKey +{ + private String str; + + Encapsulation m_marshaled_key; + + public ObjectKey(){ + } + + public ObjectKey(Encapsulation key) { + this.m_marshaled_key = key; + } + + public boolean equal(ObjectKey other) + { + return ( m_marshaled_key == null && m_marshaled_key == other.m_marshaled_key ) || + ( m_marshaled_key.equal( other.m_marshaled_key ) ); + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_marshaled_key = input.readEncapsulation(); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_marshaled_key != null) { + output.writeEncapsulation(m_marshaled_key); + } else { + throw new org.omg.CORBA.INTERNAL("Malformed Objectkey"); + } + } + + public void setMarshaledKey( Encapsulation marshaled_key ) { + this.m_marshaled_key = marshaled_key; + } + + public Encapsulation getMarshaledKey() { + return m_marshaled_key; + } + + //TODO: tryToGetURLKey should be removed, and also the one in IIOPCorbaLoc + public String getURL() { + //TODO: check if this should be stored locally for further invocations + String url; + try { + int size = this.m_marshaled_key.getLength(); + int offset = this.m_marshaled_key.getOffset(); + + CDRInputStream input = new CDRInputStream( + this.m_marshaled_key.getORB(), + this.m_marshaled_key.getOctetSequence() + ); + + if (offset > 0) { + input.skip(offset); + } + + char[] url_key = new char[size]; + + input.read_char_array(url_key, 0, size); + + + + url = new String(url_key); + } catch ( Throwable th ){ + th.printStackTrace(); + url = null; + } + return url; + }//getURL + + public synchronized String toString() + { + if(str == null) { + str = Base64Codec.encode(m_marshaled_key.getOctetSequence()); + } + + return str; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ProcessingState.java b/source/es/tid/TIDorbj/core/ProcessingState.java new file mode 100644 index 0000000..2724ff3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ProcessingState.java @@ -0,0 +1,133 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +class ProcessingState +{ + + final static short CLIENT = 0; + + final static short RUNNING = 1; + + final static short SHUTDOWNING = 2; + + final static short SHUTDOWNED = 3; + + short m_state; + + TIDORB m_orb; + + public ProcessingState(TIDORB orb) + { + this.m_orb = orb; + m_state = CLIENT; + } + + public short state() + { + return m_state; + } + + public synchronized void running() + { + if (m_state == CLIENT) { + m_state = RUNNING; + } + } + + public boolean isShutdowned() + { + return m_state == SHUTDOWNED; + } + + public synchronized void shutdown() + { + if (m_state == RUNNING) { + m_state = SHUTDOWNING; + ShutdownThread thread = new ShutdownThread(m_orb); + thread.start(); + } + } + + public synchronized void shutdowned() + { + if (m_state == SHUTDOWNING) { + m_state = SHUTDOWNED; + notifyAll(); + } + } + + public synchronized void waitForShutdown() + { + if (m_state == SHUTDOWNING) { + try { + wait(m_orb.m_conf.max_time_in_shutdown); + } + catch (InterruptedException ie) {} + } else if (m_state == RUNNING) { + try { + wait(); + } + catch (InterruptedException ie) {} + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public synchronized boolean waitForShutdown(long millis) + { + if ((m_state == RUNNING) || (m_state == CLIENT)) { + try { + wait(millis); + } + catch (InterruptedException ie) {} + } + + return (m_state == RUNNING) ? false : true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/PseudoObject.java b/source/es/tid/TIDorbj/core/PseudoObject.java new file mode 100644 index 0000000..e984e6f --- /dev/null +++ b/source/es/tid/TIDorbj/core/PseudoObject.java @@ -0,0 +1,187 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.OBJECT_NOT_EXIST; + +/** + * Base class for all TIDorb's pseudobjects. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public abstract class PseudoObject + implements org.omg.CORBA.Object +{ + + /** + * If true the Object has been destroyed and it will throw a + * org.omg.CORBA.OBJECT_NOT_EXIST exception. + * Many Objects has the destroy method, this method will change + * this attribute. + */ + + protected boolean m_destroyed; + + /** + * Object hashcode. + */ + + protected int m_hash_code; + + protected PseudoObject() + { + m_destroyed = false; + m_hash_code = -1; + } + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + return repositoryIdentifier.equals("IDL:omg.org/CORBA/Object:1.0"); + } + + public boolean _non_existent() + { + return m_destroyed; + } + + public int _hash(int maximum) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (m_hash_code == -1) { + m_hash_code = hashCode(); + while (m_hash_code > maximum) + m_hash_code %= maximum; + } + + return m_hash_code; + } + + public boolean _is_equivalent(org.omg.CORBA.Object other) + { + if (other == null) + throw new BAD_PARAM("Null Object reference"); + + return (this == other); + } + + public org.omg.CORBA.Object _duplicate() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + return this; + } + + public void _release() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + } + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + + public org.omg.CORBA.InterfaceDef _get_interface() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object _get_interface_def() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request _request(java.lang.String operation) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Request + _create_request(org.omg.CORBA.Context ctx, + java.lang.String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Request + _create_request(org.omg.CORBA.Context ctx, + java.lang.String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Policy _get_policy(int policy_type) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.DomainManager[] _get_domain_managers() + { + throw new org.omg.CORBA.BAD_OPERATION(); + } + + public org.omg.CORBA.Object + _set_policy_override(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + { + throw new org.omg.CORBA.BAD_OPERATION(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/RequestCounter.java b/source/es/tid/TIDorbj/core/RequestCounter.java new file mode 100644 index 0000000..27fdeb9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/RequestCounter.java @@ -0,0 +1,18 @@ +package es.tid.TIDorbj.core; + + +public class RequestCounter +{ + private long m_serial; + + public RequestCounter() + { + m_serial = 0L; + } + + public synchronized long next() + { + return m_serial++; + } + +} diff --git a/source/es/tid/TIDorbj/core/RequestImpl.java b/source/es/tid/TIDorbj/core/RequestImpl.java new file mode 100644 index 0000000..9301dc2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/RequestImpl.java @@ -0,0 +1,559 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.ARG_IN; +import org.omg.CORBA.ARG_INOUT; +import org.omg.CORBA.ARG_OUT; +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging.ReplyHandlerOperations; +import org.omg.Messaging.ReplyHandlerPOA; +import org.omg.Messaging._ReplyHandlerStub; + +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb DII Request implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class RequestImpl extends org.omg.CORBA.Request +{ + /** + * The orb. + */ + TIDORB m_orb; + + /** + * Target CORBA object. + */ + org.omg.CORBA.portable.ObjectImpl m_target; + + /** + * operation name. + */ + String m_operation_name; + + /** + * Request identifier. + */ + RequestId m_request_id; + + /** + * Needs response. + */ + boolean m_with_response = false; + + /** + * Reliable oneway request that needs response. + */ + boolean m_reliable_oneway = false; + + /** + * Completion status needed in exception throwing. Initialy, the status is + * COMPLETED_NO + */ + CompletionStatus m_completed; + + /** + * Request context + */ + org.omg.CORBA.Context m_context; + + /** + * Request arguments + */ + org.omg.CORBA.NVList m_arguments; + + /** + * Request result value + */ + org.omg.CORBA.NamedValue m_result; + + /** + * Request exception list + */ + org.omg.CORBA.ExceptionList m_exceptions; + + /** + * Request context list + */ + org.omg.CORBA.ContextList m_contextlist; + + /** + * Request environment + */ + EnvironmentImpl m_environment; + + /** + * Request Policy Context + */ + PolicyContext m_policy_context; + + /** + * ReplyHandler object reference for AMI callback model + */ + Object m_handler; + + + public RequestImpl(org.omg.CORBA.Object target, org.omg.CORBA.Context ctx, + String operation, org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist) + { + m_completed = CompletionStatus.COMPLETED_NO; + + m_target = (org.omg.CORBA.portable.ObjectImpl) target; + + org.omg.CORBA.ORB obj_orb = m_target._orb(); + + if ((obj_orb != null) && (obj_orb instanceof TIDORB)) + m_orb = (TIDORB) obj_orb; + else + throw new BAD_PARAM("Invalid ORB"); + + m_request_id = null; + + m_operation_name = operation; + m_context = ctx; + m_arguments = arg_list; + m_result = result; + m_exceptions = exclist; + m_contextlist = ctxlist; + m_environment = new EnvironmentImpl(); + m_policy_context = null; + m_handler = null; + } + + /** + * Set the completion status to COMPLETED_MAYBE + */ + public void setCompletedMaybe() + { + m_completed = CompletionStatus.COMPLETED_MAYBE; + } + + /** + * Set the completion status to COMPLETED_YES + */ + public void setCompletedYes() + { + m_completed = CompletionStatus.COMPLETED_YES; + } + + /** + * @return the current completion status + */ + public CompletionStatus getCompleted() + { + return m_completed; + } + + public org.omg.CORBA.Object target() + { + return m_target; + } + + public String operation() + { + return m_operation_name; + } + + public org.omg.CORBA.NVList arguments() + { + return m_arguments; + } + + public org.omg.CORBA.NamedValue result() + { + return m_result; + } + + public org.omg.CORBA.Environment env() + { + return m_environment; + } + + public void setUserException(Any exc) + { + m_environment.exception(new UnknownUserException(exc)); + } + + public void setSystemException(org.omg.CORBA.SystemException exc) + { + m_environment.exception(exc); + } + + public org.omg.CORBA.ExceptionList exceptions() + { + return m_exceptions; + } + + public org.omg.CORBA.ContextList contexts() + { + return m_contextlist; + } + + public void ctx(org.omg.CORBA.Context ctx) + { + if (ctx == null) + throw new BAD_PARAM("Null Context reference", 0, + CompletionStatus.COMPLETED_NO); + + m_context = ctx; + } + + public org.omg.CORBA.Context ctx() + { + return m_context; + } + + public org.omg.CORBA.Any add_in_arg() + { + return addArg(ARG_IN.value); + } + + public org.omg.CORBA.Any add_named_in_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_IN.value); + } + + public org.omg.CORBA.Any add_inout_arg() + { + return addArg(ARG_INOUT.value); + } + + public org.omg.CORBA.Any add_named_inout_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_INOUT.value); + } + + public org.omg.CORBA.Any add_out_arg() + { + return addArg(ARG_OUT.value); + } + + public org.omg.CORBA.Any add_named_out_arg(String name) + { + if (name == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + return addArg(name, ARG_OUT.value); + } + + public void set_return_type(org.omg.CORBA.TypeCode tc) + { + if (tc == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + Any result_any = m_orb.create_any(); + result_any.type(tc); + m_result = NamedValueImpl.from_int(ARG_OUT.value, "", result_any); + } + + public org.omg.CORBA.Any return_value() + { + if (m_result != null) + return m_result.value(); + else + throw new BAD_OPERATION("No result defined."); + } + + public void readResult(InputStream input) + { + if (m_result != null) + m_result.value().read_value(input, m_result.value().type()); + } + + public void invoke() + { + try { + m_with_response = true; + + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + + delegate.invoke(this); + + } + catch (org.omg.CORBA.SystemException se) { + setSystemException(se); + if (m_orb.m_trace != null) { + m_orb.m_trace.printStackTrace(Trace.DEEP_DEBUG, + "RequestImpl.invoke():" + + " system exception", + se); + } + } + catch (Throwable th) { + org.omg.CORBA.SystemException se = new org.omg.CORBA.UNKNOWN(); + setSystemException(se); + if (m_orb.m_trace != null) { + m_orb.m_trace.printStackTrace(Trace.ERROR, + "RequestImpl.invoke():" + + " Unexpected exception", + th); + } + } + + Exception e = m_environment.exception(); + + if ((e != null) && (e instanceof org.omg.CORBA.SystemException)) + throw (org.omg.CORBA.SystemException) e; + } + + public void send_oneway() + { + + try { + m_with_response = false; + + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + + delegate.onewayRequest(this); + + } + catch (org.omg.CORBA.SystemException se) { + se.completed = m_completed; + throw se; + } + + } + + public void send_deferred () { + throw new org.omg.CORBA.NO_IMPLEMENT(); + + + /*try { + m_handler = m_arguments.item(0).value().extract_Object(); + m_arguments.remove(0); + } catch (BAD_OPERATION e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Bounds e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + m_with_response = true; + CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); + delegate.asyncRequest(this);*/ + } + + public void get_response() + throws org.omg.CORBA.WrongTransaction + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_response() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +// BUG [#956] Invalid call to org.omg.CORBA.Request.sendc(org.omg.CORBA.Object) using AMI +// //Additional Messaging Operations +// public void sendc(org.omg.CORBA.Object handler) { +// m_handler = handler; + +// try { +// m_with_response = true; +// CommunicationDelegate delegate = (CommunicationDelegate) m_target._get_delegate(); +// //delegate.asyncRequest(this); +// delegate.asyncRequest(this, m_handler); +// } +// catch (org.omg.CORBA.SystemException se) { +// setSystemException(se); +// if (m_orb.m_trace != null) { +// m_orb.m_trace.printStackTrace(Trace.DEEP_DEBUG, +// "RequestImpl.send_deferred():" + +// " system exception", +// se); +// } +// } +// catch (Throwable th) { +// org.omg.CORBA.SystemException se = new org.omg.CORBA.UNKNOWN(); +// setSystemException(se); +// if (m_orb.m_trace != null) { +// m_orb.m_trace.printStackTrace(Trace.ERROR, +// "RequestImpl.send_deferred():" + +// " Unexpected exception", +// th); +// } +// } + +// Exception e = m_environment.exception(); + +// if ((e != null) && (e instanceof org.omg.CORBA.SystemException)) +// throw (org.omg.CORBA.SystemException) e; +// } + + public Object sendp() { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void prepare(Object p) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // TIDOrb operations + + public TIDORB orb() + { + return m_orb; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public void reliableOneway(boolean value) + { + m_reliable_oneway = value; + } + + public boolean reliableOneway() + { + return m_reliable_oneway; + } + + public void withResponse(boolean value) + { + m_with_response = value; + } + + public boolean withResponse() + { + return m_with_response; + } + + private org.omg.CORBA.Any addArg(String name, int flag_value) + { + if (m_arguments == null) + m_arguments = new NVListImpl(m_orb); + + NamedValueImpl arg; + arg = (NamedValueImpl) m_arguments.add_item(name, flag_value); + return arg.value(); + } + + private org.omg.CORBA.Any addArg(int flag_value) + { + if (m_arguments == null) + m_arguments = new NVListImpl(m_orb); + + NamedValueImpl arg; + arg = (NamedValueImpl) m_arguments.add(flag_value); + return arg.value(); + } + + public void writeInParams(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_arguments != null) + NVListImpl.writeInParams(m_arguments, output); + } + + public void setPolicyContext(PolicyContext context) + { + m_policy_context = context; + } + + public PolicyContext getPolicyContext() + { + if (m_policy_context == null) { + + CommunicationDelegate delegate = + (CommunicationDelegate) m_target._get_delegate(); + + + m_policy_context = delegate.createRequestPolicyContext(); + } + + return m_policy_context; + } + + public void set_ami_handler(Object handler) + { + m_handler = handler; + } + + public Object get_ami_handler() + { + return m_handler; + } + + public void setOperationName (String operName) { + m_operation_name = operName; + } +} diff --git a/source/es/tid/TIDorbj/core/ServerRequestImpl.java b/source/es/tid/TIDorbj/core/ServerRequestImpl.java new file mode 100644 index 0000000..b6355f8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ServerRequestImpl.java @@ -0,0 +1,279 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TCKind; +import org.omg.Compression.CompressorIdLevel; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +//TODO: make TargetAddress generic and move it to giop package +/** + * TIDorb DSI ServerRequest implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ServerRequestImpl extends org.omg.CORBA.ServerRequest +{ + + private final static int NO_ARGUMENTS_FIXED = 0; + + private final static int ARGUMENTS_FIXED = 1; + + private final static int RESULT_FIXED = 2; + + public final static int NO_EXCEPTION = 0; + + public final static int USER_EXCEPTION = 1; + + public final static int SYSTEM_EXCEPTION = 2; + + public final static int LOCATION_FORWARD = 3; + + private int m_completion_state; + + private int m_return_state; + + RequestId m_request_id; + + boolean m_with_response = false; + + String m_operation_name; + + TargetAddress m_target; + + GIOPVersion m_version; + + org.omg.CORBA.Context m_context; + + org.omg.CORBA.NVList m_server_parameters; + + Any m_result; + + Any m_exception; + + SystemException m_system_exception; + + org.omg.CORBA.Object m_forward_obj; + + CDRInputStream m_marshaled_parameters; + + CompressorIdLevel m_compressor; + + public ServerRequestImpl(GIOPVersion ver, + RequestId id, + String operation, + CDRInputStream cdr_parameters, + TargetAddress target) + { + m_completion_state = NO_ARGUMENTS_FIXED; + m_return_state = NO_EXCEPTION; + + m_version = ver; + m_request_id = id; + m_operation_name = operation; + m_context = null; + m_server_parameters = null; + m_marshaled_parameters = cdr_parameters; + m_target = target; + m_forward_obj = null; + m_compressor = new CompressorIdLevel((short)0,(short)0); + } + + public String operation() + { + return m_operation_name; + } + + public org.omg.CORBA.Context ctx() + { + if (m_completion_state != ARGUMENTS_FIXED) + throw new BAD_INV_ORDER( + "ctx() called after arguments() or set_result()."); + + return m_context; + } + + public void arguments(org.omg.CORBA.NVList nv) + { + if (m_completion_state != NO_ARGUMENTS_FIXED) + throw new BAD_INV_ORDER("arguments() called again."); + + m_completion_state = ARGUMENTS_FIXED; + + m_server_parameters = nv; + NVListImpl.readInParams(m_server_parameters, m_marshaled_parameters); + try { + m_context = (ContextImpl) m_marshaled_parameters.read_Context(); + } + catch (org.omg.CORBA.MARSHAL me) {} + } + + public void set_result(org.omg.CORBA.Any result) + { + if (m_completion_state != ARGUMENTS_FIXED) + throw new BAD_INV_ORDER("arguments() called again."); + + m_completion_state = RESULT_FIXED; + + m_return_state = NO_EXCEPTION; + + this.m_result = result; + } + + public void set_exception(org.omg.CORBA.Any except) + { + if (except.type().kind().value() != TCKind._tk_except) + throw new BAD_PARAM("Any value must be a user exception."); + + m_completion_state = RESULT_FIXED; + m_return_state = USER_EXCEPTION; + + m_exception = except; + } + + // TIDorb operations + + public void setSystemException(org.omg.CORBA.SystemException except) + { + m_completion_state = RESULT_FIXED; + m_return_state = SYSTEM_EXCEPTION; + + m_system_exception = except; + } + + public void setForward(org.omg.CORBA.Object obj) + { + m_completion_state = RESULT_FIXED; + m_return_state = LOCATION_FORWARD; + + m_forward_obj = obj; + } + + public TargetAddress getTarget() + { + return m_target; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public void withResponse(boolean value) + { + m_with_response = value; + } + + public boolean withResponse() + { + return m_with_response; + } + + public int getReturnState() + { + return m_return_state; + + } + + public Any getResult() + { + return m_result; + } + + public Any getException() + { + return m_exception; + } + + public SystemException getSystemException() + { + return m_system_exception; + } + + public org.omg.CORBA.NVList getParameters() + { + return m_server_parameters; + } + + public org.omg.CORBA.Object getForward() + { + return m_forward_obj; + } + + public GIOPVersion getVersion() + { + return m_version; + } + + public void destroy() + { + NVListImpl.destroy(m_server_parameters); + } + + public CompressorIdLevel get_compressor() + { + return m_compressor; + } + + public void set_compressor(CompressorIdLevel compressor) + { + m_compressor = compressor; + } + +} diff --git a/source/es/tid/TIDorbj/core/ShutdownThread.java b/source/es/tid/TIDorbj/core/ShutdownThread.java new file mode 100644 index 0000000..f1a4504 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ShutdownThread.java @@ -0,0 +1,60 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +class ShutdownThread extends Thread +{ + + TIDORB m_orb; + + public ShutdownThread(TIDORB orb) + { + this.m_orb = orb; + } + + public void run() + { + m_orb.doCompleteShutdown(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/SingletonORB.java b/source/es/tid/TIDorbj/core/SingletonORB.java new file mode 100644 index 0000000..06455b1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/SingletonORB.java @@ -0,0 +1,420 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.BAD_PARAM; + +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; + +/** + * TIDorb Version 2.3 CORBA ORB Singleton. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SingletonORB extends org.omg.CORBA_2_3.ORB +{ + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * ORB singleton static reference: only a instance will be for all orb. + * This rerefence will be returned by init() method. + */ + + protected static SingletonORB st_orb = null; + + public SingletonORB() + { + m_conf = new ConfORB(); + } + + public static org.omg.CORBA.ORB init() + { + if (st_orb == null) + st_orb = new SingletonORB(); + + return st_orb; + } + + public static org.omg.CORBA.ORB init(String[] args, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public static org.omg.CORBA.ORB init(java.applet.Applet app, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + protected void set_parameters(String[] args, java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void connect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void disconnect(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public String[] list_initial_services() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object string_to_object(String str) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NVList create_list(int count) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.ContextList create_context_list() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Context get_default_context() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Environment create_environment() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference"); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc(String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_alias_tc(String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference"); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.TypeCode + create_exception_tc(java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc(int bound, + org.omg.CORBA.TypeCode element_type) + { + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode + create_recursive_sequence_tc(int bound,int offset) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode + create_array_tc(int length, org.omg.CORBA.TypeCode element_type) + { + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference"); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference"); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference"); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference"); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.Any create_any() + { + return new es.tid.TIDorbj.core.AnyImpl(null); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void unregister_value_factory(String id) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_delegate(java.lang.Object wrapper) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/StreamRequestImpl.java b/source/es/tid/TIDorbj/core/StreamRequestImpl.java new file mode 100644 index 0000000..62b7486 --- /dev/null +++ b/source/es/tid/TIDorbj/core/StreamRequestImpl.java @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import org.omg.CORBA.CompletionStatus; + +import es.tid.TIDorbj.core.comm.giop.RequestId; + +public class StreamRequestImpl +{ + /** + * The orb. + */ + TIDORB m_orb; + + /** + * Target CORBA object. + */ + org.omg.CORBA.portable.ObjectImpl m_target; + + /** + * operation name. + */ + String m_operation_name; + + /** + * Request identifier. + */ + RequestId m_request_id = null; + + /** + * Needs response. + */ + boolean m_with_response = false; + + es.tid.TIDorbj.core.cdr.CDRInputStream m_response = null; + + es.tid.TIDorbj.core.cdr.CDROutputStream m_request = null; + + /** + * Completion status needed in exception throwing. Initialy, the status is + * COMPLETED_NO + */ + CompletionStatus m_completed; + + public StreamRequestImpl(TIDORB orb, + org.omg.CORBA.portable.ObjectImpl target, + String operation, boolean response) + { + m_orb = orb; + m_target = target; + m_operation_name = operation; + m_with_response = response; + } + + public TIDORB orb() + { + return m_orb; + } + + public void setInputStream(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_response = input; + } + + public es.tid.TIDorbj.core.cdr.CDRInputStream getInputStream() + { + return m_response; + } + + public void setOutputStream(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + m_request = output; + } + + public es.tid.TIDorbj.core.cdr.CDROutputStream getOutputStream() + { + return m_request; + } + + public org.omg.CORBA.portable.ObjectImpl getTarget() + { + return m_target; + } + + public RequestId getId() + { + return m_request_id; + } + + public void setId(RequestId id) + { + m_request_id = id; + } + + public boolean withResponse() + { + return m_with_response; + } + + public String operation() + { + return m_operation_name; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/TIDORB.java b/source/es/tid/TIDorbj/core/TIDORB.java new file mode 100644 index 0000000..35c92f1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/TIDORB.java @@ -0,0 +1,1653 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core; + +import java.io.IOException; + +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServiceInformationHolder; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.ORBPackage.InvalidName; +import org.omg.CORBA.portable.Delegate; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMIManager; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.typecode.AbstractInterfaceTypeCode; +import es.tid.TIDorbj.core.typecode.AliasTypeCode; +import es.tid.TIDorbj.core.typecode.ArrayTypeCode; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.ExceptionTypeCode; +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.core.typecode.NativeTypeCode; +import es.tid.TIDorbj.core.typecode.ObjectRefTypeCode; +import es.tid.TIDorbj.core.typecode.RecursiveTypeCode; +import es.tid.TIDorbj.core.typecode.SequenceTypeCode; +import es.tid.TIDorbj.core.typecode.StringTypeCode; +import es.tid.TIDorbj.core.typecode.StructTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.typecode.ValueBoxTypeCode; +import es.tid.TIDorbj.core.typecode.ValueTypeCode; +import es.tid.TIDorbj.core.typecode.WStringTypeCode; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.core.util.Corbaname; +import es.tid.TIDorbj.core.util.InitialReference; +import es.tid.TIDorbj.util.CircularTraceFile; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb GIOPVersion 2.6 CORBA ORB. + *

+ * + * @autor Juan A. Cáceres + * @version 2.0 + */ +public class TIDORB extends org.omg.CORBA_2_5.ORB +{ + + /** + * ORB GIOPVersion + */ + + public final static String st_version = "6.5.0rc1"; + + /** + * @return the ORB Singleton instance. + */ + public static org.omg.CORBA.ORB init() + { + return SingletonORB.init(); + } + + /** + * ORB configuration. + */ + + public ConfORB m_conf; + + /** + * Local POAManagers. + */ + public java.util.Vector m_POAManagers; + + /** + * TraceService reference. + */ + public es.tid.TIDorbj.util.Trace m_trace; + + /** + * Local Codec factory. + */ + private CodecFactoryImpl m_codec_factory; + + /** TODO: remove me + * ORB Communication layer, drives request to the local layer or the + * external layer. + + private es.tid.TIDorbj.core.comm.iiop.CommLayer m_comm_layer;*/ + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + private CommunicationManager communicationManager; + + + /** + * Local CurrentImpl. + */ + private es.tid.TIDorbj.core.poa.CurrentImpl m_current; + + /** + * The ORB has been destroyed. + */ + + private boolean m_destroyed; + + /** + * Local DynAny factory. + */ + private es.tid.TIDorbj.dynAny.DynAnyFactoryImpl m_dyn_factory; + + /** + * ORB PolicyManager. + */ + private es.tid.TIDorbj.core.policy.PolicyManagerImpl m_orb_policy_manager; + + /** + * ORB Services + */ + + private ORBServices m_orb_services; + + /** + * Thread Policy Current. + */ + private es.tid.TIDorbj.core.policy.PolicyCurrentImpl m_policy_current; + + + /** + * Compression Manager. + */ + private es.tid.TIDorbj.core.compression.CompressionManagerImpl m_compression_manager; + + + /** + * Local rootPOA. + */ + private es.tid.TIDorbj.core.poa.POAImpl m_root_POA; + + /** + * Processing state: controls the ORB shutdown. + */ + + private ProcessingState m_state; + + /** + * Thread Policy Context Manager. + */ + private es.tid.TIDorbj.core.policy.PolicyContextManager + m_thread_policy_context_manager; + + /** + * Maintains the order which the request was created + */ + private RequestCounter requestCounter; + + /** + * TypeCode Cache. + */ + + private es.tid.TIDorbj.core.typecode.TypeCodeCache m_typecode_cache; + + /** + * ORB ValueFactoryList + */ + + private java.util.Hashtable m_value_factories; + + /** + * ORB Name + */ + + String m_orb_name; + + /** + * AMI Manager + */ + + es.tid.TIDorbj.core.messaging.AMIManager m_ami_manager; + + + /** + * Constructor. The orb must be initialized using the set_parameters(). + */ + public TIDORB() + { + m_conf = null; + m_state = new ProcessingState(this); + m_destroyed = false; + + this.communicationManager = null; + this.requestCounter = new RequestCounter(); + + m_dyn_factory = null; + m_root_POA = null; + m_trace = null; + m_current = null; + m_typecode_cache = null; + m_ami_manager = null; + } + + public void connect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + + public TypeCode create_abstract_interface_tc(String id, String name) + { + return new AbstractInterfaceTypeCode(id, name); + } + + public org.omg.CORBA.TypeCode + create_alias_tc( String id, + String name, + org.omg.CORBA.TypeCode original_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (original_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new AliasTypeCode(id, name, original_type); + } + + public org.omg.CORBA.Any create_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.AnyImpl(this); + } + + public org.omg.CORBA.TypeCode + create_array_tc( int length, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("Illegal array length " + length); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new ArrayTypeCode(element_type, length); + } + + public org.omg.CORBA.ContextList create_context_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ContextListImpl(); + } + + public org.omg.CORBA.TypeCode create_enum_tc(String id, String name, + String[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new EnumTypeCode(id, name, members); + } + + public org.omg.CORBA.Environment create_environment() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.EnvironmentImpl(); + } + + public org.omg.CORBA.ExceptionList create_exception_list() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.ExceptionListImpl(); + } + + public org.omg.CORBA.TypeCode + create_exception_tc( java.lang.String id, + java.lang.String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ExceptionTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode create_fixed_tc(short digits, short scale) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new FixedTypeCode(digits, scale); + } + + public org.omg.CORBA.TypeCode create_interface_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ObjectRefTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_list(int count) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (count < 0) + throw new BAD_PARAM("Count < 0", 0, CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.NVListImpl(this, count); + } + + public org.omg.CORBA.NamedValue create_named_value(String s, + org.omg.CORBA.Any any, + int flags) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((s == null) || (any == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return es.tid.TIDorbj.core.NamedValueImpl.from_int(flags, s, any); + } + + public org.omg.CORBA.TypeCode create_native_tc(String id, String name) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new NativeTypeCode(id, name); + } + + public org.omg.CORBA.NVList create_operation_list(org.omg.CORBA.Object oper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.portable.OutputStream create_output_stream() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return new CDROutputStream(this, m_conf.block_size); + } + + public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) + throws org.omg.CORBA.PolicyError + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (val == null) + throw new BAD_PARAM("Null any reference"); + + return es.tid.TIDorbj.core.policy.PolicyFactory.createPolicy(type, val); + } + + /** + * @deprecated + */ + public org.omg.CORBA.TypeCode create_recursive_sequence_tc(int bound, + int offset) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode create_recursive_tc(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (id == null) + throw new BAD_PARAM("Null String reference"); + + return new RecursiveTypeCode(id); + } + + public org.omg.CORBA.TypeCode + create_sequence_tc( int bound, + org.omg.CORBA.TypeCode element_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal sequence length " + bound); + + if (element_type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + return new SequenceTypeCode(element_type, bound); + } + + public org.omg.CORBA.TypeCode create_string_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new StringTypeCode(bound); + } + + public org.omg.CORBA.TypeCode + create_struct_tc( String id, + String name, + org.omg.CORBA.StructMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new StructTypeCode(id, name, members); + } + + public org.omg.CORBA.TypeCode + create_union_tc( String id, + String name, + org.omg.CORBA.TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (discriminator_type == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new UnionTypeCode(id, name, discriminator_type, members); + } + + public org.omg.CORBA.TypeCode + create_value_box_tc( String id, + String name, + org.omg.CORBA.TypeCode boxed_type) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (boxed_type == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueBoxTypeCode(id, name, boxed_type); + } + + public org.omg.CORBA.TypeCode + create_value_tc( String id, + String name, + short type_modifier, + org.omg.CORBA.TypeCode concrete_base, + org.omg.CORBA.ValueMember[] members) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (name == null) || (concrete_base == null) + || (members == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new ValueTypeCode(id, name, type_modifier, concrete_base, + members); + } + + public org.omg.CORBA.TypeCode create_wstring_tc(int bound) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (bound < 0) + throw new BAD_PARAM("Illegal string length " + bound); + + return new WStringTypeCode(bound); + } + + /** + * Free all the ORB resources: connections and threads. + */ + + synchronized public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + // The thread is serving a request? + + if (initPOACurrent().inContext()) { // yes, it is in the serving request + // context + + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.shutdown(); + + m_state.waitForShutdown(); + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + * m_comm_layer.destroy(); + */ + this.communicationManager.destroy(); + this.communicationManager = null; + + + if (m_trace != null) { + try { + printTrace(Trace.USER, "Closing ORB Session."); + m_trace.close(); + } + catch (Throwable th) {} + + m_trace = null; + } + + if (m_value_factories != null) + m_value_factories.clear(); + + m_value_factories = null; + + if (m_codec_factory != null) { + m_codec_factory.destroy(); + m_codec_factory = null; + } + + if (m_dyn_factory != null) { + m_dyn_factory.destroy(); + m_dyn_factory = null; + } + + m_orb_services.destroy(); + m_orb_services = null; + + m_root_POA = null; + + if (m_current != null) { + m_current.destroy(); + m_current = null; + } + + m_destroyed = true; + } + + public boolean destroyed() + { + return m_destroyed; + } + + public void disconnect(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated + */ + public org.omg.CORBA.Current get_current() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + return m_current; + } + + public org.omg.CORBA.Context get_default_context() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Request get_next_response() + throws org.omg.CORBA.WrongTransaction + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (tcKind == null) + throw new BAD_PARAM("Null TCKind reference", 0, + CompletionStatus.COMPLETED_NO); + + return TypeCodeFactory.getBasicTypeCode(tcKind); + } + + public boolean + get_service_information( short service_type, + ServiceInformationHolder service_info) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + // corba 2.3 operations + + // always return a ValueDef or throw BAD_PARAM if not repid of a value + public org.omg.CORBA.Object get_value_def(String repid) + throws org.omg.CORBA.BAD_PARAM + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + public CommunicationManager getCommunicationManager(){ + if ( m_destroyed ){ + throw new OBJECT_NOT_EXIST(); + } + return this.communicationManager; + } + + + + public es.tid.TIDorbj.core.policy.PolicyContextManager + getPolicyContextManager() + { + return m_thread_policy_context_manager; + } + + public es.tid.TIDorbj.core.policy.PolicyManagerImpl getPolicyManager() + { + return initPolicyManager(); + } + + public es.tid.TIDorbj.core.compression.CompressionManagerImpl getCompressionManager() + { + return initCompressionManager(); + } + + public es.tid.TIDorbj.core.typecode.TypeCodeCache getTypeCodeCache() + { + return m_typecode_cache; + } + + public RequestCounter getRequestCounter() + { + return this.requestCounter; + } + + + // CORBA 2.5 + public String id() + { + return m_conf.orb_id; + } + + // ORB Services + + public es.tid.TIDorbj.core.poa.POAImpl initPOA() { + synchronized (this) { + if (m_root_POA == null) { + m_root_POA = + es.tid.TIDorbj.core.poa.POAImpl.createRootPOA(this); + + + // init the orb listening points (usually one for each layer) + try { + this.communicationManager.setServerModeEnabled( true ); + } catch ( CommunicationException ce ) { + throw new INITIALIZE( "Unable to activate server mode: " + ce.getMessage() ); + } + + m_state.running(); + } + } + + return m_root_POA; + } + + public es.tid.TIDorbj.core.poa.CurrentImpl initPOACurrent() + { + synchronized (this) { + if (m_current == null) { + m_current = new es.tid.TIDorbj.core.poa.CurrentImpl(this); + } + } + + return m_current; + } + + public String[] list_initial_services() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_orb_services.listInitialServices(); + } + + public org.omg.CORBA.portable.ValueFactory lookup_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + return (org.omg.CORBA.portable.ValueFactory) m_value_factories.get(id); + } + + public String object_to_string(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return IOR.nullIOR().toString(); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj) + ._get_delegate(); + + if (obj instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, + CompletionStatus.COMPLETED_NO); + + if (delegate instanceof CommunicationDelegate) + return ((CommunicationDelegate) delegate).toString(); + else + throw new BAD_PARAM("This Object has not been create by TIDorb", + 0, + CompletionStatus.COMPLETED_NO); + } + + public String objectToURL(org.omg.CORBA.Object obj) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (obj == null) + return Corbaloc.toURL(IOR.nullIOR()); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + //TODO: refactor URL/String IOR stuff + return ((CommunicationDelegate) delegate).getReference().toURL(); + } else + throw new BAD_PARAM("This Object has not been create by TIDorb", 0, + CompletionStatus.COMPLETED_NO); + } + + public void perform_work() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public boolean poll_next_response() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void printTrace(int level, String message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printTrace(int level, String message, Throwable e) + { + if (m_trace != null) + m_trace.printStackTrace(level, message, e); + } + + public void printTrace(int level, String[] message) + { + if (m_trace != null) + m_trace.print(level, message); + } + + public void printDump(int level, byte[] message, int length) + { + if (m_trace != null) + m_trace.dump(level, message, length); + } + + public void register_initial_reference(String object_name, + org.omg.CORBA.Object obj) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.registerInitialReference(object_name, obj); + } + + public org.omg.CORBA.portable.ValueFactory + register_value_factory( String id, + org.omg.CORBA.portable.ValueFactory factory) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + synchronized (m_value_factories) { + if (m_value_factories.containsKey(id)) + return null; + m_value_factories.put(id, factory); + } + + return factory; + } + + public void removeInitialReference(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + m_orb_services.removeInitialReference(object_name); + } + + public org.omg.CORBA.Object resolve_initial_references(String object_name) + throws org.omg.CORBA.ORBPackage.InvalidName + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (object_name == null) + throw new BAD_PARAM("Null String reference", 24, + CompletionStatus.COMPLETED_NO); + + return m_orb_services.resolveService(object_name); + } + + public void run() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (m_root_POA == null) { + throw new org.omg.CORBA.INTERNAL("RootPOA has not been created."); + } + + m_state.waitForShutdown(); + } + + public void send_multiple_requests_deferred(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void send_multiple_requests_oneway(org.omg.CORBA.Request[] req) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < req.length; i++) + req[i].send_oneway(); + } + + public void set_delegate(java.lang.Object wrapper) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + if (wrapper instanceof org.omg.PortableServer.Servant) { + org.omg.PortableServer.Servant servant = + (org.omg.PortableServer.Servant) wrapper; + + if (m_root_POA == null) { + initPOA(); + } + + try { + org.omg.CORBA.ORB servantOrb = servant._orb(); + if ( servantOrb != this ) { + throw new + BAD_PARAM("Servant is already active in another ORB"); + } + } + catch (org.omg.CORBA.BAD_INV_ORDER e) { + try { + m_root_POA.activate_object(servant); + + // Exceptions should never be thrown + } catch (org.omg.PortableServer.POAPackage.WrongPolicy wp) + { + } + catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive s) + { + } + } + } else + throw new BAD_PARAM("Servant expected"); + + } + + public void shutdown(boolean wait_for_completion) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + m_state.shutdown(); + + if (wait_for_completion) { + if (initPOACurrent().inContext()) { + // yes, it is in the serving request context + throw new BAD_INV_ORDER(3, CompletionStatus.COMPLETED_NO); + } + + m_state.waitForShutdown(); + } + } + + public org.omg.CORBA.Object string_to_object(String str) + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (str == null) { + throw new BAD_PARAM("Null String reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (str.startsWith("corbaname:")) + return corbanameUrlToObject(str); + + if (str.startsWith("file://")) + return fileUrlToObject(str); + + if (str.startsWith("corbaloc:rir:")) + return rirUrlToObject(str); + + if (str.startsWith("corbaloc:tidorbj:")) + return tidorbjUrlToObject(str); + + + Delegate delegate; + try { + delegate = this.communicationManager.createDelegate( str ); + } catch ( CommunicationException ce){ + delegate = null; + } + if ( delegate != null ){ + ObjectImpl o = new ObjectImpl(); + o._set_delegate( delegate ); + return o; + } else { + throw new BAD_PARAM( + "UNKNOWN String reference", 0, CompletionStatus.COMPLETED_NO + ); + } + /* + return iorToObject(str); + */ + } + + /* + * PRIVATE METHODS + * */ + public POAKey resolvePOAKey( ObjectKey objectKey ) + throws ForwardRequest + { + if( objectKey != null ){ + //not initialized to check every condition against compiler :) + POAKey key; + try { + /* + * Usually successfull for local requests, because objectKey + * comes directly from an IOR. We shouldn't know this right here + */ + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } catch (Throwable th) { + key = null; + } + + if(key != null) { + return key; + } + + + /* + * If objectKey comes from a remote request, it must be resolved + * through the ORB. + * First: try to get the URL, and after that, resolve it against + * registered initial references + */ + String urlKey = objectKey.getURL(); + org.omg.CORBA.Object reference = null; + + if ( urlKey != null ) { + + if ( urlKey != null ) { + + String initialReference; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + /* + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve url reference: ", + urlKey, " ", ce.getMessage() + } + ); + } + */ + initialReference = null; + }//initialReference retrieval + + if(initialReference == null) { + initialReference = urlKey; + } + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( Throwable th ){ + if ( m_trace != null ){ + m_trace.print( + Trace.ERROR, + new String[]{ + "Unable to resolve initial reference reference: ", + initialReference, " ", th.getMessage() + } + ); + } + reference = null; + } + if ( reference != null ) { + if ( reference instanceof IOR ){ + objectKey = (( IOR )reference ).getObjectKey(); + } else { + org.omg.CORBA.portable.ObjectImpl ref = + (org.omg.CORBA.portable.ObjectImpl)reference; + CommunicationDelegate delegate = + ( CommunicationDelegate ) ref._get_delegate(); + objectKey = delegate.getReference().getObjectKey(); + } + if ( objectKey != null ) { + if ( objectKey instanceof POAKey ){ + key = ( POAKey )objectKey; + } else { + key = POAKey.createKey( objectKey.getMarshaledKey() ); + } + } else { + throw new INTERNAL(); + } + } else { + key = null; + }//reference = null + }//generic url, delegate in communication layers + // URL resolution: object key = service url + // it must throw a ForwardRequest + if ( key != null ){ + return key; + } else { + throw new ForwardRequest(resolveGenericURL(urlKey)); + } + + } else { //unable to get url from objectKey + throw new INV_OBJREF( "Invalid Object Key" ); + } + } else { + throw new INV_OBJREF( "ObjectKey cannot be null" ); + } + }//resolvePOAKey + + + /** + * Generic URL resolution + * @throws ForwardRequest + */ + protected org.omg.CORBA.Object resolveGenericURL(String urlKey) + { + POAKey key; + + + String initialReference = null; + try { + initialReference = + this.communicationManager.getInitialReference( + urlKey + ); + } catch ( CommunicationException ce ){ + throw new OBJECT_NOT_EXIST("Invalid object key: " + urlKey); + }//initialReference retrieval + + + org.omg.CORBA.Object reference = null; + + try { + reference = resolve_initial_references( + initialReference + ); + } catch ( InvalidName th ){ + StringBuffer msg = new StringBuffer(); + msg.append("Unable to resolve initial reference reference: "); + msg.append(initialReference); + msg.append(" from "); + msg.append(urlKey); + throw new OBJECT_NOT_EXIST(msg.toString()); + } + + return reference; + } + + + + public String toString() + { + if (m_orb_name == null) { + + java.util.Date date; + + date = new java.util.Date(System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + name.append("TIDorbj "); + name.append(st_version); + name.append(" (id=\""); + name.append(m_conf.orb_id); + name.append("\") ["); + + name.append( this.communicationManager.toString() ); + + name.append("] created at "); + name.append(date.toString()); + + m_orb_name = name.toString(); + } + + return m_orb_name; + + } + + public void unregister_value_factory(String id) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + synchronized (m_value_factories) { + if (m_value_factories.remove(id) == null) + throw new BAD_PARAM(); + } + } + + /** + * Operation called by threads in the ORB that are listening for the ORB + * shutdown + * + * @return true if the ORB is shutdowning, of false if the timeout is over + */ + + public boolean waitShutdown(long millis) + { + return m_state.waitForShutdown(millis); + } + + public boolean work_pending() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_state.isShutdowned()) + throw new BAD_INV_ORDER(4, CompletionStatus.COMPLETED_NO); + + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + //PRE: str starts with corbaname: + + protected org.omg.CORBA.Object corbanameUrlToObject(String str) + { + try { + return Corbaname.toObject(this, str); + } + catch (Exception e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void doCompleteShutdown() + { + java.lang.Object[] mgrs = new java.lang.Object[m_POAManagers.size()]; + + m_POAManagers.copyInto(mgrs); + + for (int i = 0; i < mgrs.length; i++) { + org.omg.PortableServer.POAManager mgr = + (org.omg.PortableServer.POAManager) mgrs[i]; + try { + mgr.deactivate(true /* etherealize objects */, + true /* wait_for_completion */); + } + catch (Exception e) {} + } + + try { + if (m_root_POA != null) + m_root_POA.destroy(false, true); + } + catch (Exception e) {} + + try { + if ( this.communicationManager != null ){ + this.communicationManager.shutdown( true ); + } + } + catch (Exception e) {} + + m_state.shutdowned(); + } + + // PRE str starts with file: + + protected org.omg.CORBA.Object fileUrlToObject(String str) + { + String file_str = str.substring(7); + String file_url = null; + + if (file_str.length() == 0) + throw new BAD_PARAM(file_str); + try { + java.io.FileReader file_r = new java.io.FileReader(file_str); + java.io.BufferedReader url_r = new java.io.BufferedReader(file_r); + + file_url = url_r.readLine(); + url_r.close(); + + } catch (java.io.FileNotFoundException fnf) { + throw new BAD_PARAM("Invalid file url"); + } catch (SecurityException se) { + throw new NO_PERMISSION( + se.getMessage(), 0, CompletionStatus.COMPLETED_NO + ); + } catch (Throwable th) { + throw new UNKNOWN( + th.toString(), 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( file_url != null && !file_url.startsWith("file:") ) { + return string_to_object( file_url ); + } else { + throw new BAD_PARAM( "No file url allowed in a file" ); + } + } + + /** + * Destructor. + */ + + protected void finalize() + { + if (!m_destroyed) + destroy(); + } + + // PRE str starts with corbaloc:iiop: or corbaloc:: + + //TODO: this should come from the communications layers + protected org.omg.CORBA.Object iiopUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + CommunicationDelegate delegate = null; + + try { + ior = IIOPCorbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + //TODO: should the communicationsManager (or the related layer) store + //a cache of delegates for each IOR? + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + protected es.tid.TIDorbj.core.CodecFactoryImpl initCodecFactory() + { + synchronized (this) { + if (m_codec_factory == null) + m_codec_factory = new CodecFactoryImpl(this); + } + return m_codec_factory; + } + + protected es.tid.TIDorbj.dynAny.DynAnyFactoryImpl initDynAnyFactory() + { + synchronized (this) { + if (m_dyn_factory == null) { + try { + m_dyn_factory = + new es.tid.TIDorbj.dynAny.DynAnyFactoryImpl(); + m_dyn_factory.set_orb(this); + } + catch (Throwable th) { + throw new INITIALIZE("Cannot Initialize DynAnyFactory", 0, + CompletionStatus.COMPLETED_NO); + } + } + } + return m_dyn_factory; + } + + /** + * ORB initialization. This method will be invoked by + * set_parametres(). + */ + + protected void initOrb() + { + try { + /** + * TODO: remove CommLayer usage and migrate to CommunicationManager + */ + this.communicationManager = CommunicationManager.getInstance( this ); + + m_POAManagers = new java.util.Vector(); + + m_value_factories = new java.util.Hashtable(); + + m_orb_services = new ORBServices(this); + + m_thread_policy_context_manager = + new es.tid.TIDorbj.core.policy.PolicyContextManager(this); + + setupInitialReferences(); + + if (m_conf.typecode_cache_size > 0) + m_typecode_cache = + new es.tid.TIDorbj.core.typecode.TypeCodeCache( + m_conf.typecode_cache_size); + + if (m_conf.trace_level != Trace.NONE) { + m_trace = getTrace(); + + + m_trace.print(Trace.ERROR, "ORB initialization OK!"); + + m_conf.dump(m_trace.getLog()); + m_trace.flush(); + } + + } + catch (Throwable e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + public synchronized Trace getTrace() + throws IOException + { + if (m_trace == null) { + if (m_conf.trace_file != null) { + if (m_conf.trace_num_files > 1) { + + CircularTraceFile ctf = + new CircularTraceFile(m_conf.trace_num_files, + m_conf.trace_file_size, + m_conf.trace_file); + m_trace = Trace.createTrace(ctf, toString(), + m_conf.trace_level); + } else { + m_trace = Trace.createTrace(m_conf.trace_file, toString(), + m_conf.trace_level); + } + + } else { + m_trace = Trace.createTrace(toString(), m_conf.trace_level); + } + } + + return m_trace; + } + + protected es.tid.TIDorbj.core.policy.PolicyCurrentImpl initPolicyCurrent() + { + synchronized (this) { + if (m_policy_current == null) + m_policy_current = + new es.tid.TIDorbj.core.policy.PolicyCurrentImpl + (m_thread_policy_context_manager); + } + return m_policy_current; + } + + protected es.tid.TIDorbj.core.compression.CompressionManagerImpl initCompressionManager() + { + synchronized (this) { + if (m_compression_manager == null) + m_compression_manager = + new es.tid.TIDorbj.core.compression.CompressionManagerImpl + (this); + } + return m_compression_manager; + } + + protected es.tid.TIDorbj.core.messaging.AMIManager initAMIManager() + { + synchronized (this) { + if (m_ami_manager == null) + m_ami_manager = + new es.tid.TIDorbj.core.messaging.AMIManager(this); + } + return m_ami_manager; + } + + protected es.tid.TIDorbj.core.policy.PolicyManagerImpl initPolicyManager() + { + synchronized (this) { + if (m_orb_policy_manager == null) + m_orb_policy_manager = + new es.tid.TIDorbj.core.policy.PolicyManagerImpl(this); + } + return m_orb_policy_manager; + } + + //PRE: str starts with corbaloc:rir: + + protected org.omg.CORBA.Object rirUrlToObject(String str) + { + if (!str.startsWith("corbaloc:rir:/")) + throw new BAD_PARAM(str); + try { + return resolve_initial_references(str.substring(14)); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void set_parameters(java.applet.Applet app, + java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(app, props); + initOrb(); + } + + // CORBA ORB standard methods + + protected void set_parameters(String[] args, java.util.Properties props) + { + // read params + m_conf = new ConfORB(); + m_conf.init(args, props); + initOrb(); + } + + protected void setupInitialReferences() + { + int references = m_conf.initial_references.size(); + + InitialReference ref = null; + + for (int i = 0; i < references; i++) { + ref = (InitialReference) m_conf.initial_references.elementAt(i); + m_orb_services.setService(ref.getName(), + string_to_object(ref.getURL())); + } + + } + + //PRE: str starts with corbaloc:tidorbj: + protected org.omg.CORBA.Object tidorbjUrlToObject(String str) + { + IOR ior; + ObjectImpl object = null; + Delegate delegate = null; + + try { + ior = Corbaloc.getIOR(str); + } + catch (org.omg.CORBA.ORBPackage.InvalidName e) { + throw new BAD_PARAM(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + + try { + delegate = this.communicationManager.createDelegate( ior ); + } catch ( CommunicationException e ){ + throw new BAD_PARAM( e.getMessage(), 0, CompletionStatus.COMPLETED_NO ); + } + + object = new ObjectImpl(); + object._set_delegate(delegate); + return object; + } + + public es.tid.TIDorbj.core.messaging.AMIManager getAMIManager() { + return initAMIManager(); + } + + public void setORBservice(String object_name, + org.omg.CORBA.Object obj) { + m_orb_services.setService(object_name, obj); + } + +} diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/all-wcprops b/source/es/tid/TIDorbj/core/cdr/.svn/all-wcprops new file mode 100644 index 0000000..1b44ac8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/all-wcprops @@ -0,0 +1,101 @@ +K 25 +svn:wc:ra_dav:version-url +V 78 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr +END +PositionsNode.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/PositionsNode.java +END +TypeCodeReader.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/TypeCodeReader.java +END +ChunkCDR.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/ChunkCDR.java +END +MarkCDR.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/MarkCDR.java +END +IteratorCDR.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/IteratorCDR.java +END +ContextCDR.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/ContextCDR.java +END +AbsolutePosition.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/AbsolutePosition.java +END +IndirectionNode.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/IndirectionNode.java +END +CDRInputStream.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/CDRInputStream.java +END +ValueTypeInfo.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/ValueTypeInfo.java +END +AlignmentOffset.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/AlignmentOffset.java +END +Encapsulation.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/Encapsulation.java +END +PointerCDR.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/PointerCDR.java +END +CDROutputStream.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/CDROutputStream.java +END +BufferCDR.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/BufferCDR.java +END +CDR.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr/CDR.java +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/entries b/source/es/tid/TIDorbj/core/cdr/.svn/entries new file mode 100644 index 0000000..eb18cb4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/entries @@ -0,0 +1,572 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/cdr +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2007-12-12T07:57:20.370621Z +153 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TypeCodeReader.java +file + + + + +2009-05-27T12:24:01.000000Z +18d927e9ac1384e9ac3618da0d26b5d8 +2007-12-12T07:57:20.370621Z +153 +avega +has-props + + + + + + + + + + + + + + + + + + + + +7715 + +ChunkCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +167e3fe140882a22a017ccaa51159221 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4120 + +BufferCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +8c9ad57865690abec51a9d71c87446a4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7595 + +AbsolutePosition.java +file + + + + +2009-05-27T12:24:01.000000Z +9bfe403497724b2262ca947995bf0583 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3304 + +CDRInputStream.java +file + + + + +2009-05-27T12:24:01.000000Z +c0585fe0b3a7fa386c80be4b0495b4aa +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +77188 + +Encapsulation.java +file + + + + +2009-05-27T12:24:01.000000Z +027de67f73a1925f3268e45880232a45 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7658 + +CDROutputStream.java +file + + + + +2009-05-27T12:24:01.000000Z +b79a0b6ace0281d0ae0d4d667576cc72 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +58480 + +CDR.java +file + + + + +2009-05-27T12:24:01.000000Z +5ef04c925d6dc94da0e192062c4ff097 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6928 + +PointerCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +19745151eef1cb73696a71f3bc317b57 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3660 + +IndirectionNode.java +file + + + + +2009-05-27T12:24:01.000000Z +4a2f3bcb68ce2017d7bd34f4ab77c012 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3244 + +ContextCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +f5c472eb531173ebd8a2f9d9f46df5c5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7093 + +IteratorCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +42f96d3ba6e8aa745c7a867b2f0f366f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +12051 + +MarkCDR.java +file + + + + +2009-05-27T12:24:01.000000Z +4c1a723b74e7f5d0578b4dfbe13956f7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2187 + +AlignmentOffset.java +file + + + + +2009-05-27T12:24:01.000000Z +f088c7db264911e29e7f6e0e9218081e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3007 + +ValueTypeInfo.java +file + + + + +2009-05-27T12:24:01.000000Z +cb95d05ce81d6ca35dfaff60ca8bfaec +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9946 + +PositionsNode.java +file + + + + +2009-05-27T12:24:01.000000Z +19a2be9517fd6f10eccf2c31f2db90f4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4553 + diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AbsolutePosition.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AbsolutePosition.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AbsolutePosition.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AlignmentOffset.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AlignmentOffset.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/AlignmentOffset.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/BufferCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/BufferCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/BufferCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDRInputStream.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDRInputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDRInputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDROutputStream.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDROutputStream.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/CDROutputStream.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ChunkCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ChunkCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ChunkCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ContextCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ContextCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ContextCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/Encapsulation.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/Encapsulation.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/Encapsulation.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IndirectionNode.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IndirectionNode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IndirectionNode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IteratorCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IteratorCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/IteratorCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/MarkCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/MarkCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/MarkCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PointerCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PointerCDR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PointerCDR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PositionsNode.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PositionsNode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/PositionsNode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/TypeCodeReader.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/TypeCodeReader.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/TypeCodeReader.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ValueTypeInfo.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ValueTypeInfo.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/prop-base/ValueTypeInfo.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AbsolutePosition.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AbsolutePosition.java.svn-base new file mode 100644 index 0000000..74191be --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AbsolutePosition.java.svn-base @@ -0,0 +1,125 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents the absolute position in the CDR buffer of any data. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ +public class AbsolutePosition +{ + + /** + * The absulute position in the buffer; + */ + + private int m_value; + + private AbsolutePosition(int position) + { + m_value = position; + } + + public static AbsolutePosition createAbsolutePosition(int position) + { + if (position < 0) + return null; + return new AbsolutePosition(position); + } + + public int getValue() + { + return m_value; + } + + public int hashCode() + { + return m_value; + } + + public boolean equals(java.lang.Object obj) + { + if (obj instanceof AbsolutePosition) + return m_value == ((AbsolutePosition) obj).m_value; + else + return false; + } + + /** + * Calculates the offset from another Absolute Position. + * + * @return the offset ( <0 if the other position is higher than the actual + * position or >0 otherwise) + */ + + public int offset(AbsolutePosition from) + { + return m_value - from.m_value; + } + + public AbsolutePosition addOffset(int offset) + { + if (m_value + offset < 0) + return null; + else + return new AbsolutePosition(m_value + offset); + } + + /** + * Alings the position for the given type size. The aligment is refered to + * the absolute position. + * + * @param type_size + * the data type size. + */ + + public void align(int type_size) + { + int gap, rest; + rest = m_value % type_size; + gap = (rest == 0) ? 0 : type_size - rest; + m_value += gap; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AlignmentOffset.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AlignmentOffset.java.svn-base new file mode 100644 index 0000000..fa4ea16 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/AlignmentOffset.java.svn-base @@ -0,0 +1,93 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents an correction aligment offset from a position in the buffer of an + * encapsulation. This aligment offset is the number of positions that the + * beginning of the encapsulation needs to be aligned to the maximun data size + * (longlong) representing the 0 position. + *

+ * The offset is calculated by the factory operation + * calculateOffset: + *

+ * The offset value is defined in a range of [0..MAX_ALIGNMENT-1]. + * offset = CDR.MAX_ALIGNMENT- (actual_positon % CDR.MAX_ALIGNMENT) The Aligment + * offet requires the GIOP message size to be multiple of + * CDR.MAX_ALIGNMENT, that is, 8, for allowing fragmentation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class AlignmentOffset +{ + + /** + * The offset value. It must be [0..MAX_ALIGNMENT-1]. + */ + public int m_value; + + /** + * Private constructor. Use calculateOffsetFrom. + */ + private AlignmentOffset(int offset) + { + m_value = offset; + } + + /** + * Object Factory, that calculates the correct offset for a position. + */ + + public static AlignmentOffset calculateOffsetFrom(int position) + { + int offset = (CDR.MAX_ALIGNMENT - (position % CDR.MAX_ALIGNMENT)); + // makes the offset 0 if its the MAX_ALIGNMENT + if (offset == CDR.MAX_ALIGNMENT) + offset = 0; + + return new AlignmentOffset(offset); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/BufferCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/BufferCDR.java.svn-base new file mode 100644 index 0000000..9419f93 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/BufferCDR.java.svn-base @@ -0,0 +1,290 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Vector; + +/** + * represents a marshaled octet IIOP stream thad can be splitted in chunks. + *

+ * This buffer will exentialy used for store chunks received from a conection + * for reading data. Also, the buffer can be used for marshal a octet stream. In + * this case, the buffer can be monochunk or multichunk an growable or not. + *

+ * The buffer can be transformed in a String or byte array for storing IIOP + * data. The String and byte array formats allows regenerate the buffer. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class BufferCDR +{ + + /** + * Header size in the array format. + */ + final static int ARRAY_HEADER_SIZE = 5; + + /** + * Header size in the string format. + */ + public final static int STRING_HEADER_SIZE = 14; + + /** + * Vector that contains the buffer chunks. + */ + protected Vector m_chunks; + + /** + * The size of the new chunks. + */ + + protected int m_chunk_size; + + /** + * Creates a new empty buffer monochunk for marshaling. + */ + + public BufferCDR(int block_size) + { + m_chunks = new Vector(); + m_chunk_size = block_size; + addChunk(new ChunkCDR(m_chunk_size)); + } + + /** + * Creates a buffer monochunk with the array. + */ + + public BufferCDR(byte[] buffer) + { + m_chunks = new Vector(); + m_chunk_size = buffer.length; + addChunk(new ChunkCDR(buffer)); + } + + /** + * Creates a buffer monochunk with the chunk. + */ + + public BufferCDR(ChunkCDR chunk) + { + m_chunks = new Vector(); + m_chunk_size = chunk.m_buffer.length; + addChunk(chunk); + } + + /** + * Returns the number of chunks. + */ + public int getNumChunks() + { + return m_chunks.size(); + } + + /** + * @return true if it has an unique chunk, false + * otherwise. + */ + public boolean isMonoChunk() + { + return (m_chunks.size() == 1); + } + + /** + * @return the chunk associated to de index, or null if not + * exits. + */ + public ChunkCDR getChunk(int index) + { + if (index < m_chunks.size()) + return (ChunkCDR) m_chunks.elementAt(index); + else + return null; + } + + /** + * Prepare the buffer to be reused. + */ + public void recycle() + { + int num_chunks = getNumChunks(); + for (int i = 0; i < num_chunks; i++) + ((ChunkCDR) m_chunks.elementAt(i)).recycle(); + } + + /** + * Insert a new chunk in the buffer. + */ + public boolean addChunk(ChunkCDR chunk) + { + m_chunks.addElement(chunk); + return true; + } + + /** + * Insert a new chunk in the buffer at a position less than the buffer size. + */ + public boolean insertChunk(ChunkCDR chunk, int at) + { + if (at >= m_chunks.size()) + return false; + m_chunks.insertElementAt(chunk, at); + return true; + } + + /** + * Creates and inserts a new chunk ant the end of the buffer. + * + * @return true if OK or false on error; + */ + + public boolean grow() + { + if (m_chunk_size > 0) { + addChunk(new ChunkCDR(m_chunk_size)); + return true; + } else + return false; + } + + public boolean grow_1_0() + { + if (m_chunk_size > 0) { + + if (m_chunks.size() != 1) + return false; + ChunkCDR chunk = getChunk(0); + + byte[] aux_buffer = new byte[chunk.m_buffer.length + m_chunk_size]; + + System.arraycopy(aux_buffer, 0, chunk.m_buffer, 0, + chunk.m_buffer.length); + + chunk.setBuffer(aux_buffer); + + return true; + + } else + return false; + } + + public PointerCDR getPointer(int position) + { + //pre: position < available + + int num_chunk = 0; + int chunk_available = 0; + int available = 0; + while (num_chunk < m_chunks.size()) { + chunk_available = getChunk(num_chunk).getAvailable(); + if (position <= chunk_available + available - 1) + break; // this is the position + available += chunk_available; + num_chunk++; + } + + if (num_chunk >= m_chunks.size()) + return null; + + return new PointerCDR(this, num_chunk, position - available); + } + + public int getAvailable() + { + int available = 0; + int num_chunks = m_chunks.size(); + for (int i = 0; i < num_chunks; i++) + available += getChunk(i).getAvailable(); + + return available; + } + + public int getNumAvailableChunks() + { + int available = 0; + int num_chunks = m_chunks.size(); + for (int i = 0; i < num_chunks; i++) { + if (getChunk(i).getAvailable() > 0) + available++; + else + break; + } + + return available; + } + + /** + * Compares the data of two BufferCDR + * + * @return true if the data contained is equal. + */ + public boolean equal(BufferCDR buff) + { + int available = getAvailable(); + if (available != buff.getAvailable()) + return false; + int num_chunks = getNumAvailableChunks(); + + if (num_chunks != buff.getNumAvailableChunks()) + return false; + + for (int i = 0; i < num_chunks; i++) + if (getChunk(i).getAvailable() != buff.getChunk(i).getAvailable()) + return false; + + byte[] buffer_a, buffer_b; + for (int i = 0; i < num_chunks; i++) { + buffer_a = getChunk(i).getBuffer(); + buffer_b = buff.getChunk(i).getBuffer(); + int size = getChunk(i).getAvailable(); + for (int j = 0; j < size; j++) + if (buffer_a[j] != buffer_b[j]) + return false; + } + + return true; + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDR.java.svn-base new file mode 100644 index 0000000..277d141 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDR.java.svn-base @@ -0,0 +1,151 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Collection of Basic Data type representation sizes in CDR. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDR +{ + + public final static int MAX_ALIGNMENT = 8; + + public final static int OCTET_SIZE = 1; + + public final static int BOOLEAN_SIZE = 1; + + public final static int CHAR_SIZE = 1; + + public final static int WCHAR_SIZE = 2; + + public final static int SHORT_SIZE = 2; + + public final static int USHORT_SIZE = 2; + + public final static int LONG_SIZE = 4; + + public final static int ULONG_SIZE = 4; + + public final static int FLOAT_SIZE = 4; + + public final static int LONGLONG_SIZE = 8; + + public final static int ULONGLONG_SIZE = 8; + + public final static int DOUBLE_SIZE = 8; + + //NOT IMPLEMENTED: + //public final static int LONG_DOUBLE_SIZE = 16; + + public final static boolean BIG_ENDIAN = false; + + public final static boolean LITTLE_ENDIAN = true; + + public final static boolean LOCAL_BYTE_ORDER = BIG_ENDIAN; + + /** + * Helper array to convert bytes to chars: the char is a component of the + * array, indexed by the byte value. + */ + public static final int[] CHAR_MAP = { 256 - 128, 256 - 127, 256 - 126, + 256 - 125, 256 - 124, 256 - 123, + 256 - 122, 256 - 121, 256 - 120, + 256 - 119, 256 - 118, 256 - 117, + 256 - 116, 256 - 115, 256 - 114, + 256 - 113, 256 - 112, 256 - 111, + 256 - 110, 256 - 109, 256 - 108, + 256 - 107, 256 - 106, 256 - 105, + 256 - 104, 256 - 103, 256 - 102, + 256 - 101, 256 - 100, 256 - 99, + 256 - 98, 256 - 97, 256 - 96, + 256 - 95, 256 - 94, 256 - 93, + 256 - 92, 256 - 91, 256 - 90, + 256 - 89, 256 - 88, 256 - 87, + 256 - 86, 256 - 85, 256 - 84, + 256 - 83, 256 - 82, 256 - 81, + 256 - 80, 256 - 79, 256 - 78, + 256 - 77, 256 - 76, 256 - 75, + 256 - 74, 256 - 73, 256 - 72, + 256 - 71, 256 - 70, 256 - 69, + 256 - 68, 256 - 67, 256 - 66, + 256 - 65, 256 - 64, 256 - 63, + 256 - 62, 256 - 61, 256 - 60, + 256 - 59, 256 - 58, 256 - 57, + 256 - 56, 256 - 55, 256 - 54, + 256 - 53, 256 - 52, 256 - 51, + 256 - 50, 256 - 49, 256 - 48, + 256 - 47, 256 - 46, 256 - 45, + 256 - 44, 256 - 43, 256 - 42, + 256 - 41, 256 - 40, 256 - 39, + 256 - 38, 256 - 37, 256 - 36, + 256 - 35, 256 - 34, 256 - 33, + 256 - 32, 256 - 31, 256 - 30, + 256 - 29, 256 - 28, 256 - 27, + 256 - 26, 256 - 25, 256 - 24, + 256 - 23, 256 - 22, 256 - 21, + 256 - 20, 256 - 19, 256 - 18, + 256 - 17, 256 - 16, 256 - 15, + 256 - 14, 256 - 13, 256 - 12, + 256 - 11, 256 - 10, 256 - 9, 256 - 8, + 256 - 7, 256 - 6, 256 - 5, 256 - 4, + 256 - 3, 256 - 2, 256 - 1, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127 }; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDRInputStream.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDRInputStream.java.svn-base new file mode 100644 index 0000000..7dfef07 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDRInputStream.java.svn-base @@ -0,0 +1,2324 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.ValueFactory; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; +import es.tid.TIDorbj.core.util.FixedHolder; + +/** + * Portable InputStream for demarshalling. + *

+ * A CDRInputStream has an buffer iterator + * CDRIterator. The iterator maintains the data position and + * correct aligment, and TypeCode marshaling information. + * + * @see es.tid.TIDorbj.core.cdr.CDROutputStream + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDRInputStream extends org.omg.CORBA_2_3.portable.InputStream + implements org.omg.CORBA.DataInputStream +{ + + /** + * ORB instance that created the input stream. + */ + + TIDORB m_orb; + + /** + * GIOPVersion used. + */ + + GIOPVersion m_version; + + /** + * The buffer is a GIOP message. A GIOP Message implies that the GIOP Header + * space will be reserved in the BufferCDR, that is, each ChunkCDR will have + * the header size bytes allocated. + */ + + boolean m_is_message; + + /** + * Buffer iterator. + */ + + protected IteratorCDR m_iterator; + + /** + * Current chunk buffer. + */ + + protected byte[] m_chunk_buffer; + + /** + * Data buffer for Broken data splitted in to chunks in an encapsulations + */ + + protected byte[] m_data_buffer = null; + + protected static javax.rmi.CORBA.ValueHandler st_value_handler = null; + + + public CDRInputStream(TIDORB orb, byte[] buffer) + { + this(orb, new IteratorCDR(new BufferCDR(buffer))); + } + + public CDRInputStream(TIDORB orb, BufferCDR buffer) + { + this(orb, new IteratorCDR(buffer)); + } + + protected CDRInputStream(TIDORB orb, IteratorCDR iterator) { + this.m_orb = orb; + + if ( orb != null ){ + this.m_version = GIOPVersion.fromString ( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + } else { + this.m_version = GIOPVersion.fromString( + IIOPCommunicationLayerPropertiesInfo.DEFAULT_GIOP_VERSION + ); + } + + this.m_is_message = false; + this.m_iterator = iterator; + + m_chunk_buffer = iterator.m_chunk.m_buffer; + m_data_buffer = new byte[CDR.LONGLONG_SIZE]; + } + + // DataInputStream + static String[] st_data_input_ids = + { "IDL:omg.org/CORBA/DataInputStream:1.0" }; + + public String[] _truncatable_ids() + { + return st_data_input_ids; + } + + /** + * @return the GIOP version used to marshal. + */ + public GIOPVersion getVersion() + { + return m_version; + } + + /** + * Sets the GIOP version used to marshal. + */ + public void setVersion(GIOPVersion ver) + { + m_version = ver; + } + + /** + * @return true if the stream is a GIOP message. + */ + public boolean isMessage() + { + return m_is_message; + } + + /** + * Sets if the stream is a GIOP message. + */ + public void setMessage(boolean is) + { + m_is_message = is; + + if ((is) && (m_iterator.m_current_chunk_num == 0) + && (m_iterator.m_position == 0)) + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + } + + public org.omg.CORBA.ORB orb() + { + if (m_orb != null) + return m_orb; + else + return es.tid.TIDorbj.core.TIDORB.init(); + } + + /** + * Sets the stream byte order. + * + * @param byte_order + * if true little-endian, else big-endian + */ + public void setByteOrder(boolean byte_order) + { + m_iterator.setByteOrder(byte_order); + } + + /** + * @return the stream byte order, if true little-endian, else + * big-endian + */ + public boolean getByteOrder() + { + return m_iterator.getByteOrder(); + } + + /** + * @return the stream buffer + */ + public BufferCDR getBuffer() + { + return m_iterator.getBuffer(); + } + + /** + * @return the Encapsulation Context + */ + public ContextCDR getContextCDR() + { + return m_iterator.m_context; + } + + /** + * Creates a new Encapsulation Context with it own aligment an indirections. + */ + public void enterEncapsulation() + { + skipUlong(); // skip encapsulation size + // sets the real encapsulation start point + alignment(CDR.OCTET_SIZE); + m_iterator.enterEncapsulation(); + //sets the byte order + m_iterator.setByteOrder(read_boolean()); + } + + /** + * Close the Encapsulation Context, and restore the father Context. + * + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + public void exitEncapsulation() + { + m_iterator.exitEncapsulation(); + } + + /** + * Extract from the buffer an encapsulation, creating a new bufferCDR + * containing the octect sequence. + * + * @return a new CDRInputStream for reading the encapsulation. + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + public Encapsulation readEncapsulation() + { + return Encapsulation.read(this, m_version); + } + + public void skipEncapsulation() + { + int encapsulation_size = read_ulong(); + skipOctetArray(encapsulation_size); + } + + /** + * Sets the aligment offset in the current Context. + * + * @param pos + * the new offset + * @see es.tid.TIDorbj.core.cdr.AligmentOffset + */ + public void set_alignment_offset(int pos) + { + m_iterator.setAlignmentOffset(pos); + } + + /** + * @return the absolute value in the buffer order of the current position. + */ + public AbsolutePosition getAbsolutePosition() + { + return m_iterator.getPointer().getAbsolutePosition(); + } + + /** + * @return the current position in the buffer. + */ + + public PointerCDR getPointer() + { + return m_iterator.getPointer(); + } + + /** + * Jumps to the absolute position. + * + * @pram position the new position + */ + public void setPosition(AbsolutePosition position) + { + m_iterator.setPosition(position); + } + + /** + * @return a new inputstream pointing the same position. + */ + public CDRInputStream copy() + { + CDRInputStream stream = new CDRInputStream(m_orb, m_iterator.copy()); + stream.setMessage(m_is_message); + stream.setVersion(m_version); + return stream; + } + + public boolean read_boolean() + { + alignment(CDR.BOOLEAN_SIZE); + return ((m_chunk_buffer[m_iterator.m_position++] == 0) ? false : true); + } + + public void skipBoolean() + { + alignment(CDR.BOOLEAN_SIZE); + m_iterator.m_position++; + } + + public char read_char() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + alignment(CDR.CHAR_SIZE); + return (char) (0xff & m_chunk_buffer[m_iterator.m_position++]); + } + + public void skipChar() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + alignment(CDR.CHAR_SIZE); + m_iterator.m_position++; + } + + public char read_wchar() + { + + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + if (m_iterator.m_byte_order) + return (char) ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (char) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.WCHAR_SIZE); + if (m_iterator.m_byte_order) { + return (char) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (char) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipWchar() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + m_iterator.m_position += CDR.WCHAR_SIZE; + } else { + skip(CDR.WCHAR_SIZE); + } + } + + public byte read_octet() + { + alignment(CDR.OCTET_SIZE); + return m_chunk_buffer[m_iterator.m_position++]; + } + + public void skipOctet() + { + alignment(CDR.OCTET_SIZE); + m_iterator.m_position++; + } + + public short read_short() + { + if (alignment(CDR.SHORT_SIZE)) { + if (m_iterator.m_byte_order) + return (short) + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (short) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.SHORT_SIZE); + if (m_iterator.m_byte_order) { + return (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipShort() + { + if (alignment(CDR.SHORT_SIZE)) { + m_iterator.m_position += CDR.SHORT_SIZE; + } else { + skip(CDR.SHORT_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" short = ushort values will be handled by the + * user + */ + public short read_ushort() + { + if (alignment(CDR.SHORT_SIZE)) { + if (m_iterator.m_byte_order) + return (short) ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (short) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.USHORT_SIZE); + if (m_iterator.m_byte_order) { + return (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipUshort() + { + if (alignment(CDR.USHORT_SIZE)) { + m_iterator.m_position += CDR.USHORT_SIZE; + } else { + skip(CDR.USHORT_SIZE); + } + } + + public int read_long() + { + if (alignment(CDR.LONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + (m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24); + } else { + return + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.LONG_SIZE); + if (m_iterator.m_byte_order) { + return (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + return ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + } + } + + public void skipLong() + { + if (alignment(CDR.LONG_SIZE)) { + m_iterator.m_position += CDR.LONG_SIZE; + } else { + skip(CDR.LONG_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" int = positive ulong values will be handled by + * the user + */ + public int read_ulong() + { + if (alignment(CDR.ULONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + (m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24); + } else { + return + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.ULONG_SIZE); + if (m_iterator.m_byte_order) { + return (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + return ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + } + } + + public void skipUlong() + { + if (alignment(CDR.ULONG_SIZE)) { + m_iterator.m_position += CDR.ULONG_SIZE; + } else { + skip(CDR.ULONG_SIZE); + } + } + + public long read_longlong() + { + if (alignment(CDR.LONGLONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 8) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 56); + + } else { + return + (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.LONGLONG_SIZE); + if (m_iterator.m_byte_order) { + return ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + return (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + } + } + + public void skip_longlong() + { + if (alignment(CDR.LONGLONG_SIZE)) { + m_iterator.m_position += CDR.LONGLONG_SIZE; + } else { + skip(CDR.LONGLONG_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" longlong = positive ulonglong values will be + * handled by the user + */ + public long read_ulonglong() + { + if (alignment(CDR.ULONGLONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 8) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 56); + + } else { + return + (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.ULONGLONG_SIZE); + if (m_iterator.m_byte_order) { + return ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + return (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + } + } + + public void skipUlonglong() + { + if (alignment(CDR.ULONGLONG_SIZE)) { + m_iterator.m_position += CDR.ULONGLONG_SIZE; + } else { + skip(CDR.ULONGLONG_SIZE); + } + } + + public float read_float() + { + return java.lang.Float.intBitsToFloat(read_long()); + } + + public void skipFloat() + { + skipLong(); + } + + public double read_double() + { + return java.lang.Double.longBitsToDouble(read_longlong()); + } + + public void skipDouble() + { + skip_longlong(); + } + + public String read_string() + { + // read the string length, including the end of string '\0' character + int length = read_ulong(); + + if (length <= 0) + throw new MARSHAL("read_string: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + if (length == 1) { + skipChar(); //skip the null character + return ""; + } else { + char[] array = new char[length]; + readCharArrayAux(array, 0, length); + //skip the null character + return new String(array, 0, length - 1); + } + } + + public void skipString() + { + // read the string length, including the end of string '\0' character + int length = read_ulong(); + + if (length <= 0) + throw new MARSHAL("skip_string: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + skip(length); + } + + public String read_wstring() + { + // read the string length, in wstring there is a null '\0' character at + // the end + + int length = read_ulong(); + + // the length is the number of bytes in the wide-string + int real_length = 0; + + if (m_version == GIOPVersion.VERSION_1_2) { + real_length = (length / CDR.WCHAR_SIZE) - 1; + + } else if(m_version == GIOPVersion.VERSION_1_1) { + real_length = length - 1; + } else { + throw new MARSHAL("GIOP 1.0 does not supports wstring", + 6, + CompletionStatus.COMPLETED_NO); + } + + if (real_length < 0) + throw new MARSHAL( + "read_wstring: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + if (real_length == 0) { + skipWchar(); + return ""; + } else { + char[] array = new char[real_length]; + read_wchar_array(array, 0, real_length); + skipWchar(); // skiping the '\0' + return new String(array, 0, real_length); + } + } + + public void skipWstring() + { + // read the string length, in bytes, not including the end of string + // '\0' character + int length = read_ulong(); + skipOctetArray(length); + } + + public void read_boolean_array(boolean[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null boolean array reference.", 0, + CompletionStatus.COMPLETED_NO); + + int booleans_can_read = 0; + + // número de octetos que quedan por leer en el chunk actual + + int remain_booleans = length; + + int position = 0; + int stop_at = 0; + + while (remain_booleans > 0) { + + position = m_iterator.m_position; + + booleans_can_read = java.lang.Math.min(remain_booleans, + m_iterator.available()); + + stop_at = position + booleans_can_read; + + while (position < stop_at) { + value[offset++] = (m_chunk_buffer[position++] == 0) ? false + : true; + } + + m_iterator.m_position = stop_at; + remain_booleans -= booleans_can_read; + + if (remain_booleans > 0) { + getNextChunk(); + } + } + } + + public void skipBooleanArray(int length) + { + skip(length); + } + + public void read_char_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + readCharArrayAux(value, offset, length); + } + + public void readCharArrayAux(char[] value, int offset, int length) + { + int chars_can_read = 0; + int remain_chars = length; + int position = 0; + int stop_at = 0; + + while (remain_chars > 0) { + // calculates how many bytes the actual chunk has got. + chars_can_read = java.lang.Math.min(remain_chars, + m_iterator.available()); + + position = m_iterator.m_position; + + stop_at = position + chars_can_read; + + while (position < stop_at) + value[offset++] = (char) (m_chunk_buffer[position++] & 0xff); + + m_iterator.m_position = position; + remain_chars -= chars_can_read; + + if (remain_chars > 0) + getNextChunk(); + } + } + + public void skipCharArray(int length) + { + skip(length); + } + + public void read_wchar_array(char[] value, int offset, int length) + { + + if (value == null) + throw new BAD_PARAM("Null wchar array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos wchar que se pueden leer enteros + int wchars_can_read = 0; + + int position = 0; + + // numero de wchars que quedan + int remain_wchars = length; + + while (remain_wchars > 0) { + + if (!alignment(CDR.WCHAR_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.WCHAR_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (char) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + value[offset++] = (char) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + + remain_wchars--; + + } else { + position = m_iterator.m_position; + + wchars_can_read = java.lang.Math + .min( + remain_wchars, + m_iterator.available() + / CDR.WCHAR_SIZE); + + for (int i = wchars_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (char) ((m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8)); + else + value[offset++] = + (char) (((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_wchars -= wchars_can_read; + m_iterator.m_position = position; + + if (remain_wchars > 0) { + getNextChunk(); + } + } + } + } + + public void skipWcharArray(int length) + { + if (length > 0) { + alignment(CDR.WCHAR_SIZE); + skip(length * CDR.WCHAR_SIZE); + } + } + + public void read_octet_array(byte[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + readOctetArrayAux(value, offset, length); + } + + public void readOctetArrayAux(byte[] value, int offset, int length) + { + int to_read, how_many = length; + + while (how_many > 0) { + + // calculates how many bytes the actual chunk has got. + to_read = java.lang.Math.min(how_many, m_iterator.available()); + + System.arraycopy(m_chunk_buffer, m_iterator.m_position, value, + offset, to_read); + + offset += to_read; + m_iterator.m_position += to_read; + how_many -= to_read; + + if (how_many > 0) + getNextChunk(); + + } + } + + public void skipOctetArray(int length) + { + skip(length); + } + + public void read_short_array(short[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null short array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos short que se pueden leer enteros + int shorts_can_read = 0; + + int position = 0; + + // numero de shorts que quedan + int remain_shorts = length; + + while (remain_shorts > 0) { + + if (!alignment(CDR.SHORT_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.SHORT_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + value[offset++] = (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + + remain_shorts--; + + } else { + position = m_iterator.m_position; + + shorts_can_read = + java.lang.Math.min(remain_shorts, + m_iterator.available() + / CDR.SHORT_SIZE); + + for (int i = shorts_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (short) ((m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8)); + else + value[offset++] = + (short) (((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_shorts -= shorts_can_read; + m_iterator.m_position = position; + + if (remain_shorts > 0) { + getNextChunk(); + } + } + } + } + + public void skipShortArray(int length) + { + skipArray(length, CDR.SHORT_SIZE); + } + + public void read_ushort_array(short[] value, int offset, int length) + { + read_short_array(value, offset, length); + } + + public void skipUshortArray(int length) + { + skipArray(length, CDR.USHORT_SIZE); + } + + public void read_long_array(int[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos int que se pueden leer enteros + int ints_can_read = 0; + + int position = 0; + + // numero de ints que quedan + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.LONG_SIZE)) {// encapsulación, el dato no cabe + // completo + + readOctetArrayAux(m_data_buffer, 0, CDR.LONG_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + value[offset++] = ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + + remain_ints--; + + } else { + position = m_iterator.m_position; + + ints_can_read = java.lang.Math + .min( + remain_ints, + m_iterator.available() + / CDR.LONG_SIZE); + + for (int i = ints_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 24); + else + value[offset++] = + ((m_chunk_buffer[position++] & 0xff) << 24) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff); + } + + remain_ints -= ints_can_read; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } + } + } + } + + public void skipLongArray(int length) + { + skipArray(length, CDR.LONG_SIZE); + } + + public void read_ulong_array(int[] value, int offset, int length) + { + read_long_array(value, offset, length); + } + + public void skipUlongArray(int length) + { + skipArray(length, CDR.ULONG_SIZE); + } + + public void read_longlong_array(long[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos long que se pueden leer enteros + int longs_can_read = 0; + + int position = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.LONGLONG_SIZE)) { // encapsulación, el dato no + // cabe completo + readOctetArrayAux(m_data_buffer, 0, CDR.LONGLONG_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + value[offset++] = + (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + + remain_longs--; + + } else { + position = m_iterator.m_position; + + longs_can_read = java.lang.Math + .min( + remain_longs, + m_iterator.available() + / CDR.LONGLONG_SIZE); + + for (int i = longs_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + ((long) m_chunk_buffer[position++] & 0xffL) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 56); + else + value[offset++] = + (((long) m_chunk_buffer[position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[position++] & 0xffL); + } + + remain_longs -= longs_can_read; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } + } + } + } + + public void skipLonglongArray(int length) + { + skipArray(length, CDR.LONGLONG_SIZE); + } + + public void read_ulonglong_array(long[] value, int offset, int length) + { + read_longlong_array(value, offset, length); + } + + // DataInputStream + public void read_ulonglong_array(org.omg.CORBA.ULongLongSeqHolder seq, + int offset, int length) + { + read_ulonglong_array(seq.value, offset, length); + } + + public void skipUlonglongArray(int length) + { + skipArray(length, CDR.ULONGLONG_SIZE); + } + + public void read_float_array(float[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos int que se pueden leer enteros + int ints_can_read = 0; + + int position = 0; + + // numero de ints que quedan + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.FLOAT_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.FLOAT_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + Float.intBitsToFloat((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24)); + } else { + value[offset++] = + Float.intBitsToFloat(((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff)); + } + + remain_ints--; + + } else { + position = m_iterator.m_position; + + ints_can_read = java.lang.Math + .min( + remain_ints, + m_iterator.available() + / CDR.FLOAT_SIZE); + + for (int i = ints_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + Float.intBitsToFloat( + (m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 24)); + else + value[offset++] = + Float.intBitsToFloat( + ((m_chunk_buffer[position++] & 0xff) << 24) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_ints -= ints_can_read; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } + } + } + } + + public void skipFloatArray(int length) + { + skipArray(length, CDR.FLOAT_SIZE); + } + + public void read_double_array(double[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos long que se pueden leer enteros + int longs_can_read = 0; + + int position = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.DOUBLE_SIZE)) { // encapsulación, el dato no cabe + // completo + + readOctetArrayAux(m_data_buffer, 0, CDR.DOUBLE_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + Double.longBitsToDouble( + ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56)); + } else { + value[offset++] = + Double.longBitsToDouble( + (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL)); + } + + remain_longs--; + + } else { + position = m_iterator.m_position; + + longs_can_read = + java.lang.Math.min(remain_longs, + m_iterator.available() + / CDR.LONGLONG_SIZE); + + for (int i = longs_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + Double.longBitsToDouble( + ((long) m_chunk_buffer[position++] & 0xffL) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 56)); + else + value[offset++] = + Double.longBitsToDouble( + (((long) m_chunk_buffer[position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 8) + | ((long) m_chunk_buffer[position++] & 0xffL)); + } + + remain_longs -= longs_can_read; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } + } + } + } + + public void skipDoubleArray(int length) + { + skipArray(length, CDR.DOUBLE_SIZE); + } + + public org.omg.CORBA.Object read_Object() + { + IOR ior = new DefaultIOR(); + ior.read( this ); + + if (ior.memberCount() == 0) // null reference + return null; + else + return ObjectImpl.fromIOR(m_orb, ior); + } + + public org.omg.CORBA.Object read_Object(java.lang.Class clz) + { + java.lang.Object stub = null; + + try { + stub = clz.newInstance(); + } + catch (InstantiationException ie) { + throw new org.omg.CORBA.BAD_PARAM("Can not instantiate class" + + clz.getName()); + } + catch (IllegalAccessException iae) { + throw new org.omg.CORBA.BAD_PARAM("Can not instantiate class: " + + iae.toString()); + } + + if ((stub != null) + && (stub instanceof org.omg.CORBA.portable.ObjectImpl)) { + org.omg.CORBA.portable.ObjectImpl obj_impl = + (org.omg.CORBA.portable.ObjectImpl) read_Object(); + org.omg.CORBA.portable.ObjectImpl stub_ref = + (org.omg.CORBA.portable.ObjectImpl) stub; + stub_ref._set_delegate(obj_impl._get_delegate()); + return stub_ref; + + } + throw new BAD_PARAM("Invalid Reference Class:" + + " it does not implements org.omg.CORBA.portable.ObjectImpl"); + } + + public void skipObject() + { + IOR.skip(this); + } + + public org.omg.CORBA.TypeCode read_TypeCode() + { + return TypeCodeReader.read(this); + } + + public void skipTypeCode() + { + read_TypeCode(); + //TypeCodeReader.skip(this); + } + + public org.omg.CORBA.Any read_any() + { + TypeCode type = read_TypeCode(); + + AnyImpl any = new AnyImpl(m_orb); + any.type(type); + any.read_value(this, type); + return any; + } + + public void skipAny() + { + TypeCode type = read_TypeCode(); + TypeCodeMarshaler.skipValue(type, this); + } + + public void read_any_array(org.omg.CORBA.Any[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + value[i] = read_any(); + } + + public org.omg.CORBA.Context read_Context() + { + return ContextImpl.read(this); + } + + public void skipContext() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public org.omg.CORBA.Principal read_Principal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + + } + + public void skipPrincipal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.math.BigDecimal read_fixed() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void skipFixed() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void skip_fixed(short digits, short scale) + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + TypeCodeMarshaler.skipValue(fixed_type, this); + } + + public org.omg.CORBA.Any read_fixed(short digits, short scale) + throws org.omg.CORBA.BadFixedValue + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + FixedHolder holder = new FixedHolder(fixed_type); + holder._read(this); + AnyImpl any = (AnyImpl) m_orb.create_any(); + any.insert_Streamable(holder); + return any; + } + + public void skip_fixed_array(int length, short digits, short scale) + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + + for (int i = 0; i < length; i++) + TypeCodeMarshaler.skipValue(fixed_type, this); + + } + + public void read_fixed_array(org.omg.CORBA.AnySeqHolder seq, int offset, + int length, short digits, short scale) + throws org.omg.CORBA.BadFixedValue + { + if ((seq == null) || (seq.value == null)) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (seq.value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + seq.value[i] = read_fixed(digits, scale); + } + + ///////////////////// + // DataInputStream // + ///////////////////// + + public void read_boolean_array(org.omg.CORBA.BooleanSeqHolder seq, + int offset, int length) + { + read_boolean_array(seq.value, offset, length); + } + + public void read_char_array(org.omg.CORBA.CharSeqHolder seq, int offset, + int length) + { + read_char_array(seq.value, offset, length); + } + + public void read_wchar_array(org.omg.CORBA.WCharSeqHolder seq, int offset, + int length) + { + read_wchar_array(seq.value, offset, length); + } + + public void read_octet_array(org.omg.CORBA.OctetSeqHolder seq, int offset, + int length) + { + read_octet_array(seq.value, offset, length); + } + + public void read_short_array(org.omg.CORBA.ShortSeqHolder seq, int offset, + int length) + { + read_short_array(seq.value, offset, length); + } + + public void read_ushort_array(org.omg.CORBA.UShortSeqHolder seq, + int offset, int length) + { + read_ushort_array(seq.value, offset, length); + } + + public void read_long_array(org.omg.CORBA.LongSeqHolder seq, int offset, + int length) + { + read_long_array(seq.value, offset, length); + } + + public void read_ulong_array(org.omg.CORBA.ULongSeqHolder seq, int offset, + int length) + { + read_ulong_array(seq.value, offset, length); + } + + public void read_longlong_array(org.omg.CORBA.LongLongSeqHolder seq, + int offset, int length) + { + read_longlong_array(seq.value, offset, length); + } + + public void read_float_array(org.omg.CORBA.FloatSeqHolder seq, int offset, + int length) + { + read_float_array(seq.value, offset, length); + } + + public void read_double_array(org.omg.CORBA.DoubleSeqHolder seq, + int offset, int length) + { + read_double_array(seq.value, offset, length); + } + + public void read_any_array(org.omg.CORBA.AnySeqHolder seq, int offset, + int length) + { + read_any_array(seq.value, offset, length); + } + + ///////////////// + // InputStream // + ///////////////// + public int available() + { + return m_iterator.bufferAvailable(); + } + + public int read() + { + return (int) read_octet(); + } + + public int read(byte[] value) + { + read_octet_array(value, 0, value.length); + return value.length; + } + + public int read(byte[] value, int offset, int length) + { + read_octet_array(value, offset, length); + return length; + } + + public boolean markSupported() + { + return true; + } + + public void mark(int readlimit) + { + m_iterator.mark(); + } + + public void reset() + throws java.io.IOException + { + m_iterator.reset(); + } + + //corba 2.3 + + protected ValueTypeInfo getIndirectedValue() + { + AbsolutePosition indirected_position = readIndirection(); + + java.lang.Object obj = + getContextCDR().lookupObject(indirected_position); + + if (obj instanceof ValueTypeInfo) + return (ValueTypeInfo) obj; + else + throw new MARSHAL("No Value Indirected"); + } + + public java.io.Serializable read_value() + { + return readValueWithId(null); + } + + public java.io.Serializable read_value(java.lang.String rep_id) + { + if (rep_id == null) + throw new BAD_PARAM("Null rep_id"); + + return readValueWithId(rep_id); + } + + // DataInputStream + public java.io.Serializable read_Value() + { + return read_value(); + } + + protected java.io.Serializable readValueWithId(java.lang.String rep_id) + { + alignment(CDR.LONG_SIZE); + + MarkCDR value_mark = m_iterator.getMark(); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + value_info = getIndirectedValue(); + + if ((rep_id != null) && (!value_info.is_truncable(rep_id))) + throw new BAD_PARAM("Cannot truncate value to: " + rep_id); + + return value_info.get_value(); + } + + String id = value_info.get_id(); + + if (id == null) { + if (rep_id == null) { + throw new MARSHAL("Unknown Repository Id"); + } + + id = rep_id; + } else if ((rep_id != null) && (!value_info.is_truncable(rep_id))) { + throw new BAD_PARAM("Cannot truncate value to: " + rep_id); + } + + java.io.Serializable value = null; + + if (id.equals("IDL:omg.org/CORBA/WStringValue:1.0")) { + // special handling of strings, according to spec + value = read_wstring(); + } else if (id.startsWith("IDL:")) { + ValueFactory factory = m_orb.lookup_value_factory(id); + + if (factory == null) + throw new MARSHAL("Cannot get Value Factory"); + + if (value_info.isFragmented()) { + throw new + NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + m_iterator.goBack(value_mark); + + value = factory.read_value(this); + } else + // RMI + { + // ValueHandler wants class, repository_id, and sending context. + // I wonder why it wants all of these. + // If we settle down on this implementation, compute these + // values more efficiently elsewhere. + + String className = + es.tid.TIDorbj.core.util.RepositoryId.className(id); + + Class c = null; + + try { + c = Thread.currentThread().getContextClassLoader() + .loadClass(className); + } + catch (ClassNotFoundException e) { + throw new RuntimeException("class not found: " + className); + } + + m_iterator.goBack(value_mark); + + initValueHandler(); + + value = + st_value_handler.readValue(this, //InputStream + 0, //offset + c, //value class + id, // repository Id + st_value_handler.getRunTimeCodeBase()); + } + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public java.io.Serializable read_value(java.lang.Class clz) + { + if ((clz == null)) + throw new BAD_PARAM(); + + java.lang.Object obj = null; + + try { + java.lang.reflect.Constructor constructor = + clz.getConstructor(new Class[0]); + + obj = constructor.newInstance(new Object[0]); + + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + + if (obj instanceof java.io.Serializable) + return read_value((java.io.Serializable) obj); + else + throw new + BAD_PARAM("Class does not implements java.io.Serializable"); + } + + public java.io.Serializable + read_value(org.omg.CORBA.portable.BoxedValueHelper factory) + { + alignment(CDR.LONG_SIZE); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + value_info = getIndirectedValue(); + + if (!value_info.get_id().equals(factory.get_id())) + throw new BAD_PARAM("Cannot truncate value"); + + return value_info.get_value(); + } + + es.tid.TIDorbj.core.util.RepositoryId[] ids = + value_info.get_repository_ids(); + + if ((ids == null) || (ids.length == 0)) { + String[] rep_ids = new String[1]; + rep_ids[0] = factory.get_id(); + value_info.set_repository_ids(rep_ids); + } else if (!ids[0].m_value.equals(factory.get_id())) { + throw new + BAD_PARAM("Invalid RepositoryId: value id does not " + + "match valuebox id"); + } + + if (value_info.isFragmented()) { + throw new NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + java.io.Serializable value = factory.read_value(this); + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public java.io.Serializable read_value(java.io.Serializable value) + { + alignment(CDR.LONG_SIZE); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + + value_info = getIndirectedValue(); + + java.io.Serializable value_readed = value_info.get_value(); + + if (!value_readed.getClass().isInstance(value)) + throw new BAD_PARAM("Cannot truncate value"); + + return value_readed; + } + + if (value instanceof org.omg.CORBA.portable.StreamableValue) { + org.omg.CORBA.portable.StreamableValue streamable = + (org.omg.CORBA.portable.StreamableValue) value; + + String value_id = value_info.get_id(); + + try { + if ((value_id != null) + && (!value_id.equals(streamable._type().id()))) + throw new BAD_PARAM("Streamable id is not the same"); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + streamable._read(this); + + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + + org.omg.CORBA.portable.CustomValue custom = + (org.omg.CORBA.portable.CustomValue) value; + + String value_id = value_info.get_id(); + + if (value_id != null) { + String[] custom_ids = custom._truncatable_ids(); + + boolean truncable = false; + + for (int i = 0; i < custom_ids.length; i++) { + if (value_info.is_truncable(custom_ids[i])) { + truncable = true; + break; + } + } + + if (!truncable) + throw new BAD_PARAM("Streamable id is not the same"); + } + + if (value_info.isFragmented()) { + throw new + NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + custom.unmarshal(this); + } else if (value instanceof java.lang.String) { + value = read_wstring(); + } else if (value instanceof java.io.Serializable) { + initValueHandler(); + + value = + st_value_handler.readValue(this, //InputStream + 0, //offset + value.getClass(), //value class + value_info.get_id(), // repository Id + st_value_handler.getRunTimeCodeBase()); + } else { + throw new BAD_PARAM("No Serializable class"); + } + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public void initValueHandler() + { + synchronized (this.getClass()) { + if (st_value_handler == null) + st_value_handler = javax.rmi.CORBA.Util.createValueHandler(); + } + } + + public java.lang.Object read_abstract_interface() + { + boolean is_reference = read_boolean(); + + if (is_reference) + return read_Object(); + else + return read_value(); + } + + //DataInputStream + + public java.lang.Object read_Abstract() + { + return read_abstract_interface(); + } + + public java.lang.Object read_abstract_interface(java.lang.Class clz) + { + boolean is_reference = read_boolean(); + + if (is_reference) + return read_Object(); + else + return read_value(clz); + } + + // tidorb operations + + public void skipIndirection() + { + skipLong(); + } + + public AbsolutePosition readIndirection() + { + // Prevent fragment jumps + + alignment(CDR.LONG_SIZE); + + // calculate the indirection + + AbsolutePosition typecode_indirection = getAbsolutePosition(); + + // read indirection offset + + int offset = read_long(); + + // SELF-INDIRECTINIG not allowed + + if (offset >= -CDR.LONG_SIZE) + throw new MARSHAL("Invalid offset"); + + int headers_length = 0; + + // if message add to offset the message headers + + if ((m_is_message) && (m_iterator.m_current_chunk_num > 0)) { + int fragment_header_size = 0; + + if (getVersion() == GIOPVersion.VERSION_1_2) + fragment_header_size = + GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; + else + fragment_header_size = + GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; + + BufferCDR buffer = getBuffer(); + + // minimun valid offset from the fragment where is the indirection + + int current_fragment = m_iterator.m_current_chunk_num; + + ChunkCDR chunk = buffer.getChunk(current_fragment); + + int offset_from_fragment = 0; + + if (chunk.hasHeader()) + offset_from_fragment = CDR.LONG_SIZE + fragment_header_size + - m_iterator.m_position; + else + offset_from_fragment = CDR.LONG_SIZE - m_iterator.m_position; + + // loop: add to offset fragment header size while the offset was + // less than valid offset from indirection fragment + while ((current_fragment > 0) && (offset < offset_from_fragment)) { + chunk = buffer.getChunk(--current_fragment); + + offset_from_fragment -= chunk.getAvailable(); + + if (chunk.hasHeader()) + offset -= fragment_header_size; + } + } + + AbsolutePosition referenced_position; + + referenced_position = typecode_indirection.addOffset(offset); + + if (referenced_position == null) + throw new MARSHAL("Invalid indirection: offset out of bounds.", 0, + CompletionStatus.COMPLETED_NO); + + // align the position to read the typecode in a aligned position of long + // this position alwais is aligned to long independently of + // encapsulation. + + // referenced_position.align(CDR.LONG_SIZE); + + return referenced_position; + } + + public void fixStarting() + { + m_iterator.fixStarting(); + } + + /** + * Sets the stream to the begining of the buffer. + */ + public void rewind() + { + m_iterator.rewind(); + + if ((m_is_message) && (m_iterator.m_current_chunk_num == 0) + && (m_iterator.m_position == 0)) + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Get the next chunk of the buffer + * + * @throws org.omg.CORBA.MARSHAL + * if the end of the buffer is reached. + * @see es.tid.TIDorbj.core.cdr.ChunkCDR + * @see es.tid.TIDorbj.core.cdr.BufferCDR + */ + public void getNextChunk() + { + if ((m_is_message) && (m_version != GIOPVersion.VERSION_1_0)) { + /* + * if(version == GIOPVersion.VERSION_1_0) throw new MARSHAL("End of + * Buffer: GIOP 1.0 does not allows fragmentation"); + */ + m_iterator.nextChunk(); + + if (m_iterator.m_chunk.hasHeader()) { + skip(GIOPHeader.HEADER_SIZE); + + if (m_version == GIOPVersion.VERSION_1_2) { + GIOPFragmentMessage.skipFragmentHeader1_2(this); + } + } + + } else { + m_iterator.nextChunk(); + } + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Set the stream pointer to the next aligned position of given data type + * + * @param type_size + * the type size in octets + */ + public void goNextAlignedPosition(int type_size) + { + // set the aligned position + + int next_position = m_iterator.alignPosition(type_size); + + if (next_position > m_iterator.m_chunk.m_available) { + if (m_iterator.m_encapsulation) { + // continue the encapsulation aligment in next chunk + int gap = next_position - m_iterator.m_position; + skip(gap); + alignment(CDR.OCTET_SIZE); // prevents next_position == length + } else { + getNextChunk(); + } + } else if (next_position == m_iterator.m_chunk.m_available) { + getNextChunk(); + } else { + m_iterator.m_position = next_position; + } + } + + /** + * Sets the reading pointer in the correct aligmnet for the data type. If + * necessary, gets the next chunk. + *

+ * CORBA 2.3 specification says: A primitive data type of 8 bytes or + * smaller, should never be broken across two fragments.Therefore, if the + * remaining bytes are not sufficient for reading the data next chunk will + * be set for reading. + *

+ * If it is reading a encapsulation and the data is broken into two chunks, + * reads the data compoentes byte per byte. + * + * @param type_size the type size for alignment. + * @return true if can read directly the data or + * false if byte swap is needed because the data is + * splitted in two framgments and is contended in a encapsulation. + * @throws org.omg.CORBA.MARSHAL + * if the end of the buffer is reached. + */ + + public boolean alignment(int type_size) + throws org.omg.CORBA.MARSHAL + { + + goNextAlignedPosition(type_size); + + if (m_iterator.enoughSpace(type_size)) + return true; + + // there is no space for whole data bytes + + if (m_iterator.m_encapsulation) + return false; // marshal byte per byte + + // marshaling in the main buffer, get next chunk + getNextChunk(); + + return true; + } + + private void skipArray(int length, int type_length) + { + if (length < 0) + throw new BAD_PARAM("Invalid array length", 0, + CompletionStatus.COMPLETED_NO); + + // número de octetos pertenecientes a datos que se pueden leer enteros + int octets_can_skip = 0; + + // numero de datos que quedan por saltar + int remain_data = length; + + while (remain_data > 0) { + + if (!alignment(type_length)) { // encapsulación, el dato no cabe + // completo + + skip(type_length); + + remain_data--; + + } else { + octets_can_skip = java.lang.Math.min(remain_data * type_length, + m_iterator.available()); + + remain_data -= octets_can_skip / type_length; + m_iterator.m_position += octets_can_skip; + + if (remain_data > 0) { + getNextChunk(); + } + } + } + } + + public long skip(long n) + { + if (n > 0L) { + int chunk_left = m_iterator.available(); + if (n <= chunk_left) + m_iterator.skip((int) n); + else { + getNextChunk(); + skip(n - chunk_left); + } + return n; + } + return 0; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDROutputStream.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDROutputStream.java.svn-base new file mode 100644 index 0000000..41fc03c --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/CDROutputStream.java.svn-base @@ -0,0 +1,1810 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.DATA_CONVERSION; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.portable.ValueBase; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * Portable OutputStream for demarshalling. + *

+ * A CDROutputStream has an buffer iterator + * CDRIterator. The iterator maintains the data position and + * correct aligment, and TypeCode marshaling information. + * + * @see es.tid.TIDorbj.core.cdr.CDRInputStream + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDROutputStream extends org.omg.CORBA_2_3.portable.OutputStream + implements org.omg.CORBA.DataOutputStream +{ + + /** + * ORB instance that created the output stream. + */ + + TIDORB m_orb; + + /** + * GIOPVersion used. + */ + + GIOPVersion m_version; + + /** + * The buffer is a GIOP message. A GIOP Message implies that the GIOP Header + * space will be reserved in the BufferCDR, that is, each ChunkCDR will have + * the header size bytes allocated. + */ + + boolean m_is_message; + + /** + * Buffer Iterator. + */ + protected IteratorCDR m_iterator; + + /** + * Current chunk buffer. + */ + + protected byte[] m_chunk_buffer; + + /** + * Data buffer for Broken data splitted in to chunks in an encapsulations + */ + + protected byte[] m_data_buffer = null; + + protected static javax.rmi.CORBA.ValueHandler st_value_handler = null; + + // DataOutputStream + static String[] st_data_output_ids = + { "IDL:omg.org/CORBA/DataOutputStream:1.0" }; + + public String[] _truncatable_ids() + { + return st_data_output_ids; + } + + public CDROutputStream(TIDORB orb, byte[] buffer) + { + this(orb, new IteratorCDR(new BufferCDR(buffer))); + } + + public CDROutputStream(TIDORB orb, BufferCDR buffer) + { + this(orb, new IteratorCDR(buffer)); + } + + public CDROutputStream(TIDORB orb, int chunk_size) + { + this(orb, new IteratorCDR(new BufferCDR(chunk_size))); + } + + protected CDROutputStream(TIDORB orb, IteratorCDR iterator) + { + m_orb = orb; + + if ( orb != null ){ + this.m_version = GIOPVersion.fromString ( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + } else { + this.m_version = GIOPVersion.fromString( + IIOPCommunicationLayerPropertiesInfo.DEFAULT_GIOP_VERSION + ); + } + + this.m_is_message = false; + this.m_iterator = iterator; + iterator.m_byte_order = CDR.BIG_ENDIAN; + + m_chunk_buffer = iterator.m_chunk.m_buffer; + m_data_buffer = new byte[CDR.LONGLONG_SIZE]; + } + + /** + * @return the GIOP version used to marshal. + */ + public GIOPVersion getVersion() + { + return m_version; + } + + /** + * Sets the GIOP version used to marshal. + */ + public void setVersion(GIOPVersion ver) + { + m_version = ver; + } + + /** + * @return true if the stream is a GIOP message. + */ + public boolean isMessage() + { + return m_is_message; + } + + /** + * Sets if the stream is a GIOP message. + */ + public void setMessage(boolean is) + { + m_is_message = is; + + if ((is) && (m_iterator.m_position == 0)) { + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + } + } + + /** + * @return the stream byte order, if true little-endian, else + * big-endian + */ + public boolean getByteOrder() + { + return m_iterator.getByteOrder(); + } + + /** + * @return the stream buffer + */ + public BufferCDR getBuffer() + { + return m_iterator.getBuffer(); + } + + /** + * Sets the aligment offset in the current Context. + * + * @param pos + * the new offset + * @see es.tid.TIDorbj.core.cdr.AligmentOffset + */ + public void setAlignmentOffset(int pos) + { + m_iterator.setAlignmentOffset(pos); + } + + /** + * @return pointer to the actual position in the buffer. + */ + public PointerCDR actualPointer() + { + return m_iterator.getPointer(); + } + + /** + * Creates a new Encapsulation Context with it own aligment an indirections. + */ + public void enterEncapsulation() + { + // skip the length + + CDROutputStream length_out = copy(); + + write_ulong(1); + + // get the real start position of encapsulation + + alignment(CDR.OCTET_SIZE); + + m_iterator.enterEncapsulation(); + + //write byte order + write_boolean(m_iterator.getByteOrder()); + + // save the length output stream in the new context + m_iterator.m_context.setLengthOut(length_out); + } + + /** + * Close the Encapsulation Context, write en encapsulation length, and + * restore the father Context. + * + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + + public void exitEncapsulation() + { + + CDROutputStream length_out = m_iterator.m_context.m_length_out; + + if (length_out == null) + throw new org.omg.CORBA.INTERNAL("Null Length out"); + + int headers_length = 0; + + // if message Calculate the headers size to subtract the value to the + // Encapsulation size + /* + * if (message) { int fragments = iterator.current_chunk_num - + * length_out.iterator.current_chunk_num; + * + * + * if(version == GIOPVersion.VERSION_1_2) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; else if (version == + * GIOPVersion.VERSION_1_1) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; else headers_length = + * 0; } + */ + int encapsulation_length = + getAbsolutePosition().getValue() + - m_iterator.m_context.m_starts_at.getAbsolutePosition().getValue(); + // - headers_length; + + length_out.write_ulong(encapsulation_length); + + m_iterator.m_context.deleteLengthOut(); + + m_iterator.exitEncapsulation(); + + } + + /** + * @return an input stream with its beginning at this marshaling position + */ + public CDRInputStream inputStreamAtThisPosition() + { + CDRInputStream input = new CDRInputStream(m_orb, m_iterator.copy()); + input.fixStarting(); + input.setMessage(m_is_message); + input.setVersion(m_version); + return input; + } + + public org.omg.CORBA.ORB orb() + { + if (m_orb != null) + return m_orb; + else + return es.tid.TIDorbj.core.TIDORB.init(); + } + + public org.omg.CORBA.portable.InputStream create_input_stream() + { + CDRInputStream input; + + input = new CDRInputStream(m_orb, m_iterator.copy()); + + input.setMessage(m_is_message); + input.setVersion(m_version); + + input.rewind(); + + return input; + } + + /** + * @return a new inputstream pointing the same position. + */ + public CDROutputStream copy() + { + CDROutputStream stream = new CDROutputStream(m_orb, m_iterator.copy()); + stream.setMessage(m_is_message); + stream.setVersion(m_version); + return stream; + } + + public ContextCDR getContextCDR() + { + return m_iterator.m_context; + } + + /** + * Writes as an encapsulation the buffer. + *

+ * The first octet in the encapsulation must be the byte-order. + * + * @encapsulation a buffer with the encapsulation. + */ + public void writeEncapsulation(Encapsulation encapsulation) + { + encapsulation.write(this); + } + + /** + * @return the absolute value in the buffer order of the current position. + */ + public AbsolutePosition getAbsolutePosition() + { + return m_iterator.getPointer().getAbsolutePosition(); + } + + public PointerCDR getPointer() + { + return m_iterator.getPointer(); + } + + /** + * Jumps to the absolute position. + * + * @pram position the new position + */ + public void setPosition(AbsolutePosition position) + { + m_iterator.setPosition(position); + } + + public void write_boolean(boolean value) + { + alignment(CDR.BOOLEAN_SIZE); + m_chunk_buffer[m_iterator.m_position++] = (value) ? (byte) 1 : (byte) 0; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_char(char value) + { + // WARNING: Java char is 2 bytes long, there is a cast + // from char to byte + if (value > 255) { + throw new DATA_CONVERSION("Char out of range.", + 0, + CompletionStatus.COMPLETED_NO); + } + alignment(CDR.CHAR_SIZE); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_wchar(char value) + { + // Java char is 2 bytes long, there is a cast + + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.WCHAR_SIZE); + } + } + + public void write_octet(byte value) + { + alignment(CDR.OCTET_SIZE); + m_chunk_buffer[m_iterator.m_position++] = value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_short(short value) + { + if (alignment(CDR.SHORT_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.SHORT_SIZE); + } + } + + public void write_ushort(short value) + { + // JAVA MAPPING: "negative" int = positive ulong values + // will be handled by the user + if (alignment(CDR.USHORT_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.USHORT_SIZE); + } + } + + public void write_long(int value) + { + if (alignment(CDR.LONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 24); + m_data_buffer[1] = (byte) (value >>> 16); + m_data_buffer[2] = (byte) (value >>> 8); + m_data_buffer[3] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.LONG_SIZE); + } + } + + public void write_ulong(int value) + { + // JAVA MAPPING: "negative" int = positive ulong values + // will be handled by the user + + if (alignment(CDR.ULONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 24); + m_data_buffer[1] = (byte) (value >>> 16); + m_data_buffer[2] = (byte) (value >>> 8); + m_data_buffer[3] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.ULONG_SIZE); + } + } + + public void write_longlong(long value) + { + if (alignment(CDR.LONGLONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 56); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 48); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 40); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 32); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 56); + m_data_buffer[1] = (byte) (value >>> 48); + m_data_buffer[2] = (byte) (value >>> 40); + m_data_buffer[3] = (byte) (value >>> 32); + m_data_buffer[4] = (byte) (value >>> 24); + m_data_buffer[5] = (byte) (value >>> 16); + m_data_buffer[6] = (byte) (value >>> 8); + m_data_buffer[7] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.LONGLONG_SIZE); + } + } + + public void write_ulonglong(long value) + { + // JAVA MAPPING: "negative" long = positive ulonglong values + // will be handled by the user + + if (alignment(CDR.ULONGLONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 56); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 48); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 40); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 32); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 0); + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 56); + m_data_buffer[1] = (byte) (value >>> 48); + m_data_buffer[2] = (byte) (value >>> 40); + m_data_buffer[3] = (byte) (value >>> 32); + m_data_buffer[4] = (byte) (value >>> 24); + m_data_buffer[5] = (byte) (value >>> 16); + m_data_buffer[6] = (byte) (value >>> 8); + m_data_buffer[7] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.ULONGLONG_SIZE); + } + } + + public void write_float(float value) + { + write_long(java.lang.Float.floatToIntBits(value)); + } + + public void write_double(double value) + { + write_longlong(java.lang.Double.doubleToLongBits(value)); + + } + + public void write_string(String value) + { + if (value == null) + throw new BAD_PARAM("Null string reference.", 0, + CompletionStatus.COMPLETED_NO); + + // write the string and the final of string char '\0' + + int string_length = value.length(); + + int cdr_string_length = string_length + 1; + + char[] char_array = new char[cdr_string_length]; + + value.getChars(0, string_length, char_array, 0); + + char_array[string_length] = '\0'; + + // write length + + write_ulong(cdr_string_length); + + // write value data + + writeCharArrayAux(char_array, 0, cdr_string_length); + } + + public void write_wstring(String value) + { + if (value == null) + throw new BAD_PARAM("Null string reference.", 0, + CompletionStatus.COMPLETED_NO); + + // write the string and the final of string char '\0' + + char[] char_array = value.toCharArray(); + + // write length + + if (m_version == GIOPVersion.VERSION_1_2) { + write_ulong((char_array.length + 1) * CDR.WCHAR_SIZE); + + } else if (m_version == GIOPVersion.VERSION_1_1){ + write_ulong(char_array.length + 1); + } else { + throw new MARSHAL("wstring is not present in GIOP 1.0", + 6, + CompletionStatus.COMPLETED_NO); + } + + // write value data + write_wchar_array(char_array, 0, char_array.length); + + // write string end char + write_wchar('\0'); + } + + public void write_boolean_array(boolean[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null boolean array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int can_write = 0; + + // número de octetos que quedan por escribir + + int remain_booleans = length; + + int position = 0; + int stop_at = 0; + + while (remain_booleans > 0) { + + position = m_iterator.m_position; + + can_write = java.lang.Math.min(remain_booleans, + m_chunk_buffer.length - position); + + stop_at = position + can_write; + + while (position < stop_at) { + m_chunk_buffer[position++] = (byte) ((value[offset++]) ? 1 : 0); + } + + m_iterator.m_position = stop_at; + remain_booleans -= can_write; + + if (remain_booleans > 0) { + getNextChunk(); + } else { + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + } + + public void write_char_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null char array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + writeCharArrayAux(value, offset, length); + } + + public void writeCharArrayAux(char[] value, int offset, int length) + { + int chars_can_write = 0; + + // número de octetos que quedan por escribir + + int remain_chars = length; + + int position = 0; + int stop_at = 0; + + int current_value = 0; + + while (remain_chars > 0) { + + position = m_iterator.m_position; + + chars_can_write = + java.lang.Math.min( remain_chars, + m_chunk_buffer.length - position); + + stop_at = position + chars_can_write; + + for (; position < stop_at;) { + + current_value = value[offset++]; + + // CORBA chars are 1 byte length, value must be < 256 + if (current_value > 255) { + throw new DATA_CONVERSION("Char out of range.", + 0, + CompletionStatus.COMPLETED_NO); + } + + m_chunk_buffer[position++] = (byte) current_value; + } + + m_iterator.m_position = stop_at; + remain_chars -= chars_can_write; + + if (remain_chars > 0) { + getNextChunk(); + } else { + if (m_iterator.m_chunk.m_available < m_iterator.m_position) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + } + + public void write_wchar_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null wchar array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos wchar que se pueden escribir enteros + int wchars_can_write = 0; + + int position = 0; + int wchar_value = 0; + + // numero de wchars que quedan + int remain_wchars = length; + + while (remain_wchars > 0) { + + if (!alignment(CDR.WCHAR_SIZE)) // encapsulación, el dato no cabe + // completo + { + wchar_value = value[offset++]; + m_data_buffer[0] = (byte) (wchar_value >>> 8); + m_data_buffer[1] = (byte) wchar_value; + + write_octet_array(m_data_buffer, 0, CDR.WCHAR_SIZE); + + remain_wchars--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + wchars_can_write = + java.lang.Math.min(remain_wchars, + free_octets / CDR.WCHAR_SIZE); + + for (int i = wchars_can_write; i > 0; i--) { + wchar_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (wchar_value >>> 8); + m_chunk_buffer[position++] = (byte) wchar_value; + } + + remain_wchars -= wchars_can_write; + m_iterator.m_position = position; + + if (remain_wchars > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_octet_array(byte[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir + int remain_bytes = length; + + // bytes que se pueden escribir por vuelta + int bytes_can_write = 0; + int position = 0; + + while (remain_bytes > 0) { + + position = m_iterator.m_position; + + bytes_can_write = java.lang.Math + .min( + remain_bytes, + m_chunk_buffer.length + - position); + + System.arraycopy(value, offset, m_chunk_buffer, position, + bytes_can_write); + + m_iterator.m_position += bytes_can_write; + remain_bytes -= bytes_can_write; + offset += bytes_can_write; + + if (remain_bytes > 0) + getNextChunk(); + else if (m_iterator.m_chunk.m_available < m_iterator.m_position) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + + public void write_short_array(short[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null short array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos short que se pueden escribir enteros + int shorts_can_write = 0; + + int position = 0; + int short_value = 0; + + // numero de shorts que quedan + int remain_shorts = length; + + while (remain_shorts > 0) { + + if (!alignment(CDR.SHORT_SIZE)) // encapsulación, el dato no cabe + // completo + { + short_value = value[offset++]; + m_data_buffer[0] = (byte) (short_value >>> 8); + m_data_buffer[1] = (byte) short_value; + + write_octet_array(m_data_buffer, 0, CDR.SHORT_SIZE); + + remain_shorts--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + shorts_can_write = + java.lang.Math.min(remain_shorts, + free_octets / CDR.SHORT_SIZE); + + for (int i = shorts_can_write; i > 0; i--) { + short_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (short_value >>> 8); + m_chunk_buffer[position++] = (byte) short_value; + } + + remain_shorts -= shorts_can_write; + m_iterator.m_position = position; + + if (remain_shorts > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ushort_array(short[] value, int offset, int length) + { + write_short_array(value, offset, length); + } + + public void write_long_array(int[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos int que se pueden escribir enteros + int ints_can_write = 0; + + int position = 0; + int int_value = 0; + + // numero de ints que quedan por escribir + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.LONG_SIZE)) // encapsulación, el dato no cabe + // completo + { + int_value = value[offset++]; + + m_data_buffer[0] = (byte) (int_value >>> 24); + m_data_buffer[1] = (byte) (int_value >>> 16); + m_data_buffer[2] = (byte) (int_value >>> 8); + m_data_buffer[3] = (byte) int_value; + write_octet_array(m_data_buffer, 0, CDR.LONG_SIZE); + + remain_ints--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + ints_can_write = + java.lang.Math.min(remain_ints, + free_octets / CDR.LONG_SIZE); + + for (int i = ints_can_write; i > 0; i--) { + int_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (int_value >>> 24); + m_chunk_buffer[position++] = (byte) (int_value >>> 16); + m_chunk_buffer[position++] = (byte) (int_value >>> 8); + m_chunk_buffer[position++] = (byte) int_value; + } + + remain_ints -= ints_can_write; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ulong_array(int[] value, int offset, int length) + { + write_long_array(value, offset, length); + } + + public void write_longlong_array(long[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos long que se pueden escribir enteros + int longs_can_write = 0; + + int position = 0; + long long_value = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.LONGLONG_SIZE)) + { + // encapsulation, the data does not fit complete + long_value = value[offset++]; + + m_data_buffer[0] = (byte) (long_value >>> 56); + m_data_buffer[1] = (byte) (long_value >>> 48); + m_data_buffer[2] = (byte) (long_value >>> 40); + m_data_buffer[3] = (byte) (long_value >>> 32); + m_data_buffer[4] = (byte) (long_value >>> 24); + m_data_buffer[5] = (byte) (long_value >>> 16); + m_data_buffer[6] = (byte) (long_value >>> 8); + m_data_buffer[7] = (byte) long_value; + + write_octet_array(m_data_buffer, 0, CDR.LONGLONG_SIZE); + + remain_longs--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + longs_can_write = + java.lang.Math.min(remain_longs, + free_octets / CDR.LONGLONG_SIZE); + + for (int i = longs_can_write; i > 0; i--) { + long_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (long_value >>> 56); + m_chunk_buffer[position++] = (byte) (long_value >>> 48); + m_chunk_buffer[position++] = (byte) (long_value >>> 40); + m_chunk_buffer[position++] = (byte) (long_value >>> 32); + m_chunk_buffer[position++] = (byte) (long_value >>> 24); + m_chunk_buffer[position++] = (byte) (long_value >>> 16); + m_chunk_buffer[position++] = (byte) (long_value >>> 8); + m_chunk_buffer[position++] = (byte) long_value; + } + + remain_longs -= longs_can_write; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ulonglong_array(long[] value, int offset, int length) + { + write_longlong_array(value, offset, length); + } + + public void write_float_array(float[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null float array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos float que se pueden escribir enteros + int ints_can_write = 0; + + int position = 0; + int int_value = 0; + + // numero de floats que quedan que quedan por escribir + int remain_floats = length; + + while (remain_floats > 0) { + + if (!alignment(CDR.FLOAT_SIZE)) // encapsulación, el dato no cabe + // completo + { + int_value = Float.floatToIntBits(value[offset++]); + + m_data_buffer[0] = (byte) (int_value >>> 24); + m_data_buffer[1] = (byte) (int_value >>> 16); + m_data_buffer[2] = (byte) (int_value >>> 8); + m_data_buffer[3] = (byte) int_value; + write_octet_array(m_data_buffer, 0, CDR.FLOAT_SIZE); + + remain_floats--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + ints_can_write = + java.lang.Math.min(remain_floats, + free_octets / CDR.FLOAT_SIZE); + + for (int i = ints_can_write; i > 0; i--) { + int_value = Float.floatToIntBits(value[offset++]); + + m_chunk_buffer[position++] = (byte) (int_value >>> 24); + m_chunk_buffer[position++] = (byte) (int_value >>> 16); + m_chunk_buffer[position++] = (byte) (int_value >>> 8); + m_chunk_buffer[position++] = (byte) int_value; + } + + remain_floats -= ints_can_write; + m_iterator.m_position = position; + + if (remain_floats > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_double_array(double[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new BAD_PARAM( + "value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos double que se pueden escribir enteros + int doubles_can_write = 0; + + int position = 0; + long long_value = 0; + + // numero de doubles que quedan + int remain_doubles = length; + + while (remain_doubles > 0) { + + if (!alignment(CDR.DOUBLE_SIZE)) { + long_value = Double.doubleToLongBits(value[offset++]); + + m_data_buffer[0] = (byte) (long_value >>> 56); + m_data_buffer[1] = (byte) (long_value >>> 48); + m_data_buffer[2] = (byte) (long_value >>> 40); + m_data_buffer[3] = (byte) (long_value >>> 32); + m_data_buffer[4] = (byte) (long_value >>> 24); + m_data_buffer[5] = (byte) (long_value >>> 16); + m_data_buffer[6] = (byte) (long_value >>> 8); + m_data_buffer[7] = (byte) long_value; + + write_octet_array(m_data_buffer, 0, CDR.DOUBLE_SIZE); + + remain_doubles--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + doubles_can_write = + java.lang.Math.min(remain_doubles, + free_octets / CDR.DOUBLE_SIZE); + + for (int i = doubles_can_write; i > 0; i--) { + long_value = Double.doubleToLongBits(value[offset++]); + m_chunk_buffer[position++] = (byte) (long_value >>> 56); + m_chunk_buffer[position++] = (byte) (long_value >>> 48); + m_chunk_buffer[position++] = (byte) (long_value >>> 40); + m_chunk_buffer[position++] = (byte) (long_value >>> 32); + m_chunk_buffer[position++] = (byte) (long_value >>> 24); + m_chunk_buffer[position++] = (byte) (long_value >>> 16); + m_chunk_buffer[position++] = (byte) (long_value >>> 8); + m_chunk_buffer[position++] = (byte) long_value; + } + + remain_doubles -= doubles_can_write; + m_iterator.m_position = position; + + if (remain_doubles > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_Object(org.omg.CORBA.Object value) + { + if (value == null) { + es.tid.TIDorbj.core.iop.IOR.nullIOR().write(this); + return; + } + + if (value instanceof ValueBase) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if (value instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, CompletionStatus.COMPLETED_NO); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) value) + ._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + ((CommunicationDelegate) delegate).getReference().write(this); + } else { // write ior from anothers's ORB Object + IOR ior = + DefaultIOR.fromString(m_orb, + delegate.orb(value).object_to_string(value)); + ior.write(this); + } + } + + public void write_TypeCode(org.omg.CORBA.TypeCode value) + { + if (value == null) + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + + TypeCodeMarshaler.marshal(value, this); + } + + public void write_any(org.omg.CORBA.Any value) + { + if (value == null) + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + + write_TypeCode(value.type()); + value.write_value(this); + } + + //DataOutputStream + public void write_any_array(org.omg.CORBA.Any[] value, int offset, + int length) + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + write_any(value[i]); + } + + public void write_Context(org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) + { + if (ctx == null) + throw new BAD_PARAM("Null context reference.", 0, + CompletionStatus.COMPLETED_NO); + + ContextImpl.write(this, ctx, contexts); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + + public void write_Principal(org.omg.CORBA.Principal value) + { + throw new org.omg.CORBA.NO_IMPLEMENT("Deprecated by CORBA 2.2"); + } + + public void write_fixed(java.math.BigDecimal value) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_fixed(org.omg.CORBA.Any value) + throws org.omg.CORBA.BadFixedValue + { + if ((value == null) + || (value.type().kind().value() != org.omg.CORBA.TCKind._tk_fixed)) + throw new org.omg.CORBA.BadFixedValue(); + + value.write_value(this); + } + + public void write_fixed_array(org.omg.CORBA.Any[] value, int offset, + int length) + throws org.omg.CORBA.BadFixedValue + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + write_fixed(value[i]); + } + + // CORBA 2.3 + + public void write_value(java.io.Serializable value) + { + writeValueWithId(value, null); + } + + public void write_value(java.io.Serializable value, java.lang.String rep_id) + { + writeValueWithId(value, rep_id); + } + + protected void writeValueWithId(java.io.Serializable value, + java.lang.String rep_id) + { + if (writeValueTags(value)) + return; + + if (value instanceof java.lang.String) { + writeWStringValue((String) value); + } else if (value instanceof org.omg.CORBA.portable.StreamableValue) { + writeStreamableValue( + (org.omg.CORBA.portable.StreamableValue) value); + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + writeCustomValue((org.omg.CORBA.portable.CustomValue) value); + } else { + initValueHandler(); + + st_value_handler.writeValue(this, value); + } + } + + public void write_value(java.io.Serializable value, Class clz) + { + if (writeValueTags(value)) + return; + + if (value instanceof java.lang.String) { + writeWStringValue((String) value); + } else if (value instanceof org.omg.CORBA.portable.StreamableValue) { + writeStreamableValue( + (org.omg.CORBA.portable.StreamableValue) value); + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + writeCustomValue((org.omg.CORBA.portable.CustomValue) value); + } else { // boxed value?? + + java.lang.Object obj = null; + + try { + java.lang.reflect.Constructor constructor = + clz.getConstructor(new Class[0]); + + obj = constructor.newInstance(new Object[0]); + + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + + if (obj instanceof org.omg.CORBA.portable.BoxedValueHelper) { + writeBoxedValue(value, + (org.omg.CORBA.portable.BoxedValueHelper) value); + } else { + initValueHandler(); + ValueTypeInfo value_info = new ValueTypeInfo(); + String[] ids = { st_value_handler.getRMIRepositoryID(clz) }; + value_info.set_repository_ids(ids); + value_info.write(this); + st_value_handler.writeValue(this, value); + } + } + } + + public void write_value(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) + { + if (writeValueTags(value)) + return; + + writeBoxedValue(value, factory); + + } + + //DataOutputStream + public void write_Value(java.io.Serializable value) + { + write_value(value); + } + + /** + * Try to write null or an indirection tags + * + * @return true if written or false otherwise + */ + + protected boolean writeValueTags(java.io.Serializable value) + { + // write null + + if (value == null) { + ValueTypeInfo.write_null(this); + return true; + } + + PointerCDR previous_position = getContextCDR().lookupPosition(value); + + if (previous_position != null) { + writeIndirection(previous_position); + return true; + } + + return false; + } + + protected void writeWStringValue(String value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + write_wstring(value); + + getContextCDR().putObject(value, value_position); + } + + protected void + writeStreamableValue(org.omg.CORBA.portable.StreamableValue value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + value_info.set_repository_ids(value._truncatable_ids()); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + value._write(this); + + getContextCDR().putObject(value, value_position); + } + + protected void writeCustomValue(org.omg.CORBA.portable.CustomValue value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + value_info.set_repository_ids(value._truncatable_ids()); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + value.marshal(this); + + getContextCDR().putObject(value, value_position); + } + + protected void + writeBoxedValue(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + String[] ids = { factory.get_id() }; + + value_info.set_repository_ids(ids); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + factory.write_value(this, value); + + getContextCDR().putObject(value, value_position); + } + + public void initValueHandler() + { + synchronized (this.getClass()) { + if (st_value_handler == null) + st_value_handler = javax.rmi.CORBA.Util.createValueHandler(); + } + } + + public void write_abstract_interface(java.lang.Object object) + { + if (object == null) + throw new org.omg.CORBA.BAD_PARAM("Null value reference"); + + if (object instanceof org.omg.CORBA.Object) { + org.omg.CORBA.Object ref = (org.omg.CORBA.Object) object; + + // is an object ref + write_boolean(true); + write_Object(ref); + + } else if (object instanceof java.io.Serializable) { + write_boolean(false); + write_value((java.io.Serializable) object); + } else + throw new + MARSHAL("Cannot marshal value: it does not implements " + + "java.io.Serializable or is not a org.omg.CORBA.Object"); + } + + //DataOutputStream + public void write_Abstract(java.lang.Object value) + { + write_abstract_interface(value); + } + + // TIDORB + + // write_referenceable_string for RepositoryId and URL + + protected void writeReferenceableString(String id) + { + PointerCDR previous_position = getContextCDR().lookupPosition(id); + + if (previous_position != null) { + writeIndirection(previous_position); + return; + } + + // aligns to get the id position + + alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + PointerCDR id_position = getPointer(); + + write_string(id); + + getContextCDR().putObject(id, id_position); + } + + public void writeIndirection(PointerCDR previous_position) + { + write_long(0xFFFFFFFF); + + // prevents that indirection value will be marshaled in the next chunk + + alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + // int headers_length = 0; + + // if message Calculate the headers size to subtract the value to the + // Encapsulation size + /* + * if (get_message()) { int fragments = getCurrentChunkNum() - + * previous_position.getNumChunk(); + * + * if(get_version() == GIOPVersion.VERSION_1_2) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; else if (get_version() == + * GIOPVersion.VERSION_1_1) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; else headers_length = + * 0; } + */ + AbsolutePosition indirection_position; + + indirection_position = getAbsolutePosition(); + + int offset = previous_position.getAbsolutePosition().getValue() + - indirection_position.getValue(); + // + headers_length; + + write_long(offset); + + return; + } + + public int getCurrentChunkNum() + { + return m_iterator.m_current_chunk_num; + } + + /* + * public void getNextFragmentHeader() { if(!message) throw new + * org.omg.CORBA.INTERNAL("Not it a message"); + * + * if(version == GIOPVersion.VERSION_1_0) throw new MARSHAL("End of Buffer: GIOP + * 1.0 does not allows fragmentation"); + * + * iterator.nextChunk(); + * + * chunk_buffer = iterator.chunk.buffer; } + */ + public void getNextChunk() + { + m_iterator.m_chunk.m_available = m_chunk_buffer.length; + /* + * if (message) { if(version == GIOPVersion.VERSION_1_0) { // throw new + * MARSHAL("End of Buffer: GIOP 1.0 does not allows fragmentation"); + * iterator.bufferCDR.grow_1_0(); } else { if(iterator.current_chunk_num == + * (iterator.bufferCDR.getNumChunks() -1)) iterator.bufferCDR.grow(); + * + * iterator.nextChunk(); + * + * skip(GIOPHeader.HEADER_SIZE); + * + * if(version == GIOPVersion.VERSION_1_2) { + * GIOPFragmentMessage.skip_fragment_header_1_2(this); } } } else { + */ + if (m_iterator.m_current_chunk_num + == (m_iterator.m_buffer_cdr.getNumChunks() - 1)) + m_iterator.m_buffer_cdr.grow(); + + m_iterator.nextChunk(); + // } + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Set the stream pointer to the next aligned position of given data type + * + * @param type_size + * the type size in octets + */ + protected void goNextAlignedPosition(int type_size) + { + int next_position = m_iterator.alignPosition(type_size); + + if (next_position < m_chunk_buffer.length) { + m_iterator.m_position = next_position; + return; + } + + /* + * if (message && (version == GIOPVersion.VERSION_1_0)) { getNextChunk(); + * iterator.position = next_position; return; } + */ + + if ((next_position > m_chunk_buffer.length) + && (m_iterator.m_encapsulation)) { + // continue the encapsulation aligment in next chunk + int gap = next_position - m_iterator.m_position; + skip(gap); + alignment(CDR.OCTET_SIZE); // prevents next_position == length + return; + } + + getNextChunk(); + } + + /** + * Set the stream pointer to the next aligned position of given data type + * and sets it as the last available position + * + * @param type_size + * the type size in octets + */ + public void fixNextAlignedPosition(int type_size) + { + goNextAlignedPosition(type_size); + + if (m_iterator.m_position >= m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position + 1; + } + + /** + * Sets the writing pointer in the correct aligmnet for the data type. If + * necessary, gets the next chunk. + *

+ * CORBA 2.3 specification says: A primitive data type of 8 bytes or + * smaller, should never be broken across two fragments.Therefore, if the + * remaining bytes are not sufficient for reading the data next chunk will + * be set for reading. + *

+ * If it is reading a encapsulation and the data is broken into two chunks, + * reads the data compoentes byte per byte. + * + * @param type_size the type size for alignment. + * @return true if can read directly the data or + * false if byte swap is needed because the data is + * splitted in two framgments and is contended in a encapsulation. + */ + + public boolean alignment(int type_size) + { + // set the aligned position + + goNextAlignedPosition(type_size); + + if (m_iterator.enoughSpace(type_size)) + return true; + + // there is no space for whole data bytes + + m_iterator.m_chunk.m_available = m_chunk_buffer.length; + + if (m_iterator.m_encapsulation) + return false; // marshal byte per byte + + // marshaling in the main buffer, get next chunk + getNextChunk(); + + return true; + } + + public void skip(long n) + { + if (n > 0L) { + int chunk_left = m_chunk_buffer.length - m_iterator.m_position; + + if (chunk_left <= 0) { + getNextChunk(); + skip(n); + } else if (n <= chunk_left) { + m_iterator.skip((int) n); + if (m_iterator.m_position >= m_iterator.m_chunk.m_available) { + m_iterator.m_chunk.m_available = m_iterator.m_position + 1; + } + } else { + getNextChunk(); + skip(n - chunk_left); + } + } + } + + /** + * Recycle the buffer pointered by the stream. + * + * @see es.tid.TIDorbj.core.cdr.BufferCDR + */ + public void recycle() + { + m_iterator.rewind(); + m_iterator.m_buffer_cdr.recycle(); + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + m_is_message = false; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ChunkCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ChunkCDR.java.svn-base new file mode 100644 index 0000000..4d0f3f7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ChunkCDR.java.svn-base @@ -0,0 +1,162 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents a segment of a CDR buffer. It controls a marshaling byte buffer + * that can be send or received in a IIOP message. + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ChunkCDR +{ + + /** + * framgments of the chunk. + */ + protected byte[] m_buffer; + + /** + * Represents the amount of data available. Available is equal or lower than + * chunk length. + */ + protected int m_available; + + /** + * The starting of the chunk has an message header + */ + protected boolean m_with_message_header; + + /** + * Constructor, gets the control of the byte array. It will have only a + * fragment and it will not be increaseable. + */ + public ChunkCDR(byte[] byte_array) + { + m_buffer = byte_array; + m_available = m_buffer.length; + m_with_message_header = false; + } + + /** + * Constructor, gets the control of the byte array. It will have only a + * fragment and it will not be increaseable. + */ + public ChunkCDR(int fixed_size) + { + m_buffer = new byte[fixed_size]; + m_available = 0; + m_with_message_header = false; + } + + public boolean hasHeader() + { + return m_with_message_header; + } + + public void setHeader(boolean value) + { + m_with_message_header = value; + } + + /** + * @return the byte array associated to the buffer. + */ + public byte[] getBuffer() + { + return m_buffer; + } + + /** + * Sets the available bytes to 0. It is used to reuse the chunk buffer for + * new data. + */ + public void recycle() + { + m_available = 0; + } + + /** + * Sets the available bytes to the value position. An error + * can appear if the value is higher than the buffer length. + * + * @return true if OK or false on error. + */ + public boolean setAvailable(int value) + { + if (value <= m_buffer.length) { + m_available = value; + return true; + } + return false; + } + + /** + * @return The available bytes. + */ + + public int getAvailable() + { + return m_available; + } + + /** + * @return The lentgh ofthe byte buffer. + */ + + public int getLength() + { + return m_buffer.length; + } + + public void setBuffer(byte[] new_buffer) + { + m_buffer = null; + m_buffer = new_buffer; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ContextCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ContextCDR.java.svn-base new file mode 100644 index 0000000..06850c0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ContextCDR.java.svn-base @@ -0,0 +1,273 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents the contexts of a buffer marshaling across different + * encapsulations. The context is defined by: + *

    + *
  • if it is a encapsulation context + *
  • the alignment offset + *
  • the byte-order + *
  • the father context + *
+ * The context creates a list of encapsulations for navigate in and out of + * encapsulations. The list represented by the context is a + * + * @see TIDorb.corba.cdr.AlignmentOffset + * + * @autor Juan A. Cáceres + * @version 1.1 + */ + +public class ContextCDR +{ + + /** + * big-endian if true or little-endian, otherwise. + */ + protected boolean m_byte_order; + + /** + * The father context. In the root context, the father will be + * null. + */ + + protected ContextCDR m_father; + + /** + * alignment offset of the encapsulation. + * + * @see es.tid.TIDorbj.core.cdr.AlignmentOffset + */ + protected AlignmentOffset m_offset; + + /** + * Where is the beginnig of the encapsulation. + */ + + protected PointerCDR m_starts_at; + + /** + * The indirection node of the buffer. Here are all the typecodes that have + * been readed and can be indirectioned. + */ + + private IndirectionNode m_indirection_node; + + /** + * The TypeCode Position Node of the buffer. Here are all the typecodes that + * have been writed in the buffer and can be indirectioned. + */ + + private PositionsNode m_positions_node; + + /** + * The CDROutputStream that will write the encapsulation length. + */ + + protected CDROutputStream m_length_out; + + /** + * Constructor of the root context. A route of encapsulation contexts will + * end here. + * + * @see es.tid.TIDorbj.core.cdr.AlignmentOffset + */ + + public ContextCDR(PointerCDR start) + { + m_byte_order = CDR.LOCAL_BYTE_ORDER; + m_offset = AlignmentOffset.calculateOffsetFrom(0); + m_father = null; + m_starts_at = start; + m_indirection_node = null; + m_positions_node = null; + } + + public ContextCDR(PointerCDR start, ContextCDR father, + AlignmentOffset offset) + { + m_starts_at = start; + m_byte_order = father.m_byte_order; + this.m_offset = offset; + this.m_father = father; + m_indirection_node = null; + m_positions_node = null; + } + + public ContextCDR getFather() + { + return m_father; + } + + public boolean isRootContext() + { + return m_father == null; + } + + public void setOffset(AlignmentOffset value) + { + m_offset = value; + } + + public AlignmentOffset getOffset() + { + return m_offset; + } + + public void setByteOrder(boolean value) + { + m_byte_order = value; + } + + public boolean getByteOrder() + { + return m_byte_order; + } + + public void setLengthOut(CDROutputStream out) + { + m_length_out = out; + } + + public void deleteLengthOut() + { + m_length_out = null; + } + + public PointerCDR getStartPointer() + { + return m_starts_at; + } + + public synchronized PointerCDR lookupPosition(java.lang.Object id) + { + PositionsNode node = getPositionsNode(); + + PointerCDR position = node.lookup(id); + + if (position != null) + return position; + + if (m_father == null) + return null; + + position = m_father.lookupPosition(id); + + if (position != null) + node.indirection(position.getAbsolutePosition()); + + return position; + + } + + public synchronized void putObject(java.lang.Object obj, + PointerCDR position) + { + getPositionsNode().put(obj, position); + } + + public synchronized Object lookupObject(AbsolutePosition position) + { + IndirectionNode node = getIndirectionNode(); + + Object obj = node.lookup(position); + + if (obj != null) + return obj; + + if (m_father != null) + return m_father.lookupObject(position); + else + return null; + + } + + public synchronized void putPosition(AbsolutePosition position, + java.lang.Object obj) + { + getIndirectionNode().put(position, obj); + } + + private synchronized IndirectionNode getIndirectionNode() + { + if (m_indirection_node == null) { + AbsolutePosition starting = m_starts_at.getAbsolutePosition(); + if (m_father == null) + m_indirection_node = new IndirectionNode(starting); + else + m_indirection_node = + new IndirectionNode(starting, + m_father + .getIndirectionNode() + .getTable()); + } + + return m_indirection_node; + } + + private synchronized PositionsNode getPositionsNode() + { + if (m_positions_node == null) { + m_positions_node = + new PositionsNode(m_starts_at.getAbsolutePosition()); + } + + return m_positions_node; + } + + public boolean inAnEncapsulation() + { + return (m_father != null); + } + + public boolean hasExternalIndirections() + { + return (((m_indirection_node == null) ? false + : m_indirection_node.hasExternalIndirections()) + || ((m_positions_node == null) ? false + : m_positions_node.hasExternalIndirections())); + } +} + diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/Encapsulation.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/Encapsulation.java.svn-base new file mode 100644 index 0000000..8a00ffe --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/Encapsulation.java.svn-base @@ -0,0 +1,302 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.ORB; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +/** + * Represents the content data of an encapsulation (including the byte-order). + * An Encapsulation can be read to copy the content data from an input stream. + *

+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class Encapsulation +{ + + /** + * The empty encapsulation. + */ + + private static Encapsulation st_empty = null; + + /** + * The ORB. + */ + protected TIDORB m_orb; + + /** + * GIOPVersion + */ + protected GIOPVersion m_version; + + /** + * The octet sequence data. + */ + protected byte[] m_data; + + /** + * Start Position of the encapsulation in the byte array. + */ + int m_data_offset; + + /** + * Length of the encapsulation in the byte array. + */ + int m_data_length; + + /** + * Protected Constructor. Creates an empty encapsulation. + */ + protected Encapsulation(TIDORB orb, GIOPVersion ver) + { + this.m_orb = orb; + m_version = ver; + m_data_length = 0; + m_data_offset = 0; + } + + /** + * Protected Constructor. + * + * @param orb + * The ORB. + * @param key_buffer + * The octet sequence data. + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + */ + protected Encapsulation(TIDORB orb, GIOPVersion ver, byte[] key_buffer, + int offset, int length) + { + this.m_orb = orb; + m_version = ver; + m_data = key_buffer; + m_data_offset = offset; + m_data_length = length; + } + + public TIDORB getORB() + { + return m_orb; + } + + /** + * @return the encapsulation length (in octets). + */ + public int getLength() + { + return m_data_length; + } + + /** + * @return the encapsulation start position in the octet sequence. + */ + public int getOffset() + { + return m_data_offset; + } + + /** + * @return the encapsulation octet sequence. + */ + public byte[] getOctetSequence() + { + return m_data; + } + + /** + * Compares two encapsulations. + */ + public boolean equal(Encapsulation other) + { + if (other == null) + return false; + + if (m_data_length != other.m_data_length) + return false; + + int i = m_data_offset; + int j = other.m_data_offset; + + for (int length = 0; length < m_data_length; length++) { + if (m_data[i++] != other.m_data[j++]) + return false; + } + + return true; + } + + /** + * Gets a sub-encapsulation in the octet sequence. + * + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + */ + public Encapsulation getChild(int offset, int length) + { + if ((offset >= m_data_length) + || ((m_data_length - offset - length) < 0)) + return null; + else + return new Encapsulation(m_orb, m_version, m_data, offset, length); + } + + /** + * @return the empty encapsulation. + */ + public static Encapsulation getEmpty() + { + if (st_empty == null) + st_empty = new Encapsulation(null, GIOPVersion.VERSION_1_0); + + return st_empty; + } + + /** + * Static Encapsulation Creator operation. + * + * @param orb + * The ORB. key_buffer The octet sequence data. + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + * @return a new Encapsulation. + */ + + public static Encapsulation create(TIDORB orb, + GIOPVersion ver, + byte[] key_buffer, + int offset, + int length) + { + if (length < 0) + return null; + + if (length == 0) + return getEmpty(); + + if ((key_buffer == null) || (offset < 0) + || (key_buffer.length - offset - length < 0)) + return null; + + return new Encapsulation(orb, ver, key_buffer, offset, length); + } + + /** + * @return an input stream for reading the encapsulation data. + */ + public CDRInputStream createInputStream() + { + if (m_data_length == 0) + return null; + + CDRInputStream input = new CDRInputStream(m_orb, m_data); + + if (m_data_offset > 0) { + input.skip(m_data_offset); + input.fixStarting(); + } + + input.setByteOrder(input.read_boolean()); + input.setVersion(m_version); + + return input; + } + + /** + * Writes the encapsulation data in an output stream. + * + * @param out + * the output stream. + */ + public void write(CDROutputStream out) + { + out.write_ulong(m_data_length); + + if (m_data_length > 0) + out.write_octet_array(m_data, m_data_offset, m_data_length); + } + + /** + * Reads a new encapsulation from an input stream. + * + * @param out + * the output stream. + */ + + public static Encapsulation read(CDRInputStream input, GIOPVersion ver) + { + ORB orb = input.orb(); + + Encapsulation encap = null; + if (orb instanceof TIDORB) + encap = new Encapsulation((TIDORB) orb, ver); + else + encap = new Encapsulation(null, ver); + + encap.doRead(input); + + return encap; + } + + private void doRead(CDRInputStream input) + { + m_data_length = input.read_ulong(); + + if (m_data_length > 0) { + m_data = new byte[m_data_length]; + input.read_octet_array(m_data, 0, m_data_length); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IndirectionNode.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IndirectionNode.java.svn-base new file mode 100644 index 0000000..4028764 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IndirectionNode.java.svn-base @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Hashtable; + +/** + * The Indirection class represents a node in the indirections to + * the typecodes marshaled in the actual Encapsulation. If the node is in an + * inner Encapsulation then it will references to the father encapsulation node. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IndirectionNode +{ + + private java.util.Hashtable m_table; + + /** + * Encapsulation Context. + */ + + private AbsolutePosition m_root_position; + + private AbsolutePosition m_lower_indirection; + + public IndirectionNode(AbsolutePosition start_position) + { + m_table = new Hashtable(); + m_root_position = start_position; + m_lower_indirection = m_root_position; + } + + public IndirectionNode(AbsolutePosition start_position, + java.util.Hashtable table) + { + m_table = table;// new Hashtable(); + m_root_position = start_position; + m_lower_indirection = m_root_position; + } + + /** + * Search an indirected object in the buffer + */ + public synchronized Object lookup(AbsolutePosition position) + { + + if (position.getValue() < m_lower_indirection.getValue()) { + m_lower_indirection = position; + return null; + } + + return m_table.get(position); + } + + public void put(AbsolutePosition position, java.lang.Object obj) + { + m_table.put(position, obj); + } + + public boolean hasExternalIndirections() + { + return m_lower_indirection.getValue() < m_root_position.getValue(); + } + + public java.util.Hashtable getTable() + { + return m_table; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IteratorCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IteratorCDR.java.svn-base new file mode 100644 index 0000000..01c08d0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/IteratorCDR.java.svn-base @@ -0,0 +1,483 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.CompletionStatus; + +/** + * PositionCDR class gets track of byte array covering for marshaling and + * unmarshaling. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class IteratorCDR +{ + + /** + * Byte order of data in stream: big-endian if true, or + * little-endian if false + */ + protected boolean m_byte_order; + + /** + * The buffer controled by the buffer; + */ + + BufferCDR m_buffer_cdr; + + /** + * Actual Chunk Number. + */ + protected int m_current_chunk_num; + + /** + * The chunk covered + */ + protected ChunkCDR m_chunk; + + /** + * The actual position in the chunk + */ + protected int m_position; + + /** + * It is in an encapsulation. + */ + protected boolean m_encapsulation; + + /** + * Actual stream aligment offset. + */ + + protected AlignmentOffset m_alignment_offset; + + /** + * Last alignment calculated. + */ + + protected int m_last_alignment; + + /** + * Encapsulation context list. + */ + + protected ContextCDR m_context; + + /** + * Last mark for reset + */ + protected MarkCDR m_last_reset_mark; + + /** + * Starting mark for rewind + */ + protected MarkCDR m_starting_mark; + + // Constructor + + // Forbides the illegal use of a unitialized iterator. + + private IteratorCDR() + {} + + /** + * Constructor: gets a byte array referencen an places its position to 0 + */ + public IteratorCDR(BufferCDR buffer) + { + // Iterator in the buffer with root context + // generate the root position with root context an initial pointer, + m_buffer_cdr = buffer; + m_current_chunk_num = 0; + m_position = 0; + + PointerCDR initial_pointer = new PointerCDR(m_buffer_cdr, + m_current_chunk_num, + m_position); + + m_context = new ContextCDR(initial_pointer); + + // sets the iterator state ready to start at the beginnig of buffer. + fixStarting(); + + rewind(); + } + + /** + * Gets a byte array referencen an places its to the initial position. + */ + + public IteratorCDR(ContextCDR initial_context) + { + // Initial position values: + + m_context = initial_context; + + // sets the iterator state ready to start at the beginnig of buffer. + fixStarting(); + + rewind(); + } + + /** + * Sets the iterator possition to the starting position. + */ + + public void rewind() + { + goBack(m_starting_mark); + } + + protected MarkCDR getMark() + { + return new MarkCDR(m_context, getPointer()); + } + + protected void goBack(MarkCDR mark) + { + // context values + m_context = mark.getContext(); + + m_byte_order = m_context.getByteOrder(); + m_encapsulation = m_context.inAnEncapsulation(); + m_alignment_offset = m_context.getOffset(); + m_last_alignment = CDR.OCTET_SIZE; + + // pointer values; + PointerCDR initial_pointer = mark.getPointer(); + + m_current_chunk_num = initial_pointer.getNumChunk(); + m_buffer_cdr = initial_pointer.getBuffer(); + m_position = initial_pointer.getPosition(); + + m_chunk = m_buffer_cdr.getChunk(m_current_chunk_num); + + m_last_reset_mark = null; + } + + public void reset() + throws java.io.IOException + { + // state checking + if (m_last_reset_mark == null) + throw new java.io.IOException("Stream has no been marked"); + + goBack(m_last_reset_mark); + } + + public IteratorCDR copy() + { + + IteratorCDR new_iterator = new IteratorCDR(); + + new_iterator.m_context = m_context; + new_iterator.m_byte_order = m_context.getByteOrder(); + new_iterator.m_encapsulation = m_context.inAnEncapsulation(); + new_iterator.m_alignment_offset = m_context.getOffset(); + + // marks + + new_iterator.m_starting_mark = m_starting_mark; + new_iterator.m_last_reset_mark = null; + + new_iterator.m_current_chunk_num = m_current_chunk_num; + new_iterator.m_buffer_cdr = m_buffer_cdr; + new_iterator.m_position = m_position; + + new_iterator.m_chunk = m_chunk; + + return new_iterator; + } + + /** + * Returns the buffer CDR. + */ + public BufferCDR getBuffer() + { + + return m_buffer_cdr; + } + + /** + * @return the chunk pointered. + */ + public ChunkCDR getChunk() + { + + return m_chunk; + } + + /** + * @return true if little-endian or false if + * big-endian + */ + + public boolean getByteOrder() + { + return m_byte_order; + } + + /** + * Sets the byte order. + * + * @param byte_order + * is true if little-endian or false + * if big-endian + */ + + public void setByteOrder(boolean byte_order) + { + this.m_byte_order = byte_order; + m_context.setByteOrder(byte_order); + } + + /** + * @return the remaining bytes of the current chunk. + */ + + public int available() + { + int av = m_chunk.getAvailable() - m_position; + if (av < 0) + return 0; + else + return av; + } + + /** + * @return the remaining bytes of the buffer. + */ + + public int bufferAvailable() + { + int av = available(); + int num_chunks = m_buffer_cdr.getNumAvailableChunks(); + + for (int i = num_chunks - 1; i > m_current_chunk_num; i--) + av = m_buffer_cdr.getChunk(i).getAvailable(); + + return av; + } + + /** + * @return a pointer to actual position in the buffer, + */ + + PointerCDR getPointer() + { + return new PointerCDR(m_buffer_cdr, m_current_chunk_num, m_position); + } + + public void fixStarting() + { + m_starting_mark = getMark(); + } + + public void mark() + { + m_last_reset_mark = getMark(); + } + + /** + * Changes the alignment offset for a new Encapsulation, taking the actual + * position as the 0 positon of the encapsulation. Also, saves the actual + * aligment offset that will be restored when the + * exitEncapsulation were called. + */ + + public void enterEncapsulation() + { + ContextCDR new_context; + + m_encapsulation = true; + AlignmentOffset new_alignment_offset; + + new_alignment_offset = AlignmentOffset.calculateOffsetFrom(m_position); + + new_context = new ContextCDR(getPointer(), m_context, + new_alignment_offset); + m_context = new_context; + m_alignment_offset = new_alignment_offset; + } + + public void setAlignmentOffset(int relative_position) + { + + m_alignment_offset = + AlignmentOffset.calculateOffsetFrom(relative_position); + + m_context.setOffset(m_alignment_offset); + + } + + /** + * Restores the alignment offset for the Encapsulation containing the actual + * Encapsulation that it has been exited. + */ + + public void exitEncapsulation() + { + m_context = m_context.getFather(); + + m_byte_order = m_context.getByteOrder(); + m_alignment_offset = m_context.getOffset(); + m_encapsulation = m_context.inAnEncapsulation(); + } + + /** + * Says if it is in a encapsulation or in the main stream. + * + * @return true if it is in an encapsulation or + * false otherwise + */ + public boolean inAnEncapsulation() + { + return m_encapsulation; + } + + public void nextChunk() + throws org.omg.CORBA.MARSHAL + { + m_current_chunk_num++; + + if (m_current_chunk_num >= m_buffer_cdr.getNumChunks()) + throw new org.omg.CORBA.MARSHAL("END OF BUFFER", 0, + CompletionStatus.COMPLETED_NO); + + m_chunk = m_buffer_cdr.getChunk(m_current_chunk_num); + m_position = 0; + } + + /** + * Sets the covering position. It assumes if the new position is less than + * actual, the position is in a father encapsulation, of if greater is in + * the same encapsulation. + * + * @return true if OK, or false if it is a bad + * position. + */ + + public boolean setPosition(AbsolutePosition new_position) + { + // search the context + + int n = new_position.getValue(); + while (n < m_context.getStartPointer().getAbsolutePosition().getValue()) + exitEncapsulation(); + + // sets the chunk and position + + PointerCDR pointer = m_buffer_cdr.getPointer(n); + + if (pointer != null) { + m_current_chunk_num = pointer.getNumChunk(); + m_position = pointer.getPosition(); + return true; + } + // error bad position + return false; + } + + public void skip(int n) + { + m_position += n; + } + + /** + * Calculates the aligned position for the given type size. The aligment is + * refered at the actual encapsulation beginning. + * + * @param type_size + * the data type size. + */ + protected int alignPosition(int type_size) + { + int gap, rest; + rest = (m_position + m_alignment_offset.m_value) % type_size; + gap = (rest == 0) ? 0 : (type_size - rest); + return (m_position + gap); + } + + /** + * Says if the data must be aligned. + * + * @param type_size + * the data type size + */ + + public boolean mustAlign(int type_size) + { + return (m_position != alignPosition(type_size)); + } + + /** + * Changes aligns the position for the given type size.The aligment is + * refered at the actual encapsulation beginning. + * + * @param type_size + * the data type size. + */ + + public void align(int type_size) + { + m_position = alignPosition(type_size); + } + + /** + * Says if there is enougth space in the actual chunk for writting data from + * a given size. + * + * @param type_size the data type size. + * @return true<\code> if there is enougth space or false<\code> + * otherwise. + */ + + public boolean enoughSpace(int type_size) + { + return ((m_chunk.m_buffer.length - alignPosition(type_size)) + >= type_size); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/MarkCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/MarkCDR.java.svn-base new file mode 100644 index 0000000..eb4dd55 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/MarkCDR.java.svn-base @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Mark stack used for mark and rewind methods in CDRInputStream. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class MarkCDR +{ + + public MarkCDR(ContextCDR context, PointerCDR pointer) + { + m_context = context; + m_pointer = pointer; + } + + public ContextCDR getContext() + { + return m_context; + } + + public PointerCDR getPointer() + { + return m_pointer; + } + + /** + * Initial context for rewind. + */ + + protected ContextCDR m_context; + + /** + * Poiner to a buffer position. . + */ + + protected PointerCDR m_pointer; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PointerCDR.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PointerCDR.java.svn-base new file mode 100644 index 0000000..a2f2ade --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PointerCDR.java.svn-base @@ -0,0 +1,137 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * PointerCDR class points up a buffer position for future marshaling and + * unmarshaling. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class PointerCDR +{ + /** + * Buffer pointered. + */ + private BufferCDR m_buffer; + + /** + * Chunk number of the buffer. + */ + private int m_num_chunk; + + /** + * Position in the chunk + */ + private int m_position; + + /** + * Absolute position in the buffer. + */ + private AbsolutePosition m_absolute_position; + + /** + * Constructor: creates a pointer to position of a chunk in a buffer. + */ + + public PointerCDR(BufferCDR buffer, int num_chunk, int position) + { + this.m_buffer = buffer; + this.m_num_chunk = num_chunk; + this.m_position = position; + m_absolute_position = null; + } + + public BufferCDR getBuffer() + { + return m_buffer; + } + + public int getNumChunk() + { + return m_num_chunk; + } + + public int getPosition() + { + return m_position; + } + + /** + * Calculates the absolute position of a pointer from the begining of the + * buffer. + * + * @return the absulte position from the begining of the buffer. + */ + + public AbsolutePosition getAbsolutePosition() + { + + if (m_absolute_position == null) { + + int total_position = 0; + // add all the precedent chunks sizes + for (int i = 0; i < m_num_chunk; i++) + total_position += m_buffer.getChunk(i).getLength(); + // add the actual chunk position + total_position += m_position; + m_absolute_position = + AbsolutePosition.createAbsolutePosition(total_position); + } + return m_absolute_position; + } + + /** + * calculates the hash code of the pointer for a Hashtable. The hash code is + * the absolute position in the buffer that is a unique value in the buffer. + * + * @return the hash code. + */ + + public int hashCode() + { + return getAbsolutePosition().getValue(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PositionsNode.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PositionsNode.java.svn-base new file mode 100644 index 0000000..38a75e1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/PositionsNode.java.svn-base @@ -0,0 +1,149 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Hashtable; + +/** + * The PositionNode class represents a table with the identifier + * and the position of the objects that has been marshaled in a buffer. + *

+ * The table entries are the Object identifier and the AbsolutePosition of the + * Object. + *

+ * There is a PositionNode per encapsulation, an they are linked + * to the father encausulation node throght the Encapsulation contexts. + * + *

+ * Copyright 2001 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class PositionsNode +{ + + /** + * Hashtable that contains Absolute positions of the TypeCodes. The keys are + * the repository ids. + */ + private Hashtable m_table; + + /** + * Position at the beginning of the encapsulation. + */ + private AbsolutePosition m_root_position; + + /** + * Lower Inidirected in the encapsulation sequence that has been looking up. + */ + private AbsolutePosition m_lower_indirection; + + public PositionsNode(AbsolutePosition type_code_position) + { + m_table = null; + m_root_position = type_code_position; + m_lower_indirection = m_root_position; + } + + /** + * Looks up if an Object has been yet marshaled in a stream. + * If the object has been marshaled in a father encapsulation, the it will + * remark it at the lower_indirection + * + * @param id + * the Object Id of the marshaled Object. + */ + public synchronized PointerCDR lookup(java.lang.Object obj) + { + // search in own table + if (m_table != null) + return (PointerCDR) m_table.get(obj); + + return null; + } + + /** + * notify the node that a indirection has been set thru this node + * + * @return true if the indirection pass through + */ + public synchronized void indirection(AbsolutePosition position) + { + if ((position != null) + && (position.getValue() < m_lower_indirection.getValue())) { + m_lower_indirection = position; + } + } + + /** + * Saves a TypeCode position in the table. + * + * @param id + * the Object Id of the marshaled object + * @param position + * the object position in the buffer + */ + + public synchronized void put(java.lang.Object id, PointerCDR position) + { + if (m_table == null) + m_table = new Hashtable(); + + m_table.put(id, position); + } + + /** + * Used to calculate if an marshaled TypeCode has any indirection out of the + * encapsulation. This means that a TypeCode encapsulation may or not be + * reused. + * + * @return whether or not has any indirection out of the encapsulation. + */ + public boolean hasExternalIndirections() + { + return m_lower_indirection.getValue() < m_root_position.getValue(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/TypeCodeReader.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/TypeCodeReader.java.svn-base new file mode 100644 index 0000000..ec909ec --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/TypeCodeReader.java.svn-base @@ -0,0 +1,267 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.TypeCodeCache; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeImpl; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * TypeCode Demarshaling class. Reads the typecode kind and + * creates a new typecode finishing its remarshaling. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class TypeCodeReader +{ + + /** + * Read a TypeCode from the InputStream. + * + * @param input + * the input stream + */ + public static TypeCode read(CDRInputStream input) + { + + // aligns to get the typeCode position + + input.alignment(CDR.LONG_SIZE); + + // gets the typecode position + + PointerCDR typecode_position = input.getPointer(); + + // read the tc_kind value + int kind = input.read_long(); + + if (kind == -1) // indirection + { + return readIndirection(input); + } + + // typecode kind + TCKind tc_kind = null; + + try { + tc_kind = TCKind.from_int(kind); + } + catch (BAD_PARAM bp) { + throw new BAD_TYPECODE("Invalid kind: " + bp.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + // Typecode readed + TypeCodeImpl type = null; + + if (TypeCodeFactory.isComplex(tc_kind)) { + TypeCode cached_type = findInCache(input); + + if (cached_type != null) { + input.skipEncapsulation(); + input.getContextCDR() + .putPosition(typecode_position.getAbsolutePosition(), + cached_type); + return cached_type; + } + + type = TypeCodeFactory.getComplexTypeCode(tc_kind); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + type.partialUnmarshal(input); + + // it is a complex typecode: insert the typecode in the table and + // unmarshal + + input.getContextCDR() + .putPosition(typecode_position.getAbsolutePosition(), type); + + return putInCache(input, type); + + } else if (TypeCodeFactory.isSemiComplex(tc_kind)) { + + type = TypeCodeFactory.getSemiComplexTypeCode(tc_kind); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + type.partialUnmarshal(input); + + return type; + + } else { // is basic + + type = TypeCodeFactory.getBasicTypeCode(tc_kind); + + if (type == null) + throw new org.omg.CORBA.INTERNAL("Error reading typecode"); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + return type; + } + } + + /** + * Read a TypeCode from the InputStream. + * + * @param input + * the input stream + */ + public static TypeCode readIndirection(CDRInputStream input) + { + AbsolutePosition referenced_position = input.readIndirection(); + + // search in the indirection node + + java.lang.Object obj = input.getContextCDR() + .lookupObject(referenced_position); + + if (obj != null) { + if (obj instanceof TypeCode) { + return (TypeCode) obj; + } else { + throw new MARSHAL("Invalid indirection: no typecode indirected"); + } + } + + // Visibroker makes indirections to basic types, is it one? + + CDRInputStream indirection_input = input.copy(); + + indirection_input.setPosition(referenced_position); + + TCKind tc_kind = TCKind.from_int(indirection_input.read_long()); + + TypeCodeImpl type = TypeCodeFactory.getBasicTypeCode(tc_kind); + + if (type == null) // it is not a basic typeCode: ERROR!!! + throw new MARSHAL("Invalid indirection: no typecode indirected."); + + return type; + } + + public static TypeCode findInCache(CDRInputStream input) + { + TIDORB orb = (TIDORB) input.orb(); + + if (orb == null) + return null; + + TypeCodeCache cache = orb.getTypeCodeCache(); + + if (cache != null) { + + // lectura adelantada del repository id para ver si ya está en la + // cache + + CDRInputStream encap = input.copy(); + + encap.enterEncapsulation(); + + String rep_id = encap.read_string(); + + encap = null; + + return cache.find(rep_id); + } + + return null; + } + + public static TypeCode putInCache(CDRInputStream input, TypeCode tc) + { + TIDORB orb = (TIDORB) input.orb(); + + if (orb == null) + return tc; + + TypeCodeCache cache = orb.getTypeCodeCache(); + + if (cache != null) { + return cache.put(tc); + } + return tc; + } + + public static void skip(CDRInputStream input) + { + + int kind; // typecode kind value + TCKind tc_kind; // typecode kind + TypeCodeImpl type = null; // typecode + + // read the tc_kind value + kind = input.read_long(); + + if (kind == -1) { // indirection + // skip indirection offset + input.skipLong(); + } + + try { + tc_kind = TCKind.from_int(kind); + } + catch (BAD_PARAM bp) { + throw new BAD_TYPECODE("Invalid kind: " + bp.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + TypeCodeMarshaler.skipParams(tc_kind, input); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ValueTypeInfo.java.svn-base b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ValueTypeInfo.java.svn-base new file mode 100644 index 0000000..0848e7e --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/.svn/text-base/ValueTypeInfo.java.svn-base @@ -0,0 +1,342 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.util.CodeBaseURL; +import es.tid.TIDorbj.core.util.RepositoryId; + +public class ValueTypeInfo +{ + + public final static int NULL_TAG = 0; + + /* value tags constants */ + public final static int CODE_BASE_BIT = 0x00000001; + + public final static int SINGLE_REPOSITORY_ID = 0x00000002; + + public final static int REPOSITORY_ID_LIST = 0x00000006; + + public final static int INDIRECTION_TAG = 0xffffffff; + + public final static int FRAGMENTED_BIT = 0x00000008; + + public final static int MIN_VALUE_TAG = 0x7ffff00; + + public final static int MAX_VALUE_TAG = 0x7ffffff; + + public final static int MIN_CHUNK_SIZE = 0; + + public final static int MAX_CHUNK_SIZE = 0x7ffff00; + + private CodeBaseURL m_code_base_url; + + private RepositoryId[] m_repository_ids; + + private int m_value_tag; + + private java.io.Serializable m_value; + + public ValueTypeInfo() + { + m_code_base_url = null; + m_repository_ids = null; + m_value_tag = MIN_VALUE_TAG; + m_value = null; + } + + protected ValueTypeInfo(int value_tag) + { + m_code_base_url = null; + m_repository_ids = null; + m_value_tag = value_tag; + m_value = null; + } + + public boolean isNull() + { + return m_value_tag == NULL_TAG; + } + + public boolean isIndirection() + { + return m_value_tag == INDIRECTION_TAG; + } + + public boolean isFragmented() + { + return ((!isIndirection()) + && ((m_value_tag & FRAGMENTED_BIT) == FRAGMENTED_BIT)); + } + + public boolean is_state() + { + return (m_value_tag != NULL_TAG) && (m_value_tag != INDIRECTION_TAG); + } + + public RepositoryId[] get_repository_ids() + { + return m_repository_ids; + } + + public String get_id() + { + if ((m_repository_ids == null) || (m_repository_ids.length == 0)) + return null; + return m_repository_ids[0].m_value; + } + + public boolean is_truncable(String rep_id) + { + String value_id = null; + + if (m_repository_ids != null) { + for (int i = 0; i < m_repository_ids.length; i++) { + value_id = m_repository_ids[i].m_value; + + if (rep_id.equals(value_id)) { + return true; + } + } + } + return false; + } + + public void set_repository_ids(String[] ids) + { + RepositoryId[] rep_ids = new RepositoryId[ids.length]; + + for (int i = 0; i < ids.length; i++) { + rep_ids[i] = new RepositoryId(ids[i]); + } + set_repository_ids(rep_ids); + } + + public void set_repository_ids(RepositoryId[] ids) + { + m_repository_ids = ids; + + if ((ids == null) || (ids.length == 0)) { + m_value_tag &= ~REPOSITORY_ID_LIST; + } else if (ids.length == 1) { + m_value_tag &= ~REPOSITORY_ID_LIST; + m_value_tag |= SINGLE_REPOSITORY_ID; + } else { + m_value_tag |= REPOSITORY_ID_LIST; + } + } + + public void set_value(java.io.Serializable val) + { + m_value = val; + } + + public java.io.Serializable get_value() + { + return m_value; + } + + public boolean has_code_base_url() + { + return m_code_base_url != null; + } + + public CodeBaseURL get_code_base_url() + { + return m_code_base_url; + } + + public void set_code_base_url(CodeBaseURL url) + { + m_code_base_url = url; + + if (url == null) + m_value_tag &= ~CODE_BASE_BIT; + else + m_value_tag |= CODE_BASE_BIT; + } + + public void set_fragmented(boolean value) + { + if (value) + m_value_tag |= FRAGMENTED_BIT; + else + m_value_tag &= ~FRAGMENTED_BIT; + } + + public static ValueTypeInfo read(CDRInputStream in) + { + int value = in.read_long(); + + ValueTypeInfo info = new ValueTypeInfo(value); + + info.read_info(in); + + return info; + } + + public static void write_null(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(NULL_TAG); + } + + public void write(CDROutputStream out) + { + out.write_long(m_value_tag); + write_code_base_url(out); + write_type_info(out); + } + + protected void read_info(CDRInputStream input) + { + if ((m_value_tag != INDIRECTION_TAG) && (m_value_tag != NULL_TAG)) { + read_code_base_url(input); + read_type_info(input); + } + } + + protected void read_code_base_url(CDRInputStream input) + { + if ((m_value_tag & CODE_BASE_BIT) == 0x0) + return; + + input.alignment(CDR.LONG_SIZE); + + AbsolutePosition this_url_position = input.getAbsolutePosition(); + + int code_base_tag = input.read_long(); + + if (code_base_tag == INDIRECTION_TAG) { + AbsolutePosition url_position = input.readIndirection(); + java.lang.Object obj = input.getContextCDR() + .lookupObject(url_position); + + if ((obj != null) && (obj instanceof CodeBaseURL)) + m_code_base_url = (CodeBaseURL) obj; + else + throw new MARSHAL("Invalid URL indirection"); + } else { // read code_base_url + char[] chars = new char[code_base_tag]; + input.read_char_array(chars, 0, code_base_tag); + m_code_base_url = new CodeBaseURL(new String(chars)); + input.getContextCDR().putPosition(this_url_position, + m_code_base_url); + } + } + + protected void write_code_base_url(CDROutputStream out) + { + if (m_code_base_url != null) + out.write_string(m_code_base_url.m_url); + } + + protected void read_type_info(CDRInputStream input) + { + if ((m_value_tag & REPOSITORY_ID_LIST) == REPOSITORY_ID_LIST) { + // read ids sequence + int length = input.read_long(); + + if (length < 0) + throw new MARSHAL("Invalid RepositoryId seq length < 0"); + + m_repository_ids = new RepositoryId[length]; + + for (int i = 0; i < length; i++) + m_repository_ids[i] = read_repository_id(input); + + } else if ((m_value_tag & SINGLE_REPOSITORY_ID) == SINGLE_REPOSITORY_ID) { + // int length = input.read_long(); + + // if(length != 1) + // throw new MARSHAL("Invalid RepositoryId seq length != 1"); + + m_repository_ids = new RepositoryId[1]; + + m_repository_ids[0] = read_repository_id(input); + } // else there is no type data + } + + protected RepositoryId read_repository_id(CDRInputStream input) + { + input.alignment(CDR.LONG_SIZE); + AbsolutePosition id_position = input.getAbsolutePosition(); + + int repository_id_tag = input.read_long(); + if (repository_id_tag == INDIRECTION_TAG) { + AbsolutePosition url_position = input.readIndirection(); + java.lang.Object obj = input.getContextCDR() + .lookupObject(url_position); + + if ((obj != null) && (obj instanceof RepositoryId)) + return (RepositoryId) obj; + else + throw new MARSHAL("Invalid RepositoryId indirection"); + } else { + char[] chars = new char[repository_id_tag]; + input.read_char_array(chars, 0, repository_id_tag); + RepositoryId id = + new RepositoryId(new String(chars, 0, + repository_id_tag - 1)); + input.getContextCDR().putPosition(id_position, id); + return id; + } + } + + protected void write_type_info(CDROutputStream out) + { + if (m_code_base_url != null) + out.writeReferenceableString(m_code_base_url.m_url); + + if (m_repository_ids != null) { + if ((m_value_tag & REPOSITORY_ID_LIST) == REPOSITORY_ID_LIST) { + out.write_long(m_repository_ids.length); + for (int i = 0; i < m_repository_ids.length; i++) + out.writeReferenceableString(m_repository_ids[i].m_value); + } else { // SINGLE_REPOSITORY_ID + out.writeReferenceableString(m_repository_ids[0].m_value); + } + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/AbsolutePosition.java b/source/es/tid/TIDorbj/core/cdr/AbsolutePosition.java new file mode 100644 index 0000000..2e5d762 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/AbsolutePosition.java @@ -0,0 +1,125 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents the absolute position in the CDR buffer of any data. + *

+ * @autor Juan A. Cáceres + * @version 1.0 + */ +public class AbsolutePosition +{ + + /** + * The absulute position in the buffer; + */ + + private int m_value; + + private AbsolutePosition(int position) + { + m_value = position; + } + + public static AbsolutePosition createAbsolutePosition(int position) + { + if (position < 0) + return null; + return new AbsolutePosition(position); + } + + public int getValue() + { + return m_value; + } + + public int hashCode() + { + return m_value; + } + + public boolean equals(java.lang.Object obj) + { + if (obj instanceof AbsolutePosition) + return m_value == ((AbsolutePosition) obj).m_value; + else + return false; + } + + /** + * Calculates the offset from another Absolute Position. + * + * @return the offset ( <0 if the other position is higher than the actual + * position or >0 otherwise) + */ + + public int offset(AbsolutePosition from) + { + return m_value - from.m_value; + } + + public AbsolutePosition addOffset(int offset) + { + if (m_value + offset < 0) + return null; + else + return new AbsolutePosition(m_value + offset); + } + + /** + * Alings the position for the given type size. The aligment is refered to + * the absolute position. + * + * @param type_size + * the data type size. + */ + + public void align(int type_size) + { + int gap, rest; + rest = m_value % type_size; + gap = (rest == 0) ? 0 : type_size - rest; + m_value += gap; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/AlignmentOffset.java b/source/es/tid/TIDorbj/core/cdr/AlignmentOffset.java new file mode 100644 index 0000000..7234afc --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/AlignmentOffset.java @@ -0,0 +1,93 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents an correction aligment offset from a position in the buffer of an + * encapsulation. This aligment offset is the number of positions that the + * beginning of the encapsulation needs to be aligned to the maximun data size + * (longlong) representing the 0 position. + *

+ * The offset is calculated by the factory operation + * calculateOffset: + *

+ * The offset value is defined in a range of [0..MAX_ALIGNMENT-1]. + * offset = CDR.MAX_ALIGNMENT- (actual_positon % CDR.MAX_ALIGNMENT) The Aligment + * offet requires the GIOP message size to be multiple of + * CDR.MAX_ALIGNMENT, that is, 8, for allowing fragmentation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class AlignmentOffset +{ + + /** + * The offset value. It must be [0..MAX_ALIGNMENT-1]. + */ + public int m_value; + + /** + * Private constructor. Use calculateOffsetFrom. + */ + private AlignmentOffset(int offset) + { + m_value = offset; + } + + /** + * Object Factory, that calculates the correct offset for a position. + */ + + public static AlignmentOffset calculateOffsetFrom(int position) + { + int offset = (CDR.MAX_ALIGNMENT - (position % CDR.MAX_ALIGNMENT)); + // makes the offset 0 if its the MAX_ALIGNMENT + if (offset == CDR.MAX_ALIGNMENT) + offset = 0; + + return new AlignmentOffset(offset); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/BufferCDR.java b/source/es/tid/TIDorbj/core/cdr/BufferCDR.java new file mode 100644 index 0000000..23ef075 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/BufferCDR.java @@ -0,0 +1,290 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Vector; + +/** + * represents a marshaled octet IIOP stream thad can be splitted in chunks. + *

+ * This buffer will exentialy used for store chunks received from a conection + * for reading data. Also, the buffer can be used for marshal a octet stream. In + * this case, the buffer can be monochunk or multichunk an growable or not. + *

+ * The buffer can be transformed in a String or byte array for storing IIOP + * data. The String and byte array formats allows regenerate the buffer. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class BufferCDR +{ + + /** + * Header size in the array format. + */ + final static int ARRAY_HEADER_SIZE = 5; + + /** + * Header size in the string format. + */ + public final static int STRING_HEADER_SIZE = 14; + + /** + * Vector that contains the buffer chunks. + */ + protected Vector m_chunks; + + /** + * The size of the new chunks. + */ + + protected int m_chunk_size; + + /** + * Creates a new empty buffer monochunk for marshaling. + */ + + public BufferCDR(int block_size) + { + m_chunks = new Vector(); + m_chunk_size = block_size; + addChunk(new ChunkCDR(m_chunk_size)); + } + + /** + * Creates a buffer monochunk with the array. + */ + + public BufferCDR(byte[] buffer) + { + m_chunks = new Vector(); + m_chunk_size = buffer.length; + addChunk(new ChunkCDR(buffer)); + } + + /** + * Creates a buffer monochunk with the chunk. + */ + + public BufferCDR(ChunkCDR chunk) + { + m_chunks = new Vector(); + m_chunk_size = chunk.m_buffer.length; + addChunk(chunk); + } + + /** + * Returns the number of chunks. + */ + public int getNumChunks() + { + return m_chunks.size(); + } + + /** + * @return true if it has an unique chunk, false + * otherwise. + */ + public boolean isMonoChunk() + { + return (m_chunks.size() == 1); + } + + /** + * @return the chunk associated to de index, or null if not + * exits. + */ + public ChunkCDR getChunk(int index) + { + if (index < m_chunks.size()) + return (ChunkCDR) m_chunks.elementAt(index); + else + return null; + } + + /** + * Prepare the buffer to be reused. + */ + public void recycle() + { + int num_chunks = getNumChunks(); + for (int i = 0; i < num_chunks; i++) + ((ChunkCDR) m_chunks.elementAt(i)).recycle(); + } + + /** + * Insert a new chunk in the buffer. + */ + public boolean addChunk(ChunkCDR chunk) + { + m_chunks.addElement(chunk); + return true; + } + + /** + * Insert a new chunk in the buffer at a position less than the buffer size. + */ + public boolean insertChunk(ChunkCDR chunk, int at) + { + if (at >= m_chunks.size()) + return false; + m_chunks.insertElementAt(chunk, at); + return true; + } + + /** + * Creates and inserts a new chunk ant the end of the buffer. + * + * @return true if OK or false on error; + */ + + public boolean grow() + { + if (m_chunk_size > 0) { + addChunk(new ChunkCDR(m_chunk_size)); + return true; + } else + return false; + } + + public boolean grow_1_0() + { + if (m_chunk_size > 0) { + + if (m_chunks.size() != 1) + return false; + ChunkCDR chunk = getChunk(0); + + byte[] aux_buffer = new byte[chunk.m_buffer.length + m_chunk_size]; + + System.arraycopy(aux_buffer, 0, chunk.m_buffer, 0, + chunk.m_buffer.length); + + chunk.setBuffer(aux_buffer); + + return true; + + } else + return false; + } + + public PointerCDR getPointer(int position) + { + //pre: position < available + + int num_chunk = 0; + int chunk_available = 0; + int available = 0; + while (num_chunk < m_chunks.size()) { + chunk_available = getChunk(num_chunk).getAvailable(); + if (position <= chunk_available + available - 1) + break; // this is the position + available += chunk_available; + num_chunk++; + } + + if (num_chunk >= m_chunks.size()) + return null; + + return new PointerCDR(this, num_chunk, position - available); + } + + public int getAvailable() + { + int available = 0; + int num_chunks = m_chunks.size(); + for (int i = 0; i < num_chunks; i++) + available += getChunk(i).getAvailable(); + + return available; + } + + public int getNumAvailableChunks() + { + int available = 0; + int num_chunks = m_chunks.size(); + for (int i = 0; i < num_chunks; i++) { + if (getChunk(i).getAvailable() > 0) + available++; + else + break; + } + + return available; + } + + /** + * Compares the data of two BufferCDR + * + * @return true if the data contained is equal. + */ + public boolean equal(BufferCDR buff) + { + int available = getAvailable(); + if (available != buff.getAvailable()) + return false; + int num_chunks = getNumAvailableChunks(); + + if (num_chunks != buff.getNumAvailableChunks()) + return false; + + for (int i = 0; i < num_chunks; i++) + if (getChunk(i).getAvailable() != buff.getChunk(i).getAvailable()) + return false; + + byte[] buffer_a, buffer_b; + for (int i = 0; i < num_chunks; i++) { + buffer_a = getChunk(i).getBuffer(); + buffer_b = buff.getChunk(i).getBuffer(); + int size = getChunk(i).getAvailable(); + for (int j = 0; j < size; j++) + if (buffer_a[j] != buffer_b[j]) + return false; + } + + return true; + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/CDR.java b/source/es/tid/TIDorbj/core/cdr/CDR.java new file mode 100644 index 0000000..d8d679d --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/CDR.java @@ -0,0 +1,151 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Collection of Basic Data type representation sizes in CDR. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDR +{ + + public final static int MAX_ALIGNMENT = 8; + + public final static int OCTET_SIZE = 1; + + public final static int BOOLEAN_SIZE = 1; + + public final static int CHAR_SIZE = 1; + + public final static int WCHAR_SIZE = 2; + + public final static int SHORT_SIZE = 2; + + public final static int USHORT_SIZE = 2; + + public final static int LONG_SIZE = 4; + + public final static int ULONG_SIZE = 4; + + public final static int FLOAT_SIZE = 4; + + public final static int LONGLONG_SIZE = 8; + + public final static int ULONGLONG_SIZE = 8; + + public final static int DOUBLE_SIZE = 8; + + //NOT IMPLEMENTED: + //public final static int LONG_DOUBLE_SIZE = 16; + + public final static boolean BIG_ENDIAN = false; + + public final static boolean LITTLE_ENDIAN = true; + + public final static boolean LOCAL_BYTE_ORDER = BIG_ENDIAN; + + /** + * Helper array to convert bytes to chars: the char is a component of the + * array, indexed by the byte value. + */ + public static final int[] CHAR_MAP = { 256 - 128, 256 - 127, 256 - 126, + 256 - 125, 256 - 124, 256 - 123, + 256 - 122, 256 - 121, 256 - 120, + 256 - 119, 256 - 118, 256 - 117, + 256 - 116, 256 - 115, 256 - 114, + 256 - 113, 256 - 112, 256 - 111, + 256 - 110, 256 - 109, 256 - 108, + 256 - 107, 256 - 106, 256 - 105, + 256 - 104, 256 - 103, 256 - 102, + 256 - 101, 256 - 100, 256 - 99, + 256 - 98, 256 - 97, 256 - 96, + 256 - 95, 256 - 94, 256 - 93, + 256 - 92, 256 - 91, 256 - 90, + 256 - 89, 256 - 88, 256 - 87, + 256 - 86, 256 - 85, 256 - 84, + 256 - 83, 256 - 82, 256 - 81, + 256 - 80, 256 - 79, 256 - 78, + 256 - 77, 256 - 76, 256 - 75, + 256 - 74, 256 - 73, 256 - 72, + 256 - 71, 256 - 70, 256 - 69, + 256 - 68, 256 - 67, 256 - 66, + 256 - 65, 256 - 64, 256 - 63, + 256 - 62, 256 - 61, 256 - 60, + 256 - 59, 256 - 58, 256 - 57, + 256 - 56, 256 - 55, 256 - 54, + 256 - 53, 256 - 52, 256 - 51, + 256 - 50, 256 - 49, 256 - 48, + 256 - 47, 256 - 46, 256 - 45, + 256 - 44, 256 - 43, 256 - 42, + 256 - 41, 256 - 40, 256 - 39, + 256 - 38, 256 - 37, 256 - 36, + 256 - 35, 256 - 34, 256 - 33, + 256 - 32, 256 - 31, 256 - 30, + 256 - 29, 256 - 28, 256 - 27, + 256 - 26, 256 - 25, 256 - 24, + 256 - 23, 256 - 22, 256 - 21, + 256 - 20, 256 - 19, 256 - 18, + 256 - 17, 256 - 16, 256 - 15, + 256 - 14, 256 - 13, 256 - 12, + 256 - 11, 256 - 10, 256 - 9, 256 - 8, + 256 - 7, 256 - 6, 256 - 5, 256 - 4, + 256 - 3, 256 - 2, 256 - 1, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127 }; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/CDRInputStream.java b/source/es/tid/TIDorbj/core/cdr/CDRInputStream.java new file mode 100644 index 0000000..4d81019 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/CDRInputStream.java @@ -0,0 +1,2324 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.ValueFactory; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; +import es.tid.TIDorbj.core.util.FixedHolder; + +/** + * Portable InputStream for demarshalling. + *

+ * A CDRInputStream has an buffer iterator + * CDRIterator. The iterator maintains the data position and + * correct aligment, and TypeCode marshaling information. + * + * @see es.tid.TIDorbj.core.cdr.CDROutputStream + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDRInputStream extends org.omg.CORBA_2_3.portable.InputStream + implements org.omg.CORBA.DataInputStream +{ + + /** + * ORB instance that created the input stream. + */ + + TIDORB m_orb; + + /** + * GIOPVersion used. + */ + + GIOPVersion m_version; + + /** + * The buffer is a GIOP message. A GIOP Message implies that the GIOP Header + * space will be reserved in the BufferCDR, that is, each ChunkCDR will have + * the header size bytes allocated. + */ + + boolean m_is_message; + + /** + * Buffer iterator. + */ + + protected IteratorCDR m_iterator; + + /** + * Current chunk buffer. + */ + + protected byte[] m_chunk_buffer; + + /** + * Data buffer for Broken data splitted in to chunks in an encapsulations + */ + + protected byte[] m_data_buffer = null; + + protected static javax.rmi.CORBA.ValueHandler st_value_handler = null; + + + public CDRInputStream(TIDORB orb, byte[] buffer) + { + this(orb, new IteratorCDR(new BufferCDR(buffer))); + } + + public CDRInputStream(TIDORB orb, BufferCDR buffer) + { + this(orb, new IteratorCDR(buffer)); + } + + protected CDRInputStream(TIDORB orb, IteratorCDR iterator) { + this.m_orb = orb; + + if ( orb != null ){ + this.m_version = GIOPVersion.fromString ( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + } else { + this.m_version = GIOPVersion.fromString( + IIOPCommunicationLayerPropertiesInfo.DEFAULT_GIOP_VERSION + ); + } + + this.m_is_message = false; + this.m_iterator = iterator; + + m_chunk_buffer = iterator.m_chunk.m_buffer; + m_data_buffer = new byte[CDR.LONGLONG_SIZE]; + } + + // DataInputStream + static String[] st_data_input_ids = + { "IDL:omg.org/CORBA/DataInputStream:1.0" }; + + public String[] _truncatable_ids() + { + return st_data_input_ids; + } + + /** + * @return the GIOP version used to marshal. + */ + public GIOPVersion getVersion() + { + return m_version; + } + + /** + * Sets the GIOP version used to marshal. + */ + public void setVersion(GIOPVersion ver) + { + m_version = ver; + } + + /** + * @return true if the stream is a GIOP message. + */ + public boolean isMessage() + { + return m_is_message; + } + + /** + * Sets if the stream is a GIOP message. + */ + public void setMessage(boolean is) + { + m_is_message = is; + + if ((is) && (m_iterator.m_current_chunk_num == 0) + && (m_iterator.m_position == 0)) + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + } + + public org.omg.CORBA.ORB orb() + { + if (m_orb != null) + return m_orb; + else + return es.tid.TIDorbj.core.TIDORB.init(); + } + + /** + * Sets the stream byte order. + * + * @param byte_order + * if true little-endian, else big-endian + */ + public void setByteOrder(boolean byte_order) + { + m_iterator.setByteOrder(byte_order); + } + + /** + * @return the stream byte order, if true little-endian, else + * big-endian + */ + public boolean getByteOrder() + { + return m_iterator.getByteOrder(); + } + + /** + * @return the stream buffer + */ + public BufferCDR getBuffer() + { + return m_iterator.getBuffer(); + } + + /** + * @return the Encapsulation Context + */ + public ContextCDR getContextCDR() + { + return m_iterator.m_context; + } + + /** + * Creates a new Encapsulation Context with it own aligment an indirections. + */ + public void enterEncapsulation() + { + skipUlong(); // skip encapsulation size + // sets the real encapsulation start point + alignment(CDR.OCTET_SIZE); + m_iterator.enterEncapsulation(); + //sets the byte order + m_iterator.setByteOrder(read_boolean()); + } + + /** + * Close the Encapsulation Context, and restore the father Context. + * + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + public void exitEncapsulation() + { + m_iterator.exitEncapsulation(); + } + + /** + * Extract from the buffer an encapsulation, creating a new bufferCDR + * containing the octect sequence. + * + * @return a new CDRInputStream for reading the encapsulation. + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + public Encapsulation readEncapsulation() + { + return Encapsulation.read(this, m_version); + } + + public void skipEncapsulation() + { + int encapsulation_size = read_ulong(); + skipOctetArray(encapsulation_size); + } + + /** + * Sets the aligment offset in the current Context. + * + * @param pos + * the new offset + * @see es.tid.TIDorbj.core.cdr.AligmentOffset + */ + public void set_alignment_offset(int pos) + { + m_iterator.setAlignmentOffset(pos); + } + + /** + * @return the absolute value in the buffer order of the current position. + */ + public AbsolutePosition getAbsolutePosition() + { + return m_iterator.getPointer().getAbsolutePosition(); + } + + /** + * @return the current position in the buffer. + */ + + public PointerCDR getPointer() + { + return m_iterator.getPointer(); + } + + /** + * Jumps to the absolute position. + * + * @pram position the new position + */ + public void setPosition(AbsolutePosition position) + { + m_iterator.setPosition(position); + } + + /** + * @return a new inputstream pointing the same position. + */ + public CDRInputStream copy() + { + CDRInputStream stream = new CDRInputStream(m_orb, m_iterator.copy()); + stream.setMessage(m_is_message); + stream.setVersion(m_version); + return stream; + } + + public boolean read_boolean() + { + alignment(CDR.BOOLEAN_SIZE); + return ((m_chunk_buffer[m_iterator.m_position++] == 0) ? false : true); + } + + public void skipBoolean() + { + alignment(CDR.BOOLEAN_SIZE); + m_iterator.m_position++; + } + + public char read_char() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + alignment(CDR.CHAR_SIZE); + return (char) (0xff & m_chunk_buffer[m_iterator.m_position++]); + } + + public void skipChar() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + alignment(CDR.CHAR_SIZE); + m_iterator.m_position++; + } + + public char read_wchar() + { + + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + if (m_iterator.m_byte_order) + return (char) ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (char) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.WCHAR_SIZE); + if (m_iterator.m_byte_order) { + return (char) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (char) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipWchar() + { + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + m_iterator.m_position += CDR.WCHAR_SIZE; + } else { + skip(CDR.WCHAR_SIZE); + } + } + + public byte read_octet() + { + alignment(CDR.OCTET_SIZE); + return m_chunk_buffer[m_iterator.m_position++]; + } + + public void skipOctet() + { + alignment(CDR.OCTET_SIZE); + m_iterator.m_position++; + } + + public short read_short() + { + if (alignment(CDR.SHORT_SIZE)) { + if (m_iterator.m_byte_order) + return (short) + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (short) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.SHORT_SIZE); + if (m_iterator.m_byte_order) { + return (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipShort() + { + if (alignment(CDR.SHORT_SIZE)) { + m_iterator.m_position += CDR.SHORT_SIZE; + } else { + skip(CDR.SHORT_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" short = ushort values will be handled by the + * user + */ + public short read_ushort() + { + if (alignment(CDR.SHORT_SIZE)) { + if (m_iterator.m_byte_order) + return (short) ((m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8)); + else + return (short) + (((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff)); + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.USHORT_SIZE); + if (m_iterator.m_byte_order) { + return (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + return (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + } + } + + public void skipUshort() + { + if (alignment(CDR.USHORT_SIZE)) { + m_iterator.m_position += CDR.USHORT_SIZE; + } else { + skip(CDR.USHORT_SIZE); + } + } + + public int read_long() + { + if (alignment(CDR.LONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + (m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24); + } else { + return + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.LONG_SIZE); + if (m_iterator.m_byte_order) { + return (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + return ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + } + } + + public void skipLong() + { + if (alignment(CDR.LONG_SIZE)) { + m_iterator.m_position += CDR.LONG_SIZE; + } else { + skip(CDR.LONG_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" int = positive ulong values will be handled by + * the user + */ + public int read_ulong() + { + if (alignment(CDR.ULONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + (m_chunk_buffer[m_iterator.m_position++] & 0xff) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24); + } else { + return + ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 24) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 16) + | ((m_chunk_buffer[m_iterator.m_position++] & 0xff) << 8) + | (m_chunk_buffer[m_iterator.m_position++] & 0xff); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.ULONG_SIZE); + if (m_iterator.m_byte_order) { + return (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + return ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + } + } + + public void skipUlong() + { + if (alignment(CDR.ULONG_SIZE)) { + m_iterator.m_position += CDR.ULONG_SIZE; + } else { + skip(CDR.ULONG_SIZE); + } + } + + public long read_longlong() + { + if (alignment(CDR.LONGLONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 8) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 56); + + } else { + return + (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.LONGLONG_SIZE); + if (m_iterator.m_byte_order) { + return ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + return (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + } + } + + public void skip_longlong() + { + if (alignment(CDR.LONGLONG_SIZE)) { + m_iterator.m_position += CDR.LONGLONG_SIZE; + } else { + skip(CDR.LONGLONG_SIZE); + } + } + + /** + * JAVA MAPPING: "negative" longlong = positive ulonglong values will be + * handled by the user + */ + public long read_ulonglong() + { + if (alignment(CDR.ULONGLONG_SIZE)) { + if (m_iterator.m_byte_order) { + return + ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 8) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL)<< 56); + + } else { + return + (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[m_iterator.m_position++] & 0xffL); + } + } else { + readOctetArrayAux(m_data_buffer, 0, CDR.ULONGLONG_SIZE); + if (m_iterator.m_byte_order) { + return ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + return (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + } + } + + public void skipUlonglong() + { + if (alignment(CDR.ULONGLONG_SIZE)) { + m_iterator.m_position += CDR.ULONGLONG_SIZE; + } else { + skip(CDR.ULONGLONG_SIZE); + } + } + + public float read_float() + { + return java.lang.Float.intBitsToFloat(read_long()); + } + + public void skipFloat() + { + skipLong(); + } + + public double read_double() + { + return java.lang.Double.longBitsToDouble(read_longlong()); + } + + public void skipDouble() + { + skip_longlong(); + } + + public String read_string() + { + // read the string length, including the end of string '\0' character + int length = read_ulong(); + + if (length <= 0) + throw new MARSHAL("read_string: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + if (length == 1) { + skipChar(); //skip the null character + return ""; + } else { + char[] array = new char[length]; + readCharArrayAux(array, 0, length); + //skip the null character + return new String(array, 0, length - 1); + } + } + + public void skipString() + { + // read the string length, including the end of string '\0' character + int length = read_ulong(); + + if (length <= 0) + throw new MARSHAL("skip_string: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + skip(length); + } + + public String read_wstring() + { + // read the string length, in wstring there is a null '\0' character at + // the end + + int length = read_ulong(); + + // the length is the number of bytes in the wide-string + int real_length = 0; + + if (m_version == GIOPVersion.VERSION_1_2) { + real_length = (length / CDR.WCHAR_SIZE) - 1; + + } else if(m_version == GIOPVersion.VERSION_1_1) { + real_length = length - 1; + } else { + throw new MARSHAL("GIOP 1.0 does not supports wstring", + 6, + CompletionStatus.COMPLETED_NO); + } + + if (real_length < 0) + throw new MARSHAL( + "read_wstring: invalid string length: " + length, + 0, CompletionStatus.COMPLETED_NO); + + if (real_length == 0) { + skipWchar(); + return ""; + } else { + char[] array = new char[real_length]; + read_wchar_array(array, 0, real_length); + skipWchar(); // skiping the '\0' + return new String(array, 0, real_length); + } + } + + public void skipWstring() + { + // read the string length, in bytes, not including the end of string + // '\0' character + int length = read_ulong(); + skipOctetArray(length); + } + + public void read_boolean_array(boolean[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null boolean array reference.", 0, + CompletionStatus.COMPLETED_NO); + + int booleans_can_read = 0; + + // número de octetos que quedan por leer en el chunk actual + + int remain_booleans = length; + + int position = 0; + int stop_at = 0; + + while (remain_booleans > 0) { + + position = m_iterator.m_position; + + booleans_can_read = java.lang.Math.min(remain_booleans, + m_iterator.available()); + + stop_at = position + booleans_can_read; + + while (position < stop_at) { + value[offset++] = (m_chunk_buffer[position++] == 0) ? false + : true; + } + + m_iterator.m_position = stop_at; + remain_booleans -= booleans_can_read; + + if (remain_booleans > 0) { + getNextChunk(); + } + } + } + + public void skipBooleanArray(int length) + { + skip(length); + } + + public void read_char_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + readCharArrayAux(value, offset, length); + } + + public void readCharArrayAux(char[] value, int offset, int length) + { + int chars_can_read = 0; + int remain_chars = length; + int position = 0; + int stop_at = 0; + + while (remain_chars > 0) { + // calculates how many bytes the actual chunk has got. + chars_can_read = java.lang.Math.min(remain_chars, + m_iterator.available()); + + position = m_iterator.m_position; + + stop_at = position + chars_can_read; + + while (position < stop_at) + value[offset++] = (char) (m_chunk_buffer[position++] & 0xff); + + m_iterator.m_position = position; + remain_chars -= chars_can_read; + + if (remain_chars > 0) + getNextChunk(); + } + } + + public void skipCharArray(int length) + { + skip(length); + } + + public void read_wchar_array(char[] value, int offset, int length) + { + + if (value == null) + throw new BAD_PARAM("Null wchar array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos wchar que se pueden leer enteros + int wchars_can_read = 0; + + int position = 0; + + // numero de wchars que quedan + int remain_wchars = length; + + while (remain_wchars > 0) { + + if (!alignment(CDR.WCHAR_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.WCHAR_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (char) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + value[offset++] = (char) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + + remain_wchars--; + + } else { + position = m_iterator.m_position; + + wchars_can_read = java.lang.Math + .min( + remain_wchars, + m_iterator.available() + / CDR.WCHAR_SIZE); + + for (int i = wchars_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (char) ((m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8)); + else + value[offset++] = + (char) (((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_wchars -= wchars_can_read; + m_iterator.m_position = position; + + if (remain_wchars > 0) { + getNextChunk(); + } + } + } + } + + public void skipWcharArray(int length) + { + if (length > 0) { + alignment(CDR.WCHAR_SIZE); + skip(length * CDR.WCHAR_SIZE); + } + } + + public void read_octet_array(byte[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + readOctetArrayAux(value, offset, length); + } + + public void readOctetArrayAux(byte[] value, int offset, int length) + { + int to_read, how_many = length; + + while (how_many > 0) { + + // calculates how many bytes the actual chunk has got. + to_read = java.lang.Math.min(how_many, m_iterator.available()); + + System.arraycopy(m_chunk_buffer, m_iterator.m_position, value, + offset, to_read); + + offset += to_read; + m_iterator.m_position += to_read; + how_many -= to_read; + + if (how_many > 0) + getNextChunk(); + + } + } + + public void skipOctetArray(int length) + { + skip(length); + } + + public void read_short_array(short[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null short array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos short que se pueden leer enteros + int shorts_can_read = 0; + + int position = 0; + + // numero de shorts que quedan + int remain_shorts = length; + + while (remain_shorts > 0) { + + if (!alignment(CDR.SHORT_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.SHORT_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (short) ((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8)); + } else { + value[offset++] = (short) (((m_data_buffer[0] & 0xff) << 8) + | (m_data_buffer[1] & 0xff)); + } + + remain_shorts--; + + } else { + position = m_iterator.m_position; + + shorts_can_read = + java.lang.Math.min(remain_shorts, + m_iterator.available() + / CDR.SHORT_SIZE); + + for (int i = shorts_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (short) ((m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8)); + else + value[offset++] = + (short) (((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_shorts -= shorts_can_read; + m_iterator.m_position = position; + + if (remain_shorts > 0) { + getNextChunk(); + } + } + } + } + + public void skipShortArray(int length) + { + skipArray(length, CDR.SHORT_SIZE); + } + + public void read_ushort_array(short[] value, int offset, int length) + { + read_short_array(value, offset, length); + } + + public void skipUshortArray(int length) + { + skipArray(length, CDR.USHORT_SIZE); + } + + public void read_long_array(int[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos int que se pueden leer enteros + int ints_can_read = 0; + + int position = 0; + + // numero de ints que quedan + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.LONG_SIZE)) {// encapsulación, el dato no cabe + // completo + + readOctetArrayAux(m_data_buffer, 0, CDR.LONG_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = (m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24); + } else { + value[offset++] = ((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff); + } + + remain_ints--; + + } else { + position = m_iterator.m_position; + + ints_can_read = java.lang.Math + .min( + remain_ints, + m_iterator.available() + / CDR.LONG_SIZE); + + for (int i = ints_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + (m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 24); + else + value[offset++] = + ((m_chunk_buffer[position++] & 0xff) << 24) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff); + } + + remain_ints -= ints_can_read; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } + } + } + } + + public void skipLongArray(int length) + { + skipArray(length, CDR.LONG_SIZE); + } + + public void read_ulong_array(int[] value, int offset, int length) + { + read_long_array(value, offset, length); + } + + public void skipUlongArray(int length) + { + skipArray(length, CDR.ULONG_SIZE); + } + + public void read_longlong_array(long[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos long que se pueden leer enteros + int longs_can_read = 0; + + int position = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.LONGLONG_SIZE)) { // encapsulación, el dato no + // cabe completo + readOctetArrayAux(m_data_buffer, 0, CDR.LONGLONG_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56); + } else { + value[offset++] = + (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL); + } + + remain_longs--; + + } else { + position = m_iterator.m_position; + + longs_can_read = java.lang.Math + .min( + remain_longs, + m_iterator.available() + / CDR.LONGLONG_SIZE); + + for (int i = longs_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + ((long) m_chunk_buffer[position++] & 0xffL) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 56); + else + value[offset++] = + (((long) m_chunk_buffer[position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | ((long) m_chunk_buffer[position++] & 0xffL); + } + + remain_longs -= longs_can_read; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } + } + } + } + + public void skipLonglongArray(int length) + { + skipArray(length, CDR.LONGLONG_SIZE); + } + + public void read_ulonglong_array(long[] value, int offset, int length) + { + read_longlong_array(value, offset, length); + } + + // DataInputStream + public void read_ulonglong_array(org.omg.CORBA.ULongLongSeqHolder seq, + int offset, int length) + { + read_ulonglong_array(seq.value, offset, length); + } + + public void skipUlonglongArray(int length) + { + skipArray(length, CDR.ULONGLONG_SIZE); + } + + public void read_float_array(float[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos int que se pueden leer enteros + int ints_can_read = 0; + + int position = 0; + + // numero de ints que quedan + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.FLOAT_SIZE)) { // encapsulación, el dato no cabe + // completo + readOctetArrayAux(m_data_buffer, 0, CDR.FLOAT_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + Float.intBitsToFloat((m_data_buffer[0] & 0xff) + | ((m_data_buffer[1] & 0xff) << 8) + | ((m_data_buffer[2] & 0xff) << 16) + | ((m_data_buffer[3] & 0xff) << 24)); + } else { + value[offset++] = + Float.intBitsToFloat(((m_data_buffer[0] & 0xff) << 24) + | ((m_data_buffer[1] & 0xff) << 16) + | ((m_data_buffer[2] & 0xff) << 8) + | (m_data_buffer[3] & 0xff)); + } + + remain_ints--; + + } else { + position = m_iterator.m_position; + + ints_can_read = java.lang.Math + .min( + remain_ints, + m_iterator.available() + / CDR.FLOAT_SIZE); + + for (int i = ints_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + Float.intBitsToFloat( + (m_chunk_buffer[position++] & 0xff) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 24)); + else + value[offset++] = + Float.intBitsToFloat( + ((m_chunk_buffer[position++] & 0xff) << 24) + | ((m_chunk_buffer[position++] & 0xff) << 16) + | ((m_chunk_buffer[position++] & 0xff) << 8) + | (m_chunk_buffer[position++] & 0xff)); + } + + remain_ints -= ints_can_read; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } + } + } + } + + public void skipFloatArray(int length) + { + skipArray(length, CDR.FLOAT_SIZE); + } + + public void read_double_array(double[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de datos long que se pueden leer enteros + int longs_can_read = 0; + + int position = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.DOUBLE_SIZE)) { // encapsulación, el dato no cabe + // completo + + readOctetArrayAux(m_data_buffer, 0, CDR.DOUBLE_SIZE); + + if (m_iterator.m_byte_order) { + value[offset++] = + Double.longBitsToDouble( + ((long) m_data_buffer[0] & 0xffL) + | (((long) m_data_buffer[1] & 0xffL) << 8) + | (((long) m_data_buffer[2] & 0xffL) << 16) + | (((long) m_data_buffer[3] & 0xffL) << 24) + | (((long) m_data_buffer[4] & 0xffL) << 32) + | (((long) m_data_buffer[5] & 0xffL) << 40) + | (((long) m_data_buffer[6] & 0xffL) << 48) + | (((long) m_data_buffer[7] & 0xffL) << 56)); + } else { + value[offset++] = + Double.longBitsToDouble( + (((long) m_data_buffer[0] & 0xffL) << 56) + | (((long) m_data_buffer[1] & 0xffL) << 48) + | (((long) m_data_buffer[2] & 0xffL) << 40) + | (((long) m_data_buffer[3] & 0xffL) << 32) + | (((long) m_data_buffer[4] & 0xffL) << 24) + | (((long) m_data_buffer[5] & 0xffL) << 16) + | (((long) m_data_buffer[6] & 0xffL) << 8) + | ((long) m_data_buffer[7] & 0xffL)); + } + + remain_longs--; + + } else { + position = m_iterator.m_position; + + longs_can_read = + java.lang.Math.min(remain_longs, + m_iterator.available() + / CDR.LONGLONG_SIZE); + + for (int i = longs_can_read; i > 0; i--) { + if (m_iterator.m_byte_order) + value[offset++] = + Double.longBitsToDouble( + ((long) m_chunk_buffer[position++] & 0xffL) + | (((long) m_chunk_buffer[position++] & 0xffL) << 8) + | (((long) m_chunk_buffer[position++] & 0xffL) << 16) + | (((long) m_chunk_buffer[position++] & 0xffL) << 24) + | (((long) m_chunk_buffer[position++] & 0xffL) << 32) + | (((long) m_chunk_buffer[position++] & 0xffL) << 40) + | (((long) m_chunk_buffer[position++] & 0xffL) << 48) + | (((long) m_chunk_buffer[position++] & 0xffL) << 56)); + else + value[offset++] = + Double.longBitsToDouble( + (((long) m_chunk_buffer[position++] & 0xffL) << 56) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 48) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 40) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 32) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 24) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 16) + | (((long) m_chunk_buffer[position++] & 0xffL)<< 8) + | ((long) m_chunk_buffer[position++] & 0xffL)); + } + + remain_longs -= longs_can_read; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } + } + } + } + + public void skipDoubleArray(int length) + { + skipArray(length, CDR.DOUBLE_SIZE); + } + + public org.omg.CORBA.Object read_Object() + { + IOR ior = new DefaultIOR(); + ior.read( this ); + + if (ior.memberCount() == 0) // null reference + return null; + else + return ObjectImpl.fromIOR(m_orb, ior); + } + + public org.omg.CORBA.Object read_Object(java.lang.Class clz) + { + java.lang.Object stub = null; + + try { + stub = clz.newInstance(); + } + catch (InstantiationException ie) { + throw new org.omg.CORBA.BAD_PARAM("Can not instantiate class" + + clz.getName()); + } + catch (IllegalAccessException iae) { + throw new org.omg.CORBA.BAD_PARAM("Can not instantiate class: " + + iae.toString()); + } + + if ((stub != null) + && (stub instanceof org.omg.CORBA.portable.ObjectImpl)) { + org.omg.CORBA.portable.ObjectImpl obj_impl = + (org.omg.CORBA.portable.ObjectImpl) read_Object(); + org.omg.CORBA.portable.ObjectImpl stub_ref = + (org.omg.CORBA.portable.ObjectImpl) stub; + stub_ref._set_delegate(obj_impl._get_delegate()); + return stub_ref; + + } + throw new BAD_PARAM("Invalid Reference Class:" + + " it does not implements org.omg.CORBA.portable.ObjectImpl"); + } + + public void skipObject() + { + IOR.skip(this); + } + + public org.omg.CORBA.TypeCode read_TypeCode() + { + return TypeCodeReader.read(this); + } + + public void skipTypeCode() + { + read_TypeCode(); + //TypeCodeReader.skip(this); + } + + public org.omg.CORBA.Any read_any() + { + TypeCode type = read_TypeCode(); + + AnyImpl any = new AnyImpl(m_orb); + any.type(type); + any.read_value(this, type); + return any; + } + + public void skipAny() + { + TypeCode type = read_TypeCode(); + TypeCodeMarshaler.skipValue(type, this); + } + + public void read_any_array(org.omg.CORBA.Any[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + value[i] = read_any(); + } + + public org.omg.CORBA.Context read_Context() + { + return ContextImpl.read(this); + } + + public void skipContext() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + public org.omg.CORBA.Principal read_Principal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + + } + + public void skipPrincipal() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.math.BigDecimal read_fixed() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void skipFixed() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void skip_fixed(short digits, short scale) + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + TypeCodeMarshaler.skipValue(fixed_type, this); + } + + public org.omg.CORBA.Any read_fixed(short digits, short scale) + throws org.omg.CORBA.BadFixedValue + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + FixedHolder holder = new FixedHolder(fixed_type); + holder._read(this); + AnyImpl any = (AnyImpl) m_orb.create_any(); + any.insert_Streamable(holder); + return any; + } + + public void skip_fixed_array(int length, short digits, short scale) + { + TypeCode fixed_type = m_orb.create_fixed_tc(digits, scale); + + for (int i = 0; i < length; i++) + TypeCodeMarshaler.skipValue(fixed_type, this); + + } + + public void read_fixed_array(org.omg.CORBA.AnySeqHolder seq, int offset, + int length, short digits, short scale) + throws org.omg.CORBA.BadFixedValue + { + if ((seq == null) || (seq.value == null)) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (seq.value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + seq.value[i] = read_fixed(digits, scale); + } + + ///////////////////// + // DataInputStream // + ///////////////////// + + public void read_boolean_array(org.omg.CORBA.BooleanSeqHolder seq, + int offset, int length) + { + read_boolean_array(seq.value, offset, length); + } + + public void read_char_array(org.omg.CORBA.CharSeqHolder seq, int offset, + int length) + { + read_char_array(seq.value, offset, length); + } + + public void read_wchar_array(org.omg.CORBA.WCharSeqHolder seq, int offset, + int length) + { + read_wchar_array(seq.value, offset, length); + } + + public void read_octet_array(org.omg.CORBA.OctetSeqHolder seq, int offset, + int length) + { + read_octet_array(seq.value, offset, length); + } + + public void read_short_array(org.omg.CORBA.ShortSeqHolder seq, int offset, + int length) + { + read_short_array(seq.value, offset, length); + } + + public void read_ushort_array(org.omg.CORBA.UShortSeqHolder seq, + int offset, int length) + { + read_ushort_array(seq.value, offset, length); + } + + public void read_long_array(org.omg.CORBA.LongSeqHolder seq, int offset, + int length) + { + read_long_array(seq.value, offset, length); + } + + public void read_ulong_array(org.omg.CORBA.ULongSeqHolder seq, int offset, + int length) + { + read_ulong_array(seq.value, offset, length); + } + + public void read_longlong_array(org.omg.CORBA.LongLongSeqHolder seq, + int offset, int length) + { + read_longlong_array(seq.value, offset, length); + } + + public void read_float_array(org.omg.CORBA.FloatSeqHolder seq, int offset, + int length) + { + read_float_array(seq.value, offset, length); + } + + public void read_double_array(org.omg.CORBA.DoubleSeqHolder seq, + int offset, int length) + { + read_double_array(seq.value, offset, length); + } + + public void read_any_array(org.omg.CORBA.AnySeqHolder seq, int offset, + int length) + { + read_any_array(seq.value, offset, length); + } + + ///////////////// + // InputStream // + ///////////////// + public int available() + { + return m_iterator.bufferAvailable(); + } + + public int read() + { + return (int) read_octet(); + } + + public int read(byte[] value) + { + read_octet_array(value, 0, value.length); + return value.length; + } + + public int read(byte[] value, int offset, int length) + { + read_octet_array(value, offset, length); + return length; + } + + public boolean markSupported() + { + return true; + } + + public void mark(int readlimit) + { + m_iterator.mark(); + } + + public void reset() + throws java.io.IOException + { + m_iterator.reset(); + } + + //corba 2.3 + + protected ValueTypeInfo getIndirectedValue() + { + AbsolutePosition indirected_position = readIndirection(); + + java.lang.Object obj = + getContextCDR().lookupObject(indirected_position); + + if (obj instanceof ValueTypeInfo) + return (ValueTypeInfo) obj; + else + throw new MARSHAL("No Value Indirected"); + } + + public java.io.Serializable read_value() + { + return readValueWithId(null); + } + + public java.io.Serializable read_value(java.lang.String rep_id) + { + if (rep_id == null) + throw new BAD_PARAM("Null rep_id"); + + return readValueWithId(rep_id); + } + + // DataInputStream + public java.io.Serializable read_Value() + { + return read_value(); + } + + protected java.io.Serializable readValueWithId(java.lang.String rep_id) + { + alignment(CDR.LONG_SIZE); + + MarkCDR value_mark = m_iterator.getMark(); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + value_info = getIndirectedValue(); + + if ((rep_id != null) && (!value_info.is_truncable(rep_id))) + throw new BAD_PARAM("Cannot truncate value to: " + rep_id); + + return value_info.get_value(); + } + + String id = value_info.get_id(); + + if (id == null) { + if (rep_id == null) { + throw new MARSHAL("Unknown Repository Id"); + } + + id = rep_id; + } else if ((rep_id != null) && (!value_info.is_truncable(rep_id))) { + throw new BAD_PARAM("Cannot truncate value to: " + rep_id); + } + + java.io.Serializable value = null; + + if (id.equals("IDL:omg.org/CORBA/WStringValue:1.0")) { + // special handling of strings, according to spec + value = read_wstring(); + } else if (id.startsWith("IDL:")) { + ValueFactory factory = m_orb.lookup_value_factory(id); + + if (factory == null) + throw new MARSHAL("Cannot get Value Factory"); + + if (value_info.isFragmented()) { + throw new + NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + m_iterator.goBack(value_mark); + + value = factory.read_value(this); + } else + // RMI + { + // ValueHandler wants class, repository_id, and sending context. + // I wonder why it wants all of these. + // If we settle down on this implementation, compute these + // values more efficiently elsewhere. + + String className = + es.tid.TIDorbj.core.util.RepositoryId.className(id); + + Class c = null; + + try { + c = Thread.currentThread().getContextClassLoader() + .loadClass(className); + } + catch (ClassNotFoundException e) { + throw new RuntimeException("class not found: " + className); + } + + m_iterator.goBack(value_mark); + + initValueHandler(); + + value = + st_value_handler.readValue(this, //InputStream + 0, //offset + c, //value class + id, // repository Id + st_value_handler.getRunTimeCodeBase()); + } + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public java.io.Serializable read_value(java.lang.Class clz) + { + if ((clz == null)) + throw new BAD_PARAM(); + + java.lang.Object obj = null; + + try { + java.lang.reflect.Constructor constructor = + clz.getConstructor(new Class[0]); + + obj = constructor.newInstance(new Object[0]); + + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + + if (obj instanceof java.io.Serializable) + return read_value((java.io.Serializable) obj); + else + throw new + BAD_PARAM("Class does not implements java.io.Serializable"); + } + + public java.io.Serializable + read_value(org.omg.CORBA.portable.BoxedValueHelper factory) + { + alignment(CDR.LONG_SIZE); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + value_info = getIndirectedValue(); + + if (!value_info.get_id().equals(factory.get_id())) + throw new BAD_PARAM("Cannot truncate value"); + + return value_info.get_value(); + } + + es.tid.TIDorbj.core.util.RepositoryId[] ids = + value_info.get_repository_ids(); + + if ((ids == null) || (ids.length == 0)) { + String[] rep_ids = new String[1]; + rep_ids[0] = factory.get_id(); + value_info.set_repository_ids(rep_ids); + } else if (!ids[0].m_value.equals(factory.get_id())) { + throw new + BAD_PARAM("Invalid RepositoryId: value id does not " + + "match valuebox id"); + } + + if (value_info.isFragmented()) { + throw new NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + java.io.Serializable value = factory.read_value(this); + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public java.io.Serializable read_value(java.io.Serializable value) + { + alignment(CDR.LONG_SIZE); + + AbsolutePosition value_position = getAbsolutePosition(); + + ValueTypeInfo value_info = ValueTypeInfo.read(this); + + if (value_info.isNull()) + return null; + + if (value_info.isIndirection()) { + + value_info = getIndirectedValue(); + + java.io.Serializable value_readed = value_info.get_value(); + + if (!value_readed.getClass().isInstance(value)) + throw new BAD_PARAM("Cannot truncate value"); + + return value_readed; + } + + if (value instanceof org.omg.CORBA.portable.StreamableValue) { + org.omg.CORBA.portable.StreamableValue streamable = + (org.omg.CORBA.portable.StreamableValue) value; + + String value_id = value_info.get_id(); + + try { + if ((value_id != null) + && (!value_id.equals(streamable._type().id()))) + throw new BAD_PARAM("Streamable id is not the same"); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + streamable._read(this); + + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + + org.omg.CORBA.portable.CustomValue custom = + (org.omg.CORBA.portable.CustomValue) value; + + String value_id = value_info.get_id(); + + if (value_id != null) { + String[] custom_ids = custom._truncatable_ids(); + + boolean truncable = false; + + for (int i = 0; i < custom_ids.length; i++) { + if (value_info.is_truncable(custom_ids[i])) { + truncable = true; + break; + } + } + + if (!truncable) + throw new BAD_PARAM("Streamable id is not the same"); + } + + if (value_info.isFragmented()) { + throw new + NO_IMPLEMENT("Fragmented value reading not implemented"); + } + + custom.unmarshal(this); + } else if (value instanceof java.lang.String) { + value = read_wstring(); + } else if (value instanceof java.io.Serializable) { + initValueHandler(); + + value = + st_value_handler.readValue(this, //InputStream + 0, //offset + value.getClass(), //value class + value_info.get_id(), // repository Id + st_value_handler.getRunTimeCodeBase()); + } else { + throw new BAD_PARAM("No Serializable class"); + } + + value_info.set_value(value); + + getContextCDR().putPosition(value_position, value_info); + + return value; + } + + public void initValueHandler() + { + synchronized (this.getClass()) { + if (st_value_handler == null) + st_value_handler = javax.rmi.CORBA.Util.createValueHandler(); + } + } + + public java.lang.Object read_abstract_interface() + { + boolean is_reference = read_boolean(); + + if (is_reference) + return read_Object(); + else + return read_value(); + } + + //DataInputStream + + public java.lang.Object read_Abstract() + { + return read_abstract_interface(); + } + + public java.lang.Object read_abstract_interface(java.lang.Class clz) + { + boolean is_reference = read_boolean(); + + if (is_reference) + return read_Object(); + else + return read_value(clz); + } + + // tidorb operations + + public void skipIndirection() + { + skipLong(); + } + + public AbsolutePosition readIndirection() + { + // Prevent fragment jumps + + alignment(CDR.LONG_SIZE); + + // calculate the indirection + + AbsolutePosition typecode_indirection = getAbsolutePosition(); + + // read indirection offset + + int offset = read_long(); + + // SELF-INDIRECTINIG not allowed + + if (offset >= -CDR.LONG_SIZE) + throw new MARSHAL("Invalid offset"); + + int headers_length = 0; + + // if message add to offset the message headers + + if ((m_is_message) && (m_iterator.m_current_chunk_num > 0)) { + int fragment_header_size = 0; + + if (getVersion() == GIOPVersion.VERSION_1_2) + fragment_header_size = + GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; + else + fragment_header_size = + GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; + + BufferCDR buffer = getBuffer(); + + // minimun valid offset from the fragment where is the indirection + + int current_fragment = m_iterator.m_current_chunk_num; + + ChunkCDR chunk = buffer.getChunk(current_fragment); + + int offset_from_fragment = 0; + + if (chunk.hasHeader()) + offset_from_fragment = CDR.LONG_SIZE + fragment_header_size + - m_iterator.m_position; + else + offset_from_fragment = CDR.LONG_SIZE - m_iterator.m_position; + + // loop: add to offset fragment header size while the offset was + // less than valid offset from indirection fragment + while ((current_fragment > 0) && (offset < offset_from_fragment)) { + chunk = buffer.getChunk(--current_fragment); + + offset_from_fragment -= chunk.getAvailable(); + + if (chunk.hasHeader()) + offset -= fragment_header_size; + } + } + + AbsolutePosition referenced_position; + + referenced_position = typecode_indirection.addOffset(offset); + + if (referenced_position == null) + throw new MARSHAL("Invalid indirection: offset out of bounds.", 0, + CompletionStatus.COMPLETED_NO); + + // align the position to read the typecode in a aligned position of long + // this position alwais is aligned to long independently of + // encapsulation. + + // referenced_position.align(CDR.LONG_SIZE); + + return referenced_position; + } + + public void fixStarting() + { + m_iterator.fixStarting(); + } + + /** + * Sets the stream to the begining of the buffer. + */ + public void rewind() + { + m_iterator.rewind(); + + if ((m_is_message) && (m_iterator.m_current_chunk_num == 0) + && (m_iterator.m_position == 0)) + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Get the next chunk of the buffer + * + * @throws org.omg.CORBA.MARSHAL + * if the end of the buffer is reached. + * @see es.tid.TIDorbj.core.cdr.ChunkCDR + * @see es.tid.TIDorbj.core.cdr.BufferCDR + */ + public void getNextChunk() + { + if ((m_is_message) && (m_version != GIOPVersion.VERSION_1_0)) { + /* + * if(version == GIOPVersion.VERSION_1_0) throw new MARSHAL("End of + * Buffer: GIOP 1.0 does not allows fragmentation"); + */ + m_iterator.nextChunk(); + + if (m_iterator.m_chunk.hasHeader()) { + skip(GIOPHeader.HEADER_SIZE); + + if (m_version == GIOPVersion.VERSION_1_2) { + GIOPFragmentMessage.skipFragmentHeader1_2(this); + } + } + + } else { + m_iterator.nextChunk(); + } + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Set the stream pointer to the next aligned position of given data type + * + * @param type_size + * the type size in octets + */ + public void goNextAlignedPosition(int type_size) + { + // set the aligned position + + int next_position = m_iterator.alignPosition(type_size); + + if (next_position > m_iterator.m_chunk.m_available) { + if (m_iterator.m_encapsulation) { + // continue the encapsulation aligment in next chunk + int gap = next_position - m_iterator.m_position; + skip(gap); + alignment(CDR.OCTET_SIZE); // prevents next_position == length + } else { + getNextChunk(); + } + } else if (next_position == m_iterator.m_chunk.m_available) { + getNextChunk(); + } else { + m_iterator.m_position = next_position; + } + } + + /** + * Sets the reading pointer in the correct aligmnet for the data type. If + * necessary, gets the next chunk. + *

+ * CORBA 2.3 specification says: A primitive data type of 8 bytes or + * smaller, should never be broken across two fragments.Therefore, if the + * remaining bytes are not sufficient for reading the data next chunk will + * be set for reading. + *

+ * If it is reading a encapsulation and the data is broken into two chunks, + * reads the data compoentes byte per byte. + * + * @param type_size the type size for alignment. + * @return true if can read directly the data or + * false if byte swap is needed because the data is + * splitted in two framgments and is contended in a encapsulation. + * @throws org.omg.CORBA.MARSHAL + * if the end of the buffer is reached. + */ + + public boolean alignment(int type_size) + throws org.omg.CORBA.MARSHAL + { + + goNextAlignedPosition(type_size); + + if (m_iterator.enoughSpace(type_size)) + return true; + + // there is no space for whole data bytes + + if (m_iterator.m_encapsulation) + return false; // marshal byte per byte + + // marshaling in the main buffer, get next chunk + getNextChunk(); + + return true; + } + + private void skipArray(int length, int type_length) + { + if (length < 0) + throw new BAD_PARAM("Invalid array length", 0, + CompletionStatus.COMPLETED_NO); + + // número de octetos pertenecientes a datos que se pueden leer enteros + int octets_can_skip = 0; + + // numero de datos que quedan por saltar + int remain_data = length; + + while (remain_data > 0) { + + if (!alignment(type_length)) { // encapsulación, el dato no cabe + // completo + + skip(type_length); + + remain_data--; + + } else { + octets_can_skip = java.lang.Math.min(remain_data * type_length, + m_iterator.available()); + + remain_data -= octets_can_skip / type_length; + m_iterator.m_position += octets_can_skip; + + if (remain_data > 0) { + getNextChunk(); + } + } + } + } + + public long skip(long n) + { + if (n > 0L) { + int chunk_left = m_iterator.available(); + if (n <= chunk_left) + m_iterator.skip((int) n); + else { + getNextChunk(); + skip(n - chunk_left); + } + return n; + } + return 0; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/CDROutputStream.java b/source/es/tid/TIDorbj/core/cdr/CDROutputStream.java new file mode 100644 index 0000000..a818170 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/CDROutputStream.java @@ -0,0 +1,1810 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.DATA_CONVERSION; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.portable.ValueBase; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * Portable OutputStream for demarshalling. + *

+ * A CDROutputStream has an buffer iterator + * CDRIterator. The iterator maintains the data position and + * correct aligment, and TypeCode marshaling information. + * + * @see es.tid.TIDorbj.core.cdr.CDRInputStream + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class CDROutputStream extends org.omg.CORBA_2_3.portable.OutputStream + implements org.omg.CORBA.DataOutputStream +{ + + /** + * ORB instance that created the output stream. + */ + + TIDORB m_orb; + + /** + * GIOPVersion used. + */ + + GIOPVersion m_version; + + /** + * The buffer is a GIOP message. A GIOP Message implies that the GIOP Header + * space will be reserved in the BufferCDR, that is, each ChunkCDR will have + * the header size bytes allocated. + */ + + boolean m_is_message; + + /** + * Buffer Iterator. + */ + protected IteratorCDR m_iterator; + + /** + * Current chunk buffer. + */ + + protected byte[] m_chunk_buffer; + + /** + * Data buffer for Broken data splitted in to chunks in an encapsulations + */ + + protected byte[] m_data_buffer = null; + + protected static javax.rmi.CORBA.ValueHandler st_value_handler = null; + + // DataOutputStream + static String[] st_data_output_ids = + { "IDL:omg.org/CORBA/DataOutputStream:1.0" }; + + public String[] _truncatable_ids() + { + return st_data_output_ids; + } + + public CDROutputStream(TIDORB orb, byte[] buffer) + { + this(orb, new IteratorCDR(new BufferCDR(buffer))); + } + + public CDROutputStream(TIDORB orb, BufferCDR buffer) + { + this(orb, new IteratorCDR(buffer)); + } + + public CDROutputStream(TIDORB orb, int chunk_size) + { + this(orb, new IteratorCDR(new BufferCDR(chunk_size))); + } + + protected CDROutputStream(TIDORB orb, IteratorCDR iterator) + { + m_orb = orb; + + if ( orb != null ){ + this.m_version = GIOPVersion.fromString ( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + } else { + this.m_version = GIOPVersion.fromString( + IIOPCommunicationLayerPropertiesInfo.DEFAULT_GIOP_VERSION + ); + } + + this.m_is_message = false; + this.m_iterator = iterator; + iterator.m_byte_order = CDR.BIG_ENDIAN; + + m_chunk_buffer = iterator.m_chunk.m_buffer; + m_data_buffer = new byte[CDR.LONGLONG_SIZE]; + } + + /** + * @return the GIOP version used to marshal. + */ + public GIOPVersion getVersion() + { + return m_version; + } + + /** + * Sets the GIOP version used to marshal. + */ + public void setVersion(GIOPVersion ver) + { + m_version = ver; + } + + /** + * @return true if the stream is a GIOP message. + */ + public boolean isMessage() + { + return m_is_message; + } + + /** + * Sets if the stream is a GIOP message. + */ + public void setMessage(boolean is) + { + m_is_message = is; + + if ((is) && (m_iterator.m_position == 0)) { + skip(es.tid.TIDorbj.core.comm.giop.GIOPHeader.HEADER_SIZE); + } + } + + /** + * @return the stream byte order, if true little-endian, else + * big-endian + */ + public boolean getByteOrder() + { + return m_iterator.getByteOrder(); + } + + /** + * @return the stream buffer + */ + public BufferCDR getBuffer() + { + return m_iterator.getBuffer(); + } + + /** + * Sets the aligment offset in the current Context. + * + * @param pos + * the new offset + * @see es.tid.TIDorbj.core.cdr.AligmentOffset + */ + public void setAlignmentOffset(int pos) + { + m_iterator.setAlignmentOffset(pos); + } + + /** + * @return pointer to the actual position in the buffer. + */ + public PointerCDR actualPointer() + { + return m_iterator.getPointer(); + } + + /** + * Creates a new Encapsulation Context with it own aligment an indirections. + */ + public void enterEncapsulation() + { + // skip the length + + CDROutputStream length_out = copy(); + + write_ulong(1); + + // get the real start position of encapsulation + + alignment(CDR.OCTET_SIZE); + + m_iterator.enterEncapsulation(); + + //write byte order + write_boolean(m_iterator.getByteOrder()); + + // save the length output stream in the new context + m_iterator.m_context.setLengthOut(length_out); + } + + /** + * Close the Encapsulation Context, write en encapsulation length, and + * restore the father Context. + * + * @see es.tid.TIDorbj.core.cdr.ContextCDR + */ + + public void exitEncapsulation() + { + + CDROutputStream length_out = m_iterator.m_context.m_length_out; + + if (length_out == null) + throw new org.omg.CORBA.INTERNAL("Null Length out"); + + int headers_length = 0; + + // if message Calculate the headers size to subtract the value to the + // Encapsulation size + /* + * if (message) { int fragments = iterator.current_chunk_num - + * length_out.iterator.current_chunk_num; + * + * + * if(version == GIOPVersion.VERSION_1_2) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; else if (version == + * GIOPVersion.VERSION_1_1) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; else headers_length = + * 0; } + */ + int encapsulation_length = + getAbsolutePosition().getValue() + - m_iterator.m_context.m_starts_at.getAbsolutePosition().getValue(); + // - headers_length; + + length_out.write_ulong(encapsulation_length); + + m_iterator.m_context.deleteLengthOut(); + + m_iterator.exitEncapsulation(); + + } + + /** + * @return an input stream with its beginning at this marshaling position + */ + public CDRInputStream inputStreamAtThisPosition() + { + CDRInputStream input = new CDRInputStream(m_orb, m_iterator.copy()); + input.fixStarting(); + input.setMessage(m_is_message); + input.setVersion(m_version); + return input; + } + + public org.omg.CORBA.ORB orb() + { + if (m_orb != null) + return m_orb; + else + return es.tid.TIDorbj.core.TIDORB.init(); + } + + public org.omg.CORBA.portable.InputStream create_input_stream() + { + CDRInputStream input; + + input = new CDRInputStream(m_orb, m_iterator.copy()); + + input.setMessage(m_is_message); + input.setVersion(m_version); + + input.rewind(); + + return input; + } + + /** + * @return a new inputstream pointing the same position. + */ + public CDROutputStream copy() + { + CDROutputStream stream = new CDROutputStream(m_orb, m_iterator.copy()); + stream.setMessage(m_is_message); + stream.setVersion(m_version); + return stream; + } + + public ContextCDR getContextCDR() + { + return m_iterator.m_context; + } + + /** + * Writes as an encapsulation the buffer. + *

+ * The first octet in the encapsulation must be the byte-order. + * + * @encapsulation a buffer with the encapsulation. + */ + public void writeEncapsulation(Encapsulation encapsulation) + { + encapsulation.write(this); + } + + /** + * @return the absolute value in the buffer order of the current position. + */ + public AbsolutePosition getAbsolutePosition() + { + return m_iterator.getPointer().getAbsolutePosition(); + } + + public PointerCDR getPointer() + { + return m_iterator.getPointer(); + } + + /** + * Jumps to the absolute position. + * + * @pram position the new position + */ + public void setPosition(AbsolutePosition position) + { + m_iterator.setPosition(position); + } + + public void write_boolean(boolean value) + { + alignment(CDR.BOOLEAN_SIZE); + m_chunk_buffer[m_iterator.m_position++] = (value) ? (byte) 1 : (byte) 0; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_char(char value) + { + // WARNING: Java char is 2 bytes long, there is a cast + // from char to byte + if (value > 255) { + throw new DATA_CONVERSION("Char out of range.", + 0, + CompletionStatus.COMPLETED_NO); + } + alignment(CDR.CHAR_SIZE); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_wchar(char value) + { + // Java char is 2 bytes long, there is a cast + + // WARNING: Java char is 2 bytes long, there is a cast + // from byte to char + if (alignment(CDR.WCHAR_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.WCHAR_SIZE); + } + } + + public void write_octet(byte value) + { + alignment(CDR.OCTET_SIZE); + m_chunk_buffer[m_iterator.m_position++] = value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + + public void write_short(short value) + { + if (alignment(CDR.SHORT_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.SHORT_SIZE); + } + } + + public void write_ushort(short value) + { + // JAVA MAPPING: "negative" int = positive ulong values + // will be handled by the user + if (alignment(CDR.USHORT_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + + } else { + m_data_buffer[0] = (byte) (value >>> 8); + m_data_buffer[1] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.USHORT_SIZE); + } + } + + public void write_long(int value) + { + if (alignment(CDR.LONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 24); + m_data_buffer[1] = (byte) (value >>> 16); + m_data_buffer[2] = (byte) (value >>> 8); + m_data_buffer[3] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.LONG_SIZE); + } + } + + public void write_ulong(int value) + { + // JAVA MAPPING: "negative" int = positive ulong values + // will be handled by the user + + if (alignment(CDR.ULONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 24); + m_data_buffer[1] = (byte) (value >>> 16); + m_data_buffer[2] = (byte) (value >>> 8); + m_data_buffer[3] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.ULONG_SIZE); + } + } + + public void write_longlong(long value) + { + if (alignment(CDR.LONGLONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 56); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 48); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 40); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 32); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) value; + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 56); + m_data_buffer[1] = (byte) (value >>> 48); + m_data_buffer[2] = (byte) (value >>> 40); + m_data_buffer[3] = (byte) (value >>> 32); + m_data_buffer[4] = (byte) (value >>> 24); + m_data_buffer[5] = (byte) (value >>> 16); + m_data_buffer[6] = (byte) (value >>> 8); + m_data_buffer[7] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.LONGLONG_SIZE); + } + } + + public void write_ulonglong(long value) + { + // JAVA MAPPING: "negative" long = positive ulonglong values + // will be handled by the user + + if (alignment(CDR.ULONGLONG_SIZE)) { + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 56); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 48); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 40); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 32); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 24); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 16); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 8); + m_chunk_buffer[m_iterator.m_position++] = (byte) (value >>> 0); + //recalculates the available bytes + if (m_iterator.m_position > m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } else { + m_data_buffer[0] = (byte) (value >>> 56); + m_data_buffer[1] = (byte) (value >>> 48); + m_data_buffer[2] = (byte) (value >>> 40); + m_data_buffer[3] = (byte) (value >>> 32); + m_data_buffer[4] = (byte) (value >>> 24); + m_data_buffer[5] = (byte) (value >>> 16); + m_data_buffer[6] = (byte) (value >>> 8); + m_data_buffer[7] = (byte) value; + write_octet_array(m_data_buffer, 0, CDR.ULONGLONG_SIZE); + } + } + + public void write_float(float value) + { + write_long(java.lang.Float.floatToIntBits(value)); + } + + public void write_double(double value) + { + write_longlong(java.lang.Double.doubleToLongBits(value)); + + } + + public void write_string(String value) + { + if (value == null) + throw new BAD_PARAM("Null string reference.", 0, + CompletionStatus.COMPLETED_NO); + + // write the string and the final of string char '\0' + + int string_length = value.length(); + + int cdr_string_length = string_length + 1; + + char[] char_array = new char[cdr_string_length]; + + value.getChars(0, string_length, char_array, 0); + + char_array[string_length] = '\0'; + + // write length + + write_ulong(cdr_string_length); + + // write value data + + writeCharArrayAux(char_array, 0, cdr_string_length); + } + + public void write_wstring(String value) + { + if (value == null) + throw new BAD_PARAM("Null string reference.", 0, + CompletionStatus.COMPLETED_NO); + + // write the string and the final of string char '\0' + + char[] char_array = value.toCharArray(); + + // write length + + if (m_version == GIOPVersion.VERSION_1_2) { + write_ulong((char_array.length + 1) * CDR.WCHAR_SIZE); + + } else if (m_version == GIOPVersion.VERSION_1_1){ + write_ulong(char_array.length + 1); + } else { + throw new MARSHAL("wstring is not present in GIOP 1.0", + 6, + CompletionStatus.COMPLETED_NO); + } + + // write value data + write_wchar_array(char_array, 0, char_array.length); + + // write string end char + write_wchar('\0'); + } + + public void write_boolean_array(boolean[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null boolean array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int can_write = 0; + + // número de octetos que quedan por escribir + + int remain_booleans = length; + + int position = 0; + int stop_at = 0; + + while (remain_booleans > 0) { + + position = m_iterator.m_position; + + can_write = java.lang.Math.min(remain_booleans, + m_chunk_buffer.length - position); + + stop_at = position + can_write; + + while (position < stop_at) { + m_chunk_buffer[position++] = (byte) ((value[offset++]) ? 1 : 0); + } + + m_iterator.m_position = stop_at; + remain_booleans -= can_write; + + if (remain_booleans > 0) { + getNextChunk(); + } else { + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + } + + public void write_char_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null char array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + writeCharArrayAux(value, offset, length); + } + + public void writeCharArrayAux(char[] value, int offset, int length) + { + int chars_can_write = 0; + + // número de octetos que quedan por escribir + + int remain_chars = length; + + int position = 0; + int stop_at = 0; + + int current_value = 0; + + while (remain_chars > 0) { + + position = m_iterator.m_position; + + chars_can_write = + java.lang.Math.min( remain_chars, + m_chunk_buffer.length - position); + + stop_at = position + chars_can_write; + + for (; position < stop_at;) { + + current_value = value[offset++]; + + // CORBA chars are 1 byte length, value must be < 256 + if (current_value > 255) { + throw new DATA_CONVERSION("Char out of range.", + 0, + CompletionStatus.COMPLETED_NO); + } + + m_chunk_buffer[position++] = (byte) current_value; + } + + m_iterator.m_position = stop_at; + remain_chars -= chars_can_write; + + if (remain_chars > 0) { + getNextChunk(); + } else { + if (m_iterator.m_chunk.m_available < m_iterator.m_position) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + } + + public void write_wchar_array(char[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null wchar array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos wchar que se pueden escribir enteros + int wchars_can_write = 0; + + int position = 0; + int wchar_value = 0; + + // numero de wchars que quedan + int remain_wchars = length; + + while (remain_wchars > 0) { + + if (!alignment(CDR.WCHAR_SIZE)) // encapsulación, el dato no cabe + // completo + { + wchar_value = value[offset++]; + m_data_buffer[0] = (byte) (wchar_value >>> 8); + m_data_buffer[1] = (byte) wchar_value; + + write_octet_array(m_data_buffer, 0, CDR.WCHAR_SIZE); + + remain_wchars--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + wchars_can_write = + java.lang.Math.min(remain_wchars, + free_octets / CDR.WCHAR_SIZE); + + for (int i = wchars_can_write; i > 0; i--) { + wchar_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (wchar_value >>> 8); + m_chunk_buffer[position++] = (byte) wchar_value; + } + + remain_wchars -= wchars_can_write; + m_iterator.m_position = position; + + if (remain_wchars > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_octet_array(byte[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null byte array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir + int remain_bytes = length; + + // bytes que se pueden escribir por vuelta + int bytes_can_write = 0; + int position = 0; + + while (remain_bytes > 0) { + + position = m_iterator.m_position; + + bytes_can_write = java.lang.Math + .min( + remain_bytes, + m_chunk_buffer.length + - position); + + System.arraycopy(value, offset, m_chunk_buffer, position, + bytes_can_write); + + m_iterator.m_position += bytes_can_write; + remain_bytes -= bytes_can_write; + offset += bytes_can_write; + + if (remain_bytes > 0) + getNextChunk(); + else if (m_iterator.m_chunk.m_available < m_iterator.m_position) + m_iterator.m_chunk.m_available = m_iterator.m_position; + } + } + + public void write_short_array(short[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null short array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos short que se pueden escribir enteros + int shorts_can_write = 0; + + int position = 0; + int short_value = 0; + + // numero de shorts que quedan + int remain_shorts = length; + + while (remain_shorts > 0) { + + if (!alignment(CDR.SHORT_SIZE)) // encapsulación, el dato no cabe + // completo + { + short_value = value[offset++]; + m_data_buffer[0] = (byte) (short_value >>> 8); + m_data_buffer[1] = (byte) short_value; + + write_octet_array(m_data_buffer, 0, CDR.SHORT_SIZE); + + remain_shorts--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + shorts_can_write = + java.lang.Math.min(remain_shorts, + free_octets / CDR.SHORT_SIZE); + + for (int i = shorts_can_write; i > 0; i--) { + short_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (short_value >>> 8); + m_chunk_buffer[position++] = (byte) short_value; + } + + remain_shorts -= shorts_can_write; + m_iterator.m_position = position; + + if (remain_shorts > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ushort_array(short[] value, int offset, int length) + { + write_short_array(value, offset, length); + } + + public void write_long_array(int[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null int array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos int que se pueden escribir enteros + int ints_can_write = 0; + + int position = 0; + int int_value = 0; + + // numero de ints que quedan por escribir + int remain_ints = length; + + while (remain_ints > 0) { + + if (!alignment(CDR.LONG_SIZE)) // encapsulación, el dato no cabe + // completo + { + int_value = value[offset++]; + + m_data_buffer[0] = (byte) (int_value >>> 24); + m_data_buffer[1] = (byte) (int_value >>> 16); + m_data_buffer[2] = (byte) (int_value >>> 8); + m_data_buffer[3] = (byte) int_value; + write_octet_array(m_data_buffer, 0, CDR.LONG_SIZE); + + remain_ints--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + ints_can_write = + java.lang.Math.min(remain_ints, + free_octets / CDR.LONG_SIZE); + + for (int i = ints_can_write; i > 0; i--) { + int_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (int_value >>> 24); + m_chunk_buffer[position++] = (byte) (int_value >>> 16); + m_chunk_buffer[position++] = (byte) (int_value >>> 8); + m_chunk_buffer[position++] = (byte) int_value; + } + + remain_ints -= ints_can_write; + m_iterator.m_position = position; + + if (remain_ints > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ulong_array(int[] value, int offset, int length) + { + write_long_array(value, offset, length); + } + + public void write_longlong_array(long[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null long array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos long que se pueden escribir enteros + int longs_can_write = 0; + + int position = 0; + long long_value = 0; + + // numero de longs que quedan + int remain_longs = length; + + while (remain_longs > 0) { + + if (!alignment(CDR.LONGLONG_SIZE)) + { + // encapsulation, the data does not fit complete + long_value = value[offset++]; + + m_data_buffer[0] = (byte) (long_value >>> 56); + m_data_buffer[1] = (byte) (long_value >>> 48); + m_data_buffer[2] = (byte) (long_value >>> 40); + m_data_buffer[3] = (byte) (long_value >>> 32); + m_data_buffer[4] = (byte) (long_value >>> 24); + m_data_buffer[5] = (byte) (long_value >>> 16); + m_data_buffer[6] = (byte) (long_value >>> 8); + m_data_buffer[7] = (byte) long_value; + + write_octet_array(m_data_buffer, 0, CDR.LONGLONG_SIZE); + + remain_longs--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + longs_can_write = + java.lang.Math.min(remain_longs, + free_octets / CDR.LONGLONG_SIZE); + + for (int i = longs_can_write; i > 0; i--) { + long_value = value[offset++]; + m_chunk_buffer[position++] = (byte) (long_value >>> 56); + m_chunk_buffer[position++] = (byte) (long_value >>> 48); + m_chunk_buffer[position++] = (byte) (long_value >>> 40); + m_chunk_buffer[position++] = (byte) (long_value >>> 32); + m_chunk_buffer[position++] = (byte) (long_value >>> 24); + m_chunk_buffer[position++] = (byte) (long_value >>> 16); + m_chunk_buffer[position++] = (byte) (long_value >>> 8); + m_chunk_buffer[position++] = (byte) long_value; + } + + remain_longs -= longs_can_write; + m_iterator.m_position = position; + + if (remain_longs > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_ulonglong_array(long[] value, int offset, int length) + { + write_longlong_array(value, offset, length); + } + + public void write_float_array(float[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null float array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos float que se pueden escribir enteros + int ints_can_write = 0; + + int position = 0; + int int_value = 0; + + // numero de floats que quedan que quedan por escribir + int remain_floats = length; + + while (remain_floats > 0) { + + if (!alignment(CDR.FLOAT_SIZE)) // encapsulación, el dato no cabe + // completo + { + int_value = Float.floatToIntBits(value[offset++]); + + m_data_buffer[0] = (byte) (int_value >>> 24); + m_data_buffer[1] = (byte) (int_value >>> 16); + m_data_buffer[2] = (byte) (int_value >>> 8); + m_data_buffer[3] = (byte) int_value; + write_octet_array(m_data_buffer, 0, CDR.FLOAT_SIZE); + + remain_floats--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + ints_can_write = + java.lang.Math.min(remain_floats, + free_octets / CDR.FLOAT_SIZE); + + for (int i = ints_can_write; i > 0; i--) { + int_value = Float.floatToIntBits(value[offset++]); + + m_chunk_buffer[position++] = (byte) (int_value >>> 24); + m_chunk_buffer[position++] = (byte) (int_value >>> 16); + m_chunk_buffer[position++] = (byte) (int_value >>> 8); + m_chunk_buffer[position++] = (byte) int_value; + } + + remain_floats -= ints_can_write; + m_iterator.m_position = position; + + if (remain_floats > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_double_array(double[] value, int offset, int length) + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new BAD_PARAM( + "value.length - offset must be less than length"); + + // número de octetos que quedan por escribir en el chunk actual + int free_octets = 0; + + // número de datos double que se pueden escribir enteros + int doubles_can_write = 0; + + int position = 0; + long long_value = 0; + + // numero de doubles que quedan + int remain_doubles = length; + + while (remain_doubles > 0) { + + if (!alignment(CDR.DOUBLE_SIZE)) { + long_value = Double.doubleToLongBits(value[offset++]); + + m_data_buffer[0] = (byte) (long_value >>> 56); + m_data_buffer[1] = (byte) (long_value >>> 48); + m_data_buffer[2] = (byte) (long_value >>> 40); + m_data_buffer[3] = (byte) (long_value >>> 32); + m_data_buffer[4] = (byte) (long_value >>> 24); + m_data_buffer[5] = (byte) (long_value >>> 16); + m_data_buffer[6] = (byte) (long_value >>> 8); + m_data_buffer[7] = (byte) long_value; + + write_octet_array(m_data_buffer, 0, CDR.DOUBLE_SIZE); + + remain_doubles--; + + } else { + position = m_iterator.m_position; + + free_octets = m_chunk_buffer.length - position; + + doubles_can_write = + java.lang.Math.min(remain_doubles, + free_octets / CDR.DOUBLE_SIZE); + + for (int i = doubles_can_write; i > 0; i--) { + long_value = Double.doubleToLongBits(value[offset++]); + m_chunk_buffer[position++] = (byte) (long_value >>> 56); + m_chunk_buffer[position++] = (byte) (long_value >>> 48); + m_chunk_buffer[position++] = (byte) (long_value >>> 40); + m_chunk_buffer[position++] = (byte) (long_value >>> 32); + m_chunk_buffer[position++] = (byte) (long_value >>> 24); + m_chunk_buffer[position++] = (byte) (long_value >>> 16); + m_chunk_buffer[position++] = (byte) (long_value >>> 8); + m_chunk_buffer[position++] = (byte) long_value; + } + + remain_doubles -= doubles_can_write; + m_iterator.m_position = position; + + if (remain_doubles > 0) { + getNextChunk(); + } else if (m_iterator.m_chunk.m_available < position) + m_iterator.m_chunk.m_available = position; + } + } + } + + public void write_Object(org.omg.CORBA.Object value) + { + if (value == null) { + es.tid.TIDorbj.core.iop.IOR.nullIOR().write(this); + return; + } + + if (value instanceof ValueBase) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if (value instanceof org.omg.CORBA.LocalObject) + throw new MARSHAL("Impossible to marshall a local object.", + 4, CompletionStatus.COMPLETED_NO); + + org.omg.CORBA.portable.Delegate delegate = + ((org.omg.CORBA.portable.ObjectImpl) value) + ._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + ((CommunicationDelegate) delegate).getReference().write(this); + } else { // write ior from anothers's ORB Object + IOR ior = + DefaultIOR.fromString(m_orb, + delegate.orb(value).object_to_string(value)); + ior.write(this); + } + } + + public void write_TypeCode(org.omg.CORBA.TypeCode value) + { + if (value == null) + throw new BAD_PARAM("Null TypeCode reference.", 0, + CompletionStatus.COMPLETED_NO); + + TypeCodeMarshaler.marshal(value, this); + } + + public void write_any(org.omg.CORBA.Any value) + { + if (value == null) + throw new BAD_PARAM("Null any reference.", 0, + CompletionStatus.COMPLETED_NO); + + write_TypeCode(value.type()); + value.write_value(this); + } + + //DataOutputStream + public void write_any_array(org.omg.CORBA.Any[] value, int offset, + int length) + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + write_any(value[i]); + } + + public void write_Context(org.omg.CORBA.Context ctx, + org.omg.CORBA.ContextList contexts) + { + if (ctx == null) + throw new BAD_PARAM("Null context reference.", 0, + CompletionStatus.COMPLETED_NO); + + ContextImpl.write(this, ctx, contexts); + } + + /** + * @deprecated Deprecated by CORBA 2.2 + */ + + public void write_Principal(org.omg.CORBA.Principal value) + { + throw new org.omg.CORBA.NO_IMPLEMENT("Deprecated by CORBA 2.2"); + } + + public void write_fixed(java.math.BigDecimal value) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void write_fixed(org.omg.CORBA.Any value) + throws org.omg.CORBA.BadFixedValue + { + if ((value == null) + || (value.type().kind().value() != org.omg.CORBA.TCKind._tk_fixed)) + throw new org.omg.CORBA.BadFixedValue(); + + value.write_value(this); + } + + public void write_fixed_array(org.omg.CORBA.Any[] value, int offset, + int length) + throws org.omg.CORBA.BadFixedValue + { + if (value == null) + throw new BAD_PARAM("Null double array reference.", 0, + CompletionStatus.COMPLETED_NO); + if (length < 0) + throw new BAD_PARAM("length must be greater than zero"); + + if (value.length - offset < length) + throw new + BAD_PARAM("value.length - offset must be less than length"); + + int last = offset + length; + + for (int i = offset; i < last; i++) + write_fixed(value[i]); + } + + // CORBA 2.3 + + public void write_value(java.io.Serializable value) + { + writeValueWithId(value, null); + } + + public void write_value(java.io.Serializable value, java.lang.String rep_id) + { + writeValueWithId(value, rep_id); + } + + protected void writeValueWithId(java.io.Serializable value, + java.lang.String rep_id) + { + if (writeValueTags(value)) + return; + + if (value instanceof java.lang.String) { + writeWStringValue((String) value); + } else if (value instanceof org.omg.CORBA.portable.StreamableValue) { + writeStreamableValue( + (org.omg.CORBA.portable.StreamableValue) value); + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + writeCustomValue((org.omg.CORBA.portable.CustomValue) value); + } else { + initValueHandler(); + + st_value_handler.writeValue(this, value); + } + } + + public void write_value(java.io.Serializable value, Class clz) + { + if (writeValueTags(value)) + return; + + if (value instanceof java.lang.String) { + writeWStringValue((String) value); + } else if (value instanceof org.omg.CORBA.portable.StreamableValue) { + writeStreamableValue( + (org.omg.CORBA.portable.StreamableValue) value); + } else if (value instanceof org.omg.CORBA.portable.CustomValue) { + writeCustomValue((org.omg.CORBA.portable.CustomValue) value); + } else { // boxed value?? + + java.lang.Object obj = null; + + try { + java.lang.reflect.Constructor constructor = + clz.getConstructor(new Class[0]); + + obj = constructor.newInstance(new Object[0]); + + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + + if (obj instanceof org.omg.CORBA.portable.BoxedValueHelper) { + writeBoxedValue(value, + (org.omg.CORBA.portable.BoxedValueHelper) value); + } else { + initValueHandler(); + ValueTypeInfo value_info = new ValueTypeInfo(); + String[] ids = { st_value_handler.getRMIRepositoryID(clz) }; + value_info.set_repository_ids(ids); + value_info.write(this); + st_value_handler.writeValue(this, value); + } + } + } + + public void write_value(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) + { + if (writeValueTags(value)) + return; + + writeBoxedValue(value, factory); + + } + + //DataOutputStream + public void write_Value(java.io.Serializable value) + { + write_value(value); + } + + /** + * Try to write null or an indirection tags + * + * @return true if written or false otherwise + */ + + protected boolean writeValueTags(java.io.Serializable value) + { + // write null + + if (value == null) { + ValueTypeInfo.write_null(this); + return true; + } + + PointerCDR previous_position = getContextCDR().lookupPosition(value); + + if (previous_position != null) { + writeIndirection(previous_position); + return true; + } + + return false; + } + + protected void writeWStringValue(String value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + write_wstring(value); + + getContextCDR().putObject(value, value_position); + } + + protected void + writeStreamableValue(org.omg.CORBA.portable.StreamableValue value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + value_info.set_repository_ids(value._truncatable_ids()); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + value._write(this); + + getContextCDR().putObject(value, value_position); + } + + protected void writeCustomValue(org.omg.CORBA.portable.CustomValue value) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + value_info.set_repository_ids(value._truncatable_ids()); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + value.marshal(this); + + getContextCDR().putObject(value, value_position); + } + + protected void + writeBoxedValue(java.io.Serializable value, + org.omg.CORBA.portable.BoxedValueHelper factory) + { + ValueTypeInfo value_info = new ValueTypeInfo(); + + String[] ids = { factory.get_id() }; + + value_info.set_repository_ids(ids); + + // aligns to get the value position + + alignment(CDR.LONG_SIZE); + + // calculate the value position + + PointerCDR value_position = getPointer(); + + value_info.write(this); + + factory.write_value(this, value); + + getContextCDR().putObject(value, value_position); + } + + public void initValueHandler() + { + synchronized (this.getClass()) { + if (st_value_handler == null) + st_value_handler = javax.rmi.CORBA.Util.createValueHandler(); + } + } + + public void write_abstract_interface(java.lang.Object object) + { + if (object == null) + throw new org.omg.CORBA.BAD_PARAM("Null value reference"); + + if (object instanceof org.omg.CORBA.Object) { + org.omg.CORBA.Object ref = (org.omg.CORBA.Object) object; + + // is an object ref + write_boolean(true); + write_Object(ref); + + } else if (object instanceof java.io.Serializable) { + write_boolean(false); + write_value((java.io.Serializable) object); + } else + throw new + MARSHAL("Cannot marshal value: it does not implements " + + "java.io.Serializable or is not a org.omg.CORBA.Object"); + } + + //DataOutputStream + public void write_Abstract(java.lang.Object value) + { + write_abstract_interface(value); + } + + // TIDORB + + // write_referenceable_string for RepositoryId and URL + + protected void writeReferenceableString(String id) + { + PointerCDR previous_position = getContextCDR().lookupPosition(id); + + if (previous_position != null) { + writeIndirection(previous_position); + return; + } + + // aligns to get the id position + + alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + PointerCDR id_position = getPointer(); + + write_string(id); + + getContextCDR().putObject(id, id_position); + } + + public void writeIndirection(PointerCDR previous_position) + { + write_long(0xFFFFFFFF); + + // prevents that indirection value will be marshaled in the next chunk + + alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + // int headers_length = 0; + + // if message Calculate the headers size to subtract the value to the + // Encapsulation size + /* + * if (get_message()) { int fragments = getCurrentChunkNum() - + * previous_position.getNumChunk(); + * + * if(get_version() == GIOPVersion.VERSION_1_2) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_2; else if (get_version() == + * GIOPVersion.VERSION_1_1) headers_length = fragments * + * GIOPFragmentMessage.FRAGMENT_HEADER_SIZE_1_1; else headers_length = + * 0; } + */ + AbsolutePosition indirection_position; + + indirection_position = getAbsolutePosition(); + + int offset = previous_position.getAbsolutePosition().getValue() + - indirection_position.getValue(); + // + headers_length; + + write_long(offset); + + return; + } + + public int getCurrentChunkNum() + { + return m_iterator.m_current_chunk_num; + } + + /* + * public void getNextFragmentHeader() { if(!message) throw new + * org.omg.CORBA.INTERNAL("Not it a message"); + * + * if(version == GIOPVersion.VERSION_1_0) throw new MARSHAL("End of Buffer: GIOP + * 1.0 does not allows fragmentation"); + * + * iterator.nextChunk(); + * + * chunk_buffer = iterator.chunk.buffer; } + */ + public void getNextChunk() + { + m_iterator.m_chunk.m_available = m_chunk_buffer.length; + /* + * if (message) { if(version == GIOPVersion.VERSION_1_0) { // throw new + * MARSHAL("End of Buffer: GIOP 1.0 does not allows fragmentation"); + * iterator.bufferCDR.grow_1_0(); } else { if(iterator.current_chunk_num == + * (iterator.bufferCDR.getNumChunks() -1)) iterator.bufferCDR.grow(); + * + * iterator.nextChunk(); + * + * skip(GIOPHeader.HEADER_SIZE); + * + * if(version == GIOPVersion.VERSION_1_2) { + * GIOPFragmentMessage.skip_fragment_header_1_2(this); } } } else { + */ + if (m_iterator.m_current_chunk_num + == (m_iterator.m_buffer_cdr.getNumChunks() - 1)) + m_iterator.m_buffer_cdr.grow(); + + m_iterator.nextChunk(); + // } + + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + } + + /** + * Set the stream pointer to the next aligned position of given data type + * + * @param type_size + * the type size in octets + */ + protected void goNextAlignedPosition(int type_size) + { + int next_position = m_iterator.alignPosition(type_size); + + if (next_position < m_chunk_buffer.length) { + m_iterator.m_position = next_position; + return; + } + + /* + * if (message && (version == GIOPVersion.VERSION_1_0)) { getNextChunk(); + * iterator.position = next_position; return; } + */ + + if ((next_position > m_chunk_buffer.length) + && (m_iterator.m_encapsulation)) { + // continue the encapsulation aligment in next chunk + int gap = next_position - m_iterator.m_position; + skip(gap); + alignment(CDR.OCTET_SIZE); // prevents next_position == length + return; + } + + getNextChunk(); + } + + /** + * Set the stream pointer to the next aligned position of given data type + * and sets it as the last available position + * + * @param type_size + * the type size in octets + */ + public void fixNextAlignedPosition(int type_size) + { + goNextAlignedPosition(type_size); + + if (m_iterator.m_position >= m_iterator.m_chunk.m_available) + m_iterator.m_chunk.m_available = m_iterator.m_position + 1; + } + + /** + * Sets the writing pointer in the correct aligmnet for the data type. If + * necessary, gets the next chunk. + *

+ * CORBA 2.3 specification says: A primitive data type of 8 bytes or + * smaller, should never be broken across two fragments.Therefore, if the + * remaining bytes are not sufficient for reading the data next chunk will + * be set for reading. + *

+ * If it is reading a encapsulation and the data is broken into two chunks, + * reads the data compoentes byte per byte. + * + * @param type_size the type size for alignment. + * @return true if can read directly the data or + * false if byte swap is needed because the data is + * splitted in two framgments and is contended in a encapsulation. + */ + + public boolean alignment(int type_size) + { + // set the aligned position + + goNextAlignedPosition(type_size); + + if (m_iterator.enoughSpace(type_size)) + return true; + + // there is no space for whole data bytes + + m_iterator.m_chunk.m_available = m_chunk_buffer.length; + + if (m_iterator.m_encapsulation) + return false; // marshal byte per byte + + // marshaling in the main buffer, get next chunk + getNextChunk(); + + return true; + } + + public void skip(long n) + { + if (n > 0L) { + int chunk_left = m_chunk_buffer.length - m_iterator.m_position; + + if (chunk_left <= 0) { + getNextChunk(); + skip(n); + } else if (n <= chunk_left) { + m_iterator.skip((int) n); + if (m_iterator.m_position >= m_iterator.m_chunk.m_available) { + m_iterator.m_chunk.m_available = m_iterator.m_position + 1; + } + } else { + getNextChunk(); + skip(n - chunk_left); + } + } + } + + /** + * Recycle the buffer pointered by the stream. + * + * @see es.tid.TIDorbj.core.cdr.BufferCDR + */ + public void recycle() + { + m_iterator.rewind(); + m_iterator.m_buffer_cdr.recycle(); + m_chunk_buffer = m_iterator.m_chunk.m_buffer; + m_is_message = false; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/ChunkCDR.java b/source/es/tid/TIDorbj/core/cdr/ChunkCDR.java new file mode 100644 index 0000000..600a27d --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/ChunkCDR.java @@ -0,0 +1,162 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents a segment of a CDR buffer. It controls a marshaling byte buffer + * that can be send or received in a IIOP message. + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ChunkCDR +{ + + /** + * framgments of the chunk. + */ + protected byte[] m_buffer; + + /** + * Represents the amount of data available. Available is equal or lower than + * chunk length. + */ + protected int m_available; + + /** + * The starting of the chunk has an message header + */ + protected boolean m_with_message_header; + + /** + * Constructor, gets the control of the byte array. It will have only a + * fragment and it will not be increaseable. + */ + public ChunkCDR(byte[] byte_array) + { + m_buffer = byte_array; + m_available = m_buffer.length; + m_with_message_header = false; + } + + /** + * Constructor, gets the control of the byte array. It will have only a + * fragment and it will not be increaseable. + */ + public ChunkCDR(int fixed_size) + { + m_buffer = new byte[fixed_size]; + m_available = 0; + m_with_message_header = false; + } + + public boolean hasHeader() + { + return m_with_message_header; + } + + public void setHeader(boolean value) + { + m_with_message_header = value; + } + + /** + * @return the byte array associated to the buffer. + */ + public byte[] getBuffer() + { + return m_buffer; + } + + /** + * Sets the available bytes to 0. It is used to reuse the chunk buffer for + * new data. + */ + public void recycle() + { + m_available = 0; + } + + /** + * Sets the available bytes to the value position. An error + * can appear if the value is higher than the buffer length. + * + * @return true if OK or false on error. + */ + public boolean setAvailable(int value) + { + if (value <= m_buffer.length) { + m_available = value; + return true; + } + return false; + } + + /** + * @return The available bytes. + */ + + public int getAvailable() + { + return m_available; + } + + /** + * @return The lentgh ofthe byte buffer. + */ + + public int getLength() + { + return m_buffer.length; + } + + public void setBuffer(byte[] new_buffer) + { + m_buffer = null; + m_buffer = new_buffer; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/ContextCDR.java b/source/es/tid/TIDorbj/core/cdr/ContextCDR.java new file mode 100644 index 0000000..5709fd7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/ContextCDR.java @@ -0,0 +1,273 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Represents the contexts of a buffer marshaling across different + * encapsulations. The context is defined by: + *

    + *
  • if it is a encapsulation context + *
  • the alignment offset + *
  • the byte-order + *
  • the father context + *
+ * The context creates a list of encapsulations for navigate in and out of + * encapsulations. The list represented by the context is a + * + * @see TIDorb.corba.cdr.AlignmentOffset + * + * @autor Juan A. Cáceres + * @version 1.1 + */ + +public class ContextCDR +{ + + /** + * big-endian if true or little-endian, otherwise. + */ + protected boolean m_byte_order; + + /** + * The father context. In the root context, the father will be + * null. + */ + + protected ContextCDR m_father; + + /** + * alignment offset of the encapsulation. + * + * @see es.tid.TIDorbj.core.cdr.AlignmentOffset + */ + protected AlignmentOffset m_offset; + + /** + * Where is the beginnig of the encapsulation. + */ + + protected PointerCDR m_starts_at; + + /** + * The indirection node of the buffer. Here are all the typecodes that have + * been readed and can be indirectioned. + */ + + private IndirectionNode m_indirection_node; + + /** + * The TypeCode Position Node of the buffer. Here are all the typecodes that + * have been writed in the buffer and can be indirectioned. + */ + + private PositionsNode m_positions_node; + + /** + * The CDROutputStream that will write the encapsulation length. + */ + + protected CDROutputStream m_length_out; + + /** + * Constructor of the root context. A route of encapsulation contexts will + * end here. + * + * @see es.tid.TIDorbj.core.cdr.AlignmentOffset + */ + + public ContextCDR(PointerCDR start) + { + m_byte_order = CDR.LOCAL_BYTE_ORDER; + m_offset = AlignmentOffset.calculateOffsetFrom(0); + m_father = null; + m_starts_at = start; + m_indirection_node = null; + m_positions_node = null; + } + + public ContextCDR(PointerCDR start, ContextCDR father, + AlignmentOffset offset) + { + m_starts_at = start; + m_byte_order = father.m_byte_order; + this.m_offset = offset; + this.m_father = father; + m_indirection_node = null; + m_positions_node = null; + } + + public ContextCDR getFather() + { + return m_father; + } + + public boolean isRootContext() + { + return m_father == null; + } + + public void setOffset(AlignmentOffset value) + { + m_offset = value; + } + + public AlignmentOffset getOffset() + { + return m_offset; + } + + public void setByteOrder(boolean value) + { + m_byte_order = value; + } + + public boolean getByteOrder() + { + return m_byte_order; + } + + public void setLengthOut(CDROutputStream out) + { + m_length_out = out; + } + + public void deleteLengthOut() + { + m_length_out = null; + } + + public PointerCDR getStartPointer() + { + return m_starts_at; + } + + public synchronized PointerCDR lookupPosition(java.lang.Object id) + { + PositionsNode node = getPositionsNode(); + + PointerCDR position = node.lookup(id); + + if (position != null) + return position; + + if (m_father == null) + return null; + + position = m_father.lookupPosition(id); + + if (position != null) + node.indirection(position.getAbsolutePosition()); + + return position; + + } + + public synchronized void putObject(java.lang.Object obj, + PointerCDR position) + { + getPositionsNode().put(obj, position); + } + + public synchronized Object lookupObject(AbsolutePosition position) + { + IndirectionNode node = getIndirectionNode(); + + Object obj = node.lookup(position); + + if (obj != null) + return obj; + + if (m_father != null) + return m_father.lookupObject(position); + else + return null; + + } + + public synchronized void putPosition(AbsolutePosition position, + java.lang.Object obj) + { + getIndirectionNode().put(position, obj); + } + + private synchronized IndirectionNode getIndirectionNode() + { + if (m_indirection_node == null) { + AbsolutePosition starting = m_starts_at.getAbsolutePosition(); + if (m_father == null) + m_indirection_node = new IndirectionNode(starting); + else + m_indirection_node = + new IndirectionNode(starting, + m_father + .getIndirectionNode() + .getTable()); + } + + return m_indirection_node; + } + + private synchronized PositionsNode getPositionsNode() + { + if (m_positions_node == null) { + m_positions_node = + new PositionsNode(m_starts_at.getAbsolutePosition()); + } + + return m_positions_node; + } + + public boolean inAnEncapsulation() + { + return (m_father != null); + } + + public boolean hasExternalIndirections() + { + return (((m_indirection_node == null) ? false + : m_indirection_node.hasExternalIndirections()) + || ((m_positions_node == null) ? false + : m_positions_node.hasExternalIndirections())); + } +} + diff --git a/source/es/tid/TIDorbj/core/cdr/Encapsulation.java b/source/es/tid/TIDorbj/core/cdr/Encapsulation.java new file mode 100644 index 0000000..75fb572 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/Encapsulation.java @@ -0,0 +1,302 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.ORB; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +/** + * Represents the content data of an encapsulation (including the byte-order). + * An Encapsulation can be read to copy the content data from an input stream. + *

+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class Encapsulation +{ + + /** + * The empty encapsulation. + */ + + private static Encapsulation st_empty = null; + + /** + * The ORB. + */ + protected TIDORB m_orb; + + /** + * GIOPVersion + */ + protected GIOPVersion m_version; + + /** + * The octet sequence data. + */ + protected byte[] m_data; + + /** + * Start Position of the encapsulation in the byte array. + */ + int m_data_offset; + + /** + * Length of the encapsulation in the byte array. + */ + int m_data_length; + + /** + * Protected Constructor. Creates an empty encapsulation. + */ + protected Encapsulation(TIDORB orb, GIOPVersion ver) + { + this.m_orb = orb; + m_version = ver; + m_data_length = 0; + m_data_offset = 0; + } + + /** + * Protected Constructor. + * + * @param orb + * The ORB. + * @param key_buffer + * The octet sequence data. + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + */ + protected Encapsulation(TIDORB orb, GIOPVersion ver, byte[] key_buffer, + int offset, int length) + { + this.m_orb = orb; + m_version = ver; + m_data = key_buffer; + m_data_offset = offset; + m_data_length = length; + } + + public TIDORB getORB() + { + return m_orb; + } + + /** + * @return the encapsulation length (in octets). + */ + public int getLength() + { + return m_data_length; + } + + /** + * @return the encapsulation start position in the octet sequence. + */ + public int getOffset() + { + return m_data_offset; + } + + /** + * @return the encapsulation octet sequence. + */ + public byte[] getOctetSequence() + { + return m_data; + } + + /** + * Compares two encapsulations. + */ + public boolean equal(Encapsulation other) + { + if (other == null) + return false; + + if (m_data_length != other.m_data_length) + return false; + + int i = m_data_offset; + int j = other.m_data_offset; + + for (int length = 0; length < m_data_length; length++) { + if (m_data[i++] != other.m_data[j++]) + return false; + } + + return true; + } + + /** + * Gets a sub-encapsulation in the octet sequence. + * + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + */ + public Encapsulation getChild(int offset, int length) + { + if ((offset >= m_data_length) + || ((m_data_length - offset - length) < 0)) + return null; + else + return new Encapsulation(m_orb, m_version, m_data, offset, length); + } + + /** + * @return the empty encapsulation. + */ + public static Encapsulation getEmpty() + { + if (st_empty == null) + st_empty = new Encapsulation(null, GIOPVersion.VERSION_1_0); + + return st_empty; + } + + /** + * Static Encapsulation Creator operation. + * + * @param orb + * The ORB. key_buffer The octet sequence data. + * @param offset + * Start Position of the encapsulation in the byte array. + * @param length + * Length of the encapsulation in the byte array. + * @return a new Encapsulation. + */ + + public static Encapsulation create(TIDORB orb, + GIOPVersion ver, + byte[] key_buffer, + int offset, + int length) + { + if (length < 0) + return null; + + if (length == 0) + return getEmpty(); + + if ((key_buffer == null) || (offset < 0) + || (key_buffer.length - offset - length < 0)) + return null; + + return new Encapsulation(orb, ver, key_buffer, offset, length); + } + + /** + * @return an input stream for reading the encapsulation data. + */ + public CDRInputStream createInputStream() + { + if (m_data_length == 0) + return null; + + CDRInputStream input = new CDRInputStream(m_orb, m_data); + + if (m_data_offset > 0) { + input.skip(m_data_offset); + input.fixStarting(); + } + + input.setByteOrder(input.read_boolean()); + input.setVersion(m_version); + + return input; + } + + /** + * Writes the encapsulation data in an output stream. + * + * @param out + * the output stream. + */ + public void write(CDROutputStream out) + { + out.write_ulong(m_data_length); + + if (m_data_length > 0) + out.write_octet_array(m_data, m_data_offset, m_data_length); + } + + /** + * Reads a new encapsulation from an input stream. + * + * @param out + * the output stream. + */ + + public static Encapsulation read(CDRInputStream input, GIOPVersion ver) + { + ORB orb = input.orb(); + + Encapsulation encap = null; + if (orb instanceof TIDORB) + encap = new Encapsulation((TIDORB) orb, ver); + else + encap = new Encapsulation(null, ver); + + encap.doRead(input); + + return encap; + } + + private void doRead(CDRInputStream input) + { + m_data_length = input.read_ulong(); + + if (m_data_length > 0) { + m_data = new byte[m_data_length]; + input.read_octet_array(m_data, 0, m_data_length); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/IndirectionNode.java b/source/es/tid/TIDorbj/core/cdr/IndirectionNode.java new file mode 100644 index 0000000..0f6e133 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/IndirectionNode.java @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Hashtable; + +/** + * The Indirection class represents a node in the indirections to + * the typecodes marshaled in the actual Encapsulation. If the node is in an + * inner Encapsulation then it will references to the father encapsulation node. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IndirectionNode +{ + + private java.util.Hashtable m_table; + + /** + * Encapsulation Context. + */ + + private AbsolutePosition m_root_position; + + private AbsolutePosition m_lower_indirection; + + public IndirectionNode(AbsolutePosition start_position) + { + m_table = new Hashtable(); + m_root_position = start_position; + m_lower_indirection = m_root_position; + } + + public IndirectionNode(AbsolutePosition start_position, + java.util.Hashtable table) + { + m_table = table;// new Hashtable(); + m_root_position = start_position; + m_lower_indirection = m_root_position; + } + + /** + * Search an indirected object in the buffer + */ + public synchronized Object lookup(AbsolutePosition position) + { + + if (position.getValue() < m_lower_indirection.getValue()) { + m_lower_indirection = position; + return null; + } + + return m_table.get(position); + } + + public void put(AbsolutePosition position, java.lang.Object obj) + { + m_table.put(position, obj); + } + + public boolean hasExternalIndirections() + { + return m_lower_indirection.getValue() < m_root_position.getValue(); + } + + public java.util.Hashtable getTable() + { + return m_table; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/IteratorCDR.java b/source/es/tid/TIDorbj/core/cdr/IteratorCDR.java new file mode 100644 index 0000000..1f4f359 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/IteratorCDR.java @@ -0,0 +1,483 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.CompletionStatus; + +/** + * PositionCDR class gets track of byte array covering for marshaling and + * unmarshaling. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class IteratorCDR +{ + + /** + * Byte order of data in stream: big-endian if true, or + * little-endian if false + */ + protected boolean m_byte_order; + + /** + * The buffer controled by the buffer; + */ + + BufferCDR m_buffer_cdr; + + /** + * Actual Chunk Number. + */ + protected int m_current_chunk_num; + + /** + * The chunk covered + */ + protected ChunkCDR m_chunk; + + /** + * The actual position in the chunk + */ + protected int m_position; + + /** + * It is in an encapsulation. + */ + protected boolean m_encapsulation; + + /** + * Actual stream aligment offset. + */ + + protected AlignmentOffset m_alignment_offset; + + /** + * Last alignment calculated. + */ + + protected int m_last_alignment; + + /** + * Encapsulation context list. + */ + + protected ContextCDR m_context; + + /** + * Last mark for reset + */ + protected MarkCDR m_last_reset_mark; + + /** + * Starting mark for rewind + */ + protected MarkCDR m_starting_mark; + + // Constructor + + // Forbides the illegal use of a unitialized iterator. + + private IteratorCDR() + {} + + /** + * Constructor: gets a byte array referencen an places its position to 0 + */ + public IteratorCDR(BufferCDR buffer) + { + // Iterator in the buffer with root context + // generate the root position with root context an initial pointer, + m_buffer_cdr = buffer; + m_current_chunk_num = 0; + m_position = 0; + + PointerCDR initial_pointer = new PointerCDR(m_buffer_cdr, + m_current_chunk_num, + m_position); + + m_context = new ContextCDR(initial_pointer); + + // sets the iterator state ready to start at the beginnig of buffer. + fixStarting(); + + rewind(); + } + + /** + * Gets a byte array referencen an places its to the initial position. + */ + + public IteratorCDR(ContextCDR initial_context) + { + // Initial position values: + + m_context = initial_context; + + // sets the iterator state ready to start at the beginnig of buffer. + fixStarting(); + + rewind(); + } + + /** + * Sets the iterator possition to the starting position. + */ + + public void rewind() + { + goBack(m_starting_mark); + } + + protected MarkCDR getMark() + { + return new MarkCDR(m_context, getPointer()); + } + + protected void goBack(MarkCDR mark) + { + // context values + m_context = mark.getContext(); + + m_byte_order = m_context.getByteOrder(); + m_encapsulation = m_context.inAnEncapsulation(); + m_alignment_offset = m_context.getOffset(); + m_last_alignment = CDR.OCTET_SIZE; + + // pointer values; + PointerCDR initial_pointer = mark.getPointer(); + + m_current_chunk_num = initial_pointer.getNumChunk(); + m_buffer_cdr = initial_pointer.getBuffer(); + m_position = initial_pointer.getPosition(); + + m_chunk = m_buffer_cdr.getChunk(m_current_chunk_num); + + m_last_reset_mark = null; + } + + public void reset() + throws java.io.IOException + { + // state checking + if (m_last_reset_mark == null) + throw new java.io.IOException("Stream has no been marked"); + + goBack(m_last_reset_mark); + } + + public IteratorCDR copy() + { + + IteratorCDR new_iterator = new IteratorCDR(); + + new_iterator.m_context = m_context; + new_iterator.m_byte_order = m_context.getByteOrder(); + new_iterator.m_encapsulation = m_context.inAnEncapsulation(); + new_iterator.m_alignment_offset = m_context.getOffset(); + + // marks + + new_iterator.m_starting_mark = m_starting_mark; + new_iterator.m_last_reset_mark = null; + + new_iterator.m_current_chunk_num = m_current_chunk_num; + new_iterator.m_buffer_cdr = m_buffer_cdr; + new_iterator.m_position = m_position; + + new_iterator.m_chunk = m_chunk; + + return new_iterator; + } + + /** + * Returns the buffer CDR. + */ + public BufferCDR getBuffer() + { + + return m_buffer_cdr; + } + + /** + * @return the chunk pointered. + */ + public ChunkCDR getChunk() + { + + return m_chunk; + } + + /** + * @return true if little-endian or false if + * big-endian + */ + + public boolean getByteOrder() + { + return m_byte_order; + } + + /** + * Sets the byte order. + * + * @param byte_order + * is true if little-endian or false + * if big-endian + */ + + public void setByteOrder(boolean byte_order) + { + this.m_byte_order = byte_order; + m_context.setByteOrder(byte_order); + } + + /** + * @return the remaining bytes of the current chunk. + */ + + public int available() + { + int av = m_chunk.getAvailable() - m_position; + if (av < 0) + return 0; + else + return av; + } + + /** + * @return the remaining bytes of the buffer. + */ + + public int bufferAvailable() + { + int av = available(); + int num_chunks = m_buffer_cdr.getNumAvailableChunks(); + + for (int i = num_chunks - 1; i > m_current_chunk_num; i--) + av = m_buffer_cdr.getChunk(i).getAvailable(); + + return av; + } + + /** + * @return a pointer to actual position in the buffer, + */ + + PointerCDR getPointer() + { + return new PointerCDR(m_buffer_cdr, m_current_chunk_num, m_position); + } + + public void fixStarting() + { + m_starting_mark = getMark(); + } + + public void mark() + { + m_last_reset_mark = getMark(); + } + + /** + * Changes the alignment offset for a new Encapsulation, taking the actual + * position as the 0 positon of the encapsulation. Also, saves the actual + * aligment offset that will be restored when the + * exitEncapsulation were called. + */ + + public void enterEncapsulation() + { + ContextCDR new_context; + + m_encapsulation = true; + AlignmentOffset new_alignment_offset; + + new_alignment_offset = AlignmentOffset.calculateOffsetFrom(m_position); + + new_context = new ContextCDR(getPointer(), m_context, + new_alignment_offset); + m_context = new_context; + m_alignment_offset = new_alignment_offset; + } + + public void setAlignmentOffset(int relative_position) + { + + m_alignment_offset = + AlignmentOffset.calculateOffsetFrom(relative_position); + + m_context.setOffset(m_alignment_offset); + + } + + /** + * Restores the alignment offset for the Encapsulation containing the actual + * Encapsulation that it has been exited. + */ + + public void exitEncapsulation() + { + m_context = m_context.getFather(); + + m_byte_order = m_context.getByteOrder(); + m_alignment_offset = m_context.getOffset(); + m_encapsulation = m_context.inAnEncapsulation(); + } + + /** + * Says if it is in a encapsulation or in the main stream. + * + * @return true if it is in an encapsulation or + * false otherwise + */ + public boolean inAnEncapsulation() + { + return m_encapsulation; + } + + public void nextChunk() + throws org.omg.CORBA.MARSHAL + { + m_current_chunk_num++; + + if (m_current_chunk_num >= m_buffer_cdr.getNumChunks()) + throw new org.omg.CORBA.MARSHAL("END OF BUFFER", 0, + CompletionStatus.COMPLETED_NO); + + m_chunk = m_buffer_cdr.getChunk(m_current_chunk_num); + m_position = 0; + } + + /** + * Sets the covering position. It assumes if the new position is less than + * actual, the position is in a father encapsulation, of if greater is in + * the same encapsulation. + * + * @return true if OK, or false if it is a bad + * position. + */ + + public boolean setPosition(AbsolutePosition new_position) + { + // search the context + + int n = new_position.getValue(); + while (n < m_context.getStartPointer().getAbsolutePosition().getValue()) + exitEncapsulation(); + + // sets the chunk and position + + PointerCDR pointer = m_buffer_cdr.getPointer(n); + + if (pointer != null) { + m_current_chunk_num = pointer.getNumChunk(); + m_position = pointer.getPosition(); + return true; + } + // error bad position + return false; + } + + public void skip(int n) + { + m_position += n; + } + + /** + * Calculates the aligned position for the given type size. The aligment is + * refered at the actual encapsulation beginning. + * + * @param type_size + * the data type size. + */ + protected int alignPosition(int type_size) + { + int gap, rest; + rest = (m_position + m_alignment_offset.m_value) % type_size; + gap = (rest == 0) ? 0 : (type_size - rest); + return (m_position + gap); + } + + /** + * Says if the data must be aligned. + * + * @param type_size + * the data type size + */ + + public boolean mustAlign(int type_size) + { + return (m_position != alignPosition(type_size)); + } + + /** + * Changes aligns the position for the given type size.The aligment is + * refered at the actual encapsulation beginning. + * + * @param type_size + * the data type size. + */ + + public void align(int type_size) + { + m_position = alignPosition(type_size); + } + + /** + * Says if there is enougth space in the actual chunk for writting data from + * a given size. + * + * @param type_size the data type size. + * @return true<\code> if there is enougth space or false<\code> + * otherwise. + */ + + public boolean enoughSpace(int type_size) + { + return ((m_chunk.m_buffer.length - alignPosition(type_size)) + >= type_size); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/MarkCDR.java b/source/es/tid/TIDorbj/core/cdr/MarkCDR.java new file mode 100644 index 0000000..6afb5e0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/MarkCDR.java @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * Mark stack used for mark and rewind methods in CDRInputStream. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class MarkCDR +{ + + public MarkCDR(ContextCDR context, PointerCDR pointer) + { + m_context = context; + m_pointer = pointer; + } + + public ContextCDR getContext() + { + return m_context; + } + + public PointerCDR getPointer() + { + return m_pointer; + } + + /** + * Initial context for rewind. + */ + + protected ContextCDR m_context; + + /** + * Poiner to a buffer position. . + */ + + protected PointerCDR m_pointer; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/PointerCDR.java b/source/es/tid/TIDorbj/core/cdr/PointerCDR.java new file mode 100644 index 0000000..d83f214 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/PointerCDR.java @@ -0,0 +1,137 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +/** + * PointerCDR class points up a buffer position for future marshaling and + * unmarshaling. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class PointerCDR +{ + /** + * Buffer pointered. + */ + private BufferCDR m_buffer; + + /** + * Chunk number of the buffer. + */ + private int m_num_chunk; + + /** + * Position in the chunk + */ + private int m_position; + + /** + * Absolute position in the buffer. + */ + private AbsolutePosition m_absolute_position; + + /** + * Constructor: creates a pointer to position of a chunk in a buffer. + */ + + public PointerCDR(BufferCDR buffer, int num_chunk, int position) + { + this.m_buffer = buffer; + this.m_num_chunk = num_chunk; + this.m_position = position; + m_absolute_position = null; + } + + public BufferCDR getBuffer() + { + return m_buffer; + } + + public int getNumChunk() + { + return m_num_chunk; + } + + public int getPosition() + { + return m_position; + } + + /** + * Calculates the absolute position of a pointer from the begining of the + * buffer. + * + * @return the absulte position from the begining of the buffer. + */ + + public AbsolutePosition getAbsolutePosition() + { + + if (m_absolute_position == null) { + + int total_position = 0; + // add all the precedent chunks sizes + for (int i = 0; i < m_num_chunk; i++) + total_position += m_buffer.getChunk(i).getLength(); + // add the actual chunk position + total_position += m_position; + m_absolute_position = + AbsolutePosition.createAbsolutePosition(total_position); + } + return m_absolute_position; + } + + /** + * calculates the hash code of the pointer for a Hashtable. The hash code is + * the absolute position in the buffer that is a unique value in the buffer. + * + * @return the hash code. + */ + + public int hashCode() + { + return getAbsolutePosition().getValue(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/PositionsNode.java b/source/es/tid/TIDorbj/core/cdr/PositionsNode.java new file mode 100644 index 0000000..4178549 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/PositionsNode.java @@ -0,0 +1,149 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import java.util.Hashtable; + +/** + * The PositionNode class represents a table with the identifier + * and the position of the objects that has been marshaled in a buffer. + *

+ * The table entries are the Object identifier and the AbsolutePosition of the + * Object. + *

+ * There is a PositionNode per encapsulation, an they are linked + * to the father encausulation node throght the Encapsulation contexts. + * + *

+ * Copyright 2001 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class PositionsNode +{ + + /** + * Hashtable that contains Absolute positions of the TypeCodes. The keys are + * the repository ids. + */ + private Hashtable m_table; + + /** + * Position at the beginning of the encapsulation. + */ + private AbsolutePosition m_root_position; + + /** + * Lower Inidirected in the encapsulation sequence that has been looking up. + */ + private AbsolutePosition m_lower_indirection; + + public PositionsNode(AbsolutePosition type_code_position) + { + m_table = null; + m_root_position = type_code_position; + m_lower_indirection = m_root_position; + } + + /** + * Looks up if an Object has been yet marshaled in a stream. + * If the object has been marshaled in a father encapsulation, the it will + * remark it at the lower_indirection + * + * @param id + * the Object Id of the marshaled Object. + */ + public synchronized PointerCDR lookup(java.lang.Object obj) + { + // search in own table + if (m_table != null) + return (PointerCDR) m_table.get(obj); + + return null; + } + + /** + * notify the node that a indirection has been set thru this node + * + * @return true if the indirection pass through + */ + public synchronized void indirection(AbsolutePosition position) + { + if ((position != null) + && (position.getValue() < m_lower_indirection.getValue())) { + m_lower_indirection = position; + } + } + + /** + * Saves a TypeCode position in the table. + * + * @param id + * the Object Id of the marshaled object + * @param position + * the object position in the buffer + */ + + public synchronized void put(java.lang.Object id, PointerCDR position) + { + if (m_table == null) + m_table = new Hashtable(); + + m_table.put(id, position); + } + + /** + * Used to calculate if an marshaled TypeCode has any indirection out of the + * encapsulation. This means that a TypeCode encapsulation may or not be + * reused. + * + * @return whether or not has any indirection out of the encapsulation. + */ + public boolean hasExternalIndirections() + { + return m_lower_indirection.getValue() < m_root_position.getValue(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/TypeCodeReader.java b/source/es/tid/TIDorbj/core/cdr/TypeCodeReader.java new file mode 100644 index 0000000..49bf6a7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/TypeCodeReader.java @@ -0,0 +1,267 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 153 $ +* Date: $Date: 2007-12-12 08:57:20 +0100 (Wed, 12 Dec 2007) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.TypeCodeCache; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeImpl; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * TypeCode Demarshaling class. Reads the typecode kind and + * creates a new typecode finishing its remarshaling. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +class TypeCodeReader +{ + + /** + * Read a TypeCode from the InputStream. + * + * @param input + * the input stream + */ + public static TypeCode read(CDRInputStream input) + { + + // aligns to get the typeCode position + + input.alignment(CDR.LONG_SIZE); + + // gets the typecode position + + PointerCDR typecode_position = input.getPointer(); + + // read the tc_kind value + int kind = input.read_long(); + + if (kind == -1) // indirection + { + return readIndirection(input); + } + + // typecode kind + TCKind tc_kind = null; + + try { + tc_kind = TCKind.from_int(kind); + } + catch (BAD_PARAM bp) { + throw new BAD_TYPECODE("Invalid kind: " + bp.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + // Typecode readed + TypeCodeImpl type = null; + + if (TypeCodeFactory.isComplex(tc_kind)) { + TypeCode cached_type = findInCache(input); + + if (cached_type != null) { + input.skipEncapsulation(); + input.getContextCDR() + .putPosition(typecode_position.getAbsolutePosition(), + cached_type); + return cached_type; + } + + type = TypeCodeFactory.getComplexTypeCode(tc_kind); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + type.partialUnmarshal(input); + + // it is a complex typecode: insert the typecode in the table and + // unmarshal + + input.getContextCDR() + .putPosition(typecode_position.getAbsolutePosition(), type); + + return putInCache(input, type); + + } else if (TypeCodeFactory.isSemiComplex(tc_kind)) { + + type = TypeCodeFactory.getSemiComplexTypeCode(tc_kind); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + type.partialUnmarshal(input); + + return type; + + } else { // is basic + + type = TypeCodeFactory.getBasicTypeCode(tc_kind); + + if (type == null) + throw new org.omg.CORBA.INTERNAL("Error reading typecode"); + if (input.m_orb.m_conf.exhaustive_equal) { + type.setExhaustiveEqual(input.m_orb.m_conf.exhaustive_equal); + } + return type; + } + } + + /** + * Read a TypeCode from the InputStream. + * + * @param input + * the input stream + */ + public static TypeCode readIndirection(CDRInputStream input) + { + AbsolutePosition referenced_position = input.readIndirection(); + + // search in the indirection node + + java.lang.Object obj = input.getContextCDR() + .lookupObject(referenced_position); + + if (obj != null) { + if (obj instanceof TypeCode) { + return (TypeCode) obj; + } else { + throw new MARSHAL("Invalid indirection: no typecode indirected"); + } + } + + // Visibroker makes indirections to basic types, is it one? + + CDRInputStream indirection_input = input.copy(); + + indirection_input.setPosition(referenced_position); + + TCKind tc_kind = TCKind.from_int(indirection_input.read_long()); + + TypeCodeImpl type = TypeCodeFactory.getBasicTypeCode(tc_kind); + + if (type == null) // it is not a basic typeCode: ERROR!!! + throw new MARSHAL("Invalid indirection: no typecode indirected."); + + return type; + } + + public static TypeCode findInCache(CDRInputStream input) + { + TIDORB orb = (TIDORB) input.orb(); + + if (orb == null) + return null; + + TypeCodeCache cache = orb.getTypeCodeCache(); + + if (cache != null) { + + // lectura adelantada del repository id para ver si ya está en la + // cache + + CDRInputStream encap = input.copy(); + + encap.enterEncapsulation(); + + String rep_id = encap.read_string(); + + encap = null; + + return cache.find(rep_id); + } + + return null; + } + + public static TypeCode putInCache(CDRInputStream input, TypeCode tc) + { + TIDORB orb = (TIDORB) input.orb(); + + if (orb == null) + return tc; + + TypeCodeCache cache = orb.getTypeCodeCache(); + + if (cache != null) { + return cache.put(tc); + } + return tc; + } + + public static void skip(CDRInputStream input) + { + + int kind; // typecode kind value + TCKind tc_kind; // typecode kind + TypeCodeImpl type = null; // typecode + + // read the tc_kind value + kind = input.read_long(); + + if (kind == -1) { // indirection + // skip indirection offset + input.skipLong(); + } + + try { + tc_kind = TCKind.from_int(kind); + } + catch (BAD_PARAM bp) { + throw new BAD_TYPECODE("Invalid kind: " + bp.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + TypeCodeMarshaler.skipParams(tc_kind, input); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/cdr/ValueTypeInfo.java b/source/es/tid/TIDorbj/core/cdr/ValueTypeInfo.java new file mode 100644 index 0000000..98c1c0d --- /dev/null +++ b/source/es/tid/TIDorbj/core/cdr/ValueTypeInfo.java @@ -0,0 +1,342 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.cdr; + +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.util.CodeBaseURL; +import es.tid.TIDorbj.core.util.RepositoryId; + +public class ValueTypeInfo +{ + + public final static int NULL_TAG = 0; + + /* value tags constants */ + public final static int CODE_BASE_BIT = 0x00000001; + + public final static int SINGLE_REPOSITORY_ID = 0x00000002; + + public final static int REPOSITORY_ID_LIST = 0x00000006; + + public final static int INDIRECTION_TAG = 0xffffffff; + + public final static int FRAGMENTED_BIT = 0x00000008; + + public final static int MIN_VALUE_TAG = 0x7ffff00; + + public final static int MAX_VALUE_TAG = 0x7ffffff; + + public final static int MIN_CHUNK_SIZE = 0; + + public final static int MAX_CHUNK_SIZE = 0x7ffff00; + + private CodeBaseURL m_code_base_url; + + private RepositoryId[] m_repository_ids; + + private int m_value_tag; + + private java.io.Serializable m_value; + + public ValueTypeInfo() + { + m_code_base_url = null; + m_repository_ids = null; + m_value_tag = MIN_VALUE_TAG; + m_value = null; + } + + protected ValueTypeInfo(int value_tag) + { + m_code_base_url = null; + m_repository_ids = null; + m_value_tag = value_tag; + m_value = null; + } + + public boolean isNull() + { + return m_value_tag == NULL_TAG; + } + + public boolean isIndirection() + { + return m_value_tag == INDIRECTION_TAG; + } + + public boolean isFragmented() + { + return ((!isIndirection()) + && ((m_value_tag & FRAGMENTED_BIT) == FRAGMENTED_BIT)); + } + + public boolean is_state() + { + return (m_value_tag != NULL_TAG) && (m_value_tag != INDIRECTION_TAG); + } + + public RepositoryId[] get_repository_ids() + { + return m_repository_ids; + } + + public String get_id() + { + if ((m_repository_ids == null) || (m_repository_ids.length == 0)) + return null; + return m_repository_ids[0].m_value; + } + + public boolean is_truncable(String rep_id) + { + String value_id = null; + + if (m_repository_ids != null) { + for (int i = 0; i < m_repository_ids.length; i++) { + value_id = m_repository_ids[i].m_value; + + if (rep_id.equals(value_id)) { + return true; + } + } + } + return false; + } + + public void set_repository_ids(String[] ids) + { + RepositoryId[] rep_ids = new RepositoryId[ids.length]; + + for (int i = 0; i < ids.length; i++) { + rep_ids[i] = new RepositoryId(ids[i]); + } + set_repository_ids(rep_ids); + } + + public void set_repository_ids(RepositoryId[] ids) + { + m_repository_ids = ids; + + if ((ids == null) || (ids.length == 0)) { + m_value_tag &= ~REPOSITORY_ID_LIST; + } else if (ids.length == 1) { + m_value_tag &= ~REPOSITORY_ID_LIST; + m_value_tag |= SINGLE_REPOSITORY_ID; + } else { + m_value_tag |= REPOSITORY_ID_LIST; + } + } + + public void set_value(java.io.Serializable val) + { + m_value = val; + } + + public java.io.Serializable get_value() + { + return m_value; + } + + public boolean has_code_base_url() + { + return m_code_base_url != null; + } + + public CodeBaseURL get_code_base_url() + { + return m_code_base_url; + } + + public void set_code_base_url(CodeBaseURL url) + { + m_code_base_url = url; + + if (url == null) + m_value_tag &= ~CODE_BASE_BIT; + else + m_value_tag |= CODE_BASE_BIT; + } + + public void set_fragmented(boolean value) + { + if (value) + m_value_tag |= FRAGMENTED_BIT; + else + m_value_tag &= ~FRAGMENTED_BIT; + } + + public static ValueTypeInfo read(CDRInputStream in) + { + int value = in.read_long(); + + ValueTypeInfo info = new ValueTypeInfo(value); + + info.read_info(in); + + return info; + } + + public static void write_null(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(NULL_TAG); + } + + public void write(CDROutputStream out) + { + out.write_long(m_value_tag); + write_code_base_url(out); + write_type_info(out); + } + + protected void read_info(CDRInputStream input) + { + if ((m_value_tag != INDIRECTION_TAG) && (m_value_tag != NULL_TAG)) { + read_code_base_url(input); + read_type_info(input); + } + } + + protected void read_code_base_url(CDRInputStream input) + { + if ((m_value_tag & CODE_BASE_BIT) == 0x0) + return; + + input.alignment(CDR.LONG_SIZE); + + AbsolutePosition this_url_position = input.getAbsolutePosition(); + + int code_base_tag = input.read_long(); + + if (code_base_tag == INDIRECTION_TAG) { + AbsolutePosition url_position = input.readIndirection(); + java.lang.Object obj = input.getContextCDR() + .lookupObject(url_position); + + if ((obj != null) && (obj instanceof CodeBaseURL)) + m_code_base_url = (CodeBaseURL) obj; + else + throw new MARSHAL("Invalid URL indirection"); + } else { // read code_base_url + char[] chars = new char[code_base_tag]; + input.read_char_array(chars, 0, code_base_tag); + m_code_base_url = new CodeBaseURL(new String(chars)); + input.getContextCDR().putPosition(this_url_position, + m_code_base_url); + } + } + + protected void write_code_base_url(CDROutputStream out) + { + if (m_code_base_url != null) + out.write_string(m_code_base_url.m_url); + } + + protected void read_type_info(CDRInputStream input) + { + if ((m_value_tag & REPOSITORY_ID_LIST) == REPOSITORY_ID_LIST) { + // read ids sequence + int length = input.read_long(); + + if (length < 0) + throw new MARSHAL("Invalid RepositoryId seq length < 0"); + + m_repository_ids = new RepositoryId[length]; + + for (int i = 0; i < length; i++) + m_repository_ids[i] = read_repository_id(input); + + } else if ((m_value_tag & SINGLE_REPOSITORY_ID) == SINGLE_REPOSITORY_ID) { + // int length = input.read_long(); + + // if(length != 1) + // throw new MARSHAL("Invalid RepositoryId seq length != 1"); + + m_repository_ids = new RepositoryId[1]; + + m_repository_ids[0] = read_repository_id(input); + } // else there is no type data + } + + protected RepositoryId read_repository_id(CDRInputStream input) + { + input.alignment(CDR.LONG_SIZE); + AbsolutePosition id_position = input.getAbsolutePosition(); + + int repository_id_tag = input.read_long(); + if (repository_id_tag == INDIRECTION_TAG) { + AbsolutePosition url_position = input.readIndirection(); + java.lang.Object obj = input.getContextCDR() + .lookupObject(url_position); + + if ((obj != null) && (obj instanceof RepositoryId)) + return (RepositoryId) obj; + else + throw new MARSHAL("Invalid RepositoryId indirection"); + } else { + char[] chars = new char[repository_id_tag]; + input.read_char_array(chars, 0, repository_id_tag); + RepositoryId id = + new RepositoryId(new String(chars, 0, + repository_id_tag - 1)); + input.getContextCDR().putPosition(id_position, id); + return id; + } + } + + protected void write_type_info(CDROutputStream out) + { + if (m_code_base_url != null) + out.writeReferenceableString(m_code_base_url.m_url); + + if (m_repository_ids != null) { + if ((m_value_tag & REPOSITORY_ID_LIST) == REPOSITORY_ID_LIST) { + out.write_long(m_repository_ids.length); + for (int i = 0; i < m_repository_ids.length; i++) + out.writeReferenceableString(m_repository_ids[i].m_value); + } else { // SINGLE_REPOSITORY_ID + out.writeReferenceableString(m_repository_ids[0].m_value); + } + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/.svn/all-wcprops b/source/es/tid/TIDorbj/core/comm/.svn/all-wcprops new file mode 100644 index 0000000..a32d592 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/all-wcprops @@ -0,0 +1,65 @@ +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm +END +CommunicationException.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/CommunicationException.java +END +LocateResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/LocateResponseHandler.java +END +ResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ResponseHandler.java +END +ForwardRequest.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ForwardRequest.java +END +RequestDispatcher.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/RequestDispatcher.java +END +Connection.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/481/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/Connection.java +END +CommunicationDelegate.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/CommunicationDelegate.java +END +CommunicationManager.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/CommunicationManager.java +END +PropertyInfo.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/PropertyInfo.java +END +CommunicationLayer.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/CommunicationLayer.java +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/entries b/source/es/tid/TIDorbj/core/comm/.svn/entries new file mode 100644 index 0000000..f06de3b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/entries @@ -0,0 +1,380 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +CommunicationDelegate.java +file + + + + +2010-04-28T10:50:56.000000Z +b806162cbda764fa8add9f6a8a70bed4 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +13973 + +CommunicationManager.java +file +478 + + + +2011-04-29T14:42:47.000000Z +99b332b4d6aeb78a0ee26956937da353 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +24763 + +PropertyInfo.java +file + + + + +2009-05-27T12:24:01.000000Z +1ab1a98e86c594fa0e961db5e284afc7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4613 + +iiop +dir + +CommunicationLayer.java +file + + + + +2009-05-27T12:24:01.000000Z +adec86a4d88a85b862a75408df53266f +2008-04-12T14:33:40.707510Z +274 +avega +has-props + + + + + + + + + + + + + + + + + + + + +9537 + +CommunicationException.java +file + + + + +2009-05-27T12:24:01.000000Z +e8f0acb8e8873b4de2ce53be6597dbbd +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2097 + +LocateResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +8c978935cd729d5d004f76b84786a2e4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2270 + +ssliop +dir + +local +dir + +ResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +6974468309ed4a85aaf9c220b9544789 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2978 + +ForwardRequest.java +file + + + + +2009-05-27T12:24:01.000000Z +b6da9b961a4cc4599dddd7656ccb68d0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +307 + +giop +dir + +RequestDispatcher.java +file + + + + +2009-05-27T12:24:01.000000Z +daa952892b96be8dd9148c51128e8288 +2007-05-10T10:05:13.109677Z +67 +avega +has-props + + + + + + + + + + + + + + + + + + + + +6317 + +Connection.java +file +481 + + + +2012-05-04T14:29:01.000000Z +4fe069a0db31b88e1e667094768351a1 +2012-05-08T15:39:32.674920Z +481 +avega + + + + + + + + + + + + + + + + + + + + + +66512 + diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationDelegate.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationDelegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationDelegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationException.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationManager.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/CommunicationManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ForwardRequest.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ForwardRequest.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ForwardRequest.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/LocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/LocateResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/LocateResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/PropertyInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/PropertyInfo.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/PropertyInfo.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/RequestDispatcher.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/RequestDispatcher.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/RequestDispatcher.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/prop-base/ResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationDelegate.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationDelegate.java.svn-base new file mode 100644 index 0000000..c4459f2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationDelegate.java.svn-base @@ -0,0 +1,513 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision$ + * Date: $Date$ + * Last modified by: $Author$ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.InvalidPolicies; +import org.omg.CORBA.Object; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.portable.Delegate; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.ContextListImpl; +import es.tid.TIDorbj.core.ExceptionListImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * + * CommunicationDelegate is the base type for ORB's to be uncoupled of the + * underlying communications infraestructure from the 'client' side. + * It contains the base methods to allow sending requests to other ORB's. It + * keeps also the org.omg Delegate view, to allow regular corba Helper and + * Holder interaction. + * + * @author Juan Pablo Rojas. + * + */ +public abstract class CommunicationDelegate extends Delegate { + + protected TIDORB orb; + protected IOR reference; + protected CommunicationDelegate forwardReference; + protected PolicyContext policyContext; + + /** + * + */ + public CommunicationDelegate() { + super(); + this.orb = null; + this.reference = null; + this.policyContext = null; + } + + public CommunicationDelegate( TIDORB orb ) { + super(); + setORB( orb ); + } + + public void setORB(TIDORB orb) { + if (orb != null) { + this.orb = orb; + } else { + throw new IllegalArgumentException("Parameter 'orb' cannot be null"); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public void setReference(IOR ior) { + if (ior != null) { + this.reference = ior; + } else { + throw new IllegalArgumentException("Parameter 'ior' cannot be null"); + } + }//setReference + + /* + * As IOR could be set in it's generic and not unmarshalled way, children de + * legates should replace the generic implementation with a more specialized + * version... + */ + public abstract IOR getReference();/* { + return this.reference; + }//getReference*/ + + public synchronized void setPolicyContext( PolicyContext policyContext ){ + this.policyContext = policyContext; + }//setPolicyContext + + public PolicyContext getPolicyContext(){ + synchronized( this ) { + if ( this.policyContext == null ){ + this.policyContext = new PolicyContext(null); + } + } + return this.policyContext; + }//getPolicyContext + + public boolean is_a(org.omg.CORBA.Object self, String repositoryIdentifier) { + if (repositoryIdentifier == null) { + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (repositoryIdentifier.equals("IDL:omg.org/CORBA/Object:1.0")) { + return true; + } + if (repositoryIdentifier.equals(this.reference.getTypeId())) { + return true; + } + // search in known interface + String[] interf_ids = ((org.omg.CORBA.portable.ObjectImpl) self)._ids(); + + if (interf_ids != null) { + for (int i = 0; i < interf_ids.length; i++) { + if (repositoryIdentifier.equals(interf_ids)) { + return true; + } + } + } + + //ask to the remote object + if (this.orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + return this.invoke_is_a(self, repositoryIdentifier); + } + + public boolean is_equivalent(org.omg.CORBA.Object self, + org.omg.CORBA.Object other) { + if (other == null) { + throw new BAD_PARAM("Null reference"); + } + // are they the same object? + if (self == other) { + return true; + } + Delegate delegate = + ( (org.omg.CORBA.portable.ObjectImpl) other )._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + return this.reference.equivalent( + ((CommunicationDelegate) delegate).getReference() + ); + } else { + return toString().equals( + delegate.orb(other).object_to_string(other) + ); + } + } + + public org.omg.CORBA.ORB orb( org.omg.CORBA.Object self ){ + return this.orb; + } + + public int hash(org.omg.CORBA.Object self, int maximum) { + int code = this.reference.hashCode(); + if (code > maximum) { + code %= maximum; + } + return code; + }//hash + + + public org.omg.CORBA.Request request( org.omg.CORBA.Object self, + String operation ) { + if (operation == null) { + throw new BAD_PARAM( + "Null operation string", 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( this.orb == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO + ); + } + //TODO: RequestImpl should be common to all delegates, rename it? + return new RequestImpl( + self, + new ContextImpl( this.orb, "" ), + operation, + new NVListImpl( this.orb ), + null, + new ExceptionListImpl(), + new ContextListImpl() + ); + }//request + + public org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result ) { + + if ( this.orb == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO + ); + }//configurationCheck + + if ( self == null || + ctx == null || + operation == null || + arg_list == null ) { + + throw new BAD_PARAM( + "Null reference.", 0, CompletionStatus.COMPLETED_NO + ); + }//parametersCheck + + return new RequestImpl( + self, + ctx, + operation, + arg_list, + result, + new ExceptionListImpl(), + new ContextListImpl() + ); + }//createRequest + + public org.omg.CORBA.Request create_request( org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist ) { + + if ( this.orb == null ) { + throw new BAD_OPERATION( + "ORB Singleton: Can not create request", 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( self == null || + ctx == null || + operation == null || + arg_list == null || + exclist == null || + ctxlist == null ) { + + throw new BAD_PARAM( + "Null reference", 0, CompletionStatus.COMPLETED_NO ); + } + + return new RequestImpl( + self, + ctx, + operation, + arg_list, + result, + exclist, + ctxlist + ); + }//createRequest + + + public org.omg.CORBA.Policy get_policy( + org.omg.CORBA.Object self, + int policy_type ) { + + PolicyContext request_context; + request_context = createRequestPolicyContext(); + + return request_context.getPolicy( policy_type ); + }//get_policy + + public org.omg.CORBA.Object set_policy_override( + org.omg.CORBA.Object self, + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add ) { + + org.omg.CORBA.portable.ObjectImpl copy; + copy = ( org.omg.CORBA.portable.ObjectImpl ) self._duplicate(); + + //TODO: Note that the delegate stored in object reference must be a + //CommunicationsDelegate instance! + CommunicationDelegate delegate = ( CommunicationDelegate )copy._get_delegate(); + + try { + delegate.getPolicyContext().setPolicies(policies, set_add); + } catch (InvalidPolicies iv) {} + return copy; + + }//set_policy_override + + /* + * UNIMPLEMENTED API + */ + public org.omg.CORBA.DomainManager[] _get_domain_managers( + org.omg.CORBA.Object self ) { + + throw new org.omg.CORBA.NO_IMPLEMENT(); + }//_get_domain_managers + + + /* + * DEPRECATED API + */ + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.InterfaceDef get_interface(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + /* + * Utility methods used by TIDOrbJ + */ + + public void setForward(ForwardRequest fe) + { + try { + this.forwardReference = + orb.getCommunicationManager().createDelegate(fe.forward_reference); + } + catch (CommunicationException e) { + throw new INV_OBJREF("Cannot create delegate for: " + + fe.forward_reference.toString()); + } + + orb.printTrace( + Trace.DEBUG, new String[]{ + "DelegateImpl::non_exist(): ", + this.getReference().toString(), + " forwarded to: ", + this.forwardReference.toString() + } + ); + } + + /** + * Creates the PolicyContext for a request using reference + thread + ORB + * PolicyManagers + */ + public PolicyContext createRequestPolicyContext() + { + // generates effective Request context + + PolicyContext context = getPolicyContext(); + context = context.duplicate(); + Thread currentThread = Thread.currentThread(); + + // thread_context has as father ORB Context + PolicyContext thread_context = + orb.getPolicyContextManager().getThreadContext(currentThread); + + context.setFatherContext(thread_context); + return context; + } + + /* + * must use CommunicationManager to retrieve a valid delegate + * from provided ior. + * @deprecated since 6.0.1 + */ + public CommunicationDelegate fromString( TIDORB orb, String ior ) { + throw new UnsupportedOperationException(); + } + + public String toString(){ + if ( this.reference != null ) { + return this.reference.toString(); + } else { + throw new IllegalStateException( "No reference configured!" ); + } + } + + protected boolean invoke_is_a( org.omg.CORBA.Object self, String id ){ + // Create the request: + org.omg.CORBA.Request request = request(self, "_is_a"); + + // insert the parameter and return type + Any inputAny = request.add_named_in_arg( "repositoryIdentifier" ); + inputAny.insert_string(id); + request.set_return_type( this.orb.get_primitive_tc(TCKind.tk_boolean) ); + + // Perform the invocation: + request.invoke(); + + java.lang.Exception exception; + if ( ( exception = request.env().exception() ) != null ) { + throw (org.omg.CORBA.SystemException) exception; + } + + // Extrae el resultado y los argumentos de salida: + return request.return_value().extract_boolean(); + + }//invoke_is_a + + public org.omg.CORBA.portable.OutputStream request( + org.omg.CORBA.Object object, + String operation, + boolean responseExpected ){ + + if ( this.is_local( object ) ) { + throw new BAD_OPERATION( + "Request is only valid for remote objects" + ); + } + + org.omg.CORBA.portable.ObjectImpl target; + target = (org.omg.CORBA.portable.ObjectImpl) object; + + StreamRequestImpl request = new StreamRequestImpl( + this.orb, + target, + operation, + responseExpected + ); + + this.prepareRequest(request); + + return request.getOutputStream(); + + } + + public String get_codebase( org.omg.CORBA.Object self ){ + return null; + } + + /* + * To be implemented by concrete implementations + */ + public abstract boolean isLocal( org.omg.CORBA.Object self ); + + public abstract boolean non_existent( org.omg.CORBA.Object self ); + + public abstract org.omg.CORBA.Object duplicate( org.omg.CORBA.Object self ); + + public abstract void release( org.omg.CORBA.Object self ); + + public abstract void release_reply( + org.omg.CORBA.Object self, + org.omg.CORBA.portable.InputStream inputStream + ); + + //TODO: actually this operation is performed by the 'old' commLayer itself + public abstract void prepareRequest( StreamRequestImpl request ); + + public abstract void onewayRequest( RequestImpl request ); + + public abstract void invoke( RequestImpl request ); + + // AMI callback operations + public abstract void asyncRequest( RequestImpl request, Object ami_handler ); + + public abstract org.omg.CORBA.portable.InputStream invoke( + org.omg.CORBA.Object object, + org.omg.CORBA.portable.OutputStream stream ) + throws + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException ; + + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationException.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationException.java.svn-base new file mode 100644 index 0000000..1816c75 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationException.java.svn-base @@ -0,0 +1,71 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +/** + * + * Generic excetion thrown from communications infraestructure. TODO: this + * should be concreted upon refactoring evolution + * + * @author jprojas + * + */ +public class CommunicationException extends Exception { + + public CommunicationException(){ + super(); + } + + public CommunicationException( String message ){ + super( message ); + } + + public CommunicationException( String message, Throwable cause ){ + super( message, cause ); + } + + public CommunicationException( Throwable cause ){ + super( cause ); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationLayer.java.svn-base new file mode 100644 index 0000000..d1c3f95 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationLayer.java.svn-base @@ -0,0 +1,249 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision$ + * Date: $Date$ + * Last modified by: $Author$ + * + * (C) Copyright 2004 Telefónica Investigación y Desarrollo + * S.A.Unipersonal (Telefónica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ + +package es.tid.TIDorbj.core.comm; + + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +; + +/** + * The interface of every CommunicationLayer implementation. + * + * @see CommunicationManager + */ +public interface CommunicationLayer { + + + public abstract void setORB( TIDORB orb ); + public abstract TIDORB getORB(); + + public void setServerModeEnabled( boolean value ) throws CommunicationException; + public boolean isServerModeEnabled(); + + public void shutdown( boolean waitForCompletion ); + + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the given URL. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + * @param url the URL of the service to which to connect + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(String url) throws CommunicationException; + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the given URL. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + *

The java.util.Properties argument can be used to pass + * arbitrary string tag/value pairs as connection arguments. + * + * @param url the URL of the service to which to connect + * @param info a list of arbitrary string tag/value pairs as arguments. + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(String url, java.util.Properties info) + throws CommunicationException; + + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the service identified by the given reference. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + * @param url the URL of the service to which to connect + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(IOR ior) throws CommunicationException; + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the service identified by the given reference. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + *

The java.util.Properties argument can be used to pass + * arbitrary string tag/value pairs as connection arguments. + * + * @param ior the IOR of the service to which to connect + * @param info a list of arbitrary string tag/value pairs as + * connection arguments. + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(IOR ior, java.util.Properties info) + throws CommunicationException; + + /** + * Retrieves whether the driver thinks that it can open a connection + * to the resource identified by the given URL. + * + * @param url the URL of the desired resource + * @return true if this driver understands the given URL; + * false otherwise + * @exception CommunicationException if a database access error occurs + */ + boolean accepts(String url) throws CommunicationException; + + + /** + * Retrieves whether the driver thinks that it can open a connection + * to the resource identified by the given URL. + * + * @param ior the IOR associated with the desired service + * @return true if this driver understands the given URL; + * false otherwise + * @exception CommunicationException if a database access error occurs + */ + boolean accepts(IOR ior) throws CommunicationException; + + /** + * Creates an base ior containing the information regarding the + * communication's configuration (ie, prototol, version, host & port used) + * @return an ior filled with the communications info available for + * current layer. + * @throws CommunicationException + */ + IOR createIOR( String repositoryId, ObjectKey key, TaggedComponent[] components ) + throws CommunicationException; + + /** + * Creates an base url containing the information regarding the + * communication's configuration (ie, prototol, version, host & port used) + * @return an String filled with the communications info available for + * current layer. + * @throws CommunicationException + */ + String createURL( String repositoryId, ObjectKey key ) throws CommunicationException; + + + //TODO: check the convenience of these method + public String getInitialReference( IOR ior ) throws CommunicationException; + public String getInitialReference( String url ) throws CommunicationException; + + + public boolean isLocal( IOR ior ) throws CommunicationException; + public boolean isLocal( String url ) throws CommunicationException; + + + /** + * Gets information about the possible properties for this driver. + *

+ * The getPropertyInfo method is intended to allow a generic + * GUI tool to discover what properties it should prompt + * a human for in order to get + * enough information to connect to a certain service. Note that depending on + * the values the human has supplied so far, additional values may become + * necessary, so it may be necessary to iterate though several calls + * to the getPropertyInfo method. + * + * @param url the URL of the database to which to connect + * @param info a proposed list of tag/value pairs that will be sent on + * connect open + * @return an array of DriverPropertyInfo objects describing + * possible properties. This array may be an empty array if + * no properties are required. + * @exception CommunicationException if some error occurs + */ + PropertyInfo[] getPropertiesInfo(); + PropertyInfo getPropertyInfo( String name ); + + + /** + * Retrieves the Layer's major version number. Initially this should be 1. + * + * @return this Layer's major version number + */ + int getMajorVersion(); + + /** + * Gets the Layer's minor version number. Initially this should be 0. + * @return this Layers's minor version number + */ + int getMinorVersion(); + + /** + * Gets the Layers identification string. + */ + String getId(); + + /** + * Gets the Layers identification string. + */ + void dump(java.io.PrintWriter writer); + + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationManager.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationManager.java.svn-base new file mode 100644 index 0000000..88c9642 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/CommunicationManager.java.svn-base @@ -0,0 +1,725 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision$ + * Date: $Date$ + * Last modified by: $Author$ + * + * (C) Copyright 2004 Telefnica Investigacin y Desarrollo + * S.A.Unipersonal (Telefnica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm; + +import java.util.Hashtable; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.util.Trace; + +/** + * Based on the jdbc interface and driver registry implementation, + * CommunicationManager will provide a way to uncouple the underlying + * communications infraestructure from the logic regarding the processing, + * execution and result retrieval of incoming and outgoing requests. + * + * Through the CommunicationManager, ORB will be able to obtain a + * concrete CommunicationDelegate depending on the URL / IOR + * provided, so that the actual communication process will be managed by the + * underlying implementation + * + * From the internal side of each CommunicationLayer, it will + * provide a reference to a RequestDispatcher object that will hold + * the process of request enqueual into ORB's infraestructure + * + * @author Juan Pablo Rojas + * + * + */ +public class CommunicationManager { + + + private boolean offline; + + /** + * Attempts to establish a connection to the given database URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered layers. + * + * @param url + * a service url of the form + * protocol:subprotocol:subname + * @return a connection to the URL + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate(String url) + throws CommunicationException { + + java.util.Properties info = new java.util.Properties(); + + return ( createDelegate( url, info ) ); + } + + /** + * Attempts to create a delegate for the given URL. The + * CommunicationManager attempts to select the appropriate + * CommunicationLayer from the set of registered layers. + * + * @param ior a service ior + * + * @return a CommunicationDelegate to the desired service + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( IOR ior ) + throws CommunicationException { + + java.util.Properties info = new java.util.Properties(); + + return ( createDelegate( ior, info ) ); + } + + /** + * Attempts to locate a layer that understands the given URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered layers. + * + * @param url + * a URL of the form + * :: + * @return a CommunicationsLayer object representing a layer that can + * connect to the given service + * @exception CommunicationException + * if an error occurs + */ + public synchronized CommunicationLayer getLayer(String url) + throws CommunicationException { + println("CommunicationManager.getLayer(\"" + url + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + try { + println(" trying " + li); + if (li.layer.accepts(url)) { + // Success! + println("getLayer returning " + li); + return (li.layer); + } + } catch (CommunicationException ex) { + // Drop through and try the next driver. + } + } + + println("getLayer: no suitable layer"); + throw new CommunicationException("No suitable layer"); + } + + + + /** + * Attempts to locate a layer that matches the given Id. . + * + * @param id + * + * @return a CommunicationsLayer object representing a layer + * identified as id, or null if the layer wasn't found + */ + public CommunicationLayer getLayerById( String id ) { + + // TODO trace it + // println("CommunicationManager.getLayerById(\"" + id + "\")"); + + if (!initialized) { + initialize(); + } + CommunicationLayer desiredLayer = null; + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + //println( " trying " + li ); + if (li.layer.getId().equals( id )) { + // Success! + // println( "getLayer returning " + li ); + desiredLayer = li.layer; + } + + } + return desiredLayer; + }//getLayerById + + + /** + * Attempts to locate a layer that can connect to the service bound to the + * IOR object passed as an argument. The CommunicationManager + * attempts to select an appropriate layer from the set of registered communication + * layers. + * + * @param ior + * a service IOR + * @return a CommunicationLayer object representing a driver that can + * connect to the given URL + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationLayer getLayer( IOR ior ) + throws CommunicationException { + + println("CommunicationManager.getDriver(\"" + ior + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + try { + println( " trying " + li ); + if (li.layer.accepts( ior )) { + // Success! + println( "getLayer returning " + li ); + return ( li.layer ); + } + } catch ( CommunicationException ex ) { + // Drop through and try the next driver. + } + } + + println( "getLayer: no suitable layer" ); + throw new CommunicationException( "No suitable layer" ); + } + + /** + * Registers the given layer with the CommunicationManager. + * A newly-loaded driver class should call the method + * registerDriver to make itself known to the + * CommunicationManager. + * + * @param layer + * the new CommunicationLayer that is to be registered with the + * CommunicationManager + * @exception CommunicationException + * if an error occurs + */ + public synchronized void registerLayer(CommunicationLayer layer) + throws CommunicationException { + + if (!initialized) { + initialize(); + } + + LayerInfo li = new LayerInfo(); + li.layer = layer; + li.layerClass = layer.getClass(); + li.layerClassName = li.layerClass.getName(); + availableLayers.addElement(li); + println( "registerLayer: " + li ); + } + + /** + * Drops a layer from the CommunicationManager's list. + * Applets can only deregister availableLayers from their own classloaders. + * + * @param layer + * the CommunicationLayer to drop + * @exception CommunicationException + * if an error occurs + */ + public synchronized void deregisterLayer(CommunicationLayer layer) + throws CommunicationException { + + println( "CommunicationManager.deregisterLayer: " + layer ); + + // Walk through the loaded availableLayers. + int i; + LayerInfo li = null; + for (i = 0; i < availableLayers.size(); i++) { + li = (LayerInfo) availableLayers.elementAt(i); + if (li.layer == layer) { + break; + } + } + // If we can't find the driver just return. + if (i >= availableLayers.size()) { + println(" couldn't find driver to unload"); + return; + } + + // Remove the layer. Other entries in availableLayers get shuffled down. + availableLayers.removeElementAt(i); + }//deregisterLayer + + /** + * Prints a message to the current log stream. + * + * @param message + * a log or tracing message + */ + public void println( String message ) { + if ( this.orb != null ){ + if ( this.orb.m_trace != null ){ + this.orb.m_trace.print( Trace.DEEP_DEBUG, message ); + } + } + } + + public void println( String msg, Throwable th ){ + if ( this.orb != null ){ + if ( this.orb.m_trace != null ){ + this.orb.m_trace.printStackTrace( Trace.DEEP_DEBUG, msg, th ); + } + } + } + + //------------------------------------------------------------------------ + //Initialization stuff + + private void loadInitialLayers() { + String layers; + try { + //if (this.orb.m_conf. + layers = this.orb.m_conf.comm_layers; + } catch (Exception ex) { + layers = null; + } + println("CommunicationManager.initialize: = " + ConfORB.comm_layers_name + ": " + layers ); + if (layers == null) { + return; + } + while (layers.length() != 0) { + int x = layers.indexOf(':'); + String layer; + if (x < 0) { + layer = layers; + layers = ""; + } else { + layer = layers.substring(0, x); + layers = layers.substring(x + 1); + } + if (layer.length() == 0) { + continue; + } + try { + println("CommunicationManager.Initialize: loading " + layer); + Class currentLayerClass = Class.forName(layer); + //Class currentLayerClass = Class.forName(layer, true, ClassLoader.getSystemClassLoader()); + if ( currentLayerClass != null ){ + CommunicationLayer currentLayer; + currentLayer = (CommunicationLayer) currentLayerClass.newInstance(); + + LayerInfo li = new LayerInfo(); + li.layerClassName = layer; + li.layerClass = currentLayerClass; + li.layer = currentLayer; + availableLayers.add( li ); + //TODO: modify apis to provide a reference to it's own layer + //as soon as possible, at this moment, they access it's pare + //nt layer through communicationManager, so it must be added + //prior to initialization (performed at setOrb's). + currentLayer.setORB( this.orb ); + + currentLayer.dump(this.orb.m_trace.getLog()); + + } + } catch (Exception ex) { + println("CommunicationManager.Initialize: load failed: " + ex, ex); + } + } + } + + /** + * Attempts to establish a connection to the given service URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered JDBC availableLayers. + * + * @param url + * a service url of the form + * :: + * @param info + * a list of arbitrary string tag/value pairs as connection + * arguments; + * @return a CommunicationDelegate instance which will manage + * requests to the specified service + * @exception SQLException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( + String url, + java.util.Properties info) + throws CommunicationException { + + if (url == null) { + throw new CommunicationException( "Parameter 'url' cannot be null" ); + } + + println("CommunicationManager.connect(\"" + url + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to make a connection. + // Remember the first exception that gets raised so we can reraise it. + Exception reason = null; + CommunicationLayer commLayer; + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + // If the caller does not have permission to load the driver then + // skip it. + try { + println( " trying " + li ); + if ( li.layer.accepts( url ) ){ + CommunicationDelegate result = li.layer.createDelegate(url, info); + if (result != null) { + // Success! + println( "connect returning " + li ); + return (result); + } + } + } catch (CommunicationException ce ){ + if ( reason != null ){ + reason = ce; + } + } + } + + // if we got here nobody could connect. + if (reason != null) { + println( "connect failed: " + reason ); + throw new CommunicationException( "connect failed", reason ); + } + + println( "connect: no suitable driver" ); + throw new CommunicationException( "No suitable driver" ); + } + + /** + * Attempts to establish a connection to the given service IOR. The + * CommunicationManager attempts to select an appropriate + * CommunicationLayer from the set of registered layers. + * + * @param ior the service IOR + * + * :: + * @param info + * a list of arbitrary string tag/value pairs as connection + * arguments; + * @return a CommunicationDelegate instance which will manage + * requests to the specified service + * @exception SQLException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( + IOR ior, + java.util.Properties info) + throws CommunicationException { + + if (ior == null) { + throw new CommunicationException( "Parameter 'ior' cannot be null" ); + } + + println("CommunicationManager.connect(\"" + ior + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to make a connection. + // Remember the first exception that gets raised so we can reraise it. + Exception reason = null; + CommunicationLayer commLayer; + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + // If the caller does not have permission to load the driver then + // skip it. + try { + println( " trying " + li ); + if ( li.layer.accepts( ior ) ){ + CommunicationDelegate result = li.layer.createDelegate(ior, info); + if (result != null) { + // Success! + println( "connect returning " + li ); + return (result); + } + } + } catch (CommunicationException ce ){ + if ( reason != null ){ + reason = ce; + } + } + } + + // if we got here nobody could connect. + if (reason != null) { + println( "connect failed: " + reason ); + throw new CommunicationException( "connect failed", reason ); + } + + println( "connect: no suitable driver" ); + throw new CommunicationException( "No suitable layer" ); + } + + //TODO: check the convenience of these method + public String getInitialReference( IOR ior ) throws CommunicationException { + if (!initialized) { + initialize(); + } + + String initialReference; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( ior ); + if ( peerLayer != null ){ + initialReference = peerLayer.getInitialReference( ior ); + } else { + initialReference = null; + } + return initialReference; + } + + public String getInitialReference( String url ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + String initialReference; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( url ); + if ( peerLayer != null ){ + initialReference = peerLayer.getInitialReference( url ); + } else { + initialReference = null; + } + return initialReference; + } + + + public boolean isLocal( IOR ior ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + boolean isLocal; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( ior ); + if ( peerLayer != null ){ + isLocal = peerLayer.isLocal( ior ); + } else { + throw new CommunicationException( "Invalid ior: no suitable layer" ); + } + return isLocal; + } + + + public boolean isLocal( String url ) throws CommunicationException{ + + if (!initialized) { + initialize(); + } + + boolean isLocal; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( url ); + if ( peerLayer != null ){ + isLocal = peerLayer.isLocal( url ); + } else { + throw new CommunicationException( "Invalid url: no suitable layer" ); + } + return isLocal; + } + + /** + * @param b + */ + public synchronized void setServerModeEnabled( boolean b ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + if ( this.offline ) { + + this.getLayerById( IIOPCommunicationLayer.ID ).setServerModeEnabled( + b + ); + + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.setServerModeEnabled( b ); + } + this.offline = false; + } + }//setServerModeEnabled + + + /** + * @param waitForCompletion + */ + public synchronized void shutdown( boolean waitForCompletion ) { + + if (!initialized) { + initialize(); + } + + if ( !this.offline ) { + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.shutdown( waitForCompletion ); + } + this.offline = true; + } + } + + /** + * + */ + public void destroy() { + + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.shutdown(false); + } + + } + + public synchronized RequestDispatcher getRequestDispatcher() { + if ( this.dispatcher == null ){ + this.dispatcher = new RequestDispatcher( this.orb ); + } + return this.dispatcher; + }//getRequestDispatcher + + + public static synchronized CommunicationManager getInstance( TIDORB orb ){ + if ( CommunicationManager.instances == null ){ + CommunicationManager.instances = new Hashtable(); + } + if ( orb != null ){ + CommunicationManager manager; + manager = ( CommunicationManager )CommunicationManager.instances.get( orb ); + if ( manager == null ){ + manager = new CommunicationManager( orb ); + CommunicationManager.instances.put( orb, manager ); + } + return manager; + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setOrb + + public synchronized String toString(){ + StringBuffer toString; + toString = new StringBuffer(); + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i=0; i < layersCount; i++ ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + toString.append( actualLayerInfo.layer); + if ( i < layersCount - 1 ){ + toString.append( ' ' ); + } + } + return toString.toString(); + } + + private CommunicationManager( TIDORB orb ){ + this.orb = orb; + } + + public TIDORB getORB(){ + return this.orb; + } + + // Class initialization. + private void initialize() { + if (initialized) { + return; + } + initialized = true; + this.loadInitialLayers(); + this.offline = true; + println(" CommunicationManager initialized"); + } + + + private TIDORB orb = null; + + private RequestDispatcher dispatcher = null; + + private java.util.Vector availableLayers = new java.util.Vector(); + + private static Hashtable instances; + + private boolean initialized = false; + + + +} + +// LayerInfo is a package-private support class. + +class LayerInfo { + CommunicationLayer layer; + + Class layerClass; + + String layerClassName; + + public String toString() { + return ("driver[className=" + layerClassName + "," + layer + "]"); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/Connection.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/Connection.java.svn-base new file mode 100644 index 0000000..ae884af --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/Connection.java.svn-base @@ -0,0 +1,2047 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import java.io.IOException; +import java.net.Socket; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.comm.ssliop.*; + +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb IIOP IIOPConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +abstract public class Connection extends ORBComponent implements RemovableObject { + //public class IIOPConnection extends Connection { + + /** + * Client connection mode. + */ + public final static int CLIENT_MODE = 0; + + /** + * Server connection mode. + */ + public final static int SERVER_MODE = 1; + + /** + * Bidirectional connection mode. + */ + public final static int BIDIRECTIONAL_MODE = 2; + + /** + * IIOPConnection mode. + */ + protected int m_mode; + + /** + * IIOPConnection state. + */ + protected ConnectionState m_state; + + /** + * Pending requests in POA. + */ + protected Counter m_requests_in_POA; + + /** + * Actual id count. The ids will be given sequentialy. + */ + private Counter id_count; + + /** + * IIOPConnection identifier: the local port related to the connection socket. + */ + + protected int my_port = 0; + + /** + * Server Object Listen Points assitiated. + */ + + protected java.util.Hashtable m_addresses; + + /** + * First client address; + */ + + protected ListenPoint m_initial_point; + + /** + * The IIOPConnectionManager. + */ + + protected IIOPConnectionManager m_manager; + + /** + * Lock list where the pending requests are waiting for response. + */ + + protected LockList m_lock_list; + + /** + * Lock list where the pending asynchronous requests are waiting for response. + */ + + protected AMILockList m_ami_lock_list; + + /** + * Table with the uncompleted messages that has more fragments. + */ + + protected UseTable m_uncompleted_messages; + + /** + * Maintains the actual request id for fragmented message in GIOP 1.1 + */ + + RequestId m_current_request_id; + + /** + * Bidirectional Service Context. It will be sent in the next + * Request/Response. + */ + + protected ServiceContextList m_bidirectional_service; + + /** + * Says if the bidirecitonal context has to been sent or not. + */ + + protected boolean m_send_bidirectional_service; + + /** + * Write messages in socket monitor. + */ + + protected ConnectionWriteMonitor m_write_monitor; + + /** + * IIOPConnection buffer for writting headers. + */ + byte[] m_send_header_buffer; + + /** + * IIOPConnection buffer for receiving headers. + */ + byte[] m_receive_header_buffer; + + /** + * The toString() return value. + */ + protected String m_str = null; + + /** + * Register the connection at the connection manager and initialize the + * connection socket with the ORB configuration values. + * + * @see es.tid.TIDorbj.core.ConfORB + */ + +// private boolean tcpNoDelay; +// private int soTimeout; +// private int soLinger; + private int maxUncompletedMessages; +// private int socketWriteTimeout; + private GIOPVersion giopVersion; + private int giopFragmentSize; + private boolean ipv6; + + /** + * Says if QoS is enabled not. + */ + long max_response_blocked_time; + + /** + * Says if QoS is enabled not. + */ + boolean qos_enabled; + + /** + * Says if the client can sssume that server uses ziop or not. + */ + boolean assume_ziop_server; + + protected Connection(IIOPConnectionManager mngr) + { + super(mngr.orb()); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + maxUncompletedMessages = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.MAX_UNCOMPLETED_MESSAGES ) + .getInt(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + + giopFragmentSize = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.FRAGMENT_SIZE ) + .getInt(); + + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + if (this.ipv6 == true) + { + System.setProperty("java.net.preferIPv6Address","true"); + System.setProperty("java.net.preferIPv4Stack","false"); + } + + max_response_blocked_time = m_orb.m_conf.max_blocked_time; + qos_enabled = m_orb.m_conf.qos_enabled; + assume_ziop_server = m_orb.m_conf.assume_ziop_server; + + m_state = new ConnectionState(); + + m_requests_in_POA = new Counter(); + + id_count = new Counter(); + + m_current_request_id = null; + + m_lock_list = new LockList(); + + m_ami_lock_list = m_orb.getAMIManager().getAMILockList(); + + m_uncompleted_messages = new UseTable( maxUncompletedMessages ); + + m_send_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + m_receive_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + + } + + /** + * Start the connection thread execution. + */ + public void init() + { + try { + ConnectionThread conn_thread = new ConnectionThread(this); + conn_thread.setDaemon(false); + conn_thread.start(); + } + catch (Throwable thw) { + throw new org.omg.CORBA.NO_RESOURCES( + "Can't create thread: " + thw.toString() ); + } + + } + + /** + * IIOPConnection hash code. + */ + public abstract int hashCode(); + + public abstract boolean equals(Object obj); + + public abstract String toString(); + + + /** + * Add a new listen point for whose this connection can be uses to sending + * request. This will be usefull if this connection is bidirectional. + * + * @param listen_point + * the new listen point of an bidirectional connection + */ + public void addListenPoint(ListenPoint listen_point) + { + m_addresses.put(listen_point, listen_point); + } + + /** + * @return the listen points associated to this connection + */ + public Enumeration getListenPoints() + { + return m_addresses.elements(); + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects that a referenced object is defined in a + * "Bidirectional POA". The contest will be sent in the next response. + * + * @param context + * the list containing the BiDirServiceContext + */ + public void setBidirectionalMode(ServiceContextList context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + m_bidirectional_service = context; + + m_send_bidirectional_service = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, toString() + + ": Setting Bidirectional Mode."); + } + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects a bidirectional context in a request or + * response sent by the peer. + * + * @param context + * the bidirectional context + */ + + public void setBidirectionalModeByPeer(BiDirServiceContext context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + if (m_orb.m_trace != null) { + m_orb + .printTrace( + Trace.DEBUG, + toString() + + ": Setting Bidirectional Mode by Peer."); + } + + for (int i = 0; i < context.m_listen_points.length; i++) { + addListenPoint(context.m_listen_points[i]); + m_manager.addBidirectionalConnection(context.m_listen_points[i], + (es.tid.TIDorbj.core.comm.Connection)this); + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + toString() + + " will be connected to" + + context.m_listen_points[i].toString()); + } + } + + } + + /** + * Test whether the connection is still opened or not. + * + * @return true if open or false if not. + */ + + public boolean isOpen() + { + return m_state.isOpen(); + } + + /** + * @return the communication error (if exits) + */ + public COMM_FAILURE getConnectionError() + { + return m_state.getError(); + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isClientConnection() + { + return m_mode == CLIENT_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isServerConnection() + { + return m_mode == SERVER_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isBidirectionalConnection() + { + return m_mode == BIDIRECTIONAL_MODE; + } + + /** + * The connection has recived a close connection. + */ + public void closeByPair() + { + if (m_state.setClosing()) { + m_manager.closing(this); + close(); + } + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, toString() + " closed by pair"); + } + + /** + * The connection will be closed by the connection manager. + * + * @see es.tid.TIDorbj.core.comm.iiop.IIOPConnectionManager + */ + + public void closeByManager() + { + if (m_state.setClosing()) { + if (m_mode != CLIENT_MODE) + sendClose(); + + if (m_lock_list.size() != 0) + m_state.seterror( + new COMM_FAILURE("IIOPConnection Closed because the max. " + + "connection number has been reached.", + 0, + CompletionStatus.COMPLETED_NO)); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " closed by IIOPConnection Manager"); + } + } + + /** + * The connection is closed due to the socket is broken. + * + * @param error + * the broken communication error + */ + + public void closeByBrokenConnection(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + public void closeByError(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + protected abstract void close(); + + public void sendClose() + { + try { + GIOPHeader header; + header = new GIOPHeader( giopVersion, MsgType.CloseConnection); + + sendMessage(header); + } + catch (Exception e) {} + } + + public void sendError() { + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, toString() + " : sending a GIOP Message error." + ); + } + + GIOPHeader error; + error = new GIOPHeader( giopVersion , MsgType.MessageError); + sendMessage(error); + } + + public void sendHeader(GIOPHeader header) { + header.toByteArray(m_send_header_buffer); + write(m_send_header_buffer); + } + + protected GIOPHeader receiveHeader() { + read(m_receive_header_buffer); + return GIOPHeader.fromByteArray(m_receive_header_buffer); + } + + protected void sendMessage(GIOPHeader header) { + try { + m_write_monitor.initWrite(); + } catch (WriteTimeout to) { + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + sendHeader(header); + + m_write_monitor.endWrite(); + } + + public void sendMessage(GIOPMessage message) { + if (m_state.isOpen()) { + m_manager.use(this); + } + + message.send(this); + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + ": ", + message.toString(), + " has been sent!" + } + ); + } + } + + public void receiveMessage() { + while (true) { + + if (m_state.isOpen()) { + m_manager.use(this); + } else { + break; + } + + try { + + // wait for reply + GIOPHeader header = receiveHeader(); + + + // Attend for compressed messages + if (header.getCompressed()){ + ZIOPMessage ziop_message = new ZIOPMessage(header, giopFragmentSize); + + ziop_message.receiveBody(this, m_receive_header_buffer); + + ziop_message.connect_GIOPMessage(this); + continue; + } + + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (message.hasBody()) { + message.receiveBody(this, m_receive_header_buffer); + } + + if (m_orb.m_trace != null){ + m_orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + m_orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + switch (header.getMsgType().m_value) + { + + case MsgType._Request: + manageMessage((GIOPRequestMessage) message); + break; + case MsgType._Reply: + manageMessage((GIOPReplyMessage) message); + break; + case MsgType._CancelRequest: + manageMessage((GIOPCancelRequestMessage) message); + break; + case MsgType._LocateRequest: + manageMessage((GIOPLocateRequestMessage) message); + break; + case MsgType._LocateReply: + manageMessage((GIOPLocateReplyMessage) message); + break; + case MsgType._Fragment: + manageMessage((GIOPFragmentMessage) message); + break; + case MsgType._CloseConnection: + closeByPair(); + return; + case MsgType._MessageError: + closeByError( + new COMM_FAILURE("IIOPConnection closed due to pair " + + "message error.")); + return; + } + + } + catch (org.omg.CORBA.COMM_FAILURE comm) { + closeByError(comm); + return; + } + catch (Throwable excp) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.ERROR, toString(), excp); + + closeByError(new COMM_FAILURE(excp.toString())); + return; + } + } + } + + public void manageMessage(GIOPFragmentMessage message) + { + RequestId id = null; + + if (GIOPVersion.VERSION_1_2.equals(message.getHeader().getVersion())) + id = message.getRequestId(); + else if (m_current_request_id == null) { // unexpected fragment message + closeByError(new COMM_FAILURE("Unexpected fragment message.", 0, + CompletionStatus.COMPLETED_NO)); + return; + } else + id = m_current_request_id; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + toString() + " : GIOP Fragment Message has received." + ); + } + + FragmentedMessageHolder holder = + (FragmentedMessageHolder) m_uncompleted_messages.get(id); + + if (holder == null) { + // discard message + return; + } + + GIOPFragmentedMessage fragmented_message = holder.m_message; + + fragmented_message.addFragment(message); + + if (!message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received. + + m_uncompleted_messages.remove(id); + + switch (fragmented_message.getHeader().getMsgType().m_value) + { + case MsgType._Request: + dispatchRequest((GIOPRequestMessage) fragmented_message); + break; + case MsgType._LocateRequest: + dispatchRequest((GIOPLocateRequestMessage) fragmented_message); + break; + // CLIENT MESSAGES + case MsgType._Reply: + serviceContextReceived( + ((GIOPReplyMessage) + fragmented_message).getServiceContextList()); + case MsgType._LocateReply: + { + m_current_request_id = null; + Lock lock = m_lock_list.get(id); + AMILock ami_lock = m_ami_lock_list.get(id); + if (lock != null) { // the lock has not been discarded + lock.setMessage(fragmented_message); + lock.setCompleted(); + } else if (ami_lock != null) { + ami_lock.setMessage(fragmented_message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + } + } + + public void manageMessage(GIOPReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("Reply has been received by Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) { + return; // discard + } + + if (message.getHeader().hasMoreFragments()) { + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE("Fragment message expeted, " + + "but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + + } + } else { + serviceContextReceived(message.getServiceContextList()); + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPLocateReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("LocateReply has been received by " + + "Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) + return; // the lock hast expired, discard the message + + if (message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateReply can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else { + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPCancelRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "CancelRequest has been received by Client IIOPConnection")); + return; + } + + m_uncompleted_messages.remove(message.getRequestId()); + } + + public void manageMessage(GIOPLocateRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateRequest can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + protected abstract void dispatchRequest(GIOPLocateRequestMessage message); + + + protected abstract void dispatchRequest(GIOPRequestMessage message); + + + /** + * Try to resolve the url received in a Request ObjectKey + */ + + protected org.omg.CORBA.Object resolveURL(String url) { + try { + // Backward compatibility, ObjectId now expected + + if (url.startsWith("corbaloc:tidorbj:")) { + return m_orb.string_to_object(url); + } else { + + String object_id = null; + + if (url.startsWith("corbaloc:ssliop:")) { + object_id = SSLIOPCorbaloc.getObjectId(url); + } else if ((url.startsWith("corbaloc:iiop:")) + || (url.startsWith("corbaloc::"))) { + object_id = IIOPCorbaloc.getObjectId(url); + } else { + // standard version + object_id = url; + } + + return m_orb.resolve_initial_references(object_id); + } + } + catch (Throwable th) {} + + return null; + } + + public void manageMessage(GIOPRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + if (m_orb.m_trace != null) + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE( + "Fragment message expeted, but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + public boolean sendLocateRequest(IIOPIOR ior, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + return sendLocateRequest(ior, AddressingDisposition.KeyAddr, + policy_context); + } + + private boolean sendLocateRequest(IIOPIOR ior, + AddressingDisposition disposition, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + RequestId id = generateId(); + + GIOPLocateRequestMessage message = + new GIOPLocateRequestMessage(profile.getVersion(), + id, + giopFragmentSize ); + + // create the reply lock + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + + ": sending LocationRequest " + + id.toString()); + + switch (disposition.value()) + { + case AddressingDisposition._KeyAddr: + message.insertAddress(m_manager.orb(), + ior.toObjectKeyAddress()); + break; + case AddressingDisposition._ProfileAddr: + message.insertAddress(m_manager.orb(), + ior.toProfileAddress()); + break; + case AddressingDisposition._ReferenceAddr: + message.insertAddress(m_manager.orb(), + ior.toIORAddress()); + } + + sendMessage(message); + + // block the thread waiting for response + + lock.waitForCompletion(timeout); + + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No LocateReply message", 0, + CompletionStatus.COMPLETED_NO); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._LocateReply) { + throw new MARSHAL("No LocateReply message received", 0, + CompletionStatus.COMPLETED_NO); + } + + GIOPLocateReplyMessage reply_message = + (GIOPLocateReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case LocateReplyStatusType._UNKNOWN_OBJECT: + return false; + case LocateReplyStatusType._OBJECT_HERE: + return true; + case LocateReplyStatusType._OBJECT_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._OBJECT_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._LOC_SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case LocateReplyStatusType._LOC_NEEDS_ADDRESSING_MODE: + return sendLocateRequest( + ior, + reply_message.extractAddressingDisposition(), + policy_context); + } + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + return false; + } + + public void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE + { + sendOnewayRequestAsync(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE + { + // verify if the request can be sent + m_state.verifyForRequest(); + + request.setId(generateId()); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + } + + public void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendOnewayRequestSync(request, ior, AddressingDisposition.KeyAddr); + + } + + private void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + // verify if the request can be sent + m_state.verifyForRequest(); + + Lock lock = new Lock(); + + lock.requestId(request.getId()); + m_lock_list.put(lock); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + + } + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) + throw new INTERNAL("No Reply message"); + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) + throw new MARSHAL("No LocateReply message received"); + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: // traza + case ReplyStatusType._USER_EXCEPTION: // traza + case ReplyStatusType._SYSTEM_EXCEPTION: // traza + break; // nothing to do, it is a oneway request + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendOnewayRequestSync( + request, + ior, + reply_message.extractAddressingDisposition()); + } + } + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendRequest(request, ior, AddressingDisposition.KeyAddr); + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = + new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + setServiceContextList(policy_context, message); + + message.insertRequest(request, ior, disposition); + + try { + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + sendMessage(message); + } + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + // block the thread waiting for response + + + lock.waitForCompletion(timeout); + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + request.setCompletedYes(); + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + reply_message.extractArguments(request); + break; + case ReplyStatusType._USER_EXCEPTION: + request.setUserException( + reply_message.extractUserException( + request.exceptions())); + break; + case ReplyStatusType._SYSTEM_EXCEPTION: + request.setSystemException( + reply_message.extractSystemException()); + break; + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendRequest(request, ior, + reply_message.extractAddressingDisposition()); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + public org.omg.CORBA.portable.InputStream + sendRequest(es.tid.TIDorbj.core.iop.IOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest, + org.omg.CORBA.portable.RemarshalException, + org.omg.CORBA.portable.ApplicationException + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // write operation context: o conxtests + stream.write_ulong(0); + + es.tid.TIDorbj.core.cdr.CDRInputStream header_input = + new es.tid.TIDorbj.core.cdr.CDRInputStream(null, + stream.getBuffer()); + + GIOPHeader header = new GIOPHeader(); + + header.read(header_input); + + header_input = null; + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (!(message instanceof GIOPRequestMessage)) + throw new BAD_OPERATION("No Request message in stream"); + + message.setMessageBuffer(stream.getBuffer()); + message.setMessageCompleted(true); + + GIOPRequestMessage request_msg = (GIOPRequestMessage) message; + + ServerRequestImpl srv_request = request_msg.extractRequest(m_orb); + + RequestId id = srv_request.getId(); + + if (!srv_request.withResponse()) { + if (m_orb.m_trace != null) { + String[] msg = { toString(), + ": Sending Oneway Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + sendMessage(message); + + } else { + + Lock lock = new Lock(); + + lock.requestId(id); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { toString(), ": Sending Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + try { + sendMessage(message); + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + // block the thread waiting for response + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + return input; + } + case ReplyStatusType._USER_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + String excp_id = input.read_string(); + input.rewind(); + throw new ApplicationException( + excp_id, + reply_message.getDataInput()); + } + case ReplyStatusType._SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + throw new org.omg.CORBA.portable.RemarshalException(); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + return null; + } + + public void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) //*opc1*, Object ami_handler) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendAsyncRequest(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, //*opc1* Object ami_handler, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + PolicyContext policy_context = request.getPolicyContext(); + + long timeout = QoS.checkRequestTime(this.m_orb, policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + + AMILock ami_lock = new AMILock(); + ami_lock.requestId(message.getRequestId()); + ami_lock.setHandler(request.get_ami_handler()); + ami_lock.setRequest(request); + ami_lock.setIor(ior); + + m_ami_lock_list.put(ami_lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Asynchronous Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + setServiceContextList(policy_context, message); + + try { + message.insertRequest(request, ior, disposition); + sendMessage(message); + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + + /* hacerlo dentro de thread k mira tiempo de las peticiones as�ncronas + } else { + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + request.setCompletedMaybe(); + throw new RECOVERABLE_COMM_FAILURE( + new COMM_FAILURE("IIOPConnection closed by pair")); + + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(); + } + }*/ + } + + + public void prepareRequest( StreamRequestImpl request, IIOPIOR ior ) { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) + ver = orb_ver; + + GIOPRequestMessage message = new GIOPRequestMessage(ver, + request.getId(), + giopFragmentSize); + + message.prepareRequest(request, ior, AddressingDisposition.KeyAddr); + + } + + public void sendReply(ServerRequestImpl request, PolicyContext policy_context) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPReplyMessage message = new GIOPReplyMessage(request.getVersion(), + request.getId(), + giopFragmentSize); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + message.insertResultRequest(m_orb, request); + + CompressorIdLevel compressor = request.get_compressor(); + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + + int low_value = 0; + float min_ratio = 0; + + + if (policy_context != null) { + low_value = ZIOP.getLowValue(policy_context); + min_ratio = ZIOP.getMinRatio(policy_context); + + compressor.compression_level = + ZIOP.getLevelCompressor(compressor.compressor_id, + policy_context); + } + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + + } else { + sendMessage(message); + } + } + + public void sendLocateReply(GIOPVersion version, RequestId id, boolean here) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + if (here) + message.insertObjectHere(m_orb); + else + message.insertUnknownObject(m_orb); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + org.omg.CORBA.Object obj) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + message.insertForward(m_orb, obj); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + SystemException excep) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize); + + message.insertSystemException(m_orb, excep); + + sendMessage(message); + } + + protected void setServiceContextList(PolicyContext policy_context, + GIOPRequestMessage message) + { + Vector contexts = new Vector(); + + // Invocation Service Context + + InvocationPoliciesContext invocationPolicies = null; + if (policy_context != null) { + invocationPolicies = policy_context.getInvocationPolicyServiceContext(); + } + if(invocationPolicies != null) { + contexts.add(invocationPolicies); + } + + // Bidirectional Service context + if (m_send_bidirectional_service) { + + contexts.add(m_bidirectional_service.m_components[0]); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + int num_services = contexts.size(); + if ( num_services > 0) { + + ServiceContextList services = new ServiceContextList(num_services); + + contexts.toArray(services.m_components); + + message.setServiceContextList(services); + } + } + + protected void serviceContextReceived(ServiceContextList services) + { + if (services == null) + return; + + for (int i = 0; i < services.m_components.length; i++) { + if ((services.m_components[i] != null) + && (services.m_components[i].m_context_id + == org.omg.IOP.BI_DIR_IIOP.value)) { + setBidirectionalModeByPeer( + (BiDirServiceContext) services.m_components[i]); + } + } + } + + /** + * RemovableObject interface method + */ + + public boolean canBeRemoved() + { + return !hasPendingRequests(); + } + + public synchronized boolean hasPendingRequests() + { + if (m_mode == CLIENT_MODE) { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0)); + } else { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0) + || (m_requests_in_POA.isNonZero())); + } + } + + public RequestId generateId() + { + return new RequestId(id_count.postInc()); + } + + public void read(byte[] buffer) + { + read(buffer, 0, buffer.length); + } + + public abstract void read(byte[] buffer, int offset, int length); + + protected abstract void write(byte[] buffer); + + protected abstract void write(byte[] buffer, int offset, int length); + + /* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAMBIAR PARA MANDAR UN MENSAJE CON + * VARIOS CHUNKS + */ + public void writeVersion1_0(BufferCDR buffer) + {/* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * if(num_chunks > 1) throw new MARSHAL("GIOP 1.0 does not allow + * fragmentation"); + * + * ChunkCDR chunk = null; + * + * synchronized(write_mutex) { chunk = buffer.getChunk(0); + * write(chunk.getBuffer(),0,chunk.getAvailable()); } + */ + writeVersion1_1(buffer); // the buffer is only one message + } + + public void writeVersion1_1(BufferCDR buffer) + { + int num_chunks = buffer.getNumAvailableChunks(); + + ChunkCDR chunk = null; + + // Check write Monitor + try { + m_write_monitor.initWrite(); + } + catch (WriteTimeout wt) { // WriteTimeout: close this connection + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + // write loop + + for (int i = 0; i < num_chunks; i++) { + chunk = buffer.getChunk(i); + write(chunk.getBuffer(), 0, chunk.getAvailable()); + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DUMP, "GIOP message chunk sent - HEXDUMP " + + chunk.getAvailable() + " bytes"); + m_orb.printDump(Trace.DUMP, + chunk.getBuffer(), + chunk.getAvailable()); + } + + } + // free write monitor + + m_write_monitor.endWrite(); + } + + public void writeVersion1_2(BufferCDR buffer) + { + writeVersion1_1(buffer); + /* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * ChunkCDR chunk = null; + * + * for(int i = 0; i < num_chunks; i++) { chunk = buffer.getChunk(i); + * + * synchronized(write_mutex) { + * write(chunk.getBuffer(),0,chunk.getAvailable()); } } + */ + } +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/ForwardRequest.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/ForwardRequest.java.svn-base new file mode 100644 index 0000000..711f22e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/ForwardRequest.java.svn-base @@ -0,0 +1,19 @@ +package es.tid.TIDorbj.core.comm; + +import es.tid.TIDorbj.core.iop.IOR; + +/** + * @author caceres + * + */ + +public class ForwardRequest extends Exception +{ + public IOR forward_reference; + + public ForwardRequest(IOR forward_reference) + { + this.forward_reference = forward_reference; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/LocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/LocateResponseHandler.java.svn-base new file mode 100644 index 0000000..93969c1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/LocateResponseHandler.java.svn-base @@ -0,0 +1,64 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +/** + * Base interface used to return the response upon Request arrival. + * In this case, it provides an aditional method to support returning the result + * of the Locate operation. + * + * Actually, a CommunicationLayer implementation must provide an instance of + * type QueuedLocateResponseHandler, which extends this interface. Upon + * refactoring proccess completes, this should be done just implementing this + * one... TODO: Maybe a delegation aproach should work + * + * @author Juan Pablo Rojas + * + */ + +//TODO: maybe these should be called RequestHandlers? +public interface LocateResponseHandler extends ResponseHandler { + + public abstract void submitResponse( boolean value ); + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/PropertyInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/PropertyInfo.java.svn-base new file mode 100644 index 0000000..e865e75 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/PropertyInfo.java.svn-base @@ -0,0 +1,155 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.comm; + +/** + *

CommunicationLayer properties for making a connection. The + * PropertyInfo could be used by automatic code generation ides to + * interact with CommunicationManager and retrieve each registered + * layer's available properties. + * + * @author Juan Pablo Rojas + */ + +public class PropertyInfo { + + /** + * Constructs a CommunicationLayerPropertyInfo object with a name and value; + * other members default to their initial values. + * + * @param name the name of the property + * @param value the current value, which may be null + */ + public PropertyInfo(String name, String value) { + this.name = name; + this.value = value; + } + + /** + * The name of the property. + */ + private String name; + public void setName( String name ){ + this.name = name; + } + public String getName(){ + return this.name; + } + + + /** + * A brief description of the property, which may be null. + */ + private String description = null; + public void setDescription( String description ){ + this.description = description; + } + public String getDescription(){ + return this.description; + } + + /** + * The required field is true if a value must be + * supplied for this property and false otherwise. + */ + private boolean required = false; + public void setRequired( boolean value ){ + this.required = value; + } + public boolean isRequired(){ + return this.required; + } + + /** + * The value field specifies the current value of + * the property, based on a combination of the information + * supplied to the method. + */ + public String value = null; + public void setValue( String value ){ + this.value = value; + } + public String getValue(){ + return this.value; + } + public String getString(){ + return this.value; + } + public int getInt(){ + if ( this.value != null ) { + return Integer.parseInt( this.value ); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + public boolean getBoolean(){ + if ( this.value != null ){ + return Boolean.valueOf( this.value ).booleanValue(); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + public byte[] getBytes(){ + if ( this.value != null ){ + return this.value.getBytes(); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + + /** + * An array of possible values if the value for the field + * DriverPropertyInfo.value may be selected + * from a particular set of values; otherwise null. + */ + private String[] choices = null; + public void setChoices( String[] choices ){ + this.choices = choices; + } + public String[] getChoices(){ + return this.choices; + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/RequestDispatcher.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/RequestDispatcher.java.svn-base new file mode 100644 index 0000000..30581c6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/RequestDispatcher.java.svn-base @@ -0,0 +1,188 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.UNKNOWN; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.poa.POAImpl; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.poa.POAManagerImpl; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.poa.QueuedRequest; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.util.Trace; + + +/** + * RequestDispather provides methods to each CommunicationLayer + * implementation to enable Request processing and Response submission, allowing + * disacoupling the implementation from the ORB's request processing implementa- + * tion. + * + * @author Juan Pablo Rojas + * + */ +public class RequestDispatcher { + + /* + * The orb instance + */ + private TIDORB orb; + private POAImpl rootPOA; + private POAManagerImpl rootPOAManager; + private CommunicationManager communicationManager; + + /** + * @param orb + */ + public RequestDispatcher(TIDORB orb ) { + if ( orb != null ){ + this.orb = orb; + this.rootPOA = this.orb.initPOA(); + this.rootPOAManager = ( POAManagerImpl )this.rootPOA.the_POAManager(); + this.communicationManager = CommunicationManager.getInstance( this.orb ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//RequestDispatcher + + + /** + * @param responseHandler + */ + + //TODO: Queued stuff should be only known here... see how to make a + //queue delegate to use from ExecThread + public void dispatchRequest( QueuedLocateResponseHandler locateResponseHandler ) { + if ( locateResponseHandler != null ){ + + setPOAKey(locateResponseHandler); + + if ( this.orb.m_trace != null) { + this.orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + "Dispatching LocateRequest ", + locateResponseHandler.getObjectKey().toString() + } + ); + } + this.rootPOAManager.put( locateResponseHandler ); + } else { + //TODO: ask juan about the exception conventions inside TIDORB + throw new BAD_PARAM( "null response handler" ); + } + }//dispatchRequest + + public void dispatchRequest( QueuedResponseHandler responseHandler ) { + if ( responseHandler != null ){ + + if(setPOAKey(responseHandler)) { + + this.rootPOAManager.put( responseHandler ); + + if ( this.orb.m_trace != null) { + ServerRequest request = responseHandler.getServerRequest(); + this.orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Dispatching ", + responseHandler.toString() + } + ); + } + } + } else { + throw new BAD_PARAM( "null response handler" ); + } + }//dispatchRequest + + /** + * Search the POAKey to the request + * @param request + * @return true if the key has been set + */ + private boolean setPOAKey(QueuedRequest request) { + + ObjectKey objectKey; + objectKey = request.getObjectKey(); + + POAKey poaKey; + try { + poaKey = orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + request.setPOAKey( poaKey ); + return true; + } catch (ForwardRequest fr) { + request.submitResponse(fr.forward_reference); + } catch (SystemException one) { + if ( this.orb.m_trace != null) { + this.orb.printTrace(Trace.DEEP_DEBUG, + "Submitting a system exception in request", + one); + } + request.submitResponse(one); + } catch ( Throwable th ){ + if ( this.orb.m_trace != null) { + this.orb.printTrace(Trace.DEEP_DEBUG, + "Submitting a CORBA UNKNOWN exception in request"); + } + request.submitResponse(new UNKNOWN()); + } + return false; + } + + public void dispose(){ + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/.svn/text-base/ResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/.svn/text-base/ResponseHandler.java.svn-base new file mode 100644 index 0000000..98e3e0a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/.svn/text-base/ResponseHandler.java.svn-base @@ -0,0 +1,94 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Base interface used to return the response upon Request arrival. + * In this case, it provides methods for accesing the incoming requests field's + * necessary for it's correct execution, and methods to communicate the + * invocation result to the origin. + * + * Actually, a CommunicationLayer implementation must provide an instance of + * type QueuedResponseHandler, which extends this interface. Upon + * refactoring proccess is completed, this should be done just implementing this + * one... TODO: Maybe a delegation aproach should work + * + * @author Juan Pablo Rojas + */ +public interface ResponseHandler { + + + + /* + * Methods included for local request's optimization + */ + public abstract PolicyContext getPolicyContext(); + + /* + * Response origin ( read only -- implementation dependent ) + **/ + public abstract ObjectKey getObjectKey(); + + public abstract ServerRequest getServerRequest(); + + + /* + * Related request invocation result + * */ + + public abstract void submitResponse( Object reference ); + + public abstract void submitResponse( SystemException e ); + + public abstract void submitResponse(); + + +} diff --git a/source/es/tid/TIDorbj/core/comm/CommunicationDelegate.java b/source/es/tid/TIDorbj/core/comm/CommunicationDelegate.java new file mode 100644 index 0000000..7490e37 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/CommunicationDelegate.java @@ -0,0 +1,513 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision: 395 $ + * Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ + * Last modified by: $Author: avega $ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.InvalidPolicies; +import org.omg.CORBA.Object; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.portable.Delegate; + +import es.tid.TIDorbj.core.ContextImpl; +import es.tid.TIDorbj.core.ContextListImpl; +import es.tid.TIDorbj.core.ExceptionListImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * + * CommunicationDelegate is the base type for ORB's to be uncoupled of the + * underlying communications infraestructure from the 'client' side. + * It contains the base methods to allow sending requests to other ORB's. It + * keeps also the org.omg Delegate view, to allow regular corba Helper and + * Holder interaction. + * + * @author Juan Pablo Rojas. + * + */ +public abstract class CommunicationDelegate extends Delegate { + + protected TIDORB orb; + protected IOR reference; + protected CommunicationDelegate forwardReference; + protected PolicyContext policyContext; + + /** + * + */ + public CommunicationDelegate() { + super(); + this.orb = null; + this.reference = null; + this.policyContext = null; + } + + public CommunicationDelegate( TIDORB orb ) { + super(); + setORB( orb ); + } + + public void setORB(TIDORB orb) { + if (orb != null) { + this.orb = orb; + } else { + throw new IllegalArgumentException("Parameter 'orb' cannot be null"); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public void setReference(IOR ior) { + if (ior != null) { + this.reference = ior; + } else { + throw new IllegalArgumentException("Parameter 'ior' cannot be null"); + } + }//setReference + + /* + * As IOR could be set in it's generic and not unmarshalled way, children de + * legates should replace the generic implementation with a more specialized + * version... + */ + public abstract IOR getReference();/* { + return this.reference; + }//getReference*/ + + public synchronized void setPolicyContext( PolicyContext policyContext ){ + this.policyContext = policyContext; + }//setPolicyContext + + public PolicyContext getPolicyContext(){ + synchronized( this ) { + if ( this.policyContext == null ){ + this.policyContext = new PolicyContext(null); + } + } + return this.policyContext; + }//getPolicyContext + + public boolean is_a(org.omg.CORBA.Object self, String repositoryIdentifier) { + if (repositoryIdentifier == null) { + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + } + + if (repositoryIdentifier.equals("IDL:omg.org/CORBA/Object:1.0")) { + return true; + } + if (repositoryIdentifier.equals(this.reference.getTypeId())) { + return true; + } + // search in known interface + String[] interf_ids = ((org.omg.CORBA.portable.ObjectImpl) self)._ids(); + + if (interf_ids != null) { + for (int i = 0; i < interf_ids.length; i++) { + if (repositoryIdentifier.equals(interf_ids)) { + return true; + } + } + } + + //ask to the remote object + if (this.orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + return this.invoke_is_a(self, repositoryIdentifier); + } + + public boolean is_equivalent(org.omg.CORBA.Object self, + org.omg.CORBA.Object other) { + if (other == null) { + throw new BAD_PARAM("Null reference"); + } + // are they the same object? + if (self == other) { + return true; + } + Delegate delegate = + ( (org.omg.CORBA.portable.ObjectImpl) other )._get_delegate(); + + if (delegate instanceof CommunicationDelegate) { + return this.reference.equivalent( + ((CommunicationDelegate) delegate).getReference() + ); + } else { + return toString().equals( + delegate.orb(other).object_to_string(other) + ); + } + } + + public org.omg.CORBA.ORB orb( org.omg.CORBA.Object self ){ + return this.orb; + } + + public int hash(org.omg.CORBA.Object self, int maximum) { + int code = this.reference.hashCode(); + if (code > maximum) { + code %= maximum; + } + return code; + }//hash + + + public org.omg.CORBA.Request request( org.omg.CORBA.Object self, + String operation ) { + if (operation == null) { + throw new BAD_PARAM( + "Null operation string", 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( this.orb == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO + ); + } + //TODO: RequestImpl should be common to all delegates, rename it? + return new RequestImpl( + self, + new ContextImpl( this.orb, "" ), + operation, + new NVListImpl( this.orb ), + null, + new ExceptionListImpl(), + new ContextListImpl() + ); + }//request + + public org.omg.CORBA.Request create_request( + org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result ) { + + if ( this.orb == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO + ); + }//configurationCheck + + if ( self == null || + ctx == null || + operation == null || + arg_list == null ) { + + throw new BAD_PARAM( + "Null reference.", 0, CompletionStatus.COMPLETED_NO + ); + }//parametersCheck + + return new RequestImpl( + self, + ctx, + operation, + arg_list, + result, + new ExceptionListImpl(), + new ContextListImpl() + ); + }//createRequest + + public org.omg.CORBA.Request create_request( org.omg.CORBA.Object self, + org.omg.CORBA.Context ctx, + String operation, + org.omg.CORBA.NVList arg_list, + org.omg.CORBA.NamedValue result, + org.omg.CORBA.ExceptionList exclist, + org.omg.CORBA.ContextList ctxlist ) { + + if ( this.orb == null ) { + throw new BAD_OPERATION( + "ORB Singleton: Can not create request", 0, CompletionStatus.COMPLETED_NO + ); + } + + if ( self == null || + ctx == null || + operation == null || + arg_list == null || + exclist == null || + ctxlist == null ) { + + throw new BAD_PARAM( + "Null reference", 0, CompletionStatus.COMPLETED_NO ); + } + + return new RequestImpl( + self, + ctx, + operation, + arg_list, + result, + exclist, + ctxlist + ); + }//createRequest + + + public org.omg.CORBA.Policy get_policy( + org.omg.CORBA.Object self, + int policy_type ) { + + PolicyContext request_context; + request_context = createRequestPolicyContext(); + + return request_context.getPolicy( policy_type ); + }//get_policy + + public org.omg.CORBA.Object set_policy_override( + org.omg.CORBA.Object self, + org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add ) { + + org.omg.CORBA.portable.ObjectImpl copy; + copy = ( org.omg.CORBA.portable.ObjectImpl ) self._duplicate(); + + //TODO: Note that the delegate stored in object reference must be a + //CommunicationsDelegate instance! + CommunicationDelegate delegate = ( CommunicationDelegate )copy._get_delegate(); + + try { + delegate.getPolicyContext().setPolicies(policies, set_add); + } catch (InvalidPolicies iv) {} + return copy; + + }//set_policy_override + + /* + * UNIMPLEMENTED API + */ + public org.omg.CORBA.DomainManager[] _get_domain_managers( + org.omg.CORBA.Object self ) { + + throw new org.omg.CORBA.NO_IMPLEMENT(); + }//_get_domain_managers + + + /* + * DEPRECATED API + */ + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.InterfaceDef get_interface(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @deprecated Deprecated by CORBA 2.3 + */ + public org.omg.CORBA.Object get_interface_def(org.omg.CORBA.Object self) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + + /* + * Utility methods used by TIDOrbJ + */ + + public void setForward(ForwardRequest fe) + { + try { + this.forwardReference = + orb.getCommunicationManager().createDelegate(fe.forward_reference); + } + catch (CommunicationException e) { + throw new INV_OBJREF("Cannot create delegate for: " + + fe.forward_reference.toString()); + } + + orb.printTrace( + Trace.DEBUG, new String[]{ + "DelegateImpl::non_exist(): ", + this.getReference().toString(), + " forwarded to: ", + this.forwardReference.toString() + } + ); + } + + /** + * Creates the PolicyContext for a request using reference + thread + ORB + * PolicyManagers + */ + public PolicyContext createRequestPolicyContext() + { + // generates effective Request context + + PolicyContext context = getPolicyContext(); + context = context.duplicate(); + Thread currentThread = Thread.currentThread(); + + // thread_context has as father ORB Context + PolicyContext thread_context = + orb.getPolicyContextManager().getThreadContext(currentThread); + + context.setFatherContext(thread_context); + return context; + } + + /* + * must use CommunicationManager to retrieve a valid delegate + * from provided ior. + * @deprecated since 6.0.1 + */ + public CommunicationDelegate fromString( TIDORB orb, String ior ) { + throw new UnsupportedOperationException(); + } + + public String toString(){ + if ( this.reference != null ) { + return this.reference.toString(); + } else { + throw new IllegalStateException( "No reference configured!" ); + } + } + + protected boolean invoke_is_a( org.omg.CORBA.Object self, String id ){ + // Create the request: + org.omg.CORBA.Request request = request(self, "_is_a"); + + // insert the parameter and return type + Any inputAny = request.add_named_in_arg( "repositoryIdentifier" ); + inputAny.insert_string(id); + request.set_return_type( this.orb.get_primitive_tc(TCKind.tk_boolean) ); + + // Perform the invocation: + request.invoke(); + + java.lang.Exception exception; + if ( ( exception = request.env().exception() ) != null ) { + throw (org.omg.CORBA.SystemException) exception; + } + + // Extrae el resultado y los argumentos de salida: + return request.return_value().extract_boolean(); + + }//invoke_is_a + + public org.omg.CORBA.portable.OutputStream request( + org.omg.CORBA.Object object, + String operation, + boolean responseExpected ){ + + if ( this.is_local( object ) ) { + throw new BAD_OPERATION( + "Request is only valid for remote objects" + ); + } + + org.omg.CORBA.portable.ObjectImpl target; + target = (org.omg.CORBA.portable.ObjectImpl) object; + + StreamRequestImpl request = new StreamRequestImpl( + this.orb, + target, + operation, + responseExpected + ); + + this.prepareRequest(request); + + return request.getOutputStream(); + + } + + public String get_codebase( org.omg.CORBA.Object self ){ + return null; + } + + /* + * To be implemented by concrete implementations + */ + public abstract boolean isLocal( org.omg.CORBA.Object self ); + + public abstract boolean non_existent( org.omg.CORBA.Object self ); + + public abstract org.omg.CORBA.Object duplicate( org.omg.CORBA.Object self ); + + public abstract void release( org.omg.CORBA.Object self ); + + public abstract void release_reply( + org.omg.CORBA.Object self, + org.omg.CORBA.portable.InputStream inputStream + ); + + //TODO: actually this operation is performed by the 'old' commLayer itself + public abstract void prepareRequest( StreamRequestImpl request ); + + public abstract void onewayRequest( RequestImpl request ); + + public abstract void invoke( RequestImpl request ); + + // AMI callback operations + public abstract void asyncRequest( RequestImpl request, Object ami_handler ); + + public abstract org.omg.CORBA.portable.InputStream invoke( + org.omg.CORBA.Object object, + org.omg.CORBA.portable.OutputStream stream ) + throws + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException ; + + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/CommunicationException.java b/source/es/tid/TIDorbj/core/comm/CommunicationException.java new file mode 100644 index 0000000..07f024e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/CommunicationException.java @@ -0,0 +1,71 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +/** + * + * Generic excetion thrown from communications infraestructure. TODO: this + * should be concreted upon refactoring evolution + * + * @author jprojas + * + */ +public class CommunicationException extends Exception { + + public CommunicationException(){ + super(); + } + + public CommunicationException( String message ){ + super( message ); + } + + public CommunicationException( String message, Throwable cause ){ + super( message, cause ); + } + + public CommunicationException( Throwable cause ){ + super( cause ); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/CommunicationLayer.java b/source/es/tid/TIDorbj/core/comm/CommunicationLayer.java new file mode 100644 index 0000000..c4785be --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/CommunicationLayer.java @@ -0,0 +1,249 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision: 274 $ + * Date: $Date: 2008-04-12 16:33:40 +0200 (Sat, 12 Apr 2008) $ + * Last modified by: $Author: avega $ + * + * (C) Copyright 2004 Telefónica Investigación y Desarrollo + * S.A.Unipersonal (Telefónica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ + +package es.tid.TIDorbj.core.comm; + + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +; + +/** + * The interface of every CommunicationLayer implementation. + * + * @see CommunicationManager + */ +public interface CommunicationLayer { + + + public abstract void setORB( TIDORB orb ); + public abstract TIDORB getORB(); + + public void setServerModeEnabled( boolean value ) throws CommunicationException; + public boolean isServerModeEnabled(); + + public void shutdown( boolean waitForCompletion ); + + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the given URL. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + * @param url the URL of the service to which to connect + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(String url) throws CommunicationException; + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the given URL. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + *

The java.util.Properties argument can be used to pass + * arbitrary string tag/value pairs as connection arguments. + * + * @param url the URL of the service to which to connect + * @param info a list of arbitrary string tag/value pairs as arguments. + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(String url, java.util.Properties info) + throws CommunicationException; + + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the service identified by the given reference. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + * @param url the URL of the service to which to connect + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(IOR ior) throws CommunicationException; + + /** + * Attempts to make a connection to the given service. + * The layer should return "null" if it realizes it is the wrong kind + * of layer to connect to the service identified by the given reference. + * + *

The layer may throw a CommunicationException if it is the right + * layer to connect to the given URL but has trouble connecting to + * the desired destination. + * + *

The java.util.Properties argument can be used to pass + * arbitrary string tag/value pairs as connection arguments. + * + * @param ior the IOR of the service to which to connect + * @param info a list of arbitrary string tag/value pairs as + * connection arguments. + * + * @return a CommunicationDelegate object which will manage + * requests to the service referenced. + * @exception CommunicationException if an error occurs + */ + CommunicationDelegate createDelegate(IOR ior, java.util.Properties info) + throws CommunicationException; + + /** + * Retrieves whether the driver thinks that it can open a connection + * to the resource identified by the given URL. + * + * @param url the URL of the desired resource + * @return true if this driver understands the given URL; + * false otherwise + * @exception CommunicationException if a database access error occurs + */ + boolean accepts(String url) throws CommunicationException; + + + /** + * Retrieves whether the driver thinks that it can open a connection + * to the resource identified by the given URL. + * + * @param ior the IOR associated with the desired service + * @return true if this driver understands the given URL; + * false otherwise + * @exception CommunicationException if a database access error occurs + */ + boolean accepts(IOR ior) throws CommunicationException; + + /** + * Creates an base ior containing the information regarding the + * communication's configuration (ie, prototol, version, host & port used) + * @return an ior filled with the communications info available for + * current layer. + * @throws CommunicationException + */ + IOR createIOR( String repositoryId, ObjectKey key, TaggedComponent[] components ) + throws CommunicationException; + + /** + * Creates an base url containing the information regarding the + * communication's configuration (ie, prototol, version, host & port used) + * @return an String filled with the communications info available for + * current layer. + * @throws CommunicationException + */ + String createURL( String repositoryId, ObjectKey key ) throws CommunicationException; + + + //TODO: check the convenience of these method + public String getInitialReference( IOR ior ) throws CommunicationException; + public String getInitialReference( String url ) throws CommunicationException; + + + public boolean isLocal( IOR ior ) throws CommunicationException; + public boolean isLocal( String url ) throws CommunicationException; + + + /** + * Gets information about the possible properties for this driver. + *

+ * The getPropertyInfo method is intended to allow a generic + * GUI tool to discover what properties it should prompt + * a human for in order to get + * enough information to connect to a certain service. Note that depending on + * the values the human has supplied so far, additional values may become + * necessary, so it may be necessary to iterate though several calls + * to the getPropertyInfo method. + * + * @param url the URL of the database to which to connect + * @param info a proposed list of tag/value pairs that will be sent on + * connect open + * @return an array of DriverPropertyInfo objects describing + * possible properties. This array may be an empty array if + * no properties are required. + * @exception CommunicationException if some error occurs + */ + PropertyInfo[] getPropertiesInfo(); + PropertyInfo getPropertyInfo( String name ); + + + /** + * Retrieves the Layer's major version number. Initially this should be 1. + * + * @return this Layer's major version number + */ + int getMajorVersion(); + + /** + * Gets the Layer's minor version number. Initially this should be 0. + * @return this Layers's minor version number + */ + int getMinorVersion(); + + /** + * Gets the Layers identification string. + */ + String getId(); + + /** + * Gets the Layers identification string. + */ + void dump(java.io.PrintWriter writer); + + +} diff --git a/source/es/tid/TIDorbj/core/comm/CommunicationManager.java b/source/es/tid/TIDorbj/core/comm/CommunicationManager.java new file mode 100644 index 0000000..6ea73c1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/CommunicationManager.java @@ -0,0 +1,725 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision: 478 $ + * Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ + * Last modified by: $Author: avega $ + * + * (C) Copyright 2004 Telefnica Investigacin y Desarrollo + * S.A.Unipersonal (Telefnica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm; + +import java.util.Hashtable; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.util.Trace; + +/** + * Based on the jdbc interface and driver registry implementation, + * CommunicationManager will provide a way to uncouple the underlying + * communications infraestructure from the logic regarding the processing, + * execution and result retrieval of incoming and outgoing requests. + * + * Through the CommunicationManager, ORB will be able to obtain a + * concrete CommunicationDelegate depending on the URL / IOR + * provided, so that the actual communication process will be managed by the + * underlying implementation + * + * From the internal side of each CommunicationLayer, it will + * provide a reference to a RequestDispatcher object that will hold + * the process of request enqueual into ORB's infraestructure + * + * @author Juan Pablo Rojas + * + * + */ +public class CommunicationManager { + + + private boolean offline; + + /** + * Attempts to establish a connection to the given database URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered layers. + * + * @param url + * a service url of the form + * protocol:subprotocol:subname + * @return a connection to the URL + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate(String url) + throws CommunicationException { + + java.util.Properties info = new java.util.Properties(); + + return ( createDelegate( url, info ) ); + } + + /** + * Attempts to create a delegate for the given URL. The + * CommunicationManager attempts to select the appropriate + * CommunicationLayer from the set of registered layers. + * + * @param ior a service ior + * + * @return a CommunicationDelegate to the desired service + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( IOR ior ) + throws CommunicationException { + + java.util.Properties info = new java.util.Properties(); + + return ( createDelegate( ior, info ) ); + } + + /** + * Attempts to locate a layer that understands the given URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered layers. + * + * @param url + * a URL of the form + * :: + * @return a CommunicationsLayer object representing a layer that can + * connect to the given service + * @exception CommunicationException + * if an error occurs + */ + public synchronized CommunicationLayer getLayer(String url) + throws CommunicationException { + println("CommunicationManager.getLayer(\"" + url + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + try { + println(" trying " + li); + if (li.layer.accepts(url)) { + // Success! + println("getLayer returning " + li); + return (li.layer); + } + } catch (CommunicationException ex) { + // Drop through and try the next driver. + } + } + + println("getLayer: no suitable layer"); + throw new CommunicationException("No suitable layer"); + } + + + + /** + * Attempts to locate a layer that matches the given Id. . + * + * @param id + * + * @return a CommunicationsLayer object representing a layer + * identified as id, or null if the layer wasn't found + */ + public CommunicationLayer getLayerById( String id ) { + + // TODO trace it + // println("CommunicationManager.getLayerById(\"" + id + "\")"); + + if (!initialized) { + initialize(); + } + CommunicationLayer desiredLayer = null; + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + //println( " trying " + li ); + if (li.layer.getId().equals( id )) { + // Success! + // println( "getLayer returning " + li ); + desiredLayer = li.layer; + } + + } + return desiredLayer; + }//getLayerById + + + /** + * Attempts to locate a layer that can connect to the service bound to the + * IOR object passed as an argument. The CommunicationManager + * attempts to select an appropriate layer from the set of registered communication + * layers. + * + * @param ior + * a service IOR + * @return a CommunicationLayer object representing a driver that can + * connect to the given URL + * @exception CommunicationException + * if a database access error occurs + */ + public synchronized CommunicationLayer getLayer( IOR ior ) + throws CommunicationException { + + println("CommunicationManager.getDriver(\"" + ior + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to locate someone + // who understands the given URL. + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + try { + println( " trying " + li ); + if (li.layer.accepts( ior )) { + // Success! + println( "getLayer returning " + li ); + return ( li.layer ); + } + } catch ( CommunicationException ex ) { + // Drop through and try the next driver. + } + } + + println( "getLayer: no suitable layer" ); + throw new CommunicationException( "No suitable layer" ); + } + + /** + * Registers the given layer with the CommunicationManager. + * A newly-loaded driver class should call the method + * registerDriver to make itself known to the + * CommunicationManager. + * + * @param layer + * the new CommunicationLayer that is to be registered with the + * CommunicationManager + * @exception CommunicationException + * if an error occurs + */ + public synchronized void registerLayer(CommunicationLayer layer) + throws CommunicationException { + + if (!initialized) { + initialize(); + } + + LayerInfo li = new LayerInfo(); + li.layer = layer; + li.layerClass = layer.getClass(); + li.layerClassName = li.layerClass.getName(); + availableLayers.addElement(li); + println( "registerLayer: " + li ); + } + + /** + * Drops a layer from the CommunicationManager's list. + * Applets can only deregister availableLayers from their own classloaders. + * + * @param layer + * the CommunicationLayer to drop + * @exception CommunicationException + * if an error occurs + */ + public synchronized void deregisterLayer(CommunicationLayer layer) + throws CommunicationException { + + println( "CommunicationManager.deregisterLayer: " + layer ); + + // Walk through the loaded availableLayers. + int i; + LayerInfo li = null; + for (i = 0; i < availableLayers.size(); i++) { + li = (LayerInfo) availableLayers.elementAt(i); + if (li.layer == layer) { + break; + } + } + // If we can't find the driver just return. + if (i >= availableLayers.size()) { + println(" couldn't find driver to unload"); + return; + } + + // Remove the layer. Other entries in availableLayers get shuffled down. + availableLayers.removeElementAt(i); + }//deregisterLayer + + /** + * Prints a message to the current log stream. + * + * @param message + * a log or tracing message + */ + public void println( String message ) { + if ( this.orb != null ){ + if ( this.orb.m_trace != null ){ + this.orb.m_trace.print( Trace.DEEP_DEBUG, message ); + } + } + } + + public void println( String msg, Throwable th ){ + if ( this.orb != null ){ + if ( this.orb.m_trace != null ){ + this.orb.m_trace.printStackTrace( Trace.DEEP_DEBUG, msg, th ); + } + } + } + + //------------------------------------------------------------------------ + //Initialization stuff + + private void loadInitialLayers() { + String layers; + try { + //if (this.orb.m_conf. + layers = this.orb.m_conf.comm_layers; + } catch (Exception ex) { + layers = null; + } + println("CommunicationManager.initialize: = " + ConfORB.comm_layers_name + ": " + layers ); + if (layers == null) { + return; + } + while (layers.length() != 0) { + int x = layers.indexOf(':'); + String layer; + if (x < 0) { + layer = layers; + layers = ""; + } else { + layer = layers.substring(0, x); + layers = layers.substring(x + 1); + } + if (layer.length() == 0) { + continue; + } + try { + println("CommunicationManager.Initialize: loading " + layer); + Class currentLayerClass = Class.forName(layer); + //Class currentLayerClass = Class.forName(layer, true, ClassLoader.getSystemClassLoader()); + if ( currentLayerClass != null ){ + CommunicationLayer currentLayer; + currentLayer = (CommunicationLayer) currentLayerClass.newInstance(); + + LayerInfo li = new LayerInfo(); + li.layerClassName = layer; + li.layerClass = currentLayerClass; + li.layer = currentLayer; + availableLayers.add( li ); + //TODO: modify apis to provide a reference to it's own layer + //as soon as possible, at this moment, they access it's pare + //nt layer through communicationManager, so it must be added + //prior to initialization (performed at setOrb's). + currentLayer.setORB( this.orb ); + + currentLayer.dump(this.orb.m_trace.getLog()); + + } + } catch (Exception ex) { + println("CommunicationManager.Initialize: load failed: " + ex, ex); + } + } + } + + /** + * Attempts to establish a connection to the given service URL. The + * CommunicationManager attempts to select an appropriate + * driver from the set of registered JDBC availableLayers. + * + * @param url + * a service url of the form + * :: + * @param info + * a list of arbitrary string tag/value pairs as connection + * arguments; + * @return a CommunicationDelegate instance which will manage + * requests to the specified service + * @exception SQLException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( + String url, + java.util.Properties info) + throws CommunicationException { + + if (url == null) { + throw new CommunicationException( "Parameter 'url' cannot be null" ); + } + + println("CommunicationManager.connect(\"" + url + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to make a connection. + // Remember the first exception that gets raised so we can reraise it. + Exception reason = null; + CommunicationLayer commLayer; + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + // If the caller does not have permission to load the driver then + // skip it. + try { + println( " trying " + li ); + if ( li.layer.accepts( url ) ){ + CommunicationDelegate result = li.layer.createDelegate(url, info); + if (result != null) { + // Success! + println( "connect returning " + li ); + return (result); + } + } + } catch (CommunicationException ce ){ + if ( reason != null ){ + reason = ce; + } + } + } + + // if we got here nobody could connect. + if (reason != null) { + println( "connect failed: " + reason ); + throw new CommunicationException( "connect failed", reason ); + } + + println( "connect: no suitable driver" ); + throw new CommunicationException( "No suitable driver" ); + } + + /** + * Attempts to establish a connection to the given service IOR. The + * CommunicationManager attempts to select an appropriate + * CommunicationLayer from the set of registered layers. + * + * @param ior the service IOR + * + * :: + * @param info + * a list of arbitrary string tag/value pairs as connection + * arguments; + * @return a CommunicationDelegate instance which will manage + * requests to the specified service + * @exception SQLException + * if a database access error occurs + */ + public synchronized CommunicationDelegate createDelegate( + IOR ior, + java.util.Properties info) + throws CommunicationException { + + if (ior == null) { + throw new CommunicationException( "Parameter 'ior' cannot be null" ); + } + + println("CommunicationManager.connect(\"" + ior + "\")"); + + if (!initialized) { + initialize(); + } + + // Walk through the loaded availableLayers attempting to make a connection. + // Remember the first exception that gets raised so we can reraise it. + Exception reason = null; + CommunicationLayer commLayer; + for (int i = 0; i < availableLayers.size(); i++) { + LayerInfo li = (LayerInfo) availableLayers.elementAt(i); + + // If the caller does not have permission to load the driver then + // skip it. + try { + println( " trying " + li ); + if ( li.layer.accepts( ior ) ){ + CommunicationDelegate result = li.layer.createDelegate(ior, info); + if (result != null) { + // Success! + println( "connect returning " + li ); + return (result); + } + } + } catch (CommunicationException ce ){ + if ( reason != null ){ + reason = ce; + } + } + } + + // if we got here nobody could connect. + if (reason != null) { + println( "connect failed: " + reason ); + throw new CommunicationException( "connect failed", reason ); + } + + println( "connect: no suitable driver" ); + throw new CommunicationException( "No suitable layer" ); + } + + //TODO: check the convenience of these method + public String getInitialReference( IOR ior ) throws CommunicationException { + if (!initialized) { + initialize(); + } + + String initialReference; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( ior ); + if ( peerLayer != null ){ + initialReference = peerLayer.getInitialReference( ior ); + } else { + initialReference = null; + } + return initialReference; + } + + public String getInitialReference( String url ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + String initialReference; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( url ); + if ( peerLayer != null ){ + initialReference = peerLayer.getInitialReference( url ); + } else { + initialReference = null; + } + return initialReference; + } + + + public boolean isLocal( IOR ior ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + boolean isLocal; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( ior ); + if ( peerLayer != null ){ + isLocal = peerLayer.isLocal( ior ); + } else { + throw new CommunicationException( "Invalid ior: no suitable layer" ); + } + return isLocal; + } + + + public boolean isLocal( String url ) throws CommunicationException{ + + if (!initialized) { + initialize(); + } + + boolean isLocal; + CommunicationLayer peerLayer; + peerLayer = this.getLayer( url ); + if ( peerLayer != null ){ + isLocal = peerLayer.isLocal( url ); + } else { + throw new CommunicationException( "Invalid url: no suitable layer" ); + } + return isLocal; + } + + /** + * @param b + */ + public synchronized void setServerModeEnabled( boolean b ) throws CommunicationException { + + if (!initialized) { + initialize(); + } + + if ( this.offline ) { + + this.getLayerById( IIOPCommunicationLayer.ID ).setServerModeEnabled( + b + ); + + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.setServerModeEnabled( b ); + } + this.offline = false; + } + }//setServerModeEnabled + + + /** + * @param waitForCompletion + */ + public synchronized void shutdown( boolean waitForCompletion ) { + + if (!initialized) { + initialize(); + } + + if ( !this.offline ) { + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.shutdown( waitForCompletion ); + } + this.offline = true; + } + } + + /** + * + */ + public void destroy() { + + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i = layersCount - 1; i >= 0; i-- ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + actualLayerInfo.layer.shutdown(false); + } + + } + + public synchronized RequestDispatcher getRequestDispatcher() { + if ( this.dispatcher == null ){ + this.dispatcher = new RequestDispatcher( this.orb ); + } + return this.dispatcher; + }//getRequestDispatcher + + + public static synchronized CommunicationManager getInstance( TIDORB orb ){ + if ( CommunicationManager.instances == null ){ + CommunicationManager.instances = new Hashtable(); + } + if ( orb != null ){ + CommunicationManager manager; + manager = ( CommunicationManager )CommunicationManager.instances.get( orb ); + if ( manager == null ){ + manager = new CommunicationManager( orb ); + CommunicationManager.instances.put( orb, manager ); + } + return manager; + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setOrb + + public synchronized String toString(){ + StringBuffer toString; + toString = new StringBuffer(); + int layersCount = this.availableLayers.size(); + LayerInfo actualLayerInfo; + for ( int i=0; i < layersCount; i++ ){ + actualLayerInfo = ( LayerInfo )this.availableLayers.get( i ); + toString.append( actualLayerInfo.layer); + if ( i < layersCount - 1 ){ + toString.append( ' ' ); + } + } + return toString.toString(); + } + + private CommunicationManager( TIDORB orb ){ + this.orb = orb; + } + + public TIDORB getORB(){ + return this.orb; + } + + // Class initialization. + private void initialize() { + if (initialized) { + return; + } + initialized = true; + this.loadInitialLayers(); + this.offline = true; + println(" CommunicationManager initialized"); + } + + + private TIDORB orb = null; + + private RequestDispatcher dispatcher = null; + + private java.util.Vector availableLayers = new java.util.Vector(); + + private static Hashtable instances; + + private boolean initialized = false; + + + +} + +// LayerInfo is a package-private support class. + +class LayerInfo { + CommunicationLayer layer; + + Class layerClass; + + String layerClassName; + + public String toString() { + return ("driver[className=" + layerClassName + "," + layer + "]"); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/Connection.java b/source/es/tid/TIDorbj/core/comm/Connection.java new file mode 100644 index 0000000..ae884af --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/Connection.java @@ -0,0 +1,2047 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import java.io.IOException; +import java.net.Socket; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.comm.ssliop.*; + +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb IIOP IIOPConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +abstract public class Connection extends ORBComponent implements RemovableObject { + //public class IIOPConnection extends Connection { + + /** + * Client connection mode. + */ + public final static int CLIENT_MODE = 0; + + /** + * Server connection mode. + */ + public final static int SERVER_MODE = 1; + + /** + * Bidirectional connection mode. + */ + public final static int BIDIRECTIONAL_MODE = 2; + + /** + * IIOPConnection mode. + */ + protected int m_mode; + + /** + * IIOPConnection state. + */ + protected ConnectionState m_state; + + /** + * Pending requests in POA. + */ + protected Counter m_requests_in_POA; + + /** + * Actual id count. The ids will be given sequentialy. + */ + private Counter id_count; + + /** + * IIOPConnection identifier: the local port related to the connection socket. + */ + + protected int my_port = 0; + + /** + * Server Object Listen Points assitiated. + */ + + protected java.util.Hashtable m_addresses; + + /** + * First client address; + */ + + protected ListenPoint m_initial_point; + + /** + * The IIOPConnectionManager. + */ + + protected IIOPConnectionManager m_manager; + + /** + * Lock list where the pending requests are waiting for response. + */ + + protected LockList m_lock_list; + + /** + * Lock list where the pending asynchronous requests are waiting for response. + */ + + protected AMILockList m_ami_lock_list; + + /** + * Table with the uncompleted messages that has more fragments. + */ + + protected UseTable m_uncompleted_messages; + + /** + * Maintains the actual request id for fragmented message in GIOP 1.1 + */ + + RequestId m_current_request_id; + + /** + * Bidirectional Service Context. It will be sent in the next + * Request/Response. + */ + + protected ServiceContextList m_bidirectional_service; + + /** + * Says if the bidirecitonal context has to been sent or not. + */ + + protected boolean m_send_bidirectional_service; + + /** + * Write messages in socket monitor. + */ + + protected ConnectionWriteMonitor m_write_monitor; + + /** + * IIOPConnection buffer for writting headers. + */ + byte[] m_send_header_buffer; + + /** + * IIOPConnection buffer for receiving headers. + */ + byte[] m_receive_header_buffer; + + /** + * The toString() return value. + */ + protected String m_str = null; + + /** + * Register the connection at the connection manager and initialize the + * connection socket with the ORB configuration values. + * + * @see es.tid.TIDorbj.core.ConfORB + */ + +// private boolean tcpNoDelay; +// private int soTimeout; +// private int soLinger; + private int maxUncompletedMessages; +// private int socketWriteTimeout; + private GIOPVersion giopVersion; + private int giopFragmentSize; + private boolean ipv6; + + /** + * Says if QoS is enabled not. + */ + long max_response_blocked_time; + + /** + * Says if QoS is enabled not. + */ + boolean qos_enabled; + + /** + * Says if the client can sssume that server uses ziop or not. + */ + boolean assume_ziop_server; + + protected Connection(IIOPConnectionManager mngr) + { + super(mngr.orb()); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + maxUncompletedMessages = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.MAX_UNCOMPLETED_MESSAGES ) + .getInt(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + + giopFragmentSize = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.FRAGMENT_SIZE ) + .getInt(); + + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + if (this.ipv6 == true) + { + System.setProperty("java.net.preferIPv6Address","true"); + System.setProperty("java.net.preferIPv4Stack","false"); + } + + max_response_blocked_time = m_orb.m_conf.max_blocked_time; + qos_enabled = m_orb.m_conf.qos_enabled; + assume_ziop_server = m_orb.m_conf.assume_ziop_server; + + m_state = new ConnectionState(); + + m_requests_in_POA = new Counter(); + + id_count = new Counter(); + + m_current_request_id = null; + + m_lock_list = new LockList(); + + m_ami_lock_list = m_orb.getAMIManager().getAMILockList(); + + m_uncompleted_messages = new UseTable( maxUncompletedMessages ); + + m_send_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + m_receive_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + + } + + /** + * Start the connection thread execution. + */ + public void init() + { + try { + ConnectionThread conn_thread = new ConnectionThread(this); + conn_thread.setDaemon(false); + conn_thread.start(); + } + catch (Throwable thw) { + throw new org.omg.CORBA.NO_RESOURCES( + "Can't create thread: " + thw.toString() ); + } + + } + + /** + * IIOPConnection hash code. + */ + public abstract int hashCode(); + + public abstract boolean equals(Object obj); + + public abstract String toString(); + + + /** + * Add a new listen point for whose this connection can be uses to sending + * request. This will be usefull if this connection is bidirectional. + * + * @param listen_point + * the new listen point of an bidirectional connection + */ + public void addListenPoint(ListenPoint listen_point) + { + m_addresses.put(listen_point, listen_point); + } + + /** + * @return the listen points associated to this connection + */ + public Enumeration getListenPoints() + { + return m_addresses.elements(); + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects that a referenced object is defined in a + * "Bidirectional POA". The contest will be sent in the next response. + * + * @param context + * the list containing the BiDirServiceContext + */ + public void setBidirectionalMode(ServiceContextList context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + m_bidirectional_service = context; + + m_send_bidirectional_service = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, toString() + + ": Setting Bidirectional Mode."); + } + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects a bidirectional context in a request or + * response sent by the peer. + * + * @param context + * the bidirectional context + */ + + public void setBidirectionalModeByPeer(BiDirServiceContext context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + if (m_orb.m_trace != null) { + m_orb + .printTrace( + Trace.DEBUG, + toString() + + ": Setting Bidirectional Mode by Peer."); + } + + for (int i = 0; i < context.m_listen_points.length; i++) { + addListenPoint(context.m_listen_points[i]); + m_manager.addBidirectionalConnection(context.m_listen_points[i], + (es.tid.TIDorbj.core.comm.Connection)this); + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + toString() + + " will be connected to" + + context.m_listen_points[i].toString()); + } + } + + } + + /** + * Test whether the connection is still opened or not. + * + * @return true if open or false if not. + */ + + public boolean isOpen() + { + return m_state.isOpen(); + } + + /** + * @return the communication error (if exits) + */ + public COMM_FAILURE getConnectionError() + { + return m_state.getError(); + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isClientConnection() + { + return m_mode == CLIENT_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isServerConnection() + { + return m_mode == SERVER_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isBidirectionalConnection() + { + return m_mode == BIDIRECTIONAL_MODE; + } + + /** + * The connection has recived a close connection. + */ + public void closeByPair() + { + if (m_state.setClosing()) { + m_manager.closing(this); + close(); + } + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, toString() + " closed by pair"); + } + + /** + * The connection will be closed by the connection manager. + * + * @see es.tid.TIDorbj.core.comm.iiop.IIOPConnectionManager + */ + + public void closeByManager() + { + if (m_state.setClosing()) { + if (m_mode != CLIENT_MODE) + sendClose(); + + if (m_lock_list.size() != 0) + m_state.seterror( + new COMM_FAILURE("IIOPConnection Closed because the max. " + + "connection number has been reached.", + 0, + CompletionStatus.COMPLETED_NO)); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " closed by IIOPConnection Manager"); + } + } + + /** + * The connection is closed due to the socket is broken. + * + * @param error + * the broken communication error + */ + + public void closeByBrokenConnection(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + public void closeByError(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + protected abstract void close(); + + public void sendClose() + { + try { + GIOPHeader header; + header = new GIOPHeader( giopVersion, MsgType.CloseConnection); + + sendMessage(header); + } + catch (Exception e) {} + } + + public void sendError() { + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, toString() + " : sending a GIOP Message error." + ); + } + + GIOPHeader error; + error = new GIOPHeader( giopVersion , MsgType.MessageError); + sendMessage(error); + } + + public void sendHeader(GIOPHeader header) { + header.toByteArray(m_send_header_buffer); + write(m_send_header_buffer); + } + + protected GIOPHeader receiveHeader() { + read(m_receive_header_buffer); + return GIOPHeader.fromByteArray(m_receive_header_buffer); + } + + protected void sendMessage(GIOPHeader header) { + try { + m_write_monitor.initWrite(); + } catch (WriteTimeout to) { + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + sendHeader(header); + + m_write_monitor.endWrite(); + } + + public void sendMessage(GIOPMessage message) { + if (m_state.isOpen()) { + m_manager.use(this); + } + + message.send(this); + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + ": ", + message.toString(), + " has been sent!" + } + ); + } + } + + public void receiveMessage() { + while (true) { + + if (m_state.isOpen()) { + m_manager.use(this); + } else { + break; + } + + try { + + // wait for reply + GIOPHeader header = receiveHeader(); + + + // Attend for compressed messages + if (header.getCompressed()){ + ZIOPMessage ziop_message = new ZIOPMessage(header, giopFragmentSize); + + ziop_message.receiveBody(this, m_receive_header_buffer); + + ziop_message.connect_GIOPMessage(this); + continue; + } + + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (message.hasBody()) { + message.receiveBody(this, m_receive_header_buffer); + } + + if (m_orb.m_trace != null){ + m_orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + m_orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + switch (header.getMsgType().m_value) + { + + case MsgType._Request: + manageMessage((GIOPRequestMessage) message); + break; + case MsgType._Reply: + manageMessage((GIOPReplyMessage) message); + break; + case MsgType._CancelRequest: + manageMessage((GIOPCancelRequestMessage) message); + break; + case MsgType._LocateRequest: + manageMessage((GIOPLocateRequestMessage) message); + break; + case MsgType._LocateReply: + manageMessage((GIOPLocateReplyMessage) message); + break; + case MsgType._Fragment: + manageMessage((GIOPFragmentMessage) message); + break; + case MsgType._CloseConnection: + closeByPair(); + return; + case MsgType._MessageError: + closeByError( + new COMM_FAILURE("IIOPConnection closed due to pair " + + "message error.")); + return; + } + + } + catch (org.omg.CORBA.COMM_FAILURE comm) { + closeByError(comm); + return; + } + catch (Throwable excp) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.ERROR, toString(), excp); + + closeByError(new COMM_FAILURE(excp.toString())); + return; + } + } + } + + public void manageMessage(GIOPFragmentMessage message) + { + RequestId id = null; + + if (GIOPVersion.VERSION_1_2.equals(message.getHeader().getVersion())) + id = message.getRequestId(); + else if (m_current_request_id == null) { // unexpected fragment message + closeByError(new COMM_FAILURE("Unexpected fragment message.", 0, + CompletionStatus.COMPLETED_NO)); + return; + } else + id = m_current_request_id; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + toString() + " : GIOP Fragment Message has received." + ); + } + + FragmentedMessageHolder holder = + (FragmentedMessageHolder) m_uncompleted_messages.get(id); + + if (holder == null) { + // discard message + return; + } + + GIOPFragmentedMessage fragmented_message = holder.m_message; + + fragmented_message.addFragment(message); + + if (!message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received. + + m_uncompleted_messages.remove(id); + + switch (fragmented_message.getHeader().getMsgType().m_value) + { + case MsgType._Request: + dispatchRequest((GIOPRequestMessage) fragmented_message); + break; + case MsgType._LocateRequest: + dispatchRequest((GIOPLocateRequestMessage) fragmented_message); + break; + // CLIENT MESSAGES + case MsgType._Reply: + serviceContextReceived( + ((GIOPReplyMessage) + fragmented_message).getServiceContextList()); + case MsgType._LocateReply: + { + m_current_request_id = null; + Lock lock = m_lock_list.get(id); + AMILock ami_lock = m_ami_lock_list.get(id); + if (lock != null) { // the lock has not been discarded + lock.setMessage(fragmented_message); + lock.setCompleted(); + } else if (ami_lock != null) { + ami_lock.setMessage(fragmented_message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + } + } + + public void manageMessage(GIOPReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("Reply has been received by Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) { + return; // discard + } + + if (message.getHeader().hasMoreFragments()) { + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE("Fragment message expeted, " + + "but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + + } + } else { + serviceContextReceived(message.getServiceContextList()); + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPLocateReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("LocateReply has been received by " + + "Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) + return; // the lock hast expired, discard the message + + if (message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateReply can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else { + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPCancelRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "CancelRequest has been received by Client IIOPConnection")); + return; + } + + m_uncompleted_messages.remove(message.getRequestId()); + } + + public void manageMessage(GIOPLocateRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateRequest can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + protected abstract void dispatchRequest(GIOPLocateRequestMessage message); + + + protected abstract void dispatchRequest(GIOPRequestMessage message); + + + /** + * Try to resolve the url received in a Request ObjectKey + */ + + protected org.omg.CORBA.Object resolveURL(String url) { + try { + // Backward compatibility, ObjectId now expected + + if (url.startsWith("corbaloc:tidorbj:")) { + return m_orb.string_to_object(url); + } else { + + String object_id = null; + + if (url.startsWith("corbaloc:ssliop:")) { + object_id = SSLIOPCorbaloc.getObjectId(url); + } else if ((url.startsWith("corbaloc:iiop:")) + || (url.startsWith("corbaloc::"))) { + object_id = IIOPCorbaloc.getObjectId(url); + } else { + // standard version + object_id = url; + } + + return m_orb.resolve_initial_references(object_id); + } + } + catch (Throwable th) {} + + return null; + } + + public void manageMessage(GIOPRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + if (m_orb.m_trace != null) + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE( + "Fragment message expeted, but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + public boolean sendLocateRequest(IIOPIOR ior, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + return sendLocateRequest(ior, AddressingDisposition.KeyAddr, + policy_context); + } + + private boolean sendLocateRequest(IIOPIOR ior, + AddressingDisposition disposition, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + RequestId id = generateId(); + + GIOPLocateRequestMessage message = + new GIOPLocateRequestMessage(profile.getVersion(), + id, + giopFragmentSize ); + + // create the reply lock + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + + ": sending LocationRequest " + + id.toString()); + + switch (disposition.value()) + { + case AddressingDisposition._KeyAddr: + message.insertAddress(m_manager.orb(), + ior.toObjectKeyAddress()); + break; + case AddressingDisposition._ProfileAddr: + message.insertAddress(m_manager.orb(), + ior.toProfileAddress()); + break; + case AddressingDisposition._ReferenceAddr: + message.insertAddress(m_manager.orb(), + ior.toIORAddress()); + } + + sendMessage(message); + + // block the thread waiting for response + + lock.waitForCompletion(timeout); + + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No LocateReply message", 0, + CompletionStatus.COMPLETED_NO); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._LocateReply) { + throw new MARSHAL("No LocateReply message received", 0, + CompletionStatus.COMPLETED_NO); + } + + GIOPLocateReplyMessage reply_message = + (GIOPLocateReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case LocateReplyStatusType._UNKNOWN_OBJECT: + return false; + case LocateReplyStatusType._OBJECT_HERE: + return true; + case LocateReplyStatusType._OBJECT_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._OBJECT_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._LOC_SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case LocateReplyStatusType._LOC_NEEDS_ADDRESSING_MODE: + return sendLocateRequest( + ior, + reply_message.extractAddressingDisposition(), + policy_context); + } + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + return false; + } + + public void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE + { + sendOnewayRequestAsync(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE + { + // verify if the request can be sent + m_state.verifyForRequest(); + + request.setId(generateId()); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + } + + public void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendOnewayRequestSync(request, ior, AddressingDisposition.KeyAddr); + + } + + private void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + // verify if the request can be sent + m_state.verifyForRequest(); + + Lock lock = new Lock(); + + lock.requestId(request.getId()); + m_lock_list.put(lock); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + + } + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) + throw new INTERNAL("No Reply message"); + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) + throw new MARSHAL("No LocateReply message received"); + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: // traza + case ReplyStatusType._USER_EXCEPTION: // traza + case ReplyStatusType._SYSTEM_EXCEPTION: // traza + break; // nothing to do, it is a oneway request + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendOnewayRequestSync( + request, + ior, + reply_message.extractAddressingDisposition()); + } + } + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendRequest(request, ior, AddressingDisposition.KeyAddr); + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = + new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + setServiceContextList(policy_context, message); + + message.insertRequest(request, ior, disposition); + + try { + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + sendMessage(message); + } + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + // block the thread waiting for response + + + lock.waitForCompletion(timeout); + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + request.setCompletedYes(); + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + reply_message.extractArguments(request); + break; + case ReplyStatusType._USER_EXCEPTION: + request.setUserException( + reply_message.extractUserException( + request.exceptions())); + break; + case ReplyStatusType._SYSTEM_EXCEPTION: + request.setSystemException( + reply_message.extractSystemException()); + break; + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendRequest(request, ior, + reply_message.extractAddressingDisposition()); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + public org.omg.CORBA.portable.InputStream + sendRequest(es.tid.TIDorbj.core.iop.IOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest, + org.omg.CORBA.portable.RemarshalException, + org.omg.CORBA.portable.ApplicationException + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // write operation context: o conxtests + stream.write_ulong(0); + + es.tid.TIDorbj.core.cdr.CDRInputStream header_input = + new es.tid.TIDorbj.core.cdr.CDRInputStream(null, + stream.getBuffer()); + + GIOPHeader header = new GIOPHeader(); + + header.read(header_input); + + header_input = null; + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (!(message instanceof GIOPRequestMessage)) + throw new BAD_OPERATION("No Request message in stream"); + + message.setMessageBuffer(stream.getBuffer()); + message.setMessageCompleted(true); + + GIOPRequestMessage request_msg = (GIOPRequestMessage) message; + + ServerRequestImpl srv_request = request_msg.extractRequest(m_orb); + + RequestId id = srv_request.getId(); + + if (!srv_request.withResponse()) { + if (m_orb.m_trace != null) { + String[] msg = { toString(), + ": Sending Oneway Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + sendMessage(message); + + } else { + + Lock lock = new Lock(); + + lock.requestId(id); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { toString(), ": Sending Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + try { + sendMessage(message); + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + // block the thread waiting for response + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + return input; + } + case ReplyStatusType._USER_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + String excp_id = input.read_string(); + input.rewind(); + throw new ApplicationException( + excp_id, + reply_message.getDataInput()); + } + case ReplyStatusType._SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + throw new org.omg.CORBA.portable.RemarshalException(); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + return null; + } + + public void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) //*opc1*, Object ami_handler) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendAsyncRequest(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, //*opc1* Object ami_handler, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + PolicyContext policy_context = request.getPolicyContext(); + + long timeout = QoS.checkRequestTime(this.m_orb, policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + + AMILock ami_lock = new AMILock(); + ami_lock.requestId(message.getRequestId()); + ami_lock.setHandler(request.get_ami_handler()); + ami_lock.setRequest(request); + ami_lock.setIor(ior); + + m_ami_lock_list.put(ami_lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Asynchronous Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + setServiceContextList(policy_context, message); + + try { + message.insertRequest(request, ior, disposition); + sendMessage(message); + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + + /* hacerlo dentro de thread k mira tiempo de las peticiones as�ncronas + } else { + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + request.setCompletedMaybe(); + throw new RECOVERABLE_COMM_FAILURE( + new COMM_FAILURE("IIOPConnection closed by pair")); + + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(); + } + }*/ + } + + + public void prepareRequest( StreamRequestImpl request, IIOPIOR ior ) { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) + ver = orb_ver; + + GIOPRequestMessage message = new GIOPRequestMessage(ver, + request.getId(), + giopFragmentSize); + + message.prepareRequest(request, ior, AddressingDisposition.KeyAddr); + + } + + public void sendReply(ServerRequestImpl request, PolicyContext policy_context) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPReplyMessage message = new GIOPReplyMessage(request.getVersion(), + request.getId(), + giopFragmentSize); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + message.insertResultRequest(m_orb, request); + + CompressorIdLevel compressor = request.get_compressor(); + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + + int low_value = 0; + float min_ratio = 0; + + + if (policy_context != null) { + low_value = ZIOP.getLowValue(policy_context); + min_ratio = ZIOP.getMinRatio(policy_context); + + compressor.compression_level = + ZIOP.getLevelCompressor(compressor.compressor_id, + policy_context); + } + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + + } else { + sendMessage(message); + } + } + + public void sendLocateReply(GIOPVersion version, RequestId id, boolean here) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + if (here) + message.insertObjectHere(m_orb); + else + message.insertUnknownObject(m_orb); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + org.omg.CORBA.Object obj) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + message.insertForward(m_orb, obj); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + SystemException excep) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize); + + message.insertSystemException(m_orb, excep); + + sendMessage(message); + } + + protected void setServiceContextList(PolicyContext policy_context, + GIOPRequestMessage message) + { + Vector contexts = new Vector(); + + // Invocation Service Context + + InvocationPoliciesContext invocationPolicies = null; + if (policy_context != null) { + invocationPolicies = policy_context.getInvocationPolicyServiceContext(); + } + if(invocationPolicies != null) { + contexts.add(invocationPolicies); + } + + // Bidirectional Service context + if (m_send_bidirectional_service) { + + contexts.add(m_bidirectional_service.m_components[0]); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + int num_services = contexts.size(); + if ( num_services > 0) { + + ServiceContextList services = new ServiceContextList(num_services); + + contexts.toArray(services.m_components); + + message.setServiceContextList(services); + } + } + + protected void serviceContextReceived(ServiceContextList services) + { + if (services == null) + return; + + for (int i = 0; i < services.m_components.length; i++) { + if ((services.m_components[i] != null) + && (services.m_components[i].m_context_id + == org.omg.IOP.BI_DIR_IIOP.value)) { + setBidirectionalModeByPeer( + (BiDirServiceContext) services.m_components[i]); + } + } + } + + /** + * RemovableObject interface method + */ + + public boolean canBeRemoved() + { + return !hasPendingRequests(); + } + + public synchronized boolean hasPendingRequests() + { + if (m_mode == CLIENT_MODE) { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0)); + } else { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0) + || (m_requests_in_POA.isNonZero())); + } + } + + public RequestId generateId() + { + return new RequestId(id_count.postInc()); + } + + public void read(byte[] buffer) + { + read(buffer, 0, buffer.length); + } + + public abstract void read(byte[] buffer, int offset, int length); + + protected abstract void write(byte[] buffer); + + protected abstract void write(byte[] buffer, int offset, int length); + + /* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAMBIAR PARA MANDAR UN MENSAJE CON + * VARIOS CHUNKS + */ + public void writeVersion1_0(BufferCDR buffer) + {/* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * if(num_chunks > 1) throw new MARSHAL("GIOP 1.0 does not allow + * fragmentation"); + * + * ChunkCDR chunk = null; + * + * synchronized(write_mutex) { chunk = buffer.getChunk(0); + * write(chunk.getBuffer(),0,chunk.getAvailable()); } + */ + writeVersion1_1(buffer); // the buffer is only one message + } + + public void writeVersion1_1(BufferCDR buffer) + { + int num_chunks = buffer.getNumAvailableChunks(); + + ChunkCDR chunk = null; + + // Check write Monitor + try { + m_write_monitor.initWrite(); + } + catch (WriteTimeout wt) { // WriteTimeout: close this connection + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + // write loop + + for (int i = 0; i < num_chunks; i++) { + chunk = buffer.getChunk(i); + write(chunk.getBuffer(), 0, chunk.getAvailable()); + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DUMP, "GIOP message chunk sent - HEXDUMP " + + chunk.getAvailable() + " bytes"); + m_orb.printDump(Trace.DUMP, + chunk.getBuffer(), + chunk.getAvailable()); + } + + } + // free write monitor + + m_write_monitor.endWrite(); + } + + public void writeVersion1_2(BufferCDR buffer) + { + writeVersion1_1(buffer); + /* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * ChunkCDR chunk = null; + * + * for(int i = 0; i < num_chunks; i++) { chunk = buffer.getChunk(i); + * + * synchronized(write_mutex) { + * write(chunk.getBuffer(),0,chunk.getAvailable()); } } + */ + } +} diff --git a/source/es/tid/TIDorbj/core/comm/Connection.java~ b/source/es/tid/TIDorbj/core/comm/Connection.java~ new file mode 100644 index 0000000..a172752 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/Connection.java~ @@ -0,0 +1,2035 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import java.io.IOException; +import java.net.Socket; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.comm.ssliop.*; + +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb IIOP IIOPConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +abstract public class Connection extends ORBComponent implements RemovableObject { + //public class IIOPConnection extends Connection { + + /** + * Client connection mode. + */ + public final static int CLIENT_MODE = 0; + + /** + * Server connection mode. + */ + public final static int SERVER_MODE = 1; + + /** + * Bidirectional connection mode. + */ + public final static int BIDIRECTIONAL_MODE = 2; + + /** + * IIOPConnection mode. + */ + protected int m_mode; + + /** + * IIOPConnection state. + */ + protected ConnectionState m_state; + + /** + * Pending requests in POA. + */ + protected Counter m_requests_in_POA; + + /** + * Actual id count. The ids will be given sequentialy. + */ + private Counter id_count; + + /** + * IIOPConnection identifier: the local port related to the connection socket. + */ + + protected int my_port = 0; + + /** + * Server Object Listen Points assitiated. + */ + + protected java.util.Hashtable m_addresses; + + /** + * First client address; + */ + + protected ListenPoint m_initial_point; + + /** + * The IIOPConnectionManager. + */ + + protected IIOPConnectionManager m_manager; + + /** + * Lock list where the pending requests are waiting for response. + */ + + protected LockList m_lock_list; + + /** + * Lock list where the pending asynchronous requests are waiting for response. + */ + + protected AMILockList m_ami_lock_list; + + /** + * Table with the uncompleted messages that has more fragments. + */ + + protected UseTable m_uncompleted_messages; + + /** + * Maintains the actual request id for fragmented message in GIOP 1.1 + */ + + RequestId m_current_request_id; + + /** + * Bidirectional Service Context. It will be sent in the next + * Request/Response. + */ + + protected ServiceContextList m_bidirectional_service; + + /** + * Says if the bidirecitonal context has to been sent or not. + */ + + protected boolean m_send_bidirectional_service; + + /** + * Write messages in socket monitor. + */ + + protected ConnectionWriteMonitor m_write_monitor; + + /** + * IIOPConnection buffer for writting headers. + */ + byte[] m_send_header_buffer; + + /** + * IIOPConnection buffer for receiving headers. + */ + byte[] m_receive_header_buffer; + + /** + * The toString() return value. + */ + protected String m_str = null; + + /** + * Register the connection at the connection manager and initialize the + * connection socket with the ORB configuration values. + * + * @see es.tid.TIDorbj.core.ConfORB + */ + +// private boolean tcpNoDelay; +// private int soTimeout; +// private int soLinger; + private int maxUncompletedMessages; +// private int socketWriteTimeout; + private GIOPVersion giopVersion; + private int giopFragmentSize; + + /** + * Says if QoS is enabled not. + */ + long max_response_blocked_time; + + /** + * Says if QoS is enabled not. + */ + boolean qos_enabled; + + /** + * Says if the client can sssume that server uses ziop or not. + */ + boolean assume_ziop_server; + + protected Connection(IIOPConnectionManager mngr) + { + super(mngr.orb()); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + maxUncompletedMessages = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.MAX_UNCOMPLETED_MESSAGES ) + .getInt(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getValue() + ); + + giopFragmentSize = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.FRAGMENT_SIZE ) + .getInt(); + + max_response_blocked_time = m_orb.m_conf.max_blocked_time; + qos_enabled = m_orb.m_conf.qos_enabled; + assume_ziop_server = m_orb.m_conf.assume_ziop_server; + + m_state = new ConnectionState(); + + m_requests_in_POA = new Counter(); + + id_count = new Counter(); + + m_current_request_id = null; + + m_lock_list = new LockList(); + + m_ami_lock_list = m_orb.getAMIManager().getAMILockList(); + + m_uncompleted_messages = new UseTable( maxUncompletedMessages ); + + m_send_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + m_receive_header_buffer = new byte[GIOPHeader.HEADER_SIZE]; + + } + + /** + * Start the connection thread execution. + */ + public void init() + { + try { + ConnectionThread conn_thread = new ConnectionThread(this); + conn_thread.setDaemon(false); + conn_thread.start(); + } + catch (Throwable thw) { + throw new org.omg.CORBA.NO_RESOURCES( + "Can't create thread: " + thw.toString() ); + } + + } + + /** + * IIOPConnection hash code. + */ + public abstract int hashCode(); + + public abstract boolean equals(Object obj); + + public abstract String toString(); + + + /** + * Add a new listen point for whose this connection can be uses to sending + * request. This will be usefull if this connection is bidirectional. + * + * @param listen_point + * the new listen point of an bidirectional connection + */ + public void addListenPoint(ListenPoint listen_point) + { + m_addresses.put(listen_point, listen_point); + } + + /** + * @return the listen points associated to this connection + */ + public Enumeration getListenPoints() + { + return m_addresses.elements(); + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects that a referenced object is defined in a + * "Bidirectional POA". The contest will be sent in the next response. + * + * @param context + * the list containing the BiDirServiceContext + */ + public void setBidirectionalMode(ServiceContextList context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + m_bidirectional_service = context; + + m_send_bidirectional_service = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, toString() + + ": Setting Bidirectional Mode."); + } + } + + /** + * Changes the connection mode to BIDIRECTIONAL_MODE. This method is called + * by the connection if it detects a bidirectional context in a request or + * response sent by the peer. + * + * @param context + * the bidirectional context + */ + + public void setBidirectionalModeByPeer(BiDirServiceContext context) + { + if (m_mode != BIDIRECTIONAL_MODE) { + m_mode = BIDIRECTIONAL_MODE; + m_str = null; // reset the string + } + + if (m_orb.m_trace != null) { + m_orb + .printTrace( + Trace.DEBUG, + toString() + + ": Setting Bidirectional Mode by Peer."); + } + + for (int i = 0; i < context.m_listen_points.length; i++) { + addListenPoint(context.m_listen_points[i]); + m_manager.addBidirectionalConnection(context.m_listen_points[i], + (es.tid.TIDorbj.core.comm.Connection)this); + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + toString() + + " will be connected to" + + context.m_listen_points[i].toString()); + } + } + + } + + /** + * Test whether the connection is still opened or not. + * + * @return true if open or false if not. + */ + + public boolean isOpen() + { + return m_state.isOpen(); + } + + /** + * @return the communication error (if exits) + */ + public COMM_FAILURE getConnectionError() + { + return m_state.getError(); + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isClientConnection() + { + return m_mode == CLIENT_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isServerConnection() + { + return m_mode == SERVER_MODE; + } + + /** + * @return true if the communication is running in client + * mode + */ + public boolean isBidirectionalConnection() + { + return m_mode == BIDIRECTIONAL_MODE; + } + + /** + * The connection has recived a close connection. + */ + public void closeByPair() + { + if (m_state.setClosing()) { + m_manager.closing(this); + close(); + } + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, toString() + " closed by pair"); + } + + /** + * The connection will be closed by the connection manager. + * + * @see es.tid.TIDorbj.core.comm.iiop.IIOPConnectionManager + */ + + public void closeByManager() + { + if (m_state.setClosing()) { + if (m_mode != CLIENT_MODE) + sendClose(); + + if (m_lock_list.size() != 0) + m_state.seterror( + new COMM_FAILURE("IIOPConnection Closed because the max. " + + "connection number has been reached.", + 0, + CompletionStatus.COMPLETED_NO)); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " closed by IIOPConnection Manager"); + } + } + + /** + * The connection is closed due to the socket is broken. + * + * @param error + * the broken communication error + */ + + public void closeByBrokenConnection(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + public void closeByError(COMM_FAILURE error) + { + if (m_state.seterror(error)) { + m_manager.closing(this); + close(); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + toString() + + " is closing due to: " + error); + } + } + + protected abstract void close(); + + public void sendClose() + { + try { + GIOPHeader header; + header = new GIOPHeader( giopVersion, MsgType.CloseConnection); + + sendMessage(header); + } + catch (Exception e) {} + } + + public void sendError() { + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, toString() + " : sending a GIOP Message error." + ); + } + + GIOPHeader error; + error = new GIOPHeader( giopVersion , MsgType.MessageError); + sendMessage(error); + } + + public void sendHeader(GIOPHeader header) { + header.toByteArray(m_send_header_buffer); + write(m_send_header_buffer); + } + + protected GIOPHeader receiveHeader() { + read(m_receive_header_buffer); + return GIOPHeader.fromByteArray(m_receive_header_buffer); + } + + protected void sendMessage(GIOPHeader header) { + try { + m_write_monitor.initWrite(); + } catch (WriteTimeout to) { + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + sendHeader(header); + + m_write_monitor.endWrite(); + } + + public void sendMessage(GIOPMessage message) { + if (m_state.isOpen()) { + m_manager.use(this); + } + + message.send(this); + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + ": ", + message.toString(), + " has been sent!" + } + ); + } + } + + public void receiveMessage() { + while (true) { + + if (m_state.isOpen()) { + m_manager.use(this); + } else { + break; + } + + try { + + // wait for reply + GIOPHeader header = receiveHeader(); + + + // Attend for compressed messages + if (header.getCompressed()){ + ZIOPMessage ziop_message = new ZIOPMessage(header, giopFragmentSize); + + ziop_message.receiveBody(this, m_receive_header_buffer); + + ziop_message.connect_GIOPMessage(this); + continue; + } + + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (message.hasBody()) { + message.receiveBody(this, m_receive_header_buffer); + } + + if (m_orb.m_trace != null){ + m_orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + m_orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + switch (header.getMsgType().m_value) + { + + case MsgType._Request: + manageMessage((GIOPRequestMessage) message); + break; + case MsgType._Reply: + manageMessage((GIOPReplyMessage) message); + break; + case MsgType._CancelRequest: + manageMessage((GIOPCancelRequestMessage) message); + break; + case MsgType._LocateRequest: + manageMessage((GIOPLocateRequestMessage) message); + break; + case MsgType._LocateReply: + manageMessage((GIOPLocateReplyMessage) message); + break; + case MsgType._Fragment: + manageMessage((GIOPFragmentMessage) message); + break; + case MsgType._CloseConnection: + closeByPair(); + return; + case MsgType._MessageError: + closeByError( + new COMM_FAILURE("IIOPConnection closed due to pair " + + "message error.")); + return; + } + + } + catch (org.omg.CORBA.COMM_FAILURE comm) { + closeByError(comm); + return; + } + catch (Throwable excp) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.ERROR, toString(), excp); + + closeByError(new COMM_FAILURE(excp.toString())); + return; + } + } + } + + public void manageMessage(GIOPFragmentMessage message) + { + RequestId id = null; + + if (GIOPVersion.VERSION_1_2.equals(message.getHeader().getVersion())) + id = message.getRequestId(); + else if (m_current_request_id == null) { // unexpected fragment message + closeByError(new COMM_FAILURE("Unexpected fragment message.", 0, + CompletionStatus.COMPLETED_NO)); + return; + } else + id = m_current_request_id; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + toString() + " : GIOP Fragment Message has received." + ); + } + + FragmentedMessageHolder holder = + (FragmentedMessageHolder) m_uncompleted_messages.get(id); + + if (holder == null) { + // discard message + return; + } + + GIOPFragmentedMessage fragmented_message = holder.m_message; + + fragmented_message.addFragment(message); + + if (!message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received. + + m_uncompleted_messages.remove(id); + + switch (fragmented_message.getHeader().getMsgType().m_value) + { + case MsgType._Request: + dispatchRequest((GIOPRequestMessage) fragmented_message); + break; + case MsgType._LocateRequest: + dispatchRequest((GIOPLocateRequestMessage) fragmented_message); + break; + // CLIENT MESSAGES + case MsgType._Reply: + serviceContextReceived( + ((GIOPReplyMessage) + fragmented_message).getServiceContextList()); + case MsgType._LocateReply: + { + m_current_request_id = null; + Lock lock = m_lock_list.get(id); + AMILock ami_lock = m_ami_lock_list.get(id); + if (lock != null) { // the lock has not been discarded + lock.setMessage(fragmented_message); + lock.setCompleted(); + } else if (ami_lock != null) { + ami_lock.setMessage(fragmented_message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + } + } + + public void manageMessage(GIOPReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("Reply has been received by Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) { + return; // discard + } + + if (message.getHeader().hasMoreFragments()) { + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE("Fragment message expeted, " + + "but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + + } + } else { + serviceContextReceived(message.getServiceContextList()); + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPLocateReplyMessage message) + { + if (m_mode == SERVER_MODE) { + closeByError( + new COMM_FAILURE("LocateReply has been received by " + + "Server IIOPConnection")); + return; + } + + Lock lock = m_lock_list.get(message.getRequestId()); + AMILock ami_lock = m_ami_lock_list.get(message.getRequestId()); + + if (lock == null && ami_lock == null) + return; // the lock hast expired, discard the message + + if (message.getHeader().hasMoreFragments()) { + + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateReply can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else { + if (lock != null) { + lock.setMessage(message); + lock.setCompleted(); + } else { //asynchronous invocation + ami_lock.setMessage(message); + m_ami_lock_list.setCompleted(ami_lock.requestId()); + } + } + } + + public void manageMessage(GIOPCancelRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "CancelRequest has been received by Client IIOPConnection")); + return; + } + + m_uncompleted_messages.remove(message.getRequestId()); + } + + public void manageMessage(GIOPLocateRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + closeByError( + new COMM_FAILURE( + "LocateRequest can not be fragmented in GIOP 1.1.", + 0, CompletionStatus.COMPLETED_NO)); + return; + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + protected abstract void dispatchRequest(GIOPLocateRequestMessage message); + + + protected abstract void dispatchRequest(GIOPRequestMessage message); + + + /** + * Try to resolve the url received in a Request ObjectKey + */ + + protected org.omg.CORBA.Object resolveURL(String url) { + try { + // Backward compatibility, ObjectId now expected + + if (url.startsWith("corbaloc:tidorbj:")) { + return m_orb.string_to_object(url); + } else { + + String object_id = null; + + if (url.startsWith("corbaloc:ssliop:")) { + object_id = SSLIOPCorbaloc.getObjectId(url); + } else if ((url.startsWith("corbaloc:iiop:")) + || (url.startsWith("corbaloc::"))) { + object_id = IIOPCorbaloc.getObjectId(url); + } else { + // standard version + object_id = url; + } + + return m_orb.resolve_initial_references(object_id); + } + } + catch (Throwable th) {} + + return null; + } + + public void manageMessage(GIOPRequestMessage message) + { + if (m_mode == CLIENT_MODE) { + if (m_orb.m_trace != null) + closeByError( + new COMM_FAILURE( + "Request has been received by Client IIOPConnection")); + return; + } + + if (message.getHeader().hasMoreFragments()) { + //version 1.1 fragmentation: fragments are received sequentialy + if (GIOPVersion.VERSION_1_1.equals(message.getHeader().getVersion())) { + if (m_current_request_id != null) { // Fragment message was + // expected + closeByError( + new COMM_FAILURE( + "Fragment message expeted, but Reply received.", + 0, + CompletionStatus.COMPLETED_NO)); + return; + } + m_current_request_id = message.getRequestId(); + } + + try { + m_uncompleted_messages.append( + message.getRequestId(), + new FragmentedMessageHolder(message)); + } + catch (FullUseTableException fute) { + //unreachable: holder always can be removed + } + + } else + dispatchRequest(message); + } + + public boolean sendLocateRequest(IIOPIOR ior, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + return sendLocateRequest(ior, AddressingDisposition.KeyAddr, + policy_context); + } + + private boolean sendLocateRequest(IIOPIOR ior, + AddressingDisposition disposition, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + RequestId id = generateId(); + + GIOPLocateRequestMessage message = + new GIOPLocateRequestMessage(profile.getVersion(), + id, + giopFragmentSize ); + + // create the reply lock + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, toString() + + ": sending LocationRequest " + + id.toString()); + + switch (disposition.value()) + { + case AddressingDisposition._KeyAddr: + message.insertAddress(m_manager.orb(), + ior.toObjectKeyAddress()); + break; + case AddressingDisposition._ProfileAddr: + message.insertAddress(m_manager.orb(), + ior.toProfileAddress()); + break; + case AddressingDisposition._ReferenceAddr: + message.insertAddress(m_manager.orb(), + ior.toIORAddress()); + } + + sendMessage(message); + + // block the thread waiting for response + + lock.waitForCompletion(timeout); + + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No LocateReply message", 0, + CompletionStatus.COMPLETED_NO); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._LocateReply) { + throw new MARSHAL("No LocateReply message received", 0, + CompletionStatus.COMPLETED_NO); + } + + GIOPLocateReplyMessage reply_message = + (GIOPLocateReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case LocateReplyStatusType._UNKNOWN_OBJECT: + return false; + case LocateReplyStatusType._OBJECT_HERE: + return true; + case LocateReplyStatusType._OBJECT_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._OBJECT_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case LocateReplyStatusType._LOC_SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case LocateReplyStatusType._LOC_NEEDS_ADDRESSING_MODE: + return sendLocateRequest( + ior, + reply_message.extractAddressingDisposition(), + policy_context); + } + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + return false; + } + + public void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE + { + sendOnewayRequestAsync(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendOnewayRequestAsync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE + { + // verify if the request can be sent + m_state.verifyForRequest(); + + request.setId(generateId()); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + } + + public void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendOnewayRequestSync(request, ior, AddressingDisposition.KeyAddr); + + } + + private void sendOnewayRequestSync(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + // verify if the request can be sent + m_state.verifyForRequest(); + + Lock lock = new Lock(); + + lock.requestId(request.getId()); + m_lock_list.put(lock); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + + } + + GIOPRequestMessage message = + new GIOPRequestMessage(profile.getVersion(), + request.getId(), + giopFragmentSize); + + try { + + message.insertRequest(request, ior, disposition); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + + sendMessage(message); + } + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) + throw new INTERNAL("No Reply message"); + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) + throw new MARSHAL("No LocateReply message received"); + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: // traza + case ReplyStatusType._USER_EXCEPTION: // traza + case ReplyStatusType._SYSTEM_EXCEPTION: // traza + break; // nothing to do, it is a oneway request + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendOnewayRequestSync( + request, + ior, + reply_message.extractAddressingDisposition()); + } + } + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendRequest(request, ior, AddressingDisposition.KeyAddr); + } + + public void sendRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + long timeout = max_response_blocked_time; + CompressorIdLevel compressor = new CompressorIdLevel((short)0, (short)0); + PolicyContext policy_context = null; + + if (qos_enabled) { + policy_context = request.getPolicyContext(); + + timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + if (ior.is_ZIOP() || assume_ziop_server) { + PolicyContext policies_context_ior = ior.policies(); + compressor = ZIOP.getClientCompressor(policy_context, + policies_context_ior, + assume_ziop_server); + } + } + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = + new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + Lock lock = new Lock(); + + lock.requestId(message.getRequestId()); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + setServiceContextList(policy_context, message); + + message.insertRequest(request, ior, disposition); + + try { + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + int low_value = ZIOP.getLowValue(policy_context); + + float min_ratio = ZIOP.getMinRatio(policy_context); + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + } + else { + sendMessage(message); + } + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + // block the thread waiting for response + + + lock.waitForCompletion(timeout); + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + request.setCompletedYes(); + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + reply_message.extractArguments(request); + break; + case ReplyStatusType._USER_EXCEPTION: + request.setUserException( + reply_message.extractUserException( + request.exceptions())); + break; + case ReplyStatusType._SYSTEM_EXCEPTION: + request.setSystemException( + reply_message.extractSystemException()); + break; + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + sendRequest(request, ior, + reply_message.extractAddressingDisposition()); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + public org.omg.CORBA.portable.InputStream + sendRequest(es.tid.TIDorbj.core.iop.IOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + PolicyContext policy_context) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest, + org.omg.CORBA.portable.RemarshalException, + org.omg.CORBA.portable.ApplicationException + { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + // write operation context: o conxtests + stream.write_ulong(0); + + es.tid.TIDorbj.core.cdr.CDRInputStream header_input = + new es.tid.TIDorbj.core.cdr.CDRInputStream(null, + stream.getBuffer()); + + GIOPHeader header = new GIOPHeader(); + + header.read(header_input); + + header_input = null; + + GIOPMessage message = MessageFactory.fromHeader(header); + + if (!(message instanceof GIOPRequestMessage)) + throw new BAD_OPERATION("No Request message in stream"); + + message.setMessageBuffer(stream.getBuffer()); + message.setMessageCompleted(true); + + GIOPRequestMessage request_msg = (GIOPRequestMessage) message; + + ServerRequestImpl srv_request = request_msg.extractRequest(m_orb); + + RequestId id = srv_request.getId(); + + if (!srv_request.withResponse()) { + if (m_orb.m_trace != null) { + String[] msg = { toString(), + ": Sending Oneway Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + sendMessage(message); + + } else { + + Lock lock = new Lock(); + + lock.requestId(id); + + m_lock_list.put(lock); + + if (m_orb.m_trace != null) { + String[] msg = { toString(), ": Sending Stream Request \"", + srv_request.operation() + + " \"" + + id.toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + + } + + try { + sendMessage(message); + + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + // block the thread waiting for response + + + if(timeout > 0) { + lock.waitForCompletion(timeout); + } + + m_lock_list.remove(lock.requestId()); + + if (lock.getCompleted()) { + + GIOPFragmentedMessage fragmented_message = lock.getMessage(); + + if (fragmented_message == null) { + throw new INTERNAL("No Reply message"); + } + + if (fragmented_message.getHeader().getMsgType().m_value + != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = + (GIOPReplyMessage) fragmented_message; + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + return input; + } + case ReplyStatusType._USER_EXCEPTION: + { + CDRInputStream input = reply_message.getDataInput(); + input.fixStarting(); + String excp_id = input.read_string(); + input.rewind(); + throw new ApplicationException( + excp_id, + reply_message.getDataInput()); + } + case ReplyStatusType._SYSTEM_EXCEPTION: + throw reply_message.extractSystemException(); + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + throw new org.omg.CORBA.portable.RemarshalException(); + } + + } else { + + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection closed by pair", 0, CompletionStatus.COMPLETED_MAYBE); + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(0, CompletionStatus.COMPLETED_MAYBE); + } + } + } + + return null; + } + + public void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) //*opc1*, Object ami_handler) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + { + sendAsyncRequest(request, ior, AddressingDisposition.KeyAddr); + } + + private void sendAsyncRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior, //*opc1* Object ami_handler, + AddressingDisposition disposition) + throws RECOVERABLE_COMM_FAILURE, ForwardRequest + + { + PolicyContext policy_context = request.getPolicyContext(); + + long timeout = QoS.checkRequestTime(this.m_orb, policy_context); + + // verify if the request can be sent + m_state.verifyForRequest(); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) { + ver = orb_ver; + } + + GIOPRequestMessage message = new GIOPRequestMessage(ver, request.getId(), giopFragmentSize ); + + ////////////////////// + ////////////////////// + + + AMILock ami_lock = new AMILock(); + ami_lock.requestId(message.getRequestId()); + ami_lock.setHandler(request.get_ami_handler()); + ami_lock.setRequest(request); + ami_lock.setIor(ior); + + m_ami_lock_list.put(ami_lock); + + if (m_orb.m_trace != null) { + String[] msg = { + toString(), + ": Sending Asynchronous Request \"", + request.operation() + + " \"" + + request.getId().toString() }; + + m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + + setServiceContextList(policy_context, message); + + try { + message.insertRequest(request, ior, disposition); + sendMessage(message); + } + catch (COMM_FAILURE comm) { + throw new RECOVERABLE_COMM_FAILURE(comm); + } + + request.setCompletedMaybe(); + + + /* hacerlo dentro de thread k mira tiempo de las peticiones as�ncronas + } else { + switch (m_state.getValue()) + { + case ConnectionState.CLOSING_STATE: + request.setCompletedMaybe(); + throw new RECOVERABLE_COMM_FAILURE( + new COMM_FAILURE("IIOPConnection closed by pair")); + + case ConnectionState.ERROR_STATE: + throw m_state.getError(); + default: + throw new NO_RESPONSE(); + } + }*/ + } + + + public void prepareRequest( StreamRequestImpl request, IIOPIOR ior ) { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + request.setId(generateId()); + + //////////////////////////// + /////////////////////// + + GIOPVersion ver = profile.getVersion(); + GIOPVersion orb_ver = giopVersion; + + if (orb_ver.getMinor() < ver.getMinor()) + ver = orb_ver; + + GIOPRequestMessage message = new GIOPRequestMessage(ver, + request.getId(), + giopFragmentSize); + + message.prepareRequest(request, ior, AddressingDisposition.KeyAddr); + + } + + public void sendReply(ServerRequestImpl request, PolicyContext policy_context) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPReplyMessage message = new GIOPReplyMessage(request.getVersion(), + request.getId(), + giopFragmentSize); + + if (m_send_bidirectional_service) { + message.setServiceContextList(m_bidirectional_service); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + message.insertResultRequest(m_orb, request); + + CompressorIdLevel compressor = request.get_compressor(); + + if (compressor.compressor_id != COMPRESSORID_NONE.value) { + + int low_value = 0; + float min_ratio = 0; + + + if (policy_context != null) { + low_value = ZIOP.getLowValue(policy_context); + min_ratio = ZIOP.getMinRatio(policy_context); + + compressor.compression_level = + ZIOP.getLevelCompressor(compressor.compressor_id, + policy_context); + } + + ZIOPMessage ziop_message = new ZIOPMessage(message, giopFragmentSize); + + if (ziop_message.perform_compression(m_orb, compressor, + low_value, min_ratio)) + sendMessage(ziop_message); + else + sendMessage(message); + + } else { + sendMessage(message); + } + } + + public void sendLocateReply(GIOPVersion version, RequestId id, boolean here) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + if (here) + message.insertObjectHere(m_orb); + else + message.insertUnknownObject(m_orb); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + org.omg.CORBA.Object obj) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize ); + + message.insertForward(m_orb, obj); + + sendMessage(message); + } + + public void sendLocateReply(GIOPVersion version, RequestId id, + SystemException excep) + { + m_requests_in_POA.dec(); + + // verify if the request can be sent + m_state.verifyForReply(); + + GIOPLocateReplyMessage message = + new GIOPLocateReplyMessage(version, id, giopFragmentSize); + + message.insertSystemException(m_orb, excep); + + sendMessage(message); + } + + protected void setServiceContextList(PolicyContext policy_context, + GIOPRequestMessage message) + { + Vector contexts = new Vector(); + + // Invocation Service Context + + InvocationPoliciesContext invocationPolicies = + policy_context.getInvocationPolicyServiceContext(); + + if(invocationPolicies != null) { + contexts.add(invocationPolicies); + } + + // Bidirectional Service context + if (m_send_bidirectional_service) { + + contexts.add(m_bidirectional_service.m_components[0]); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + } + + int num_services = contexts.size(); + if ( num_services > 0) { + + ServiceContextList services = new ServiceContextList(num_services); + + contexts.toArray(services.m_components); + + message.setServiceContextList(services); + } + } + + protected void serviceContextReceived(ServiceContextList services) + { + if (services == null) + return; + + for (int i = 0; i < services.m_components.length; i++) { + if ((services.m_components[i] != null) + && (services.m_components[i].m_context_id + == org.omg.IOP.BI_DIR_IIOP.value)) { + setBidirectionalModeByPeer( + (BiDirServiceContext) services.m_components[i]); + } + } + } + + /** + * RemovableObject interface method + */ + + public boolean canBeRemoved() + { + return !hasPendingRequests(); + } + + public synchronized boolean hasPendingRequests() + { + if (m_mode == CLIENT_MODE) { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0)); + } else { + return ((m_lock_list.size() > 0) + || (m_uncompleted_messages.getSize() > 0) + || (m_requests_in_POA.isNonZero())); + } + } + + public RequestId generateId() + { + return new RequestId(id_count.postInc()); + } + + public void read(byte[] buffer) + { + read(buffer, 0, buffer.length); + } + + public abstract void read(byte[] buffer, int offset, int length); + + protected abstract void write(byte[] buffer); + + protected abstract void write(byte[] buffer, int offset, int length); + + /* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAMBIAR PARA MANDAR UN MENSAJE CON + * VARIOS CHUNKS + */ + public void writeVersion1_0(BufferCDR buffer) + {/* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * if(num_chunks > 1) throw new MARSHAL("GIOP 1.0 does not allow + * fragmentation"); + * + * ChunkCDR chunk = null; + * + * synchronized(write_mutex) { chunk = buffer.getChunk(0); + * write(chunk.getBuffer(),0,chunk.getAvailable()); } + */ + writeVersion1_1(buffer); // the buffer is only one message + } + + public void writeVersion1_1(BufferCDR buffer) + { + int num_chunks = buffer.getNumAvailableChunks(); + + ChunkCDR chunk = null; + + // Check write Monitor + try { + m_write_monitor.initWrite(); + } + catch (WriteTimeout wt) { // WriteTimeout: close this connection + closeByError(m_write_monitor.getException()); + throw m_write_monitor.getException(); + } + + // write loop + + for (int i = 0; i < num_chunks; i++) { + chunk = buffer.getChunk(i); + write(chunk.getBuffer(), 0, chunk.getAvailable()); + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DUMP, "GIOP message chunk sent - HEXDUMP " + + chunk.getAvailable() + " bytes"); + m_orb.printDump(Trace.DUMP, + chunk.getBuffer(), + chunk.getAvailable()); + } + + } + // free write monitor + + m_write_monitor.endWrite(); + } + + public void writeVersion1_2(BufferCDR buffer) + { + writeVersion1_1(buffer); + /* + * int num_chunks = buffer.getNumAvailableChunks(); + * + * ChunkCDR chunk = null; + * + * for(int i = 0; i < num_chunks; i++) { chunk = buffer.getChunk(i); + * + * synchronized(write_mutex) { + * write(chunk.getBuffer(),0,chunk.getAvailable()); } } + */ + } +} diff --git a/source/es/tid/TIDorbj/core/comm/ForwardRequest.java b/source/es/tid/TIDorbj/core/comm/ForwardRequest.java new file mode 100644 index 0000000..711f22e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ForwardRequest.java @@ -0,0 +1,19 @@ +package es.tid.TIDorbj.core.comm; + +import es.tid.TIDorbj.core.iop.IOR; + +/** + * @author caceres + * + */ + +public class ForwardRequest extends Exception +{ + public IOR forward_reference; + + public ForwardRequest(IOR forward_reference) + { + this.forward_reference = forward_reference; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/LocateResponseHandler.java b/source/es/tid/TIDorbj/core/comm/LocateResponseHandler.java new file mode 100644 index 0000000..5f45b6e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/LocateResponseHandler.java @@ -0,0 +1,64 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +/** + * Base interface used to return the response upon Request arrival. + * In this case, it provides an aditional method to support returning the result + * of the Locate operation. + * + * Actually, a CommunicationLayer implementation must provide an instance of + * type QueuedLocateResponseHandler, which extends this interface. Upon + * refactoring proccess completes, this should be done just implementing this + * one... TODO: Maybe a delegation aproach should work + * + * @author Juan Pablo Rojas + * + */ + +//TODO: maybe these should be called RequestHandlers? +public interface LocateResponseHandler extends ResponseHandler { + + public abstract void submitResponse( boolean value ); + +} diff --git a/source/es/tid/TIDorbj/core/comm/PropertyInfo.java b/source/es/tid/TIDorbj/core/comm/PropertyInfo.java new file mode 100644 index 0000000..daa14cf --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/PropertyInfo.java @@ -0,0 +1,155 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.comm; + +/** + *

CommunicationLayer properties for making a connection. The + * PropertyInfo could be used by automatic code generation ides to + * interact with CommunicationManager and retrieve each registered + * layer's available properties. + * + * @author Juan Pablo Rojas + */ + +public class PropertyInfo { + + /** + * Constructs a CommunicationLayerPropertyInfo object with a name and value; + * other members default to their initial values. + * + * @param name the name of the property + * @param value the current value, which may be null + */ + public PropertyInfo(String name, String value) { + this.name = name; + this.value = value; + } + + /** + * The name of the property. + */ + private String name; + public void setName( String name ){ + this.name = name; + } + public String getName(){ + return this.name; + } + + + /** + * A brief description of the property, which may be null. + */ + private String description = null; + public void setDescription( String description ){ + this.description = description; + } + public String getDescription(){ + return this.description; + } + + /** + * The required field is true if a value must be + * supplied for this property and false otherwise. + */ + private boolean required = false; + public void setRequired( boolean value ){ + this.required = value; + } + public boolean isRequired(){ + return this.required; + } + + /** + * The value field specifies the current value of + * the property, based on a combination of the information + * supplied to the method. + */ + public String value = null; + public void setValue( String value ){ + this.value = value; + } + public String getValue(){ + return this.value; + } + public String getString(){ + return this.value; + } + public int getInt(){ + if ( this.value != null ) { + return Integer.parseInt( this.value ); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + public boolean getBoolean(){ + if ( this.value != null ){ + return Boolean.valueOf( this.value ).booleanValue(); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + public byte[] getBytes(){ + if ( this.value != null ){ + return this.value.getBytes(); + } else { + throw new NullPointerException( this.name + " is null." ); + } + } + + /** + * An array of possible values if the value for the field + * DriverPropertyInfo.value may be selected + * from a particular set of values; otherwise null. + */ + private String[] choices = null; + public void setChoices( String[] choices ){ + this.choices = choices; + } + public String[] getChoices(){ + return this.choices; + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/RequestDispatcher.java b/source/es/tid/TIDorbj/core/comm/RequestDispatcher.java new file mode 100644 index 0000000..32fa8a8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/RequestDispatcher.java @@ -0,0 +1,188 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 67 $ +* Date: $Date: 2007-05-10 12:05:13 +0200 (Thu, 10 May 2007) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.UNKNOWN; +import org.omg.PortableServer.ForwardRequest; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.poa.POAImpl; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.poa.POAManagerImpl; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.poa.QueuedRequest; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.util.Trace; + + +/** + * RequestDispather provides methods to each CommunicationLayer + * implementation to enable Request processing and Response submission, allowing + * disacoupling the implementation from the ORB's request processing implementa- + * tion. + * + * @author Juan Pablo Rojas + * + */ +public class RequestDispatcher { + + /* + * The orb instance + */ + private TIDORB orb; + private POAImpl rootPOA; + private POAManagerImpl rootPOAManager; + private CommunicationManager communicationManager; + + /** + * @param orb + */ + public RequestDispatcher(TIDORB orb ) { + if ( orb != null ){ + this.orb = orb; + this.rootPOA = this.orb.initPOA(); + this.rootPOAManager = ( POAManagerImpl )this.rootPOA.the_POAManager(); + this.communicationManager = CommunicationManager.getInstance( this.orb ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//RequestDispatcher + + + /** + * @param responseHandler + */ + + //TODO: Queued stuff should be only known here... see how to make a + //queue delegate to use from ExecThread + public void dispatchRequest( QueuedLocateResponseHandler locateResponseHandler ) { + if ( locateResponseHandler != null ){ + + setPOAKey(locateResponseHandler); + + if ( this.orb.m_trace != null) { + this.orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + "Dispatching LocateRequest ", + locateResponseHandler.getObjectKey().toString() + } + ); + } + this.rootPOAManager.put( locateResponseHandler ); + } else { + //TODO: ask juan about the exception conventions inside TIDORB + throw new BAD_PARAM( "null response handler" ); + } + }//dispatchRequest + + public void dispatchRequest( QueuedResponseHandler responseHandler ) { + if ( responseHandler != null ){ + + if(setPOAKey(responseHandler)) { + + this.rootPOAManager.put( responseHandler ); + + if ( this.orb.m_trace != null) { + ServerRequest request = responseHandler.getServerRequest(); + this.orb.printTrace( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Dispatching ", + responseHandler.toString() + } + ); + } + } + } else { + throw new BAD_PARAM( "null response handler" ); + } + }//dispatchRequest + + /** + * Search the POAKey to the request + * @param request + * @return true if the key has been set + */ + private boolean setPOAKey(QueuedRequest request) { + + ObjectKey objectKey; + objectKey = request.getObjectKey(); + + POAKey poaKey; + try { + poaKey = orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + request.setPOAKey( poaKey ); + return true; + } catch (ForwardRequest fr) { + request.submitResponse(fr.forward_reference); + } catch (SystemException one) { + if ( this.orb.m_trace != null) { + this.orb.printTrace(Trace.DEEP_DEBUG, + "Submitting a system exception in request", + one); + } + request.submitResponse(one); + } catch ( Throwable th ){ + if ( this.orb.m_trace != null) { + this.orb.printTrace(Trace.DEEP_DEBUG, + "Submitting a CORBA UNKNOWN exception in request"); + } + request.submitResponse(new UNKNOWN()); + } + return false; + } + + public void dispose(){ + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ResponseHandler.java b/source/es/tid/TIDorbj/core/comm/ResponseHandler.java new file mode 100644 index 0000000..e42c37e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ResponseHandler.java @@ -0,0 +1,94 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm; + +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Base interface used to return the response upon Request arrival. + * In this case, it provides methods for accesing the incoming requests field's + * necessary for it's correct execution, and methods to communicate the + * invocation result to the origin. + * + * Actually, a CommunicationLayer implementation must provide an instance of + * type QueuedResponseHandler, which extends this interface. Upon + * refactoring proccess is completed, this should be done just implementing this + * one... TODO: Maybe a delegation aproach should work + * + * @author Juan Pablo Rojas + */ +public interface ResponseHandler { + + + + /* + * Methods included for local request's optimization + */ + public abstract PolicyContext getPolicyContext(); + + /* + * Response origin ( read only -- implementation dependent ) + **/ + public abstract ObjectKey getObjectKey(); + + public abstract ServerRequest getServerRequest(); + + + /* + * Related request invocation result + * */ + + public abstract void submitResponse( Object reference ); + + public abstract void submitResponse( SystemException e ); + + public abstract void submitResponse(); + + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/all-wcprops b/source/es/tid/TIDorbj/core/comm/giop/.svn/all-wcprops new file mode 100644 index 0000000..27e0d13 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/all-wcprops @@ -0,0 +1,143 @@ +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop +END +GIOPFragmentedMessage.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.java +END +ReplyStatusType.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.java +END +ServiceContextList.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ServiceContextList.java +END +GIOPMessage.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPMessage.java +END +GIOPVersion.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPVersion.java +END +GIOPLocateRequestMessage.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.java +END +RequestId.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/RequestId.java +END +ServiceContext.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ServiceContext.java +END +InvocationPoliciesContext.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.java +END +GIOPLocateReplyMessage.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.java +END +GIOPHeader.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPHeader.java +END +AddressingDisposition.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.java +END +MessageFactory.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/MessageFactory.java +END +GIOPRequestMessage.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.java +END +ServiceId.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ServiceId.java +END +GIOPReplyMessage.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.java +END +BiDirServiceContext.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.java +END +GIOPCancelRequestMessage.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.java +END +ZIOPMessage.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.java +END +GIOPFragmentMessage.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.java +END +MsgType.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/MsgType.java +END +ServiceContextReader.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.java +END +LocateReplyStatusType.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.java +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/entries b/source/es/tid/TIDorbj/core/comm/giop/.svn/entries new file mode 100644 index 0000000..07bac00 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/entries @@ -0,0 +1,819 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/giop +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + + + + + + + + +() + +GIOPFragmentedMessage.java +file +478 + + + +2011-04-29T14:42:47.000000Z +4087bcf7ffb550a0d36b7d96a87fe2a8 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +9622 + +ReplyStatusType.java +file + + + + +2009-05-27T12:24:01.000000Z +e00bc6a7d60c6329f5212e02ea2d4639 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4171 + +ServiceContextList.java +file + + + + +2009-05-27T12:24:01.000000Z +afd376e61aaa0fb25ca66b21ee2aee60 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2988 + +GIOPMessage.java +file +478 + + + +2011-04-29T14:42:47.000000Z +9ca3a26f480c2326e58b821a8ae7ee17 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +6781 + +GIOPVersion.java +file + + + + +2009-05-27T12:24:01.000000Z +4f18d9c8d1a6312cbcaeae5423e3a680 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4862 + +GIOPLocateRequestMessage.java +file + + + + +2009-05-27T12:24:01.000000Z +5f870fb1401347a42793a9580d378ae6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4000 + +RequestId.java +file + + + + +2009-05-27T12:24:01.000000Z +502ea9a377ce51e12c1fb6c440ad3518 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2177 + +ServiceContext.java +file + + + + +2009-05-27T12:24:01.000000Z +b6dc6a4ae4ad435e5e29640badd32635 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2811 + +InvocationPoliciesContext.java +file + + + + +2009-05-27T12:24:01.000000Z +28c37301515af69a3880effb5a3bfbda +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2764 + +GIOPLocateReplyMessage.java +file + + + + +2009-05-27T12:24:01.000000Z +424b216abb85494a013991d7d4d59d24 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7134 + +GIOPHeader.java +file + + + + +2009-05-27T14:10:33.000000Z +0ed130725d2526ff7e65a915b256ccb0 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +6539 + +AddressingDisposition.java +file + + + + +2009-05-27T12:24:01.000000Z +516c89eb8e6d9ddb1b1ee66b34492a1f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2752 + +MessageFactory.java +file + + + + +2009-05-27T12:24:01.000000Z +0cd362c290ca3f34555775ed0064bc26 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2683 + +GIOPRequestMessage.java +file + + + + +2010-04-26T12:11:01.000000Z +5f48d4490f218a2c20bf5a3249e06187 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +16931 + +ServiceId.java +file + + + + +2009-05-27T12:24:01.000000Z +36bb9e0e408f89378dcf17a7636ed58d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2239 + +GIOPReplyMessage.java +file +478 + + + +2011-04-29T14:42:47.000000Z +e602561341bcc0ee2e5291b248eff059 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +14493 + +BiDirServiceContext.java +file + + + + +2009-05-27T12:24:01.000000Z +de9117a19a61752581749f30f73379e5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3071 + +GIOPCancelRequestMessage.java +file + + + + +2009-05-27T12:24:01.000000Z +b261fae6f0602d39d9cbb422bbc30b56 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4266 + +ZIOPMessage.java +file +478 + + + +2011-03-25T12:58:50.000000Z +7e1a073b480f9786c3be8cddddf5d3d1 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +15295 + +GIOPFragmentMessage.java +file + + + + +2009-05-27T12:24:01.000000Z +d897e67fb75f46595ddf30ef67f4d9f1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4202 + +MsgType.java +file + + + + +2009-05-27T12:24:01.000000Z +96a77eb5bc40e2d0b551960690b49c86 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4132 + +ServiceContextReader.java +file + + + + +2009-05-27T12:24:01.000000Z +c3af730bf4db5087c7e9d43d6fc93619 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2546 + +LocateReplyStatusType.java +file + + + + +2009-05-27T12:24:01.000000Z +1a8b69e9b3f67fd3c847c42d4efd01d8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5081 + diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/AddressingDisposition.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/AddressingDisposition.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/AddressingDisposition.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/BiDirServiceContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/BiDirServiceContext.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/BiDirServiceContext.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPCancelRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPCancelRequestMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPCancelRequestMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentedMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentedMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPFragmentedMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPHeader.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPHeader.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPHeader.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateReplyMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateReplyMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateReplyMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateRequestMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPLocateRequestMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPReplyMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPReplyMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPReplyMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPRequestMessage.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPRequestMessage.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPVersion.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPVersion.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/GIOPVersion.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/InvocationPoliciesContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/InvocationPoliciesContext.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/InvocationPoliciesContext.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/LocateReplyStatusType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/LocateReplyStatusType.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/LocateReplyStatusType.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MessageFactory.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MessageFactory.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MessageFactory.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MsgType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MsgType.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/MsgType.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ReplyStatusType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ReplyStatusType.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ReplyStatusType.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/RequestId.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/RequestId.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/RequestId.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContext.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContext.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextList.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextReader.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextReader.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceContextReader.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceId.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceId.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ServiceId.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ZIOPMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ZIOPMessage.java.svn-base new file mode 100644 index 0000000..3160658 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/prop-base/ZIOPMessage.java.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mergeinfo +V 0 + +END diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/AddressingDisposition.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/AddressingDisposition.java.svn-base new file mode 100644 index 0000000..ab733c8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/AddressingDisposition.java.svn-base @@ -0,0 +1,97 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * AddressingDisposition structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AddressingDisposition +{ + + public short m_value; + + private AddressingDisposition(short val) + { + m_value = val; + } + + public short value() + { + return m_value; + } + + public static AddressingDisposition from_short(short type) + { + switch (type) + { + case _KeyAddr: + return KeyAddr; + case _ProfileAddr: + return ProfileAddr; + case _ReferenceAddr: + return ReferenceAddr; + default: + return null; + } + } + + public static final short _KeyAddr = 0; + + public static final AddressingDisposition KeyAddr = + new AddressingDisposition(_KeyAddr); + + public static final short _ProfileAddr = 1; + + public static final AddressingDisposition ProfileAddr = + new AddressingDisposition(_ProfileAddr); + + public static final short _ReferenceAddr = 2; + + public static final AddressingDisposition ReferenceAddr = + new AddressingDisposition(_ReferenceAddr); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/BiDirServiceContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/BiDirServiceContext.java.svn-base new file mode 100644 index 0000000..b4d2750 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/BiDirServiceContext.java.svn-base @@ -0,0 +1,104 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import es.tid.TIDorbj.core.comm.iiop.ListenPoint; + +/** + * BiDirServiceContext structure defined in the IIOP module. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class BiDirServiceContext extends ServiceContext +{ + + public ListenPoint[] m_listen_points; + + protected BiDirServiceContext() + { + super(org.omg.IOP.BI_DIR_IIOP.value); + m_listen_points = null; + } + + public BiDirServiceContext(int size) + { + super(org.omg.IOP.BI_DIR_IIOP.value); + this.m_listen_points = new ListenPoint[size]; + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + int size = input.read_ulong(); + if (size < 0) + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + + m_listen_points = new ListenPoint[size]; + for (int i = 0; i < size; i++) { + m_listen_points[i] = ListenPoint.read(input); + } + input.exitEncapsulation(); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + + output.write_ulong(m_context_id); + + output.enterEncapsulation(); + + if (m_listen_points == null) + output.write_ulong(0); + else { + output.write_ulong(m_listen_points.length); + for (int i = 0; i < m_listen_points.length; i++) + ListenPoint.write(output, m_listen_points[i]); + } + + output.exitEncapsulation(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPCancelRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPCancelRequestMessage.java.svn-base new file mode 100644 index 0000000..2fb42bd --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPCancelRequestMessage.java.svn-base @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version CancelRequest messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPCancelRequestMessage extends GIOPMessage +{ + + /** + * Header member. + */ + private RequestId m_request_id; + + /** + * Constructor used for message sending. + */ + + public GIOPCancelRequestMessage(GIOPVersion version, RequestId id) + { + super(new GIOPHeader(version, MsgType.CancelRequest)); + m_request_id = id; + } + + /** + * Constructor used in message reception. First, the message header is + * readed, and then the message object is created. + * + * @param header + * the cancel request header. + */ + + public GIOPCancelRequestMessage(GIOPHeader header) + { + super(header); + } + + public RequestId getRequestId() + { + return m_request_id; + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_buffer) + { + super.receiveBody(conn, header_buffer); + + CDRInputStream id_in = new CDRInputStream(null, m_message_buffer); + id_in.setByteOrder(m_header.getByteOrder()); + m_request_id = new RequestId(id_in.read_ulong()); + try { + id_in.close(); + } + catch (Exception e) {} + id_in = null; + } + + public BufferCDR getMessageBuffer() + { + if (!m_message_completed) { + if (m_header.getVersion() == GIOPVersion.VERSION_1_2) { + m_message_buffer = + new BufferCDR(new byte[GIOPHeader.HEADER_SIZE + + CDR.ULONG_SIZE]); + + // write header + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + m_header.write(out); + //write + out.write_ulong(m_request_id.value()); + + try { + out.close(); + } + catch (Exception e) {} + + out = null; + m_message_completed = true; + m_headers_marshaled = true; + } else { + super.writeHeaders(); + m_message_completed = true; + } + } + + return m_message_buffer; + } + + public boolean hasBody() + { + return m_header.getVersion() == GIOPVersion.VERSION_1_2; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentMessage.java.svn-base new file mode 100644 index 0000000..2b2cfea --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentMessage.java.svn-base @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; + +/** + * Represents the 1.1 and 1.2 GIOP FragmentRequest version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPFragmentMessage extends GIOPMessage +{ + + public static int FRAGMENT_HEADER_SIZE_1_1 = GIOPHeader.HEADER_SIZE; + + public static int FRAGMENT_HEADER_SIZE_1_2 = GIOPHeader.HEADER_SIZE + + CDR.ULONG_SIZE; + + private RequestId m_request_id; + + public GIOPFragmentMessage(GIOPVersion version, RequestId id) + { + super(new GIOPHeader(version, MsgType.Fragment)); + m_request_id = id; + } + + public GIOPFragmentMessage(GIOPHeader header) + { + super(header); + } + + public String toString() + { + return m_header.toString() + " (ID: " + m_request_id + ")"; + } + + public RequestId getRequestId() + { + return m_request_id; + } + + public boolean hasBody() + { + return true; + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + if (m_header.getVersion().minor == 2) { + CDRInputStream id_in = new CDRInputStream(null, m_message_buffer); + id_in.setByteOrder(m_header.getByteOrder()); + id_in.skip(GIOPHeader.HEADER_SIZE); + m_request_id = new RequestId(id_in.read_ulong()); + id_in = null; + } + } + + public static void writeHeader(es.tid.TIDorbj.core.cdr.CDROutputStream out, + GIOPHeader header, RequestId request_id) + { + header.write(out); + + if (header.getVersion().minor == 2) { + out.write_ulong(request_id.value()); + out.alignment(CDR.LONGLONG_SIZE); // force alingment to 8 + } + } + + public void send(IIOPConnection conn) + { + throw new INTERNAL("Fragment message can not be send as itself"); + } + + public static void skipFragmentHeader1_2(CDRInputStream in) + { + //skip request_id (ulong) + in.skipUlong(); + // force alingment to 8 + // in.alignment(CDR.LONGLONG_SIZE); + + } + + public static void skipFragmentHeader1_2(CDROutputStream out) + { + //skip request_id (ulong) + out.skip(CDR.LONG_SIZE); + // force alingment to 8 + // out.alignment(CDR.LONGLONG_SIZE); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentedMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentedMessage.java.svn-base new file mode 100644 index 0000000..5a15330 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPFragmentedMessage.java.svn-base @@ -0,0 +1,326 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Base class for fragmented messages in 1.1 and 1.2 GIOP versions. + * + * @see es.tid.TIDorbj.core.comm.iiop.GIOPMessage + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class GIOPFragmentedMessage extends GIOPMessage +{ + + /** + * the request id, it can be needed by 1.1 and 1.2 GIOP version messages. + */ + protected RequestId m_request_id; + + /** + * InputStream where the message body is marshaled. It manages the body + * buffer, defined in the GIOPMessage class. + */ + protected CDRInputStream m_message_buffer_in; + + /** + * OutputStream where the message message_buffer can be marshaled. It + * manages the message_buffer buffer, defined in the + * GIOPMessage class. + */ + protected CDROutputStream m_message_buffer_out; + + private int fragmentSize; + + /** + * Creates a new fragmented message for GIOP 1.0 and 1.1 + */ + protected GIOPFragmentedMessage(GIOPHeader header) + { + super(header); + m_request_id = null; + } + + /** + * Creates a new fragmented message for GIOP 1.2 + */ + protected GIOPFragmentedMessage(GIOPHeader header, RequestId request_id, int fragmentSize ) + { + super(header); + this.m_request_id = request_id; + this.fragmentSize = fragmentSize; + } + + public String toString() + { + return m_header.toString() + " (" + m_request_id + ")"; + } + + public RequestId getRequestId() + { + return m_request_id; + } + + /** + * Initialize the message_buffer_out member. + * + * @param orb + * needed for internal CDR stream creation. + */ + + protected void createMessageBufferOutput(es.tid.TIDorbj.core.TIDORB orb) + { + if (m_message_buffer == null) + m_message_buffer = new BufferCDR( this.fragmentSize ); + else + m_message_buffer.recycle(); + + m_message_buffer_out = new CDROutputStream(orb, m_message_buffer); + + m_message_buffer_out.setVersion(m_header.getVersion()); + + m_message_buffer_out.setMessage(true); + + // set message skips also the GIOP HEADER + // message_buffer_out.skip(GIOPHeader.HEADER_SIZE); + + // writes the request id + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_message_buffer_out.write_ulong(m_request_id.value()); + } + } + + /** + * Initialize the message_buffer_out member. + * + * @param orb + * needed for internal CDR stream creation. + */ + + protected void createMessageBufferInput(es.tid.TIDorbj.core.TIDORB orb) + { + if (m_message_buffer_in != null) + return; + + if (m_message_buffer == null) + throw new INTERNAL("Cannot create buffer input"); + + m_message_buffer_in = new CDRInputStream(orb, m_message_buffer); + + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + + m_message_buffer_in.setMessage(true); + + // set message skips also the GIOP HEADER + // message_buffer_in.skip(GIOPHeader.HEADER_SIZE); + + // lectura adelantada del request_id para comprobar despues los + // fragmentos + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + } + + /** + * Reads the message message_buffer in the connection. The header has yet + * been read by the connection. + * + * @param conn + * the active IIOP connection. + */ + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(Connection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + this.createMessageBufferInput(conn.orb()); + + m_message_completed = !m_header.hasMoreFragments(); + } + + + + public void setBody(BufferCDR buf, CDRInputStream input) + { + super.setBody(buf); + + m_message_buffer_in = input; + + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + + m_message_buffer_in.setMessage(true); + + + // lectura adelantada del request_id para comprobar despues los + // fragmentos + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + m_message_completed = !m_header.hasMoreFragments(); + } + + + /** + * Complete writing of the message in the connection. + */ + + public void writeHeaders() + { + + if (!m_headers_marshaled) { + CDROutputStream out = new CDROutputStream(null, m_message_buffer); + + out.setVersion(m_header.getVersion()); + + // write message size = buffer size - 12 octets from header + + m_header.setSize(m_message_buffer.getAvailable() + - GIOPHeader.HEADER_SIZE); + + m_header.setMoreFragments(false); + + m_header.write(out); + + out = null; + m_headers_marshaled = true; + } + } + + /* + * public void write_headers() { if (message_buffer == null) throw new + * INTERNAL("Cannot write message headers"); + * + * switch(header.getVersion().getMinor()) { case 0: write_headers_1_0(); + * break; default: write_headers_1_1(); } } + * + * public void write_headers_1_0() { + * + * if (!headers_marshaled) { CDROutputStream out = new CDROutputStream(null, + * message_buffer); + * + * out.set_version(header.getVersion()); // write message size = buffer size - + * 12 octets from header + * + * header.setSize(message_buffer.getChunk(0).getAvailable() - + * GIOPHeader.HEADER_SIZE); + * + * header.setMoreFragments(false); + * + * header.write(out); + * + * out = null; headers_marshaled = true; } } + * + * public void write_headers_1_1() { + * + * if (!headers_marshaled) { CDROutputStream out = new CDROutputStream(null, + * message_buffer); + * + * out.set_version(header.getVersion()); // write message size = buffer size - + * 12 octets from header + * + * header.setSize(message_buffer.getChunk(0).getAvailable() - + * GIOPHeader.HEADER_SIZE); // write chunks as fragments + * + * int num_chunks = message_buffer.getNumAvailableChunks(); + * + * boolean has_more_fragments = num_chunks > 1; + * + * header.setMoreFragments(has_more_fragments); + * + * header.write(out); + * + * if(has_more_fragments) { + * + * out.set_message(true); + * + * GIOPHeader fragment_header = new GIOPHeader(header.getVersion(), + * MsgType.Fragment); + * + * fragment_header.setByteOrder(header.getByteOrder()); + * + * for(int i = 1; i < num_chunks; i++) { out.getNextFragmentHeader(); + * fragment_header.setMoreFragments(i < num_chunks - 1); + * fragment_header.setSize( message_buffer.getChunk(i).getAvailable() - + * GIOPHeader.HEADER_SIZE); + * + * GIOPFragmentMessage.write_header(out,fragment_header,request_id); } } + * + * out = null; headers_marshaled = true; } } + */ + + /** + * Adds the next fragment to the Message. + */ + public void addFragment(GIOPFragmentMessage fragment) + { + if (m_message_completed) + throw new org.omg.CORBA.MARSHAL("Unexpected Fragment"); + + if (m_message_buffer == null) + throw new org.omg.CORBA.INTERNAL("Unexpected Fragment"); + + if (m_message_buffer != null) + m_message_buffer.addChunk(fragment.getMessageBuffer().getChunk(0)); + + m_message_completed = !fragment.getHeader().hasMoreFragments(); + + } +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPHeader.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPHeader.java.svn-base new file mode 100644 index 0000000..b7d7b71 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPHeader.java.svn-base @@ -0,0 +1,246 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version message headers. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPHeader +{ + + GIOPVersion m_version; + + boolean m_byte_order; + + boolean m_more_fragments; + + MsgType m_message_type; + + int message_size; + + String m_str = null; + + boolean m_compressed; + + public final static int HEADER_SIZE = 12; + + public GIOPHeader() + {} + + public GIOPHeader(GIOPVersion ver, MsgType type) + { + m_version = ver; + m_byte_order = CDR.LOCAL_BYTE_ORDER; + m_more_fragments = false; + m_message_type = type; + message_size = 0; + m_compressed = false; + } + + public static GIOPHeader fromByteArray(byte[] array) + throws org.omg.CORBA.MARSHAL + { + GIOPHeader header = new GIOPHeader(); + if (array.length < HEADER_SIZE) + return null; + CDRInputStream input = new CDRInputStream(null, array); + header.read(input); + input = null; + return header; + } + + public GIOPVersion getVersion() + { + return m_version; + } + + public MsgType getMsgType() + { + return m_message_type; + } + + public void setByteOrder(boolean order) + { + m_byte_order = order; + } + + public boolean getByteOrder() + { + return m_byte_order; + } + + public void setMoreFragments(boolean more) + { + m_more_fragments = more; + } + + public boolean hasMoreFragments() + { + if (m_version.minor == 0) + return false; + else + return m_more_fragments; + } + + public void setSize(int size) + { + message_size = size; + } + + public int getSize() + { + return message_size; + } + + public void setCompressed(boolean compressed) + { + m_compressed = compressed; + } + + public boolean getCompressed() + { + return m_compressed; + } + + public void toByteArray(byte[] header_buffer) + { + CDROutputStream output = new CDROutputStream(null, header_buffer); + write(output); + output = null; + } + + public void write(org.omg.CORBA.portable.OutputStream output) + { + if (m_compressed) + output.write_octet((byte) 'Z'); + else + output.write_octet((byte) 'G'); + output.write_octet((byte) 'I'); + output.write_octet((byte) 'O'); + output.write_octet((byte) 'P'); + + output.write_octet((byte) m_version.major); + output.write_octet((byte) m_version.minor); + + if (m_version.minor == 0) + output.write_boolean(m_byte_order); + else { + int flag = 0; + if (m_byte_order) + flag |= 0x1; + if (m_more_fragments) + flag |= 0x2; + output.write_octet((byte) flag); + } + + output.write_octet((byte) m_message_type.m_value); + output.write_ulong(message_size); + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + byte first_magic_char = input.read_octet(); + + if ( ( (first_magic_char != (byte) 'G') && (first_magic_char != (byte) 'Z')) + || (input.read_octet() != (byte) 'I') + || (input.read_octet() != (byte) 'O') + || (input.read_octet() != (byte) 'P')) + + throw new + MARSHAL("Bad GIOP Message header: Invalid header identifier.", + 0, CompletionStatus.COMPLETED_NO); + + m_compressed = (first_magic_char == 'Z'); + + m_version = GIOPVersion.read(input); + + if (m_version == null) + throw new + MARSHAL("Bad GIOP Message header: Invalid version number.", + 0, CompletionStatus.COMPLETED_NO); + + byte flag = input.read_octet(); + + if (m_version.minor == 0) + m_byte_order = (flag != 0); + else { + m_byte_order = ((flag & 0x1) != 0); + m_more_fragments = ((flag & 0x2) != 0); + } + + input.setByteOrder(m_byte_order); + m_message_type = MsgType.from_int(input.read_octet()); + + if (m_message_type == null) + throw new MARSHAL("Bad GIOP Message header: Invalid message type.", + 0, CompletionStatus.COMPLETED_NO); + + message_size = input.read_ulong(); + + } + + public String toString() + { + if (m_str == null) + m_str = MsgType.msgName(m_message_type.m_value) + " (" + + m_version.toString() + ") " + + ((m_more_fragments) ? "[FRAGMENTED] " : "") + + ((m_byte_order) ? "[LITTLE_ENDIAN] " : "[BIG_ENDIAN] ") + + "[SIZE: " + message_size + "]"; + + return m_str; + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateReplyMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateReplyMessage.java.svn-base new file mode 100644 index 0000000..49953eb --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateReplyMessage.java.svn-base @@ -0,0 +1,245 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.exception.SystemExceptionEncoder; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP LocateReply version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPLocateReplyMessage extends GIOPFragmentedMessage +{ + + LocateReplyStatusType m_reply_status; + + public GIOPLocateReplyMessage(GIOPHeader header) + { + super(header); + m_reply_status = null; + } + + public GIOPLocateReplyMessage(GIOPVersion version, RequestId id, int fragmentSize) + { + super(new GIOPHeader(version, MsgType.LocateReply), id, fragmentSize ); + m_reply_status = null; + } + + public String toString() + { + return super.toString() + " (" + m_reply_status.toString() + ")"; + } + + private void reset() + { + m_reply_status = null; + m_message_completed = false; + m_headers_marshaled = false; + } + + public LocateReplyStatusType replyStatus() + { + return m_reply_status; + } + + public void insertUnknownObject(TIDORB orb) + { + reset(); + m_reply_status = LocateReplyStatusType.UNKNOWN_OBJECT; + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public void insertObjectHere(TIDORB orb) + { + reset(); + m_reply_status = LocateReplyStatusType.OBJECT_HERE; + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public void insertSystemException(TIDORB orb, + org.omg.CORBA.SystemException exception) + { + reset(); + m_reply_status = LocateReplyStatusType.LOC_SYSTEM_EXCEPTION; + SystemExceptionEncoder.write(m_message_buffer_out, exception); + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public org.omg.CORBA.SystemException extractSystemException() + { + if (m_reply_status.value() + != LocateReplyStatusType._LOC_SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, " + + "SYSTEM_EXCEPTION is not the reply status"); + + return SystemExceptionEncoder.read(m_message_buffer_in); + } + + public void insertForward(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + + m_reply_status = LocateReplyStatusType.OBJECT_FORWARD; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForward() + { + if (m_reply_status.value() != LocateReplyStatusType._OBJECT_FORWARD) + throw new INTERNAL("Unexpected extract_arguments, " + + "OBJECT_FORWARD is not the reply status"); + + IOR forward_ior = new DefaultIOR(); + forward_ior.read(m_message_buffer_in); + return forward_ior; + } + + public void insertForwardPerm(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + m_reply_status = LocateReplyStatusType.OBJECT_FORWARD_PERM; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + + } + + public IOR extractForwardPerm() + { + if (m_reply_status.value() + != LocateReplyStatusType._OBJECT_FORWARD_PERM) + throw new INTERNAL("Unexpected extract_arguments, " + + "OBJECT_FORWARD_PERM is not the reply status"); + + IOR forward_ior = new DefaultIOR(); + forward_ior.read(m_message_buffer_in); + return forward_ior; + } + + public void insertNeedsAddressingMode(TIDORB orb, + AddressingDisposition disposition) + { + reset(); + + m_reply_status = LocateReplyStatusType.LOC_NEEDS_ADDRESSING_MODE; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_ushort(disposition.value()); + + m_message_completed = true; + } + + public AddressingDisposition extractAddressingDisposition() + { + return m_reply_status.extractAddressingDisposition(this); + } + + public void createMessageBufferOutput(es.tid.TIDorbj.core.TIDORB orb) + { + + if (m_reply_status == null) + throw new INTERNAL("Unitialized request"); + + super.createMessageBufferOutput(orb); + + // header + // request_id marshaled with father create_message_buffer_output() in + // version 1.2 + + if (!m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_message_buffer_out.write_ulong(m_request_id.value()); + } + + // status + m_message_buffer_out.write_ulong(m_reply_status.m_value); + + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + // request_id has been readen in father's method in version 1.2 + if (!m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + // reply_status + + m_reply_status = + LocateReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid LocateReplyStatus value."); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateRequestMessage.java.svn-base new file mode 100644 index 0000000..42f9983 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPLocateRequestMessage.java.svn-base @@ -0,0 +1,127 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP LocateRequest version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPLocateRequestMessage extends GIOPFragmentedMessage +{ + + public GIOPLocateRequestMessage(GIOPHeader header) + { + super(header); + } + + public GIOPLocateRequestMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.LocateRequest), id, fragmentSize ); + } + + public TargetAddress extractAddress() + { + if (!m_message_completed) + throw new INTERNAL("Uncompleted message."); + + TargetAddress target = new TargetAddress(); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + // request_id has been readed by father's receive_body + + target.read(m_message_buffer_in); + } else { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + ObjectKey key = new ObjectKey(); + key.read(m_message_buffer_in); + target.setObjectKey(key); + } + return target; + } + + public void insertAddress(es.tid.TIDorbj.core.TIDORB orb, ObjectKey key) + { + createMessageBufferOutput(orb); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + TargetAddress target = new TargetAddress(); + target.setObjectKey(key); + target.write(m_message_buffer_out); + } else { + m_message_buffer_out.write_ulong(m_request_id.value()); + key.write(m_message_buffer_out); + } + + m_message_completed = true; + } + + public void insertAddress(es.tid.TIDorbj.core.TIDORB orb, + TargetAddress target) + { + createMessageBufferOutput(orb); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + // request_id marshaled in create_message_buffer_output() + target.write(m_message_buffer_out); + } else { + m_message_buffer_out.write_ulong(m_request_id.value()); + ObjectKey key = target.getObjectKey(); + + if (key == null) + throw new INTERNAL("Invalid Object Key"); + + key.write(m_message_buffer_out); + } + + m_message_completed = true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPMessage.java.svn-base new file mode 100644 index 0000000..4ff302e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPMessage.java.svn-base @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.Compression.CompressorIdLevel; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version messages used in a IIOP + * connection. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPMessage +{ + + /** + * Message Header + */ + GIOPHeader m_header; + + /** + * Message Buffer, including the message headers. + */ + BufferCDR m_message_buffer; + + /** + * Indicates if the message is ready to be send. + */ + boolean m_message_completed; + + boolean m_headers_marshaled; + + CompressorIdLevel m_compressor; + + protected GIOPMessage(GIOPHeader header) + { + m_header = header; + m_message_buffer = null; + m_headers_marshaled = false; + + switch (header.getMsgType().m_value) + { + case MsgType._MessageError: + case MsgType._CloseConnection: + m_message_completed = true; + break; + default: + m_message_completed = false; + } + m_compressor = new CompressorIdLevel((short)0, (short)0); + } + + public String toString() + { + return m_header.toString(); + } + + public GIOPHeader getHeader() + { + return m_header; + } + + /** + * @return the message buffer including the message headers + */ + + public BufferCDR getMessageBuffer() + { + if (!m_message_completed) + return null; + + if (!m_headers_marshaled) + writeHeaders(); + + return m_message_buffer; + } + + /** + * Sets the message_buffer where the message will be marshalled. + */ + public void setMessageBuffer(BufferCDR cdr) + { + m_message_buffer = cdr; + } + + public void setMessageCompleted(boolean value) + { + m_message_completed = value; + } + + public boolean hasBody() + { + switch (m_header.getMsgType().m_value) + { + case MsgType._MessageError: + return false; + case MsgType._CloseConnection: + return false; + default: + return true; + } + } + + //TODO: giop should not know anything about IIOPConnections!! + public static ChunkCDR receiveChunk(Connection conn, GIOPHeader header, + byte[] header_bytes) + { + // the buffer has also the header + + int body_size = header.getSize(); + + byte[] buffer = new byte[body_size + GIOPHeader.HEADER_SIZE]; + + // copy the header + + System.arraycopy(header_bytes, 0, buffer, 0, GIOPHeader.HEADER_SIZE); + + conn.read(buffer, GIOPHeader.HEADER_SIZE, body_size); + + return new ChunkCDR(buffer); + + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(Connection conn, byte[] header_bytes) + { + m_message_buffer = + new BufferCDR(receiveChunk(conn, m_header, header_bytes)); + + m_message_completed = true; + m_headers_marshaled = true; + } + + + public void setBody(BufferCDR buf) + { + m_message_buffer = buf; + m_message_completed = true; + m_headers_marshaled = true; + } + + /** + * Writes the header into the Message Chunks + */ + protected void writeHeaders() + { + if (hasBody()) { + if (!m_message_completed) + throw new INTERNAL("Uncompleted Message: no body"); + + if (!m_headers_marshaled) { + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + + out.setVersion(m_header.getVersion()); + + // write message size = buffer size - 12 octets from header + + m_header.setSize(m_message_buffer.getAvailable() + - GIOPHeader.HEADER_SIZE); + + m_header.write(out); + + out = null; + + m_headers_marshaled = true; + } + + } else { + if (!m_headers_marshaled) //header message + { + m_message_buffer = + new BufferCDR(new byte[GIOPHeader.HEADER_SIZE]); + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + m_header.write(out); + out = null; + m_headers_marshaled = true; + + } + } + } + + /** + * Sends the message + */ + public void send(Connection conn) + { + + GIOPVersion header_version = m_header.getVersion(); + + if (header_version == GIOPVersion.VERSION_1_2) + conn.writeVersion1_2(getMessageBuffer()); + else if (header_version == GIOPVersion.VERSION_1_1) + conn.writeVersion1_1(getMessageBuffer()); + else + conn.writeVersion1_0(getMessageBuffer()); + } + + public CompressorIdLevel get_compressor() + { + return m_compressor; + } + + public void set_compressor(CompressorIdLevel compressor) + { + m_compressor = compressor; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPReplyMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPReplyMessage.java.svn-base new file mode 100644 index 0000000..27578c4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPReplyMessage.java.svn-base @@ -0,0 +1,511 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.ExceptionList; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.Messaging._ExceptionHolder; + +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.exception.SystemExceptionEncoder; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP Reply version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPReplyMessage extends GIOPFragmentedMessage +{ + + ReplyStatusType m_reply_status; + + ServiceContextList m_service_context_list; + + public GIOPReplyMessage(GIOPVersion version) + { + super(new GIOPHeader(version, MsgType.Reply)); + m_reply_status = null; + } + + public GIOPReplyMessage(GIOPHeader header) + { + super(header); + m_reply_status = null; + m_service_context_list = null; + } + + public GIOPReplyMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.Reply), id, fragmentSize ); + m_reply_status = null; + m_service_context_list = null; + } + + public String toString() + { + if (m_reply_status == null) + return super.toString() + " ( no reply status defined! )"; + else + return super.toString() + " (" + m_reply_status.toString() + ")"; + } + + private void reset() + { + m_reply_status = null; + m_message_completed = false; + m_headers_marshaled = false; + m_service_context_list = null; + } + + public ReplyStatusType replyStatus() + { + return m_reply_status; + } + + public void setServiceContextList(ServiceContextList list) + { + m_service_context_list = list; + } + + public ServiceContextList getServiceContextList() + { + return m_service_context_list; + } + + public void insertResultRequest(TIDORB orb, ServerRequestImpl request) + { + switch (request.getReturnState()) + { + case ServerRequestImpl.NO_EXCEPTION: + insertArguments(orb, request); + return; + case ServerRequestImpl.USER_EXCEPTION: + insertUserException(orb, request.getException()); + return; + case ServerRequestImpl.SYSTEM_EXCEPTION: + insertSystemException(orb, request.getSystemException()); + return; + case ServerRequestImpl.LOCATION_FORWARD: + insertForward(orb, request.getForward()); + return; + } + } + + protected void insertArguments(TIDORB orb, ServerRequestImpl request) + { + reset(); + m_request_id = request.getId(); + m_reply_status = ReplyStatusType.NO_EXCEPTION; + + createMessageBufferOutput(orb); + + Any result = request.getResult(); + + if (result != null) + result.write_value(m_message_buffer_out); + NVList list = request.getParameters(); + + if (list != null) + NVListImpl.writeOutParams(list, m_message_buffer_out); + + m_message_completed = true; + } + + public void extractArguments(RequestImpl request) + { + if (m_reply_status.value() != ReplyStatusType._NO_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, NO_EXCEPTION " + +"is not the reply status"); + + request.readResult(m_message_buffer_in); + + NVList list = request.arguments(); + + if (list != null) + NVListImpl.readOutParams(list, m_message_buffer_in); + } + + protected void insertUserException(TIDORB orb, Any exception) + { + reset(); + m_reply_status = ReplyStatusType.USER_EXCEPTION; + + createMessageBufferOutput(orb); + + exception.write_value(m_message_buffer_out); + + m_message_completed = true; + } + + public Any extractUserException(ExceptionList list) + { + if (m_reply_status.value() != ReplyStatusType._USER_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, USER_EXCEPTION " + +"is not the reply status"); + + // lectura adelantada del repository_id de la excepcion + + m_message_buffer_in.fixStarting(); + + String name = m_message_buffer_in.read_string(); + + m_message_buffer_in.rewind(); + + // busqueda del typecode y lectura de sus componentes + + if (list != null) { + + int count = list.count(); + + try { + for (int i = 0; i < count; i++) { + if (name.equals(list.item(i).id())) { + Any any = m_message_buffer_in.orb().create_any(); + any.read_value(m_message_buffer_in, list.item(i)); + return any; + } + } + } + catch (org.omg.CORBA.Bounds bds) {} + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + } + + throw new org.omg.CORBA.UNKNOWN("Unkown user exception"); + + } + + protected void + insertSystemException(TIDORB orb, + org.omg.CORBA.SystemException exception) + { + reset(); + m_reply_status = ReplyStatusType.SYSTEM_EXCEPTION; + + createMessageBufferOutput(orb); + + SystemExceptionEncoder.write(m_message_buffer_out, exception); + + m_message_completed = true; + } + + public org.omg.CORBA.SystemException extractSystemException() + { + if (m_reply_status.value() != ReplyStatusType._SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, SYSTEM_EXCEPTION " + +"is not the reply status"); + + return SystemExceptionEncoder.read(m_message_buffer_in); + } + + public void insertForward(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + + m_reply_status = ReplyStatusType.LOCATION_FORWARD; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForward() + { + if (m_reply_status.value() != ReplyStatusType._LOCATION_FORWARD) + throw new INTERNAL("Unexpected extract_arguments, LOCAL_FORWARD " + + "is not the reply status"); + + IOR ior = new DefaultIOR(); + ior.read(m_message_buffer_in); + return ior; + } + + public void inserForwardPerm(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + m_reply_status = ReplyStatusType.LOCATION_FORWARD_PERM; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForwardPerm() + { + if (m_reply_status.value() != ReplyStatusType._LOCATION_FORWARD_PERM) + throw new + INTERNAL("Unexpected extract_arguments, LOCAL_FORWARD_PERM " + + "is not the reply status"); + + IOR ior = new DefaultIOR(); + ior.read(m_message_buffer_in); + return ior; + } + + public void insertNeedsAddressingMode(TIDORB orb, + AddressingDisposition disposition) + { + reset(); + + m_reply_status = ReplyStatusType.NEEDS_ADDRESSING_MODE; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_ushort(disposition.value()); + + m_message_completed = true; + } + + public es.tid.TIDorbj.core.cdr.CDRInputStream getDataInput() + { + return m_message_buffer_in.copy(); + } + + public AddressingDisposition extractAddressingDisposition() + { + if (m_reply_status.value() != ReplyStatusType._NEEDS_ADDRESSING_MODE) + throw new + INTERNAL("Unexpected extract_arguments, NEEDS_ADDRESSING_MODE" + + "is not the reply status"); + + short value = m_message_buffer_in.read_ushort(); + + AddressingDisposition disposition = + AddressingDisposition.from_short(value); + + if (disposition == null) + throw new MARSHAL("Invalid AddressingDisposition value."); + + return disposition; + } + + public void createMessageBufferOutput(TIDORB orb) + { + super.createMessageBufferOutput(orb); + + switch (m_header.getVersion().getMinor()) + { + case 0: + case 1: + marshalReplyHeader1_1(); + break; + case 2: + marshalReplyHeader1_2(); + break; + } + } + + /** + * Marshals the reply header in GIOP 1.1 and 1.0 version. + */ + + protected void marshalReplyHeader1_1() + { + // Service Context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // reply_status + + m_message_buffer_out.write_ulong(m_reply_status.value()); + + } + + /** + * Marshals the reply header in GIOP 1.2 version. + */ + + protected void marshalReplyHeader1_2() + { + + // request_id marshaled with father create_body() + + // message_buffer_out.write_ulong(request_id); + + // reply_status + + m_message_buffer_out.write_ulong(m_reply_status.value()); + + // Service Context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // aligment to 8 in version 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + } + + public void receiveBody(Connection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + switch (m_header.getVersion().getMinor()) + { + case 0: + case 1: + unmarshalReplyHeader1_1(); + break; + case 2: + unmarshalReplyHeader1_2(); + break; + } + + m_message_buffer_in.fixStarting(); + + } + + /** + * Marshals the reply header in GIOP 1.1 version. + */ + + protected void unmarshalReplyHeader1_1() + { + // Service Context + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // reply_status + + m_reply_status = + ReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid ReplyStatus value."); + if (m_reply_status.value() > ReplyStatusType._LOCATION_FORWARD) + throw new MARSHAL("GIOPVersion 1.0 or 1.1: Invalid ReplyStatus value."); + + } + + /** + * Marshals the reply header in GIOP 1.2 version. + */ + + protected void unmarshalReplyHeader1_2() + { + // request_id unmarshaled in father's receive_body() + + // request_id = new RequestId(message_buffer_in.read_ulong()); + + // reply_status + + m_reply_status = + ReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid ReplyStatus value."); + + // Service Context + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // VERSION 1.2 aligment to 8 + try { + m_message_buffer_in.goNextAlignedPosition(CDR.LONGLONG_SIZE); + } + catch (org.omg.CORBA.MARSHAL M) { + + } + + } + + // AMI operations + + public void extractArgumentsForReplyHandler(RequestImpl request) + { + if (m_reply_status.value() != ReplyStatusType._NO_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, NO_EXCEPTION " + +"is not the reply status"); + + request.readResult(m_message_buffer_in); + + NVList list = request.arguments(); + + if (list != null) + NVListImpl.readInParams(list, m_message_buffer_in); + } + + public void extractUserException(es.tid.TIDorbj.core.messaging._ExceptionHolderImpl excepHolder) + { + if (m_reply_status.value() != ReplyStatusType._USER_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, USER_EXCEPTION " + +"is not the reply status"); + + excepHolder.read(m_message_buffer_in); + + } + + public void extractSystemException(_ExceptionHolder excepHolder) + { + if (m_reply_status.value() != ReplyStatusType._SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, SYSTEM_EXCEPTION " + +"is not the reply status"); + + excepHolder._read(m_message_buffer_in); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPRequestMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPRequestMessage.java.svn-base new file mode 100644 index 0000000..f6a2499 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPRequestMessage.java.svn-base @@ -0,0 +1,607 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.IOP.INVOCATION_POLICIES; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP Request version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPRequestMessage extends GIOPFragmentedMessage +{ + + ServiceContextList m_service_context_list; + + public GIOPRequestMessage(GIOPHeader header) + { + super(header); + m_service_context_list = null; + } + + public GIOPRequestMessage(GIOPVersion ver) + { + super(new GIOPHeader(ver, MsgType.Request)); + m_service_context_list = null; + } + + public GIOPRequestMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.Request), id, fragmentSize ); + m_service_context_list = null; + } + + public void setServiceContextList(ServiceContextList list) + { + m_service_context_list = list; + } + + public ServiceContextList getServiceContextList() + { + return m_service_context_list; + } + + public ServerRequestImpl extractRequest(es.tid.TIDorbj.core.TIDORB orb) + { + if (!m_message_completed) + throw new INTERNAL("Uncompleted message: no message_buffer."); + + this.createMessageBufferInput(orb); + + ServerRequestImpl request = null; + switch (m_header.getVersion().getMinor()) + { + case 0: + return extractRequest1_0(); + case 1: + return extractRequest1_1(); + case 2: + return extractRequest1_2(); + default: + return null; + } + + } + + /** + * Get the Request Invocation policies sended by the Client. See QoS. + * @return + */ + public PolicyContext getRequestInvocationPolicies() + { + if(this.m_service_context_list != null) { + for(int i = 0; i < this.m_service_context_list.m_components.length; i++) { + if(m_service_context_list.m_components[i].m_context_id + == INVOCATION_POLICIES.value ){ + InvocationPoliciesContext context = (InvocationPoliciesContext) + m_service_context_list.m_components[i]; + + return context.getPolicies(); + } + + } + } + return null; + } + + public void insertRequest(RequestImpl request, IOR ior, + AddressingDisposition disposition) + { + m_request_id = request.getId(); + + super.createMessageBufferOutput(request.orb()); + + switch (m_header.getVersion().getMinor()) + { + case 0: + insertRequestHeader1_0(request, ior); + break; + case 1: + insertRequestHeader1_1(request, ior); + break; + case 2: + insertRequestHeader1_2(request, ior, disposition); + break; + } + + // in parmeters + + request.writeInParams(m_message_buffer_out); + + // context + + m_message_buffer_out.write_Context(request.ctx(), request.contexts()); + + m_message_completed = true; + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request, + IOR ior, AddressingDisposition disposition) + { + m_request_id = request.getId(); + + super.createMessageBufferOutput(request.orb()); + + switch (m_header.getVersion().getMinor()) + { + case 0: + insertRequestHeader1_0(request, ior); + break; + case 1: + insertRequestHeader1_1(request, ior); + break; + case 2: + insertRequestHeader1_2(request, ior, disposition); + break; + } + + m_message_completed = true; + + // make insert the message header + + this.getMessageBuffer(); + + request.setOutputStream(m_message_buffer_out); + + m_message_buffer_out = null; + + } + + /** + * Marshals the request header in GIOP 1.0 version. + */ + + protected void insertRequestHeader1_0(RequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + } + + /** + * Marshals the request header in GIOP 1.1 version. + */ + + protected void insertRequestHeader1_1(RequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + + } + + protected void insertRequestHeader1_2(RequestImpl request, IOR ior, + AddressingDisposition disposition) + { + + // request_id marshaled in father create_message_buffer_out + + // message_buffer_out.write_ulong(request.get_id().value()); + + // with response ? + + byte response_octet; + + if (request.withResponse() || request.reliableOneway()) + response_octet = (byte) 0x03; // Fix to bug #545 (changed from 0x01) + else + response_octet = (byte) 0x00; + + m_message_buffer_out.write_octet(response_octet); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // target object + + switch (disposition.value()) + { + //TODO: IIOPIOR... buff... + case AddressingDisposition._KeyAddr: + ior.toObjectKeyAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ProfileAddr: + ior.toProfileAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ReferenceAddr: + ior.toIORAddress().write(m_message_buffer_out); + } + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // service context list + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // parameters aligment for GIOPVersion 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + + } + + /** + * Marshals the request header in GIOP 1.0 version. + */ + + protected void insertRequestHeader1_0(StreamRequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + } + + /** + * Marshals the request header in GIOP 1.1 version. + */ + + protected void insertRequestHeader1_1(StreamRequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + + } + + protected void insertRequestHeader1_2(StreamRequestImpl request, IOR ior, + AddressingDisposition disposition) + { + + // request_id marshaled in father create_message_buffer_out + + // message_buffer_out.write_ulong(request.get_id().value()); + + // with response ? + + byte response_octet; + + if (request.withResponse()) + response_octet = (byte) 0x03; // Fix to bug #545 (changed from 0x01) + else + response_octet = (byte) 0x00; + + m_message_buffer_out.write_octet(response_octet); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // target object + + switch (disposition.value()) + { + case AddressingDisposition._KeyAddr: + ior.toObjectKeyAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ProfileAddr: + ior.toProfileAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ReferenceAddr: + ior.toIORAddress().write(m_message_buffer_out); + } + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // service context list + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // parameters aligment for GIOPVersion 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + + } + + /** + * Unmarshals the request header in GIOP 1.0 version. + */ + + protected ServerRequestImpl extractRequest1_0() + { + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // with response ? + + boolean with_response = m_message_buffer_in.read_boolean(); + + // object key + + TargetAddress target = new TargetAddress(); + + ObjectKey key = new ObjectKey(); + + key.read(m_message_buffer_in); + + target.setObjectKey(key); + + // operation name + + String operation = m_message_buffer_in.read_string(); + +// principal: not implemented + + int principal_length = m_message_buffer_in.read_ulong(); + + if(principal_length > 0) { + m_message_buffer_in.skip(principal_length); + } + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_0, + m_request_id, + operation, + m_message_buffer_in, + target); + + request.withResponse(with_response); + + return request; + } + + /** + * Unmarshals the request header in GIOP 1.1 version. + */ + + protected ServerRequestImpl extractRequest1_1() + { + + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // with response ? + + boolean with_response = m_message_buffer_in.read_boolean(); + + // reserved octets + + m_message_buffer_in.skipOctetArray(3); + + // object key + + TargetAddress target = new TargetAddress(); + + ObjectKey key = new ObjectKey(); + + key.read(m_message_buffer_in); + + target.setObjectKey(key); + + // operation name + + String operation = m_message_buffer_in.read_string(); + + // principal: not implemented + + int principal_length = m_message_buffer_in.read_ulong(); + + if(principal_length > 0) { + m_message_buffer_in.skip(principal_length); + } + + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_1, + m_request_id, + operation, + m_message_buffer_in, + target); + + request.withResponse(with_response); + + return request; + } + + /** + * Unmarshals the request in GIOP 1.2 version. + */ + + protected ServerRequestImpl extractRequest1_2() + { + // request_id extracted in father receive_message_buffer + + // request_id = new RequestId(message_buffer_in.read_ulong()); + + // with response ? + + byte response_octet = m_message_buffer_in.read_octet(); + + boolean with_response = (response_octet & 0x01) != 0; + + // reserved octets + + m_message_buffer_in.skipOctetArray(3); + + // object key + + TargetAddress target = new TargetAddress(); + + target.read(m_message_buffer_in); + + // operation name + + String operation = m_message_buffer_in.read_string(); + + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + try { + m_message_buffer_in.goNextAlignedPosition(CDR.LONGLONG_SIZE); + } + catch (org.omg.CORBA.MARSHAL M) {} + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_2, + m_request_id, + operation, + m_message_buffer_in, + target); + request.set_compressor(this.get_compressor()); + request.withResponse(with_response); + + return request; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPVersion.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPVersion.java.svn-base new file mode 100644 index 0000000..43480aa --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/GIOPVersion.java.svn-base @@ -0,0 +1,171 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import java.util.HashMap; + +/** + * GIOPVersion structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: GIOPVersion == GIOPVersion?? +public class GIOPVersion +{ + public int major; + + public int minor; + + private GIOPVersion(int maj, int min) + { + major = maj; + minor = min; + } + + public int getMajor() + { + return major; + } + + public int getMinor() + { + return minor; + } + + public boolean equal(GIOPVersion ver) + { + return (major == ver.major) && (minor == ver.minor); + } + + private static HashMap versionMap; + public static GIOPVersion fromString( String version ){ + //jprojas: hehehe + synchronized( GIOPVersion.class ){ + if ( versionMap == null ){ + versionMap = new HashMap( 3, 1 ); + versionMap.put( "1.0", VERSION_1_0 ); + versionMap.put( "1.1", VERSION_1_1 ); + versionMap.put( "1.2", VERSION_1_2 ); + } + } + //Hope casting doesn't cost too much + return (GIOPVersion)versionMap.get( version ); + + /* + GIOPVersion iiopVersion; + StringTokenizer st = new StringTokenizer( version, ".", false ); + if ( st.countTokens() == 2 ){ + try { + int major = Integer.parseInt( st.nextToken() ); + int minor = Integer.parseInt( st.nextToken() ); + iiopVersion = fromInts( major, minor ); + } catch ( NumberFormatException nfe ){ + //Nothing can be done + iiopVersion = null; + } + } else { + iiopVersion = null; + } + return iiopVersion; + */ + } + + public static GIOPVersion fromInts(int major, int minor) + { + if (major != 1) + return null; + if (minor == 0) + return VERSION_1_0; + if (minor == 1) + return VERSION_1_1; + if (minor == 2) + return VERSION_1_2; + return null; + } + + public static GIOPVersion read(org.omg.CORBA.portable.InputStream input) + { + int major = input.read_octet(); + int minor = input.read_octet(); + if (major != 1) + return null; + if (minor == 0) + return VERSION_1_0; + if (minor == 1) + return VERSION_1_1; + if (minor == 2) + return VERSION_1_2; + return null; + } + + public void write(org.omg.CORBA.portable.OutputStream output) + { + output.write_octet((byte) major); + output.write_octet((byte) minor); + } + + public String toString() + { + if (minor == 0) + return VERSION_1_0_NAME; + if (minor == 1) + return VERSION_1_1_NAME; + else + return VERSION_1_2_NAME; + } + + public final static GIOPVersion VERSION_1_0 = new GIOPVersion(1, 0); + + public final static String VERSION_1_0_NAME = "GIOPVersion(1.0)"; + + public final static GIOPVersion VERSION_1_1 = new GIOPVersion(1, 1); + + public final static String VERSION_1_1_NAME = "GIOPVersion(1.1)"; + + public final static GIOPVersion VERSION_1_2 = new GIOPVersion(1, 2); + + public final static String VERSION_1_2_NAME = "GIOPVersion(1.2)"; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/InvocationPoliciesContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/InvocationPoliciesContext.java.svn-base new file mode 100644 index 0000000..5a52495 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/InvocationPoliciesContext.java.svn-base @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + + +import org.omg.IOP.INVOCATION_POLICIES; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +public class InvocationPoliciesContext extends ServiceContext +{ + + public PolicyContext m_policies; + + protected InvocationPoliciesContext() + { + super(INVOCATION_POLICIES.value); + m_policies = null; + + } + + public PolicyContext getPolicies() + { + return m_policies; + } + + public InvocationPoliciesContext(PolicyContext policies) + { + super(INVOCATION_POLICIES.value); + this.m_policies = policies ; + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_policies = new PolicyContext(null); + + input.enterEncapsulation(); + + m_policies.partialRead(input); + + input.exitEncapsulation(); + + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + + output.write_ulong(m_context_id); + + output.enterEncapsulation(); + + if(m_policies == null) { + output.write_ulong(0); + } else { + m_policies.write(output); + } + + output.exitEncapsulation(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/LocateReplyStatusType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/LocateReplyStatusType.java.svn-base new file mode 100644 index 0000000..3b75b56 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/LocateReplyStatusType.java.svn-base @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; + +/** + * LocateReplyStatusType enumeration defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class LocateReplyStatusType +{ + + public int m_value; + + private LocateReplyStatusType(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public static LocateReplyStatusType from_int(int type) + { + switch (type) + { + case _UNKNOWN_OBJECT: + return UNKNOWN_OBJECT; + case _OBJECT_HERE: + return OBJECT_HERE; + case _OBJECT_FORWARD: + return OBJECT_FORWARD; + case _OBJECT_FORWARD_PERM: + return OBJECT_FORWARD_PERM; + case _LOC_SYSTEM_EXCEPTION: + return LOC_SYSTEM_EXCEPTION; + case _LOC_NEEDS_ADDRESSING_MODE: + return LOC_NEEDS_ADDRESSING_MODE; + default: + return null; + } + } + + public String toString() + { + switch (m_value) + { + case _UNKNOWN_OBJECT: + return "LocateReplyStatusType: UNKNOWN_OBJECT"; + case _OBJECT_HERE: + return "LocateReplyStatusType: OBJECT_HERE"; + case _OBJECT_FORWARD: + return "LocateReplyStatusType: OBJECT_FORWARD"; + case _OBJECT_FORWARD_PERM: + return "LocateReplyStatusType: OBJECT_FORWARD_PERM"; + case _LOC_SYSTEM_EXCEPTION: + return "LocateReplyStatusType: LOC_SYSTEM_EXCEPTION"; + case _LOC_NEEDS_ADDRESSING_MODE: + return "LocateReplyStatusType: LOC_NEEDS_ADDRESSING_MODE"; + default: + return ""; + } + } + + public static final int _UNKNOWN_OBJECT = 0; + + public static final LocateReplyStatusType UNKNOWN_OBJECT = + new LocateReplyStatusType(_UNKNOWN_OBJECT); + + public static final int _OBJECT_HERE = 1; + + public static final LocateReplyStatusType OBJECT_HERE = + new LocateReplyStatusType(_OBJECT_HERE); + + public static final int _OBJECT_FORWARD = 2; + + public static final LocateReplyStatusType OBJECT_FORWARD = + new LocateReplyStatusType(_OBJECT_FORWARD); + + public static final int _OBJECT_FORWARD_PERM = 3; + + public static final LocateReplyStatusType OBJECT_FORWARD_PERM = + new LocateReplyStatusType(_OBJECT_FORWARD_PERM); + + public static final int _LOC_SYSTEM_EXCEPTION = 4; + + public static final LocateReplyStatusType LOC_SYSTEM_EXCEPTION = + new LocateReplyStatusType(_LOC_SYSTEM_EXCEPTION); + + public static final int _LOC_NEEDS_ADDRESSING_MODE = 5; + + public static final LocateReplyStatusType LOC_NEEDS_ADDRESSING_MODE = + new LocateReplyStatusType(_LOC_NEEDS_ADDRESSING_MODE); + + public AddressingDisposition + extractAddressingDisposition(GIOPLocateReplyMessage reply_message) + { + if (value() != LocateReplyStatusType._LOC_NEEDS_ADDRESSING_MODE) + throw new + INTERNAL("Unexpected extract_arguments, NEEDS_ADDRESSING_MODE " + + "is not the reply status"); + + short value = reply_message.m_message_buffer_in.read_ushort(); + AddressingDisposition disposition = + AddressingDisposition.from_short(value); + if (disposition == null) + throw new MARSHAL("Invalid AddressingDisposition value."); + return disposition; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MessageFactory.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MessageFactory.java.svn-base new file mode 100644 index 0000000..bd2ba46 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MessageFactory.java.svn-base @@ -0,0 +1,79 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * Factory to create GIOP Messages taking a GIOP Header. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class MessageFactory +{ + + public static GIOPMessage fromHeader(GIOPHeader header) + { + switch (header.getMsgType().m_value) + { + case MsgType._Request: + return new GIOPRequestMessage(header); + case MsgType._Reply: + return new GIOPReplyMessage(header); + case MsgType._CancelRequest: + return new GIOPCancelRequestMessage(header); + case MsgType._LocateRequest: + return new GIOPLocateRequestMessage(header); + case MsgType._LocateReply: + return new GIOPLocateReplyMessage(header); + case MsgType._CloseConnection: + return new GIOPMessage(header); + case MsgType._MessageError: + return new GIOPMessage(header); + case MsgType._Fragment: + return new GIOPFragmentMessage(header); + default: + return null; // unreachable + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MsgType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MsgType.java.svn-base new file mode 100644 index 0000000..487c654 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/MsgType.java.svn-base @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * MsgType structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class MsgType +{ + + public int m_value; + + private MsgType(int val) + { + m_value = val; + } + + public static MsgType from_int(int type) + { + switch (type) + { + case _Request: + return Request; + case _Reply: + return Reply; + case _CancelRequest: + return CancelRequest; + case _LocateRequest: + return LocateRequest; + case _LocateReply: + return LocateReply; + case _CloseConnection: + return CloseConnection; + case _MessageError: + return MessageError; + case _Fragment: + return Fragment; + default: + return null; + } + } + + public static String msgName(int type) + { + switch (type) + { + case _Request: + return "Request"; + case _Reply: + return "Reply"; + case _CancelRequest: + return "CancelRequest"; + case _LocateRequest: + return "LocateRequest"; + case _LocateReply: + return "LocateReply"; + case _CloseConnection: + return "CloseConnection"; + case _MessageError: + return "MessageError"; + case _Fragment: + return "Fragment"; + default: + return null; + } + } + + public static final int _Request = 0; + + public static final MsgType Request = new MsgType(_Request); + + public static final int _Reply = 1; + + public static final MsgType Reply = new MsgType(_Reply); + + public static final int _CancelRequest = 2; + + public static final MsgType CancelRequest = new MsgType(_CancelRequest); + + public static final int _LocateRequest = 3; + + public static final MsgType LocateRequest = new MsgType(_LocateRequest); + + public static final int _LocateReply = 4; + + public static final MsgType LocateReply = new MsgType(_LocateReply); + + public static final int _CloseConnection = 5; + + public static final MsgType CloseConnection = new MsgType(_CloseConnection); + + public static final int _MessageError = 6; + + public static final MsgType MessageError = new MsgType(_MessageError); + + public static final int _Fragment = 7; + + public static final MsgType Fragment = new MsgType(_Fragment); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ReplyStatusType.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ReplyStatusType.java.svn-base new file mode 100644 index 0000000..23a7c0e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ReplyStatusType.java.svn-base @@ -0,0 +1,136 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ReplyStatusType class defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ReplyStatusType +{ + + public int m_value; + + private ReplyStatusType(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public static ReplyStatusType from_int(int type) + { + switch (type) + { + case _NO_EXCEPTION: + return NO_EXCEPTION; + case _USER_EXCEPTION: + return USER_EXCEPTION; + case _SYSTEM_EXCEPTION: + return SYSTEM_EXCEPTION; + case _LOCATION_FORWARD: + return LOCATION_FORWARD; + case _LOCATION_FORWARD_PERM: + return LOCATION_FORWARD_PERM; + case _NEEDS_ADDRESSING_MODE: + return NEEDS_ADDRESSING_MODE; + default: + return null; + } + } + + public String toString() + { + switch (m_value) + { + case _NO_EXCEPTION: + return "ReplyStatusType: NO_EXCEPTION"; + case _USER_EXCEPTION: + return "ReplyStatusType:USER_EXCEPTION"; + case _SYSTEM_EXCEPTION: + return "ReplyStatusType:SYSTEM_EXCEPTION"; + case _LOCATION_FORWARD: + return "ReplyStatusType:LOCATION_FORWARD"; + case _LOCATION_FORWARD_PERM: + return "ReplyStatusType:LOCATION_FORWARD_PERM"; + case _NEEDS_ADDRESSING_MODE: + return "ReplyStatusType:NEEDS_ADDRESSING_MODE"; + } + return ""; + } + + public static final int _NO_EXCEPTION = 0; + + public static final ReplyStatusType NO_EXCEPTION = + new ReplyStatusType(_NO_EXCEPTION); + + public static final int _USER_EXCEPTION = 1; + + public static final ReplyStatusType USER_EXCEPTION = + new ReplyStatusType(_USER_EXCEPTION); + + public static final int _SYSTEM_EXCEPTION = 2; + + public static final ReplyStatusType SYSTEM_EXCEPTION = + new ReplyStatusType(_SYSTEM_EXCEPTION); + + public static final int _LOCATION_FORWARD = 3; + + public static final ReplyStatusType LOCATION_FORWARD = + new ReplyStatusType(_LOCATION_FORWARD); + + public static final int _LOCATION_FORWARD_PERM = 4; + + public static final ReplyStatusType LOCATION_FORWARD_PERM = + new ReplyStatusType(_LOCATION_FORWARD_PERM); + + public static final int _NEEDS_ADDRESSING_MODE = 5; + + public static final ReplyStatusType NEEDS_ADDRESSING_MODE = + new ReplyStatusType(_NEEDS_ADDRESSING_MODE); +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/RequestId.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/RequestId.java.svn-base new file mode 100644 index 0000000..9b26dc6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/RequestId.java.svn-base @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * RequestId defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class RequestId +{ + protected int m_value; + + public RequestId(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public int hashCode() + { + return m_value; + } + + public boolean equals(Object obj) + { + if (obj instanceof RequestId) + return m_value == ((RequestId) obj).m_value; + + return false; + + } + + public String toString() + { + return "RequestId: " + m_value; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContext.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContext.java.svn-base new file mode 100644 index 0000000..4bfeac6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContext.java.svn-base @@ -0,0 +1,94 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ServiceContext structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContext +{ + + public int m_context_id; + + public es.tid.TIDorbj.core.cdr.Encapsulation m_context_data; + + public ServiceContext(int context_id) + { + this.m_context_id = context_id; + m_context_data = null; + } + + public ServiceContext(int context_id, + es.tid.TIDorbj.core.cdr.Encapsulation context_data) + { + this.m_context_id = context_id; + this.m_context_data = context_data; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_context_id); + output.writeEncapsulation(m_context_data); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_context_data = input.readEncapsulation(); + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUlong(); // skip context_id + input.skipEncapsulation(); + } + + public static void partialSkip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + //skip encapusulation + input.skipEncapsulation(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextList.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextList.java.svn-base new file mode 100644 index 0000000..43cc30a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextList.java.svn-base @@ -0,0 +1,98 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ServiceContextList sequence defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContextList +{ + + public ServiceContext[] m_components; + + public ServiceContextList(int count) + { + m_components = new ServiceContext[count]; + } + + public static ServiceContextList + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int count = input.read_ulong(); + + if (count == 0) + return null; + + if (count < 0) + throw new org.omg.CORBA.MARSHAL("Invalid ServiceContext size"); + + ServiceContextList list = new ServiceContextList(count); + + for (int i = 0; i < count; i++) + list.m_components[i] = ServiceContextReader.read(input); + + return list; + } + + public static void write(ServiceContextList list, + es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (list == null) + output.write_ulong(0); + else { + output.write_ulong(list.m_components.length); + for (int i = 0; i < list.m_components.length; i++) + list.m_components[i].write(output); + } + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int count = input.read_ulong(); + for (int i = 0; i < count; i++) + ServiceContext.skip(input); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextReader.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextReader.java.svn-base new file mode 100644 index 0000000..7cd5d36 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceContextReader.java.svn-base @@ -0,0 +1,79 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.IOP.INVOCATION_POLICIES; + + +/** + * Helper class for read ServiceContext structures. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContextReader +{ + + public static ServiceContext + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int id = input.read_ulong(); + ServiceContext serv_ctx = null; + switch (id) + { + // Standart CORBA Service Contexts + case org.omg.IOP.BI_DIR_IIOP.value: + serv_ctx = new BiDirServiceContext(); + serv_ctx.partialRead(input); + return serv_ctx; + case INVOCATION_POLICIES.value: + serv_ctx = new InvocationPoliciesContext(); + serv_ctx.partialRead(input); + return serv_ctx; + default: + serv_ctx = new ServiceContext(id); + serv_ctx.partialRead(input); + return serv_ctx; + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceId.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceId.java.svn-base new file mode 100644 index 0000000..1241323 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ServiceId.java.svn-base @@ -0,0 +1,72 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * Constant values related with ServiceId GIOP definitions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public interface ServiceId +{ + public static final int TransactionService = 0; + + public static final int CodeSets = 1; + + public static final int ChainBypassCheck = 2; + + public static final int ChainBypassInfo = 3; + + public static final int LogicalThreadId = 4; + + public static final int BI_DIR_IIOP = 5; + + public static final int SendingContextRunTime = 6; + + public static final int INVOCATION_POLICIES = 7; + + public static final int FORWARDED_ENTITY = 8; + + public static final int UnkownExceptionInfo = 9; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ZIOPMessage.java.svn-base b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ZIOPMessage.java.svn-base new file mode 100644 index 0000000..1258ce1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/.svn/text-base/ZIOPMessage.java.svn-base @@ -0,0 +1,406 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; // ziop?? + +import org.omg.CORBA.INTERNAL; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.Compressor; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; + +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; + +import org.omg.CORBA.COMM_FAILURE; + +public class ZIOPMessage + extends GIOPMessage +{ + BufferCDR m_original_message_buffer; + + CDRInputStream m_message_buffer_in; + + CDROutputStream m_message_buffer_out; + + int m_fragment_size; + + int m_original_length; + + public ZIOPMessage(GIOPMessage giop_message, int fragment_size) + { + super(giop_message.getHeader()); + m_original_message_buffer = giop_message.getMessageBuffer(); + m_message_buffer_in = null; + m_message_buffer_out = null; + m_fragment_size = fragment_size; + } + + public ZIOPMessage(GIOPHeader header, int fragment_size) + { + super(header); + m_original_message_buffer = null; + m_message_buffer_in = null; + m_message_buffer_out = null; + m_fragment_size = fragment_size; + } + + + public void receiveBody(Connection conn, + byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + m_message_buffer_in = new CDRInputStream(conn.orb(), m_message_buffer); + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + m_message_buffer_in.setMessage(true); + + m_message_completed = !(m_header.hasMoreFragments()); + + byte[] compressed = new byte[0]; + int compressed_length; + compressed_length = m_header.getSize() - 8; // CompressionData without data buffer + compressed = new byte[compressed_length]; + + // Read CompressionData + int original_length; + m_compressor.compressor_id = m_message_buffer_in.read_ushort(); + original_length = m_message_buffer_in.read_ulong(); + m_message_buffer_in.read_octet_array(compressed, 0, compressed_length); + + Compressor compressor_ptr = null; + try { + compressor_ptr = + conn.orb().getCompressionManager().get_compressor(m_compressor.compressor_id, + (short)0); + } catch (org.omg.Compression.UnknownCompressorId ex) { + return; + } + + org.omg.CORBA.OctetSeqHolder uncompressed = new org.omg.CORBA.OctetSeqHolder(); + + try { + compressor_ptr.decompress(compressed, uncompressed); + } catch (org.omg.Compression.CompressionException ex) { + return; + } + + if (conn.orb().m_trace != null) { + String[] msg = { + "Uncompressing ZIOP message ", + " from " + compressed.length + " bytes ", + " to " + uncompressed.value.length + " bytes ", + "using compressor " + m_compressor.compressor_id }; + conn.orb().printTrace(Trace.USER, msg); + } + + + // From uncompressed to CDRInputStream + ChunkCDR chunk = + new ChunkCDR(uncompressed.value.length); + + System.arraycopy(uncompressed.value, 0, chunk.getBuffer(), 0, uncompressed.value.length); + + chunk.setAvailable(uncompressed.value.length); + m_original_message_buffer = new BufferCDR(chunk); + + } + + public int get_fragment_size(TIDORB orb) + { + return m_fragment_size; + } + + public boolean perform_compression(TIDORB orb, + CompressorIdLevel compressor, + int low_value, + float min_ratio) + { + this.createMessageBufferOutput(orb); + + this.getHeader().setCompressed(true); + + + Compressor compressor_ptr = null; + try { + compressor_ptr = + orb.getCompressionManager().get_compressor(compressor.compressor_id, + compressor.compression_level); + } catch (org.omg.Compression.UnknownCompressorId ex) { + return false; + } + + + // Write 'body_buffer_out' bufferCDR into 'source' OctetSeq + byte[] source = new byte[0]; + int source_length = 0; + BufferCDR buffer = m_original_message_buffer; + int num_chunks = buffer.getNumAvailableChunks(); + ChunkCDR chunk = null; + for(int i = 0; i < num_chunks; i++) { + chunk = buffer.getChunk(i); + int current_length = source_length; + source_length += chunk.getAvailable(); + byte[] aux_buffer = new byte[source_length]; + if (source_length > 0) + System.arraycopy(source, 0, aux_buffer, 0, current_length); + System.arraycopy(chunk.getBuffer(), 0, aux_buffer, current_length, + chunk.getAvailable()); + source = aux_buffer; + } + + // Check (source_length > CompressorLowValue) to apply or not compression + if (source.length < low_value) { + return false; + } + + // Apply compression to source + org.omg.CORBA.OctetSeqHolder compressed = new org.omg.CORBA.OctetSeqHolder(); + try { + compressor_ptr.compress(source, compressed); + } catch (org.omg.Compression.CompressionException ex) { + return false; + } + + // Write compressed OctetSeq into message_buffer_out + m_message_buffer_out.write_ushort(compressor.compressor_id); + m_message_buffer_out.write_ulong(source.length); + + // Check min ratio + float ratio = ((float)1 - ((float)compressed.value.length / (float)source.length)); + if ( ratio < min_ratio ) { + return false; + } + + m_message_buffer_out.write_octet_array(compressed.value, 0 , compressed.value.length); + + m_message_completed = true; + + if (orb.m_trace != null) { + String[] msg = { + "Compressing GIOP message ", + "from " + source.length + " bytes ", + "to " + compressed.value.length + " bytes ", + "using compressor " + compressor.compressor_id, + " with level " + compressor.compression_level, + " achieving ratio " + (ratio*100) + " %" + }; + orb.printTrace(Trace.USER, msg); + } + + m_header.setSize(m_message_buffer.getAvailable() - + GIOPHeader.HEADER_SIZE); + m_headers_marshaled = false; + + return true; + } + + public void connect_GIOPMessage(Connection conn) + { + TIDORB _orb = conn.orb(); + + switch (m_header.getMsgType().m_value) + { + case MsgType._Request: + { + GIOPRequestMessage message = new GIOPRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + message.set_compressor(m_compressor); + + if (_orb.m_trace != null){ + _orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + _orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + _orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + conn.manageMessage((GIOPRequestMessage) message); + break; + } + case MsgType._Reply: + { + GIOPReplyMessage message = new GIOPReplyMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + // Skip GIOP Reply header + switch (m_header.getVersion().getMinor()) { + case 0: + case 1: + message.unmarshalReplyHeader1_1(); + break; + case 2: + message.unmarshalReplyHeader1_2(); + break; + } + + if (_orb.m_trace != null){ + _orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + _orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + _orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + conn.manageMessage((GIOPReplyMessage) message); + break; + } + case MsgType._CancelRequest: + { + GIOPCancelRequestMessage message = new GIOPCancelRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer); + + conn.manageMessage((GIOPCancelRequestMessage) message); + break; + } + case MsgType._LocateRequest: + { + GIOPLocateRequestMessage message = new GIOPLocateRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + conn.manageMessage((GIOPLocateRequestMessage) message); + break; + } + case MsgType._LocateReply: + { + GIOPLocateReplyMessage message = new GIOPLocateReplyMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + conn.manageMessage((GIOPLocateReplyMessage) message); + break; + } + case MsgType._Fragment: + { + GIOPFragmentMessage message = new GIOPFragmentMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer); + + conn.manageMessage((GIOPFragmentMessage) message); + break; + } + case MsgType._CloseConnection: + conn.closeByPair(); + return; + case MsgType._MessageError: + conn.closeByError(new COMM_FAILURE("Connection closed due to pair " + + "message error.")); + return; + } + + } + + public void createMessageBufferOutput(TIDORB orb) + { + if (m_message_buffer == null) + m_message_buffer = new BufferCDR( this.get_fragment_size(orb) ); + else + m_message_buffer.recycle(); + + m_message_buffer_out = new CDROutputStream(orb, m_message_buffer); + + m_message_buffer_out.setVersion(m_header.getVersion()); + + m_message_buffer_out.setMessage(true); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.java b/source/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.java new file mode 100644 index 0000000..4b60d6f --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/AddressingDisposition.java @@ -0,0 +1,97 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * AddressingDisposition structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AddressingDisposition +{ + + public short m_value; + + private AddressingDisposition(short val) + { + m_value = val; + } + + public short value() + { + return m_value; + } + + public static AddressingDisposition from_short(short type) + { + switch (type) + { + case _KeyAddr: + return KeyAddr; + case _ProfileAddr: + return ProfileAddr; + case _ReferenceAddr: + return ReferenceAddr; + default: + return null; + } + } + + public static final short _KeyAddr = 0; + + public static final AddressingDisposition KeyAddr = + new AddressingDisposition(_KeyAddr); + + public static final short _ProfileAddr = 1; + + public static final AddressingDisposition ProfileAddr = + new AddressingDisposition(_ProfileAddr); + + public static final short _ReferenceAddr = 2; + + public static final AddressingDisposition ReferenceAddr = + new AddressingDisposition(_ReferenceAddr); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.java b/source/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.java new file mode 100644 index 0000000..bdc9777 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/BiDirServiceContext.java @@ -0,0 +1,104 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import es.tid.TIDorbj.core.comm.iiop.ListenPoint; + +/** + * BiDirServiceContext structure defined in the IIOP module. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class BiDirServiceContext extends ServiceContext +{ + + public ListenPoint[] m_listen_points; + + protected BiDirServiceContext() + { + super(org.omg.IOP.BI_DIR_IIOP.value); + m_listen_points = null; + } + + public BiDirServiceContext(int size) + { + super(org.omg.IOP.BI_DIR_IIOP.value); + this.m_listen_points = new ListenPoint[size]; + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + int size = input.read_ulong(); + if (size < 0) + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + + m_listen_points = new ListenPoint[size]; + for (int i = 0; i < size; i++) { + m_listen_points[i] = ListenPoint.read(input); + } + input.exitEncapsulation(); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + + output.write_ulong(m_context_id); + + output.enterEncapsulation(); + + if (m_listen_points == null) + output.write_ulong(0); + else { + output.write_ulong(m_listen_points.length); + for (int i = 0; i < m_listen_points.length; i++) + ListenPoint.write(output, m_listen_points[i]); + } + + output.exitEncapsulation(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.java new file mode 100644 index 0000000..dda12af --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPCancelRequestMessage.java @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version CancelRequest messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPCancelRequestMessage extends GIOPMessage +{ + + /** + * Header member. + */ + private RequestId m_request_id; + + /** + * Constructor used for message sending. + */ + + public GIOPCancelRequestMessage(GIOPVersion version, RequestId id) + { + super(new GIOPHeader(version, MsgType.CancelRequest)); + m_request_id = id; + } + + /** + * Constructor used in message reception. First, the message header is + * readed, and then the message object is created. + * + * @param header + * the cancel request header. + */ + + public GIOPCancelRequestMessage(GIOPHeader header) + { + super(header); + } + + public RequestId getRequestId() + { + return m_request_id; + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_buffer) + { + super.receiveBody(conn, header_buffer); + + CDRInputStream id_in = new CDRInputStream(null, m_message_buffer); + id_in.setByteOrder(m_header.getByteOrder()); + m_request_id = new RequestId(id_in.read_ulong()); + try { + id_in.close(); + } + catch (Exception e) {} + id_in = null; + } + + public BufferCDR getMessageBuffer() + { + if (!m_message_completed) { + if (m_header.getVersion() == GIOPVersion.VERSION_1_2) { + m_message_buffer = + new BufferCDR(new byte[GIOPHeader.HEADER_SIZE + + CDR.ULONG_SIZE]); + + // write header + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + m_header.write(out); + //write + out.write_ulong(m_request_id.value()); + + try { + out.close(); + } + catch (Exception e) {} + + out = null; + m_message_completed = true; + m_headers_marshaled = true; + } else { + super.writeHeaders(); + m_message_completed = true; + } + } + + return m_message_buffer; + } + + public boolean hasBody() + { + return m_header.getVersion() == GIOPVersion.VERSION_1_2; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.java new file mode 100644 index 0000000..2858e93 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentMessage.java @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; + +/** + * Represents the 1.1 and 1.2 GIOP FragmentRequest version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPFragmentMessage extends GIOPMessage +{ + + public static int FRAGMENT_HEADER_SIZE_1_1 = GIOPHeader.HEADER_SIZE; + + public static int FRAGMENT_HEADER_SIZE_1_2 = GIOPHeader.HEADER_SIZE + + CDR.ULONG_SIZE; + + private RequestId m_request_id; + + public GIOPFragmentMessage(GIOPVersion version, RequestId id) + { + super(new GIOPHeader(version, MsgType.Fragment)); + m_request_id = id; + } + + public GIOPFragmentMessage(GIOPHeader header) + { + super(header); + } + + public String toString() + { + return m_header.toString() + " (ID: " + m_request_id + ")"; + } + + public RequestId getRequestId() + { + return m_request_id; + } + + public boolean hasBody() + { + return true; + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + if (m_header.getVersion().minor == 2) { + CDRInputStream id_in = new CDRInputStream(null, m_message_buffer); + id_in.setByteOrder(m_header.getByteOrder()); + id_in.skip(GIOPHeader.HEADER_SIZE); + m_request_id = new RequestId(id_in.read_ulong()); + id_in = null; + } + } + + public static void writeHeader(es.tid.TIDorbj.core.cdr.CDROutputStream out, + GIOPHeader header, RequestId request_id) + { + header.write(out); + + if (header.getVersion().minor == 2) { + out.write_ulong(request_id.value()); + out.alignment(CDR.LONGLONG_SIZE); // force alingment to 8 + } + } + + public void send(IIOPConnection conn) + { + throw new INTERNAL("Fragment message can not be send as itself"); + } + + public static void skipFragmentHeader1_2(CDRInputStream in) + { + //skip request_id (ulong) + in.skipUlong(); + // force alingment to 8 + // in.alignment(CDR.LONGLONG_SIZE); + + } + + public static void skipFragmentHeader1_2(CDROutputStream out) + { + //skip request_id (ulong) + out.skip(CDR.LONG_SIZE); + // force alingment to 8 + // out.alignment(CDR.LONGLONG_SIZE); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.java new file mode 100644 index 0000000..1de7c34 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPFragmentedMessage.java @@ -0,0 +1,326 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Base class for fragmented messages in 1.1 and 1.2 GIOP versions. + * + * @see es.tid.TIDorbj.core.comm.iiop.GIOPMessage + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class GIOPFragmentedMessage extends GIOPMessage +{ + + /** + * the request id, it can be needed by 1.1 and 1.2 GIOP version messages. + */ + protected RequestId m_request_id; + + /** + * InputStream where the message body is marshaled. It manages the body + * buffer, defined in the GIOPMessage class. + */ + protected CDRInputStream m_message_buffer_in; + + /** + * OutputStream where the message message_buffer can be marshaled. It + * manages the message_buffer buffer, defined in the + * GIOPMessage class. + */ + protected CDROutputStream m_message_buffer_out; + + private int fragmentSize; + + /** + * Creates a new fragmented message for GIOP 1.0 and 1.1 + */ + protected GIOPFragmentedMessage(GIOPHeader header) + { + super(header); + m_request_id = null; + } + + /** + * Creates a new fragmented message for GIOP 1.2 + */ + protected GIOPFragmentedMessage(GIOPHeader header, RequestId request_id, int fragmentSize ) + { + super(header); + this.m_request_id = request_id; + this.fragmentSize = fragmentSize; + } + + public String toString() + { + return m_header.toString() + " (" + m_request_id + ")"; + } + + public RequestId getRequestId() + { + return m_request_id; + } + + /** + * Initialize the message_buffer_out member. + * + * @param orb + * needed for internal CDR stream creation. + */ + + protected void createMessageBufferOutput(es.tid.TIDorbj.core.TIDORB orb) + { + if (m_message_buffer == null) + m_message_buffer = new BufferCDR( this.fragmentSize ); + else + m_message_buffer.recycle(); + + m_message_buffer_out = new CDROutputStream(orb, m_message_buffer); + + m_message_buffer_out.setVersion(m_header.getVersion()); + + m_message_buffer_out.setMessage(true); + + // set message skips also the GIOP HEADER + // message_buffer_out.skip(GIOPHeader.HEADER_SIZE); + + // writes the request id + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_message_buffer_out.write_ulong(m_request_id.value()); + } + } + + /** + * Initialize the message_buffer_out member. + * + * @param orb + * needed for internal CDR stream creation. + */ + + protected void createMessageBufferInput(es.tid.TIDorbj.core.TIDORB orb) + { + if (m_message_buffer_in != null) + return; + + if (m_message_buffer == null) + throw new INTERNAL("Cannot create buffer input"); + + m_message_buffer_in = new CDRInputStream(orb, m_message_buffer); + + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + + m_message_buffer_in.setMessage(true); + + // set message skips also the GIOP HEADER + // message_buffer_in.skip(GIOPHeader.HEADER_SIZE); + + // lectura adelantada del request_id para comprobar despues los + // fragmentos + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + } + + /** + * Reads the message message_buffer in the connection. The header has yet + * been read by the connection. + * + * @param conn + * the active IIOP connection. + */ + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(Connection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + this.createMessageBufferInput(conn.orb()); + + m_message_completed = !m_header.hasMoreFragments(); + } + + + + public void setBody(BufferCDR buf, CDRInputStream input) + { + super.setBody(buf); + + m_message_buffer_in = input; + + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + + m_message_buffer_in.setMessage(true); + + + // lectura adelantada del request_id para comprobar despues los + // fragmentos + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + m_message_completed = !m_header.hasMoreFragments(); + } + + + /** + * Complete writing of the message in the connection. + */ + + public void writeHeaders() + { + + if (!m_headers_marshaled) { + CDROutputStream out = new CDROutputStream(null, m_message_buffer); + + out.setVersion(m_header.getVersion()); + + // write message size = buffer size - 12 octets from header + + m_header.setSize(m_message_buffer.getAvailable() + - GIOPHeader.HEADER_SIZE); + + m_header.setMoreFragments(false); + + m_header.write(out); + + out = null; + m_headers_marshaled = true; + } + } + + /* + * public void write_headers() { if (message_buffer == null) throw new + * INTERNAL("Cannot write message headers"); + * + * switch(header.getVersion().getMinor()) { case 0: write_headers_1_0(); + * break; default: write_headers_1_1(); } } + * + * public void write_headers_1_0() { + * + * if (!headers_marshaled) { CDROutputStream out = new CDROutputStream(null, + * message_buffer); + * + * out.set_version(header.getVersion()); // write message size = buffer size - + * 12 octets from header + * + * header.setSize(message_buffer.getChunk(0).getAvailable() - + * GIOPHeader.HEADER_SIZE); + * + * header.setMoreFragments(false); + * + * header.write(out); + * + * out = null; headers_marshaled = true; } } + * + * public void write_headers_1_1() { + * + * if (!headers_marshaled) { CDROutputStream out = new CDROutputStream(null, + * message_buffer); + * + * out.set_version(header.getVersion()); // write message size = buffer size - + * 12 octets from header + * + * header.setSize(message_buffer.getChunk(0).getAvailable() - + * GIOPHeader.HEADER_SIZE); // write chunks as fragments + * + * int num_chunks = message_buffer.getNumAvailableChunks(); + * + * boolean has_more_fragments = num_chunks > 1; + * + * header.setMoreFragments(has_more_fragments); + * + * header.write(out); + * + * if(has_more_fragments) { + * + * out.set_message(true); + * + * GIOPHeader fragment_header = new GIOPHeader(header.getVersion(), + * MsgType.Fragment); + * + * fragment_header.setByteOrder(header.getByteOrder()); + * + * for(int i = 1; i < num_chunks; i++) { out.getNextFragmentHeader(); + * fragment_header.setMoreFragments(i < num_chunks - 1); + * fragment_header.setSize( message_buffer.getChunk(i).getAvailable() - + * GIOPHeader.HEADER_SIZE); + * + * GIOPFragmentMessage.write_header(out,fragment_header,request_id); } } + * + * out = null; headers_marshaled = true; } } + */ + + /** + * Adds the next fragment to the Message. + */ + public void addFragment(GIOPFragmentMessage fragment) + { + if (m_message_completed) + throw new org.omg.CORBA.MARSHAL("Unexpected Fragment"); + + if (m_message_buffer == null) + throw new org.omg.CORBA.INTERNAL("Unexpected Fragment"); + + if (m_message_buffer != null) + m_message_buffer.addChunk(fragment.getMessageBuffer().getChunk(0)); + + m_message_completed = !fragment.getHeader().hasMoreFragments(); + + } +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPHeader.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPHeader.java new file mode 100644 index 0000000..f68e719 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPHeader.java @@ -0,0 +1,246 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version message headers. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPHeader +{ + + GIOPVersion m_version; + + boolean m_byte_order; + + boolean m_more_fragments; + + MsgType m_message_type; + + int message_size; + + String m_str = null; + + boolean m_compressed; + + public final static int HEADER_SIZE = 12; + + public GIOPHeader() + {} + + public GIOPHeader(GIOPVersion ver, MsgType type) + { + m_version = ver; + m_byte_order = CDR.LOCAL_BYTE_ORDER; + m_more_fragments = false; + m_message_type = type; + message_size = 0; + m_compressed = false; + } + + public static GIOPHeader fromByteArray(byte[] array) + throws org.omg.CORBA.MARSHAL + { + GIOPHeader header = new GIOPHeader(); + if (array.length < HEADER_SIZE) + return null; + CDRInputStream input = new CDRInputStream(null, array); + header.read(input); + input = null; + return header; + } + + public GIOPVersion getVersion() + { + return m_version; + } + + public MsgType getMsgType() + { + return m_message_type; + } + + public void setByteOrder(boolean order) + { + m_byte_order = order; + } + + public boolean getByteOrder() + { + return m_byte_order; + } + + public void setMoreFragments(boolean more) + { + m_more_fragments = more; + } + + public boolean hasMoreFragments() + { + if (m_version.minor == 0) + return false; + else + return m_more_fragments; + } + + public void setSize(int size) + { + message_size = size; + } + + public int getSize() + { + return message_size; + } + + public void setCompressed(boolean compressed) + { + m_compressed = compressed; + } + + public boolean getCompressed() + { + return m_compressed; + } + + public void toByteArray(byte[] header_buffer) + { + CDROutputStream output = new CDROutputStream(null, header_buffer); + write(output); + output = null; + } + + public void write(org.omg.CORBA.portable.OutputStream output) + { + if (m_compressed) + output.write_octet((byte) 'Z'); + else + output.write_octet((byte) 'G'); + output.write_octet((byte) 'I'); + output.write_octet((byte) 'O'); + output.write_octet((byte) 'P'); + + output.write_octet((byte) m_version.major); + output.write_octet((byte) m_version.minor); + + if (m_version.minor == 0) + output.write_boolean(m_byte_order); + else { + int flag = 0; + if (m_byte_order) + flag |= 0x1; + if (m_more_fragments) + flag |= 0x2; + output.write_octet((byte) flag); + } + + output.write_octet((byte) m_message_type.m_value); + output.write_ulong(message_size); + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + byte first_magic_char = input.read_octet(); + + if ( ( (first_magic_char != (byte) 'G') && (first_magic_char != (byte) 'Z')) + || (input.read_octet() != (byte) 'I') + || (input.read_octet() != (byte) 'O') + || (input.read_octet() != (byte) 'P')) + + throw new + MARSHAL("Bad GIOP Message header: Invalid header identifier.", + 0, CompletionStatus.COMPLETED_NO); + + m_compressed = (first_magic_char == 'Z'); + + m_version = GIOPVersion.read(input); + + if (m_version == null) + throw new + MARSHAL("Bad GIOP Message header: Invalid version number.", + 0, CompletionStatus.COMPLETED_NO); + + byte flag = input.read_octet(); + + if (m_version.minor == 0) + m_byte_order = (flag != 0); + else { + m_byte_order = ((flag & 0x1) != 0); + m_more_fragments = ((flag & 0x2) != 0); + } + + input.setByteOrder(m_byte_order); + m_message_type = MsgType.from_int(input.read_octet()); + + if (m_message_type == null) + throw new MARSHAL("Bad GIOP Message header: Invalid message type.", + 0, CompletionStatus.COMPLETED_NO); + + message_size = input.read_ulong(); + + } + + public String toString() + { + if (m_str == null) + m_str = MsgType.msgName(m_message_type.m_value) + " (" + + m_version.toString() + ") " + + ((m_more_fragments) ? "[FRAGMENTED] " : "") + + ((m_byte_order) ? "[LITTLE_ENDIAN] " : "[BIG_ENDIAN] ") + + "[SIZE: " + message_size + "]"; + + return m_str; + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.java new file mode 100644 index 0000000..5d8a134 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateReplyMessage.java @@ -0,0 +1,245 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.exception.SystemExceptionEncoder; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP LocateReply version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPLocateReplyMessage extends GIOPFragmentedMessage +{ + + LocateReplyStatusType m_reply_status; + + public GIOPLocateReplyMessage(GIOPHeader header) + { + super(header); + m_reply_status = null; + } + + public GIOPLocateReplyMessage(GIOPVersion version, RequestId id, int fragmentSize) + { + super(new GIOPHeader(version, MsgType.LocateReply), id, fragmentSize ); + m_reply_status = null; + } + + public String toString() + { + return super.toString() + " (" + m_reply_status.toString() + ")"; + } + + private void reset() + { + m_reply_status = null; + m_message_completed = false; + m_headers_marshaled = false; + } + + public LocateReplyStatusType replyStatus() + { + return m_reply_status; + } + + public void insertUnknownObject(TIDORB orb) + { + reset(); + m_reply_status = LocateReplyStatusType.UNKNOWN_OBJECT; + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public void insertObjectHere(TIDORB orb) + { + reset(); + m_reply_status = LocateReplyStatusType.OBJECT_HERE; + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public void insertSystemException(TIDORB orb, + org.omg.CORBA.SystemException exception) + { + reset(); + m_reply_status = LocateReplyStatusType.LOC_SYSTEM_EXCEPTION; + SystemExceptionEncoder.write(m_message_buffer_out, exception); + + createMessageBufferOutput(orb); + + m_message_completed = true; + } + + public org.omg.CORBA.SystemException extractSystemException() + { + if (m_reply_status.value() + != LocateReplyStatusType._LOC_SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, " + + "SYSTEM_EXCEPTION is not the reply status"); + + return SystemExceptionEncoder.read(m_message_buffer_in); + } + + public void insertForward(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + + m_reply_status = LocateReplyStatusType.OBJECT_FORWARD; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForward() + { + if (m_reply_status.value() != LocateReplyStatusType._OBJECT_FORWARD) + throw new INTERNAL("Unexpected extract_arguments, " + + "OBJECT_FORWARD is not the reply status"); + + IOR forward_ior = new DefaultIOR(); + forward_ior.read(m_message_buffer_in); + return forward_ior; + } + + public void insertForwardPerm(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + m_reply_status = LocateReplyStatusType.OBJECT_FORWARD_PERM; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + + } + + public IOR extractForwardPerm() + { + if (m_reply_status.value() + != LocateReplyStatusType._OBJECT_FORWARD_PERM) + throw new INTERNAL("Unexpected extract_arguments, " + + "OBJECT_FORWARD_PERM is not the reply status"); + + IOR forward_ior = new DefaultIOR(); + forward_ior.read(m_message_buffer_in); + return forward_ior; + } + + public void insertNeedsAddressingMode(TIDORB orb, + AddressingDisposition disposition) + { + reset(); + + m_reply_status = LocateReplyStatusType.LOC_NEEDS_ADDRESSING_MODE; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_ushort(disposition.value()); + + m_message_completed = true; + } + + public AddressingDisposition extractAddressingDisposition() + { + return m_reply_status.extractAddressingDisposition(this); + } + + public void createMessageBufferOutput(es.tid.TIDorbj.core.TIDORB orb) + { + + if (m_reply_status == null) + throw new INTERNAL("Unitialized request"); + + super.createMessageBufferOutput(orb); + + // header + // request_id marshaled with father create_message_buffer_output() in + // version 1.2 + + if (!m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_message_buffer_out.write_ulong(m_request_id.value()); + } + + // status + m_message_buffer_out.write_ulong(m_reply_status.m_value); + + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(IIOPConnection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + // request_id has been readen in father's method in version 1.2 + if (!m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + } + + // reply_status + + m_reply_status = + LocateReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid LocateReplyStatus value."); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.java new file mode 100644 index 0000000..e7851d9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPLocateRequestMessage.java @@ -0,0 +1,127 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP LocateRequest version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPLocateRequestMessage extends GIOPFragmentedMessage +{ + + public GIOPLocateRequestMessage(GIOPHeader header) + { + super(header); + } + + public GIOPLocateRequestMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.LocateRequest), id, fragmentSize ); + } + + public TargetAddress extractAddress() + { + if (!m_message_completed) + throw new INTERNAL("Uncompleted message."); + + TargetAddress target = new TargetAddress(); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + // request_id has been readed by father's receive_body + + target.read(m_message_buffer_in); + } else { + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + ObjectKey key = new ObjectKey(); + key.read(m_message_buffer_in); + target.setObjectKey(key); + } + return target; + } + + public void insertAddress(es.tid.TIDorbj.core.TIDORB orb, ObjectKey key) + { + createMessageBufferOutput(orb); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + TargetAddress target = new TargetAddress(); + target.setObjectKey(key); + target.write(m_message_buffer_out); + } else { + m_message_buffer_out.write_ulong(m_request_id.value()); + key.write(m_message_buffer_out); + } + + m_message_completed = true; + } + + public void insertAddress(es.tid.TIDorbj.core.TIDORB orb, + TargetAddress target) + { + createMessageBufferOutput(orb); + + if (m_header.getVersion().equal(GIOPVersion.VERSION_1_2)) { + // request_id marshaled in create_message_buffer_output() + target.write(m_message_buffer_out); + } else { + m_message_buffer_out.write_ulong(m_request_id.value()); + ObjectKey key = target.getObjectKey(); + + if (key == null) + throw new INTERNAL("Invalid Object Key"); + + key.write(m_message_buffer_out); + } + + m_message_completed = true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPMessage.java new file mode 100644 index 0000000..5d7b2a6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPMessage.java @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.Compression.CompressorIdLevel; + +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP version messages used in a IIOP + * connection. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPMessage +{ + + /** + * Message Header + */ + GIOPHeader m_header; + + /** + * Message Buffer, including the message headers. + */ + BufferCDR m_message_buffer; + + /** + * Indicates if the message is ready to be send. + */ + boolean m_message_completed; + + boolean m_headers_marshaled; + + CompressorIdLevel m_compressor; + + protected GIOPMessage(GIOPHeader header) + { + m_header = header; + m_message_buffer = null; + m_headers_marshaled = false; + + switch (header.getMsgType().m_value) + { + case MsgType._MessageError: + case MsgType._CloseConnection: + m_message_completed = true; + break; + default: + m_message_completed = false; + } + m_compressor = new CompressorIdLevel((short)0, (short)0); + } + + public String toString() + { + return m_header.toString(); + } + + public GIOPHeader getHeader() + { + return m_header; + } + + /** + * @return the message buffer including the message headers + */ + + public BufferCDR getMessageBuffer() + { + if (!m_message_completed) + return null; + + if (!m_headers_marshaled) + writeHeaders(); + + return m_message_buffer; + } + + /** + * Sets the message_buffer where the message will be marshalled. + */ + public void setMessageBuffer(BufferCDR cdr) + { + m_message_buffer = cdr; + } + + public void setMessageCompleted(boolean value) + { + m_message_completed = value; + } + + public boolean hasBody() + { + switch (m_header.getMsgType().m_value) + { + case MsgType._MessageError: + return false; + case MsgType._CloseConnection: + return false; + default: + return true; + } + } + + //TODO: giop should not know anything about IIOPConnections!! + public static ChunkCDR receiveChunk(Connection conn, GIOPHeader header, + byte[] header_bytes) + { + // the buffer has also the header + + int body_size = header.getSize(); + + byte[] buffer = new byte[body_size + GIOPHeader.HEADER_SIZE]; + + // copy the header + + System.arraycopy(header_bytes, 0, buffer, 0, GIOPHeader.HEADER_SIZE); + + conn.read(buffer, GIOPHeader.HEADER_SIZE, body_size); + + return new ChunkCDR(buffer); + + } + + //TODO: giop should not know anything about IIOPConnections!! + public void receiveBody(Connection conn, byte[] header_bytes) + { + m_message_buffer = + new BufferCDR(receiveChunk(conn, m_header, header_bytes)); + + m_message_completed = true; + m_headers_marshaled = true; + } + + + public void setBody(BufferCDR buf) + { + m_message_buffer = buf; + m_message_completed = true; + m_headers_marshaled = true; + } + + /** + * Writes the header into the Message Chunks + */ + protected void writeHeaders() + { + if (hasBody()) { + if (!m_message_completed) + throw new INTERNAL("Uncompleted Message: no body"); + + if (!m_headers_marshaled) { + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + + out.setVersion(m_header.getVersion()); + + // write message size = buffer size - 12 octets from header + + m_header.setSize(m_message_buffer.getAvailable() + - GIOPHeader.HEADER_SIZE); + + m_header.write(out); + + out = null; + + m_headers_marshaled = true; + } + + } else { + if (!m_headers_marshaled) //header message + { + m_message_buffer = + new BufferCDR(new byte[GIOPHeader.HEADER_SIZE]); + CDROutputStream out = + new CDROutputStream(null, m_message_buffer); + m_header.write(out); + out = null; + m_headers_marshaled = true; + + } + } + } + + /** + * Sends the message + */ + public void send(Connection conn) + { + + GIOPVersion header_version = m_header.getVersion(); + + if (header_version == GIOPVersion.VERSION_1_2) + conn.writeVersion1_2(getMessageBuffer()); + else if (header_version == GIOPVersion.VERSION_1_1) + conn.writeVersion1_1(getMessageBuffer()); + else + conn.writeVersion1_0(getMessageBuffer()); + } + + public CompressorIdLevel get_compressor() + { + return m_compressor; + } + + public void set_compressor(CompressorIdLevel compressor) + { + m_compressor = compressor; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.java new file mode 100644 index 0000000..71a6056 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPReplyMessage.java @@ -0,0 +1,511 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.ExceptionList; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NVList; +import org.omg.Messaging._ExceptionHolder; + +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.exception.SystemExceptionEncoder; + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP Reply version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPReplyMessage extends GIOPFragmentedMessage +{ + + ReplyStatusType m_reply_status; + + ServiceContextList m_service_context_list; + + public GIOPReplyMessage(GIOPVersion version) + { + super(new GIOPHeader(version, MsgType.Reply)); + m_reply_status = null; + } + + public GIOPReplyMessage(GIOPHeader header) + { + super(header); + m_reply_status = null; + m_service_context_list = null; + } + + public GIOPReplyMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.Reply), id, fragmentSize ); + m_reply_status = null; + m_service_context_list = null; + } + + public String toString() + { + if (m_reply_status == null) + return super.toString() + " ( no reply status defined! )"; + else + return super.toString() + " (" + m_reply_status.toString() + ")"; + } + + private void reset() + { + m_reply_status = null; + m_message_completed = false; + m_headers_marshaled = false; + m_service_context_list = null; + } + + public ReplyStatusType replyStatus() + { + return m_reply_status; + } + + public void setServiceContextList(ServiceContextList list) + { + m_service_context_list = list; + } + + public ServiceContextList getServiceContextList() + { + return m_service_context_list; + } + + public void insertResultRequest(TIDORB orb, ServerRequestImpl request) + { + switch (request.getReturnState()) + { + case ServerRequestImpl.NO_EXCEPTION: + insertArguments(orb, request); + return; + case ServerRequestImpl.USER_EXCEPTION: + insertUserException(orb, request.getException()); + return; + case ServerRequestImpl.SYSTEM_EXCEPTION: + insertSystemException(orb, request.getSystemException()); + return; + case ServerRequestImpl.LOCATION_FORWARD: + insertForward(orb, request.getForward()); + return; + } + } + + protected void insertArguments(TIDORB orb, ServerRequestImpl request) + { + reset(); + m_request_id = request.getId(); + m_reply_status = ReplyStatusType.NO_EXCEPTION; + + createMessageBufferOutput(orb); + + Any result = request.getResult(); + + if (result != null) + result.write_value(m_message_buffer_out); + NVList list = request.getParameters(); + + if (list != null) + NVListImpl.writeOutParams(list, m_message_buffer_out); + + m_message_completed = true; + } + + public void extractArguments(RequestImpl request) + { + if (m_reply_status.value() != ReplyStatusType._NO_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, NO_EXCEPTION " + +"is not the reply status"); + + request.readResult(m_message_buffer_in); + + NVList list = request.arguments(); + + if (list != null) + NVListImpl.readOutParams(list, m_message_buffer_in); + } + + protected void insertUserException(TIDORB orb, Any exception) + { + reset(); + m_reply_status = ReplyStatusType.USER_EXCEPTION; + + createMessageBufferOutput(orb); + + exception.write_value(m_message_buffer_out); + + m_message_completed = true; + } + + public Any extractUserException(ExceptionList list) + { + if (m_reply_status.value() != ReplyStatusType._USER_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, USER_EXCEPTION " + +"is not the reply status"); + + // lectura adelantada del repository_id de la excepcion + + m_message_buffer_in.fixStarting(); + + String name = m_message_buffer_in.read_string(); + + m_message_buffer_in.rewind(); + + // busqueda del typecode y lectura de sus componentes + + if (list != null) { + + int count = list.count(); + + try { + for (int i = 0; i < count; i++) { + if (name.equals(list.item(i).id())) { + Any any = m_message_buffer_in.orb().create_any(); + any.read_value(m_message_buffer_in, list.item(i)); + return any; + } + } + } + catch (org.omg.CORBA.Bounds bds) {} + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + } + + throw new org.omg.CORBA.UNKNOWN("Unkown user exception"); + + } + + protected void + insertSystemException(TIDORB orb, + org.omg.CORBA.SystemException exception) + { + reset(); + m_reply_status = ReplyStatusType.SYSTEM_EXCEPTION; + + createMessageBufferOutput(orb); + + SystemExceptionEncoder.write(m_message_buffer_out, exception); + + m_message_completed = true; + } + + public org.omg.CORBA.SystemException extractSystemException() + { + if (m_reply_status.value() != ReplyStatusType._SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, SYSTEM_EXCEPTION " + +"is not the reply status"); + + return SystemExceptionEncoder.read(m_message_buffer_in); + } + + public void insertForward(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + + m_reply_status = ReplyStatusType.LOCATION_FORWARD; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForward() + { + if (m_reply_status.value() != ReplyStatusType._LOCATION_FORWARD) + throw new INTERNAL("Unexpected extract_arguments, LOCAL_FORWARD " + + "is not the reply status"); + + IOR ior = new DefaultIOR(); + ior.read(m_message_buffer_in); + return ior; + } + + public void inserForwardPerm(TIDORB orb, org.omg.CORBA.Object obj) + { + reset(); + m_reply_status = ReplyStatusType.LOCATION_FORWARD_PERM; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_Object(obj); + + m_message_completed = true; + } + + public IOR extractForwardPerm() + { + if (m_reply_status.value() != ReplyStatusType._LOCATION_FORWARD_PERM) + throw new + INTERNAL("Unexpected extract_arguments, LOCAL_FORWARD_PERM " + + "is not the reply status"); + + IOR ior = new DefaultIOR(); + ior.read(m_message_buffer_in); + return ior; + } + + public void insertNeedsAddressingMode(TIDORB orb, + AddressingDisposition disposition) + { + reset(); + + m_reply_status = ReplyStatusType.NEEDS_ADDRESSING_MODE; + + createMessageBufferOutput(orb); + + m_message_buffer_out.write_ushort(disposition.value()); + + m_message_completed = true; + } + + public es.tid.TIDorbj.core.cdr.CDRInputStream getDataInput() + { + return m_message_buffer_in.copy(); + } + + public AddressingDisposition extractAddressingDisposition() + { + if (m_reply_status.value() != ReplyStatusType._NEEDS_ADDRESSING_MODE) + throw new + INTERNAL("Unexpected extract_arguments, NEEDS_ADDRESSING_MODE" + + "is not the reply status"); + + short value = m_message_buffer_in.read_ushort(); + + AddressingDisposition disposition = + AddressingDisposition.from_short(value); + + if (disposition == null) + throw new MARSHAL("Invalid AddressingDisposition value."); + + return disposition; + } + + public void createMessageBufferOutput(TIDORB orb) + { + super.createMessageBufferOutput(orb); + + switch (m_header.getVersion().getMinor()) + { + case 0: + case 1: + marshalReplyHeader1_1(); + break; + case 2: + marshalReplyHeader1_2(); + break; + } + } + + /** + * Marshals the reply header in GIOP 1.1 and 1.0 version. + */ + + protected void marshalReplyHeader1_1() + { + // Service Context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // reply_status + + m_message_buffer_out.write_ulong(m_reply_status.value()); + + } + + /** + * Marshals the reply header in GIOP 1.2 version. + */ + + protected void marshalReplyHeader1_2() + { + + // request_id marshaled with father create_body() + + // message_buffer_out.write_ulong(request_id); + + // reply_status + + m_message_buffer_out.write_ulong(m_reply_status.value()); + + // Service Context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // aligment to 8 in version 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + } + + public void receiveBody(Connection conn, byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + switch (m_header.getVersion().getMinor()) + { + case 0: + case 1: + unmarshalReplyHeader1_1(); + break; + case 2: + unmarshalReplyHeader1_2(); + break; + } + + m_message_buffer_in.fixStarting(); + + } + + /** + * Marshals the reply header in GIOP 1.1 version. + */ + + protected void unmarshalReplyHeader1_1() + { + // Service Context + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // reply_status + + m_reply_status = + ReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid ReplyStatus value."); + if (m_reply_status.value() > ReplyStatusType._LOCATION_FORWARD) + throw new MARSHAL("GIOPVersion 1.0 or 1.1: Invalid ReplyStatus value."); + + } + + /** + * Marshals the reply header in GIOP 1.2 version. + */ + + protected void unmarshalReplyHeader1_2() + { + // request_id unmarshaled in father's receive_body() + + // request_id = new RequestId(message_buffer_in.read_ulong()); + + // reply_status + + m_reply_status = + ReplyStatusType.from_int(m_message_buffer_in.read_ulong()); + + if (m_reply_status == null) + throw new MARSHAL("Invalid ReplyStatus value."); + + // Service Context + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // VERSION 1.2 aligment to 8 + try { + m_message_buffer_in.goNextAlignedPosition(CDR.LONGLONG_SIZE); + } + catch (org.omg.CORBA.MARSHAL M) { + + } + + } + + // AMI operations + + public void extractArgumentsForReplyHandler(RequestImpl request) + { + if (m_reply_status.value() != ReplyStatusType._NO_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, NO_EXCEPTION " + +"is not the reply status"); + + request.readResult(m_message_buffer_in); + + NVList list = request.arguments(); + + if (list != null) + NVListImpl.readInParams(list, m_message_buffer_in); + } + + public void extractUserException(es.tid.TIDorbj.core.messaging._ExceptionHolderImpl excepHolder) + { + if (m_reply_status.value() != ReplyStatusType._USER_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, USER_EXCEPTION " + +"is not the reply status"); + + excepHolder.read(m_message_buffer_in); + + } + + public void extractSystemException(_ExceptionHolder excepHolder) + { + if (m_reply_status.value() != ReplyStatusType._SYSTEM_EXCEPTION) + throw new INTERNAL("Unexpected extract_arguments, SYSTEM_EXCEPTION " + +"is not the reply status"); + + excepHolder._read(m_message_buffer_in); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.java new file mode 100644 index 0000000..1ad3cad --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPRequestMessage.java @@ -0,0 +1,607 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.IOP.INVOCATION_POLICIES; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Represents the 1.0, 1.1 and 1.2 GIOP Request version messages. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class GIOPRequestMessage extends GIOPFragmentedMessage +{ + + ServiceContextList m_service_context_list; + + public GIOPRequestMessage(GIOPHeader header) + { + super(header); + m_service_context_list = null; + } + + public GIOPRequestMessage(GIOPVersion ver) + { + super(new GIOPHeader(ver, MsgType.Request)); + m_service_context_list = null; + } + + public GIOPRequestMessage(GIOPVersion ver, RequestId id, int fragmentSize ) + { + super(new GIOPHeader(ver, MsgType.Request), id, fragmentSize ); + m_service_context_list = null; + } + + public void setServiceContextList(ServiceContextList list) + { + m_service_context_list = list; + } + + public ServiceContextList getServiceContextList() + { + return m_service_context_list; + } + + public ServerRequestImpl extractRequest(es.tid.TIDorbj.core.TIDORB orb) + { + if (!m_message_completed) + throw new INTERNAL("Uncompleted message: no message_buffer."); + + this.createMessageBufferInput(orb); + + ServerRequestImpl request = null; + switch (m_header.getVersion().getMinor()) + { + case 0: + return extractRequest1_0(); + case 1: + return extractRequest1_1(); + case 2: + return extractRequest1_2(); + default: + return null; + } + + } + + /** + * Get the Request Invocation policies sended by the Client. See QoS. + * @return + */ + public PolicyContext getRequestInvocationPolicies() + { + if(this.m_service_context_list != null) { + for(int i = 0; i < this.m_service_context_list.m_components.length; i++) { + if(m_service_context_list.m_components[i].m_context_id + == INVOCATION_POLICIES.value ){ + InvocationPoliciesContext context = (InvocationPoliciesContext) + m_service_context_list.m_components[i]; + + return context.getPolicies(); + } + + } + } + return null; + } + + public void insertRequest(RequestImpl request, IOR ior, + AddressingDisposition disposition) + { + m_request_id = request.getId(); + + super.createMessageBufferOutput(request.orb()); + + switch (m_header.getVersion().getMinor()) + { + case 0: + insertRequestHeader1_0(request, ior); + break; + case 1: + insertRequestHeader1_1(request, ior); + break; + case 2: + insertRequestHeader1_2(request, ior, disposition); + break; + } + + // in parmeters + + request.writeInParams(m_message_buffer_out); + + // context + + m_message_buffer_out.write_Context(request.ctx(), request.contexts()); + + m_message_completed = true; + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request, + IOR ior, AddressingDisposition disposition) + { + m_request_id = request.getId(); + + super.createMessageBufferOutput(request.orb()); + + switch (m_header.getVersion().getMinor()) + { + case 0: + insertRequestHeader1_0(request, ior); + break; + case 1: + insertRequestHeader1_1(request, ior); + break; + case 2: + insertRequestHeader1_2(request, ior, disposition); + break; + } + + m_message_completed = true; + + // make insert the message header + + this.getMessageBuffer(); + + request.setOutputStream(m_message_buffer_out); + + m_message_buffer_out = null; + + } + + /** + * Marshals the request header in GIOP 1.0 version. + */ + + protected void insertRequestHeader1_0(RequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + } + + /** + * Marshals the request header in GIOP 1.1 version. + */ + + protected void insertRequestHeader1_1(RequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + + } + + protected void insertRequestHeader1_2(RequestImpl request, IOR ior, + AddressingDisposition disposition) + { + + // request_id marshaled in father create_message_buffer_out + + // message_buffer_out.write_ulong(request.get_id().value()); + + // with response ? + + byte response_octet; + + if (request.withResponse() || request.reliableOneway()) + response_octet = (byte) 0x03; // Fix to bug #545 (changed from 0x01) + else + response_octet = (byte) 0x00; + + m_message_buffer_out.write_octet(response_octet); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // target object + + switch (disposition.value()) + { + //TODO: IIOPIOR... buff... + case AddressingDisposition._KeyAddr: + ior.toObjectKeyAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ProfileAddr: + ior.toProfileAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ReferenceAddr: + ior.toIORAddress().write(m_message_buffer_out); + } + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // service context list + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // parameters aligment for GIOPVersion 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + + } + + /** + * Marshals the request header in GIOP 1.0 version. + */ + + protected void insertRequestHeader1_0(StreamRequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + } + + /** + * Marshals the request header in GIOP 1.1 version. + */ + + protected void insertRequestHeader1_1(StreamRequestImpl request, IOR ior) + { + // service context + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // request_id + + m_message_buffer_out.write_ulong(m_request_id.value()); + + // with response ? + + m_message_buffer_out.write_boolean(request.withResponse()); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // object key + + ior.getObjectKey().write(m_message_buffer_out); + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // principal: not implemented + + m_message_buffer_out.write_string(""); + + } + + protected void insertRequestHeader1_2(StreamRequestImpl request, IOR ior, + AddressingDisposition disposition) + { + + // request_id marshaled in father create_message_buffer_out + + // message_buffer_out.write_ulong(request.get_id().value()); + + // with response ? + + byte response_octet; + + if (request.withResponse()) + response_octet = (byte) 0x03; // Fix to bug #545 (changed from 0x01) + else + response_octet = (byte) 0x00; + + m_message_buffer_out.write_octet(response_octet); + + // reserved[3] + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + m_message_buffer_out.write_octet((byte) 0); + + // target object + + switch (disposition.value()) + { + case AddressingDisposition._KeyAddr: + ior.toObjectKeyAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ProfileAddr: + ior.toProfileAddress().write(m_message_buffer_out); + break; + case AddressingDisposition._ReferenceAddr: + ior.toIORAddress().write(m_message_buffer_out); + } + + // operation name + + m_message_buffer_out.write_string(request.operation()); + + // service context list + + ServiceContextList.write(m_service_context_list, m_message_buffer_out); + + // parameters aligment for GIOPVersion 1.2 + + m_message_buffer_out.fixNextAlignedPosition(CDR.LONGLONG_SIZE); + + } + + /** + * Unmarshals the request header in GIOP 1.0 version. + */ + + protected ServerRequestImpl extractRequest1_0() + { + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // with response ? + + boolean with_response = m_message_buffer_in.read_boolean(); + + // object key + + TargetAddress target = new TargetAddress(); + + ObjectKey key = new ObjectKey(); + + key.read(m_message_buffer_in); + + target.setObjectKey(key); + + // operation name + + String operation = m_message_buffer_in.read_string(); + +// principal: not implemented + + int principal_length = m_message_buffer_in.read_ulong(); + + if(principal_length > 0) { + m_message_buffer_in.skip(principal_length); + } + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_0, + m_request_id, + operation, + m_message_buffer_in, + target); + + request.withResponse(with_response); + + return request; + } + + /** + * Unmarshals the request header in GIOP 1.1 version. + */ + + protected ServerRequestImpl extractRequest1_1() + { + + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + // request_id + + m_request_id = new RequestId(m_message_buffer_in.read_ulong()); + + // with response ? + + boolean with_response = m_message_buffer_in.read_boolean(); + + // reserved octets + + m_message_buffer_in.skipOctetArray(3); + + // object key + + TargetAddress target = new TargetAddress(); + + ObjectKey key = new ObjectKey(); + + key.read(m_message_buffer_in); + + target.setObjectKey(key); + + // operation name + + String operation = m_message_buffer_in.read_string(); + + // principal: not implemented + + int principal_length = m_message_buffer_in.read_ulong(); + + if(principal_length > 0) { + m_message_buffer_in.skip(principal_length); + } + + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_1, + m_request_id, + operation, + m_message_buffer_in, + target); + + request.withResponse(with_response); + + return request; + } + + /** + * Unmarshals the request in GIOP 1.2 version. + */ + + protected ServerRequestImpl extractRequest1_2() + { + // request_id extracted in father receive_message_buffer + + // request_id = new RequestId(message_buffer_in.read_ulong()); + + // with response ? + + byte response_octet = m_message_buffer_in.read_octet(); + + boolean with_response = (response_octet & 0x01) != 0; + + // reserved octets + + m_message_buffer_in.skipOctetArray(3); + + // object key + + TargetAddress target = new TargetAddress(); + + target.read(m_message_buffer_in); + + // operation name + + String operation = m_message_buffer_in.read_string(); + + // service_context_list + + m_service_context_list = ServiceContextList.read(m_message_buffer_in); + + try { + m_message_buffer_in.goNextAlignedPosition(CDR.LONGLONG_SIZE); + } + catch (org.omg.CORBA.MARSHAL M) {} + + m_message_buffer_in.fixStarting(); + + ServerRequestImpl request = new ServerRequestImpl(GIOPVersion.VERSION_1_2, + m_request_id, + operation, + m_message_buffer_in, + target); + request.set_compressor(this.get_compressor()); + request.withResponse(with_response); + + return request; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/GIOPVersion.java b/source/es/tid/TIDorbj/core/comm/giop/GIOPVersion.java new file mode 100644 index 0000000..34c0849 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/GIOPVersion.java @@ -0,0 +1,171 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import java.util.HashMap; + +/** + * GIOPVersion structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: GIOPVersion == GIOPVersion?? +public class GIOPVersion +{ + public int major; + + public int minor; + + private GIOPVersion(int maj, int min) + { + major = maj; + minor = min; + } + + public int getMajor() + { + return major; + } + + public int getMinor() + { + return minor; + } + + public boolean equal(GIOPVersion ver) + { + return (major == ver.major) && (minor == ver.minor); + } + + private static HashMap versionMap; + public static GIOPVersion fromString( String version ){ + //jprojas: hehehe + synchronized( GIOPVersion.class ){ + if ( versionMap == null ){ + versionMap = new HashMap( 3, 1 ); + versionMap.put( "1.0", VERSION_1_0 ); + versionMap.put( "1.1", VERSION_1_1 ); + versionMap.put( "1.2", VERSION_1_2 ); + } + } + //Hope casting doesn't cost too much + return (GIOPVersion)versionMap.get( version ); + + /* + GIOPVersion iiopVersion; + StringTokenizer st = new StringTokenizer( version, ".", false ); + if ( st.countTokens() == 2 ){ + try { + int major = Integer.parseInt( st.nextToken() ); + int minor = Integer.parseInt( st.nextToken() ); + iiopVersion = fromInts( major, minor ); + } catch ( NumberFormatException nfe ){ + //Nothing can be done + iiopVersion = null; + } + } else { + iiopVersion = null; + } + return iiopVersion; + */ + } + + public static GIOPVersion fromInts(int major, int minor) + { + if (major != 1) + return null; + if (minor == 0) + return VERSION_1_0; + if (minor == 1) + return VERSION_1_1; + if (minor == 2) + return VERSION_1_2; + return null; + } + + public static GIOPVersion read(org.omg.CORBA.portable.InputStream input) + { + int major = input.read_octet(); + int minor = input.read_octet(); + if (major != 1) + return null; + if (minor == 0) + return VERSION_1_0; + if (minor == 1) + return VERSION_1_1; + if (minor == 2) + return VERSION_1_2; + return null; + } + + public void write(org.omg.CORBA.portable.OutputStream output) + { + output.write_octet((byte) major); + output.write_octet((byte) minor); + } + + public String toString() + { + if (minor == 0) + return VERSION_1_0_NAME; + if (minor == 1) + return VERSION_1_1_NAME; + else + return VERSION_1_2_NAME; + } + + public final static GIOPVersion VERSION_1_0 = new GIOPVersion(1, 0); + + public final static String VERSION_1_0_NAME = "GIOPVersion(1.0)"; + + public final static GIOPVersion VERSION_1_1 = new GIOPVersion(1, 1); + + public final static String VERSION_1_1_NAME = "GIOPVersion(1.1)"; + + public final static GIOPVersion VERSION_1_2 = new GIOPVersion(1, 2); + + public final static String VERSION_1_2_NAME = "GIOPVersion(1.2)"; + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.java b/source/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.java new file mode 100644 index 0000000..cbdfb1d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/InvocationPoliciesContext.java @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + + +import org.omg.IOP.INVOCATION_POLICIES; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +public class InvocationPoliciesContext extends ServiceContext +{ + + public PolicyContext m_policies; + + protected InvocationPoliciesContext() + { + super(INVOCATION_POLICIES.value); + m_policies = null; + + } + + public PolicyContext getPolicies() + { + return m_policies; + } + + public InvocationPoliciesContext(PolicyContext policies) + { + super(INVOCATION_POLICIES.value); + this.m_policies = policies ; + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_policies = new PolicyContext(null); + + input.enterEncapsulation(); + + m_policies.partialRead(input); + + input.exitEncapsulation(); + + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + + output.write_ulong(m_context_id); + + output.enterEncapsulation(); + + if(m_policies == null) { + output.write_ulong(0); + } else { + m_policies.write(output); + } + + output.exitEncapsulation(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.java b/source/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.java new file mode 100644 index 0000000..6db4266 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/LocateReplyStatusType.java @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; + +/** + * LocateReplyStatusType enumeration defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class LocateReplyStatusType +{ + + public int m_value; + + private LocateReplyStatusType(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public static LocateReplyStatusType from_int(int type) + { + switch (type) + { + case _UNKNOWN_OBJECT: + return UNKNOWN_OBJECT; + case _OBJECT_HERE: + return OBJECT_HERE; + case _OBJECT_FORWARD: + return OBJECT_FORWARD; + case _OBJECT_FORWARD_PERM: + return OBJECT_FORWARD_PERM; + case _LOC_SYSTEM_EXCEPTION: + return LOC_SYSTEM_EXCEPTION; + case _LOC_NEEDS_ADDRESSING_MODE: + return LOC_NEEDS_ADDRESSING_MODE; + default: + return null; + } + } + + public String toString() + { + switch (m_value) + { + case _UNKNOWN_OBJECT: + return "LocateReplyStatusType: UNKNOWN_OBJECT"; + case _OBJECT_HERE: + return "LocateReplyStatusType: OBJECT_HERE"; + case _OBJECT_FORWARD: + return "LocateReplyStatusType: OBJECT_FORWARD"; + case _OBJECT_FORWARD_PERM: + return "LocateReplyStatusType: OBJECT_FORWARD_PERM"; + case _LOC_SYSTEM_EXCEPTION: + return "LocateReplyStatusType: LOC_SYSTEM_EXCEPTION"; + case _LOC_NEEDS_ADDRESSING_MODE: + return "LocateReplyStatusType: LOC_NEEDS_ADDRESSING_MODE"; + default: + return ""; + } + } + + public static final int _UNKNOWN_OBJECT = 0; + + public static final LocateReplyStatusType UNKNOWN_OBJECT = + new LocateReplyStatusType(_UNKNOWN_OBJECT); + + public static final int _OBJECT_HERE = 1; + + public static final LocateReplyStatusType OBJECT_HERE = + new LocateReplyStatusType(_OBJECT_HERE); + + public static final int _OBJECT_FORWARD = 2; + + public static final LocateReplyStatusType OBJECT_FORWARD = + new LocateReplyStatusType(_OBJECT_FORWARD); + + public static final int _OBJECT_FORWARD_PERM = 3; + + public static final LocateReplyStatusType OBJECT_FORWARD_PERM = + new LocateReplyStatusType(_OBJECT_FORWARD_PERM); + + public static final int _LOC_SYSTEM_EXCEPTION = 4; + + public static final LocateReplyStatusType LOC_SYSTEM_EXCEPTION = + new LocateReplyStatusType(_LOC_SYSTEM_EXCEPTION); + + public static final int _LOC_NEEDS_ADDRESSING_MODE = 5; + + public static final LocateReplyStatusType LOC_NEEDS_ADDRESSING_MODE = + new LocateReplyStatusType(_LOC_NEEDS_ADDRESSING_MODE); + + public AddressingDisposition + extractAddressingDisposition(GIOPLocateReplyMessage reply_message) + { + if (value() != LocateReplyStatusType._LOC_NEEDS_ADDRESSING_MODE) + throw new + INTERNAL("Unexpected extract_arguments, NEEDS_ADDRESSING_MODE " + + "is not the reply status"); + + short value = reply_message.m_message_buffer_in.read_ushort(); + AddressingDisposition disposition = + AddressingDisposition.from_short(value); + if (disposition == null) + throw new MARSHAL("Invalid AddressingDisposition value."); + return disposition; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/MessageFactory.java b/source/es/tid/TIDorbj/core/comm/giop/MessageFactory.java new file mode 100644 index 0000000..ff4bbce --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/MessageFactory.java @@ -0,0 +1,79 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * Factory to create GIOP Messages taking a GIOP Header. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class MessageFactory +{ + + public static GIOPMessage fromHeader(GIOPHeader header) + { + switch (header.getMsgType().m_value) + { + case MsgType._Request: + return new GIOPRequestMessage(header); + case MsgType._Reply: + return new GIOPReplyMessage(header); + case MsgType._CancelRequest: + return new GIOPCancelRequestMessage(header); + case MsgType._LocateRequest: + return new GIOPLocateRequestMessage(header); + case MsgType._LocateReply: + return new GIOPLocateReplyMessage(header); + case MsgType._CloseConnection: + return new GIOPMessage(header); + case MsgType._MessageError: + return new GIOPMessage(header); + case MsgType._Fragment: + return new GIOPFragmentMessage(header); + default: + return null; // unreachable + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/MsgType.java b/source/es/tid/TIDorbj/core/comm/giop/MsgType.java new file mode 100644 index 0000000..95a464b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/MsgType.java @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * MsgType structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class MsgType +{ + + public int m_value; + + private MsgType(int val) + { + m_value = val; + } + + public static MsgType from_int(int type) + { + switch (type) + { + case _Request: + return Request; + case _Reply: + return Reply; + case _CancelRequest: + return CancelRequest; + case _LocateRequest: + return LocateRequest; + case _LocateReply: + return LocateReply; + case _CloseConnection: + return CloseConnection; + case _MessageError: + return MessageError; + case _Fragment: + return Fragment; + default: + return null; + } + } + + public static String msgName(int type) + { + switch (type) + { + case _Request: + return "Request"; + case _Reply: + return "Reply"; + case _CancelRequest: + return "CancelRequest"; + case _LocateRequest: + return "LocateRequest"; + case _LocateReply: + return "LocateReply"; + case _CloseConnection: + return "CloseConnection"; + case _MessageError: + return "MessageError"; + case _Fragment: + return "Fragment"; + default: + return null; + } + } + + public static final int _Request = 0; + + public static final MsgType Request = new MsgType(_Request); + + public static final int _Reply = 1; + + public static final MsgType Reply = new MsgType(_Reply); + + public static final int _CancelRequest = 2; + + public static final MsgType CancelRequest = new MsgType(_CancelRequest); + + public static final int _LocateRequest = 3; + + public static final MsgType LocateRequest = new MsgType(_LocateRequest); + + public static final int _LocateReply = 4; + + public static final MsgType LocateReply = new MsgType(_LocateReply); + + public static final int _CloseConnection = 5; + + public static final MsgType CloseConnection = new MsgType(_CloseConnection); + + public static final int _MessageError = 6; + + public static final MsgType MessageError = new MsgType(_MessageError); + + public static final int _Fragment = 7; + + public static final MsgType Fragment = new MsgType(_Fragment); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.java b/source/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.java new file mode 100644 index 0000000..42d3d92 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ReplyStatusType.java @@ -0,0 +1,136 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ReplyStatusType class defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ReplyStatusType +{ + + public int m_value; + + private ReplyStatusType(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public static ReplyStatusType from_int(int type) + { + switch (type) + { + case _NO_EXCEPTION: + return NO_EXCEPTION; + case _USER_EXCEPTION: + return USER_EXCEPTION; + case _SYSTEM_EXCEPTION: + return SYSTEM_EXCEPTION; + case _LOCATION_FORWARD: + return LOCATION_FORWARD; + case _LOCATION_FORWARD_PERM: + return LOCATION_FORWARD_PERM; + case _NEEDS_ADDRESSING_MODE: + return NEEDS_ADDRESSING_MODE; + default: + return null; + } + } + + public String toString() + { + switch (m_value) + { + case _NO_EXCEPTION: + return "ReplyStatusType: NO_EXCEPTION"; + case _USER_EXCEPTION: + return "ReplyStatusType:USER_EXCEPTION"; + case _SYSTEM_EXCEPTION: + return "ReplyStatusType:SYSTEM_EXCEPTION"; + case _LOCATION_FORWARD: + return "ReplyStatusType:LOCATION_FORWARD"; + case _LOCATION_FORWARD_PERM: + return "ReplyStatusType:LOCATION_FORWARD_PERM"; + case _NEEDS_ADDRESSING_MODE: + return "ReplyStatusType:NEEDS_ADDRESSING_MODE"; + } + return ""; + } + + public static final int _NO_EXCEPTION = 0; + + public static final ReplyStatusType NO_EXCEPTION = + new ReplyStatusType(_NO_EXCEPTION); + + public static final int _USER_EXCEPTION = 1; + + public static final ReplyStatusType USER_EXCEPTION = + new ReplyStatusType(_USER_EXCEPTION); + + public static final int _SYSTEM_EXCEPTION = 2; + + public static final ReplyStatusType SYSTEM_EXCEPTION = + new ReplyStatusType(_SYSTEM_EXCEPTION); + + public static final int _LOCATION_FORWARD = 3; + + public static final ReplyStatusType LOCATION_FORWARD = + new ReplyStatusType(_LOCATION_FORWARD); + + public static final int _LOCATION_FORWARD_PERM = 4; + + public static final ReplyStatusType LOCATION_FORWARD_PERM = + new ReplyStatusType(_LOCATION_FORWARD_PERM); + + public static final int _NEEDS_ADDRESSING_MODE = 5; + + public static final ReplyStatusType NEEDS_ADDRESSING_MODE = + new ReplyStatusType(_NEEDS_ADDRESSING_MODE); +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/RequestId.java b/source/es/tid/TIDorbj/core/comm/giop/RequestId.java new file mode 100644 index 0000000..f355831 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/RequestId.java @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * RequestId defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class RequestId +{ + protected int m_value; + + public RequestId(int val) + { + m_value = val; + } + + public int value() + { + return m_value; + } + + public int hashCode() + { + return m_value; + } + + public boolean equals(Object obj) + { + if (obj instanceof RequestId) + return m_value == ((RequestId) obj).m_value; + + return false; + + } + + public String toString() + { + return "RequestId: " + m_value; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ServiceContext.java b/source/es/tid/TIDorbj/core/comm/giop/ServiceContext.java new file mode 100644 index 0000000..14f5ca7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ServiceContext.java @@ -0,0 +1,94 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ServiceContext structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContext +{ + + public int m_context_id; + + public es.tid.TIDorbj.core.cdr.Encapsulation m_context_data; + + public ServiceContext(int context_id) + { + this.m_context_id = context_id; + m_context_data = null; + } + + public ServiceContext(int context_id, + es.tid.TIDorbj.core.cdr.Encapsulation context_data) + { + this.m_context_id = context_id; + this.m_context_data = context_data; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_context_id); + output.writeEncapsulation(m_context_data); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_context_data = input.readEncapsulation(); + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUlong(); // skip context_id + input.skipEncapsulation(); + } + + public static void partialSkip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + //skip encapusulation + input.skipEncapsulation(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ServiceContextList.java b/source/es/tid/TIDorbj/core/comm/giop/ServiceContextList.java new file mode 100644 index 0000000..382e4cc --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ServiceContextList.java @@ -0,0 +1,98 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * ServiceContextList sequence defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContextList +{ + + public ServiceContext[] m_components; + + public ServiceContextList(int count) + { + m_components = new ServiceContext[count]; + } + + public static ServiceContextList + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int count = input.read_ulong(); + + if (count == 0) + return null; + + if (count < 0) + throw new org.omg.CORBA.MARSHAL("Invalid ServiceContext size"); + + ServiceContextList list = new ServiceContextList(count); + + for (int i = 0; i < count; i++) + list.m_components[i] = ServiceContextReader.read(input); + + return list; + } + + public static void write(ServiceContextList list, + es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (list == null) + output.write_ulong(0); + else { + output.write_ulong(list.m_components.length); + for (int i = 0; i < list.m_components.length; i++) + list.m_components[i].write(output); + } + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int count = input.read_ulong(); + for (int i = 0; i < count; i++) + ServiceContext.skip(input); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.java b/source/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.java new file mode 100644 index 0000000..5d25536 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ServiceContextReader.java @@ -0,0 +1,79 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +import org.omg.IOP.INVOCATION_POLICIES; + + +/** + * Helper class for read ServiceContext structures. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ServiceContextReader +{ + + public static ServiceContext + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int id = input.read_ulong(); + ServiceContext serv_ctx = null; + switch (id) + { + // Standart CORBA Service Contexts + case org.omg.IOP.BI_DIR_IIOP.value: + serv_ctx = new BiDirServiceContext(); + serv_ctx.partialRead(input); + return serv_ctx; + case INVOCATION_POLICIES.value: + serv_ctx = new InvocationPoliciesContext(); + serv_ctx.partialRead(input); + return serv_ctx; + default: + serv_ctx = new ServiceContext(id); + serv_ctx.partialRead(input); + return serv_ctx; + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ServiceId.java b/source/es/tid/TIDorbj/core/comm/giop/ServiceId.java new file mode 100644 index 0000000..51b409d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ServiceId.java @@ -0,0 +1,72 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; + +/** + * Constant values related with ServiceId GIOP definitions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public interface ServiceId +{ + public static final int TransactionService = 0; + + public static final int CodeSets = 1; + + public static final int ChainBypassCheck = 2; + + public static final int ChainBypassInfo = 3; + + public static final int LogicalThreadId = 4; + + public static final int BI_DIR_IIOP = 5; + + public static final int SendingContextRunTime = 6; + + public static final int INVOCATION_POLICIES = 7; + + public static final int FORWARDED_ENTITY = 8; + + public static final int UnkownExceptionInfo = 9; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.java b/source/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.java new file mode 100644 index 0000000..1258ce1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/giop/ZIOPMessage.java @@ -0,0 +1,406 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.giop; // ziop?? + +import org.omg.CORBA.INTERNAL; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.Compressor; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; + +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; + +import org.omg.CORBA.COMM_FAILURE; + +public class ZIOPMessage + extends GIOPMessage +{ + BufferCDR m_original_message_buffer; + + CDRInputStream m_message_buffer_in; + + CDROutputStream m_message_buffer_out; + + int m_fragment_size; + + int m_original_length; + + public ZIOPMessage(GIOPMessage giop_message, int fragment_size) + { + super(giop_message.getHeader()); + m_original_message_buffer = giop_message.getMessageBuffer(); + m_message_buffer_in = null; + m_message_buffer_out = null; + m_fragment_size = fragment_size; + } + + public ZIOPMessage(GIOPHeader header, int fragment_size) + { + super(header); + m_original_message_buffer = null; + m_message_buffer_in = null; + m_message_buffer_out = null; + m_fragment_size = fragment_size; + } + + + public void receiveBody(Connection conn, + byte[] header_bytes) + { + super.receiveBody(conn, header_bytes); + + m_message_buffer_in = new CDRInputStream(conn.orb(), m_message_buffer); + m_message_buffer_in.setByteOrder(m_header.getByteOrder()); + + m_message_buffer_in.setVersion(m_header.getVersion()); + m_message_buffer_in.setMessage(true); + + m_message_completed = !(m_header.hasMoreFragments()); + + byte[] compressed = new byte[0]; + int compressed_length; + compressed_length = m_header.getSize() - 8; // CompressionData without data buffer + compressed = new byte[compressed_length]; + + // Read CompressionData + int original_length; + m_compressor.compressor_id = m_message_buffer_in.read_ushort(); + original_length = m_message_buffer_in.read_ulong(); + m_message_buffer_in.read_octet_array(compressed, 0, compressed_length); + + Compressor compressor_ptr = null; + try { + compressor_ptr = + conn.orb().getCompressionManager().get_compressor(m_compressor.compressor_id, + (short)0); + } catch (org.omg.Compression.UnknownCompressorId ex) { + return; + } + + org.omg.CORBA.OctetSeqHolder uncompressed = new org.omg.CORBA.OctetSeqHolder(); + + try { + compressor_ptr.decompress(compressed, uncompressed); + } catch (org.omg.Compression.CompressionException ex) { + return; + } + + if (conn.orb().m_trace != null) { + String[] msg = { + "Uncompressing ZIOP message ", + " from " + compressed.length + " bytes ", + " to " + uncompressed.value.length + " bytes ", + "using compressor " + m_compressor.compressor_id }; + conn.orb().printTrace(Trace.USER, msg); + } + + + // From uncompressed to CDRInputStream + ChunkCDR chunk = + new ChunkCDR(uncompressed.value.length); + + System.arraycopy(uncompressed.value, 0, chunk.getBuffer(), 0, uncompressed.value.length); + + chunk.setAvailable(uncompressed.value.length); + m_original_message_buffer = new BufferCDR(chunk); + + } + + public int get_fragment_size(TIDORB orb) + { + return m_fragment_size; + } + + public boolean perform_compression(TIDORB orb, + CompressorIdLevel compressor, + int low_value, + float min_ratio) + { + this.createMessageBufferOutput(orb); + + this.getHeader().setCompressed(true); + + + Compressor compressor_ptr = null; + try { + compressor_ptr = + orb.getCompressionManager().get_compressor(compressor.compressor_id, + compressor.compression_level); + } catch (org.omg.Compression.UnknownCompressorId ex) { + return false; + } + + + // Write 'body_buffer_out' bufferCDR into 'source' OctetSeq + byte[] source = new byte[0]; + int source_length = 0; + BufferCDR buffer = m_original_message_buffer; + int num_chunks = buffer.getNumAvailableChunks(); + ChunkCDR chunk = null; + for(int i = 0; i < num_chunks; i++) { + chunk = buffer.getChunk(i); + int current_length = source_length; + source_length += chunk.getAvailable(); + byte[] aux_buffer = new byte[source_length]; + if (source_length > 0) + System.arraycopy(source, 0, aux_buffer, 0, current_length); + System.arraycopy(chunk.getBuffer(), 0, aux_buffer, current_length, + chunk.getAvailable()); + source = aux_buffer; + } + + // Check (source_length > CompressorLowValue) to apply or not compression + if (source.length < low_value) { + return false; + } + + // Apply compression to source + org.omg.CORBA.OctetSeqHolder compressed = new org.omg.CORBA.OctetSeqHolder(); + try { + compressor_ptr.compress(source, compressed); + } catch (org.omg.Compression.CompressionException ex) { + return false; + } + + // Write compressed OctetSeq into message_buffer_out + m_message_buffer_out.write_ushort(compressor.compressor_id); + m_message_buffer_out.write_ulong(source.length); + + // Check min ratio + float ratio = ((float)1 - ((float)compressed.value.length / (float)source.length)); + if ( ratio < min_ratio ) { + return false; + } + + m_message_buffer_out.write_octet_array(compressed.value, 0 , compressed.value.length); + + m_message_completed = true; + + if (orb.m_trace != null) { + String[] msg = { + "Compressing GIOP message ", + "from " + source.length + " bytes ", + "to " + compressed.value.length + " bytes ", + "using compressor " + compressor.compressor_id, + " with level " + compressor.compression_level, + " achieving ratio " + (ratio*100) + " %" + }; + orb.printTrace(Trace.USER, msg); + } + + m_header.setSize(m_message_buffer.getAvailable() - + GIOPHeader.HEADER_SIZE); + m_headers_marshaled = false; + + return true; + } + + public void connect_GIOPMessage(Connection conn) + { + TIDORB _orb = conn.orb(); + + switch (m_header.getMsgType().m_value) + { + case MsgType._Request: + { + GIOPRequestMessage message = new GIOPRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + message.set_compressor(m_compressor); + + if (_orb.m_trace != null){ + _orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + _orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + _orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + conn.manageMessage((GIOPRequestMessage) message); + break; + } + case MsgType._Reply: + { + GIOPReplyMessage message = new GIOPReplyMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + // Skip GIOP Reply header + switch (m_header.getVersion().getMinor()) { + case 0: + case 1: + message.unmarshalReplyHeader1_1(); + break; + case 2: + message.unmarshalReplyHeader1_2(); + break; + } + + if (_orb.m_trace != null){ + _orb.printTrace(Trace.DUMP, "GIOP message chunk received - HEXDUMP " + + message.getMessageBuffer().getChunk(0).getLength() + + " bytes"); + _orb.printDump(Trace.DUMP, + message.getMessageBuffer().getChunk(0).getBuffer(), + message.getMessageBuffer().getChunk(0).getLength()); + + _orb.printTrace(Trace.DEEP_DEBUG, toString() + ": " + + message.toString() + + " has been received!"); + } + + conn.manageMessage((GIOPReplyMessage) message); + break; + } + case MsgType._CancelRequest: + { + GIOPCancelRequestMessage message = new GIOPCancelRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer); + + conn.manageMessage((GIOPCancelRequestMessage) message); + break; + } + case MsgType._LocateRequest: + { + GIOPLocateRequestMessage message = new GIOPLocateRequestMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + conn.manageMessage((GIOPLocateRequestMessage) message); + break; + } + case MsgType._LocateReply: + { + GIOPLocateReplyMessage message = new GIOPLocateReplyMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer, original_buffer_in); + + conn.manageMessage((GIOPLocateReplyMessage) message); + break; + } + case MsgType._Fragment: + { + GIOPFragmentMessage message = new GIOPFragmentMessage(m_header); + + CDRInputStream original_buffer_in = + new CDRInputStream(_orb, m_original_message_buffer); + + original_buffer_in.fixStarting(); + + message.setBody(m_original_message_buffer); + + conn.manageMessage((GIOPFragmentMessage) message); + break; + } + case MsgType._CloseConnection: + conn.closeByPair(); + return; + case MsgType._MessageError: + conn.closeByError(new COMM_FAILURE("Connection closed due to pair " + + "message error.")); + return; + } + + } + + public void createMessageBufferOutput(TIDORB orb) + { + if (m_message_buffer == null) + m_message_buffer = new BufferCDR( this.get_fragment_size(orb) ); + else + m_message_buffer.recycle(); + + m_message_buffer_out = new CDROutputStream(orb, m_message_buffer); + + m_message_buffer_out.setVersion(m_header.getVersion()); + + m_message_buffer_out.setMessage(true); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/all-wcprops b/source/es/tid/TIDorbj/core/comm/iiop/.svn/all-wcprops new file mode 100644 index 0000000..a09957e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/all-wcprops @@ -0,0 +1,173 @@ +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop +END +LockEnumeration.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.java +END +ConnectionState.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ConnectionState.java +END +WriteTimeout.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.java +END +CommunicationLayer.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.java +END +IIOPCorbaloc.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.java +END +IIOPLocateResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.java +END +OpeningLock.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/OpeningLock.java +END +ListenPoint.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ListenPoint.java +END +IIOPCommLayer.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.java +END +IORAddressingInfo.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.java +END +IIOPIOR.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.java +END +IIOPConnectionManager.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.java +END +RECOVERABLE_COMM_FAILURE.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.java +END +IIOPCommunicationLayerPropertiesInfo.java +K 25 +svn:wc:ra_dav:version-url +V 126 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.java +END +ServerListener.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ServerListener.java +END +IIOPResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.java +END +FragmentedMessageHolder.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.java +END +IIOPConnection.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.java +END +IIOPProfile.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.java +END +IIOPCommunicationDelegate.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.java +END +ConnectionWriteMonitor.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.java +END +IIOPCommunicationLayer.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.java +END +LockList.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/LockList.java +END +ConnectionThread.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.java +END +CommLayer.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/CommLayer.java +END +Lock.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/Lock.java +END +ReliableOnewayThread.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.java +END +TargetAddress.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop/TargetAddress.java +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/entries b/source/es/tid/TIDorbj/core/comm/iiop/.svn/entries new file mode 100644 index 0000000..64a5185 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/entries @@ -0,0 +1,980 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/iiop +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +LockEnumeration.java +file +478 + + + +2011-04-29T14:42:47.000000Z +3a3f9c239b26a01f7fc1e9f47e67797f +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +1940 + +ConnectionState.java +file +478 + + + +2011-04-29T14:42:47.000000Z +dceff37941da545fb94f3c450c6a9986 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +4098 + +WriteTimeout.java +file +478 + + + +2011-04-29T14:42:47.000000Z +48fdedc3a1358de7ddf5b86dd30ca08a +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +1634 + +CommunicationLayer.java +file + + + + +2009-05-27T12:24:01.000000Z +6abf02afc3dce68fb3c80575dfc9e0c2 +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +3628 + +IIOPLocateResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +f6ec949aadf4ab364db530db7f3005e3 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5663 + +IIOPCorbaloc.java +file +478 + + + +2011-04-29T14:42:47.000000Z +de288cdc74a1a401767c9b1aea39ae23 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +5900 + +ListenPoint.java +file +478 + + + +2011-04-29T14:42:47.000000Z +f2dd92ebac541d92bf134869984918e9 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3152 + +OpeningLock.java +file +478 + + + +2011-04-29T14:42:47.000000Z +8d8eb5043cb8f25ecba00a096bc9c468 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3139 + +IIOPCommLayer.java +file +478 + + + +2011-04-29T14:42:47.000000Z +1ed06620182514151bd6195a56c7eedd +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +33021 + +IORAddressingInfo.java +file + + + + +2009-05-27T12:24:01.000000Z +933116c93794559641ee44929db94a79 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2984 + +IIOPIOR.java +file +478 + + + +2011-04-29T14:42:47.000000Z +3bebf720a082b9a69e9c7acbfc45c6ac +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +7087 + +IIOPConnectionManager.java +file +478 + + + +2011-04-29T14:42:47.000000Z +f96a8713fe222b70a82927e93a7c72e6 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +23485 + +RECOVERABLE_COMM_FAILURE.java +file + + + + +2009-05-27T12:24:01.000000Z +3a03be5f197268cbf9989c42b171a829 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1976 + +IIOPCommunicationLayerPropertiesInfo.java +file + + + + +2010-04-28T10:47:58.000000Z +eadb01d840351bdb6c82f0adacbcb50c +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +16122 + +ServerListener.java +file + + + + +2011-03-25T16:13:23.000000Z +c82e32836512dcc3845e3b5384715163 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +12763 + +IIOPResponseHandler.java +file + + + + +2009-05-27T14:10:34.000000Z +bfba1cddb455f7fa98a32b502578298c +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +5911 + +FragmentedMessageHolder.java +file + + + + +2009-05-27T12:24:01.000000Z +d2ee7b3d3a29afd667c9c0a1b64434ae +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2245 + +IIOPConnection.java +file +478 + + + +2011-04-29T14:42:47.000000Z +eedc2f6717ad25fc758f75fa424b8d92 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +16344 + +IIOPCommunicationDelegate.java +file + + + + +2010-04-28T10:50:46.000000Z +66bd971a5ab3f1968d28de900841cbe5 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +11255 + +IIOPProfile.java +file +478 + + + +2011-04-29T14:42:47.000000Z +24c3d0e1b32d37c31cffbb4a383f714c +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +12024 + +ConnectionWriteMonitor.java +file +478 + + + +2011-04-29T14:42:47.000000Z +cb16790466e88de016ce91ba4ac1048f +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2869 + +IIOPCommunicationLayer.java +file +478 + + + +2011-04-29T14:42:47.000000Z +889f9c135c15f502e479ab05e6934918 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +11236 + +LockList.java +file +478 + + + +2011-04-29T14:42:47.000000Z +74b33d894a278ee9885982cc84f13e22 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2235 + +ConnectionThread.java +file +478 + + + +2011-04-29T14:42:47.000000Z +f59a5fddaed526f0f3721e693b274f15 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2063 + +CommLayer.java +file +478 + + + +2011-04-29T14:42:47.000000Z +55b47af9dbf225aafd258eeab5845e4c +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +6964 + +Lock.java +file +478 + + + +2011-04-29T14:42:47.000000Z +1da05f7aced2824e4bb95842bd3f216a +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3427 + +ReliableOnewayThread.java +file +478 + + + +2011-04-29T14:42:47.000000Z +158a808cd942d8d78cecbfed685fa974 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2027 + +TargetAddress.java +file + + + + +2009-05-27T12:24:01.000000Z +467029c03ff7849d722c26b0f93de885 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5981 + diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommunicationLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/CommunicationLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionState.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionState.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionState.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionThread.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionThread.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionThread.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionWriteMonitor.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionWriteMonitor.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ConnectionWriteMonitor.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/FragmentedMessageHolder.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/FragmentedMessageHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/FragmentedMessageHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationDelegate.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationDelegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationDelegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnection.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnection.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnection.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnectionManager.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnectionManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPConnectionManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCorbaloc.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCorbaloc.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPCorbaloc.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPIOR.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPIOR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPIOR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPLocateResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPProfile.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPProfile.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPProfile.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IIOPResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IORAddressingInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IORAddressingInfo.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/IORAddressingInfo.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ListenPoint.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ListenPoint.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ListenPoint.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/Lock.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/Lock.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/Lock.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockEnumeration.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockEnumeration.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockEnumeration.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockList.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/LockList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/OpeningLock.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/OpeningLock.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/OpeningLock.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/RECOVERABLE_COMM_FAILURE.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/RECOVERABLE_COMM_FAILURE.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/RECOVERABLE_COMM_FAILURE.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ReliableOnewayThread.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ReliableOnewayThread.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ReliableOnewayThread.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ServerListener.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ServerListener.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/ServerListener.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/TargetAddress.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/TargetAddress.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/TargetAddress.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/WriteTimeout.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/WriteTimeout.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/prop-base/WriteTimeout.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommLayer.java.svn-base new file mode 100644 index 0000000..c80d707 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommLayer.java.svn-base @@ -0,0 +1,248 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.comm.local.LocalCommLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommLayer; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Communication Layer. It will manage requests, dispatching these to the local + * or the internet communication layers. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @see es.tid.TIDorbj.core.comm.local.LocalCommLayer + * @see es.tid.TIDorbj.core.comm.iiopCommLayer + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +// TODO: move comm.iiop.CommLayer to comm.CommLayer + +public class CommLayer extends CommunicationLayer +{ + /** + * the internet layer for sending remote request + */ + IIOPCommLayer m_external_layer; + + /** + * the local layer for sending request to local objects. + */ + es.tid.TIDorbj.core.comm.local.LocalCommLayer m_internal_layer; + + public CommLayer(es.tid.TIDorbj.core.TIDORB orb) + { + super(orb); + + if ( orb.m_conf.comm_layers.indexOf("es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer" ) > -1 ) { + m_external_layer = new SSLIOPCommLayer(orb); + } else { + m_external_layer = new IIOPCommLayer(orb); + } + + m_internal_layer = new LocalCommLayer(orb); + } + + /** + * Sends a request. + * + * @param request + * the CORBA request. + */ + public void request( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + // check policy context + + try { + + if (isLocal(ior)) { + // si es local + m_internal_layer.request(request, ior); + } else { + m_external_layer.request(request, ior); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Sends a oneway request. + * + * @param request + * the CORBA request. + */ + public void onewayRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + try { + if (isLocal(ior)) { + // si es local + m_internal_layer.onewayRequest(request, ior); + } else { + m_external_layer.onewayRequest(request, ior); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + // AMI callback operations + + /** + * Sends a asynchronous request. + * + * @param request + * the CORBA request. + */ + public void asyncRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) //*opc1*, Object ami_handler) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + // check policy context + + try { + + if (isLocal(ior)) { + // si es local + m_internal_layer.asyncRequest(request, ior); //*opc1*, ami_handler); + } else { + m_external_layer.asyncRequest(request, ior); //*opc1*, ami_handler); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Sends a object existence request using the local or the IIOP + * communication layers. + * + * @param ior + * the object IOR. + */ + + public boolean objectExists( IIOPIOR ior, + PolicyContext policy_context) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + + try { + if (isLocal(ior)) { + return m_internal_layer.objectExists(ior, policy_context); + } else { + return m_external_layer.objectExists(ior, policy_context); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Test whether an ior is local to the ORB or not. + * + * @param ior + * the object IOR. + */ + public boolean isLocal( IIOPIOR ior) + { + return m_external_layer.isLocal(ior); + } + + public void shutdown() + { + m_external_layer.shutdown(); + } + + public void destroy() + { + m_external_layer.destroy(); + } + + public IIOPCommLayer getExternalLayer() + { + return m_external_layer; + } + + /** + * Prepare a stream based request. + * + * @param request + * the CORBA request. + */ + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + m_external_layer.prepareRequest(request); + } + + public org.omg.CORBA.portable.InputStream + request(IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + PolicyContext policy_context) + throws es.tid.TIDorbj.core.comm.ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException + { + return m_external_layer.request(ior, stream, policy_context); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommunicationLayer.java.svn-base new file mode 100644 index 0000000..ae82478 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/CommunicationLayer.java.svn-base @@ -0,0 +1,124 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.comm.ForwardRequest; + +/** + * Base class for the ORB communications layers. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class CommunicationLayer extends es.tid.TIDorbj.core.ORBComponent +{ + public CommunicationLayer(es.tid.TIDorbj.core.TIDORB orb) + { + super(orb); + } + + /** + * Sends a request. + * + * @param request + * the CORBA request. + */ + public abstract void request( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) + throws ForwardRequest; + + /** + * Sends a oneway request. + * + * @param request + * the CORBA request. + */ + public abstract void onewayRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior); + + /** + * Sends a asynchronous request. + * + * @param request + * the CORBA request. + */ + public abstract void asyncRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior /* *opc1* , Object ami_handler*/) throws ForwardRequest; + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + * + */ + public abstract boolean + objectExists( + IIOPIOR ior, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws ForwardRequest; + + /** + * Prepare a stream based request. + * + * @param request + * the CORBA request. + */ + public abstract void prepareRequest( + es.tid.TIDorbj.core.StreamRequestImpl request ); + + public abstract org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionState.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionState.java.svn-base new file mode 100644 index 0000000..0aa5f7b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionState.java.svn-base @@ -0,0 +1,163 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +/** + * TIDorb IIOP IIOPConnection State. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class ConnectionState +{ + + /** + * Open connection state. + */ + public final static short OPEN_STATE = 0; + + /** + * Open connection state. + */ + public final static short CLOSING_STATE = 1; + + /** + * Open connection state. + */ + public final static short ERROR_STATE = 2; + + /** + * IIOPConnection state. + */ + private short m_state; + + /** + * IIOPConnection error that unhabilitates the connection. + */ + protected COMM_FAILURE m_connection_error; + + public ConnectionState() + { + m_state = OPEN_STATE; + m_connection_error = null; + } + + synchronized public boolean setClosing() + { + if (m_state != OPEN_STATE) + return false; + + m_state = CLOSING_STATE; + + return true; + } + + synchronized public boolean isOpen() + { + return m_state == OPEN_STATE; + } + + synchronized public boolean seterror(COMM_FAILURE error) + { + if (m_state == ERROR_STATE) { + return false; + } else if (m_state == CLOSING_STATE) { + m_state = ERROR_STATE; + m_connection_error = error; + return false; + } else { // OPEN_STATE + m_state = ERROR_STATE; + m_connection_error = error; + return true; + } + } + + synchronized public short getValue() + { + return m_state; + } + + public COMM_FAILURE getError() + { + return m_connection_error; + } + + /** + * Verify if the reply can be sent. + */ + synchronized public void verifyForReply() + { + switch (m_state) + { + case OPEN_STATE: + return; + case CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection is closed."); + case ERROR_STATE: + throw m_connection_error; + } + } + + /** + * Verify if the request can be sent. + */ + synchronized public void verifyForRequest() + throws RECOVERABLE_COMM_FAILURE + { + switch (m_state) + { + case OPEN_STATE: + return; + case CLOSING_STATE: + throw new RECOVERABLE_COMM_FAILURE( + new COMM_FAILURE("IIOPConnection is closed.")); + case ERROR_STATE: + throw new RECOVERABLE_COMM_FAILURE(m_connection_error); + } + } + +} + diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionThread.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionThread.java.svn-base new file mode 100644 index 0000000..e7c104a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionThread.java.svn-base @@ -0,0 +1,70 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + + +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Thread that receives messages in the connection. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +// TODO: move comm.iiop.ConnectionThread to comm.ConnectionThread + +public class ConnectionThread extends java.lang.Thread +{ + Connection m_connection; + + public ConnectionThread(Connection conn) + { + m_connection = conn; + } + + public void run() + { + m_connection.receiveMessage(); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionWriteMonitor.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionWriteMonitor.java.svn-base new file mode 100644 index 0000000..b0e0321 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ConnectionWriteMonitor.java.svn-base @@ -0,0 +1,115 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision$ + * Date: $Date$ + * Last modified by: $Author$ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +public class ConnectionWriteMonitor +{ + final static int FREE = 0; + + final static int WRITTING = 1; + + final static int ERROR = 2; + + int m_status; + + int m_timeout; + + COMM_FAILURE m_exception; + + public ConnectionWriteMonitor(int timeout) + { + m_timeout = timeout; + m_status = FREE; + m_exception = null; + } + + public synchronized void initWrite() + throws WriteTimeout + { + long t0 = new java.util.Date().getTime();//msegs + long t1; + long dif = 0; + + while ( m_status==WRITTING && dif < m_timeout){ + try { + wait(m_timeout); + } + catch (java.lang.InterruptedException ie) {} + + t1 = new java.util.Date().getTime(); + dif = t1-t0; + } + + if (m_status == WRITTING) { + m_status = ERROR; + m_exception = new COMM_FAILURE("Socket write timeout"); + throw new WriteTimeout(); + } + + if (m_status == ERROR) + throw m_exception; + + if (m_status == FREE) + m_status = WRITTING; + } + + public synchronized void endWrite() + { + m_status = FREE; + notify(); + } + + public COMM_FAILURE getException() + { + return m_exception; + } + + public synchronized void setException(COMM_FAILURE cf) + { + m_exception = cf; + notifyAll(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/FragmentedMessageHolder.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/FragmentedMessageHolder.java.svn-base new file mode 100644 index 0000000..0777d6b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/FragmentedMessageHolder.java.svn-base @@ -0,0 +1,77 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.util.RemovableObject; + +/** + * Adapter class for maintaining an uncompleted fragmented message in a + * UseTable. + * + * @see es.tid.TIDorbj.core.util.UseTable + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class FragmentedMessageHolder + implements RemovableObject +{ + + public GIOPFragmentedMessage m_message; + + public FragmentedMessageHolder(GIOPFragmentedMessage msg) + { + m_message = msg; + } + + /** + * The message will always can be removed. + */ + public boolean canBeRemoved() + { + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommLayer.java.svn-base new file mode 100644 index 0000000..9b8075c --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommLayer.java.svn-base @@ -0,0 +1,1047 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESOURCES; +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * IIOP Communications layer. It will manage the request for a remote object + * using the IIOP Protocol. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IIOPCommLayer extends es.tid.TIDorbj.core.comm.iiop.CommunicationLayer +{ + /** + * The ORB has been destroyed. + */ + + public boolean m_destroyed; + + /** + * Server Socket listening thread. + */ + protected ServerListener m_server_listener; + + /** + * Conection manager. + */ + protected IIOPConnectionManager m_connection_manager; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + protected ServiceContextList m_bidirectional_service; + + protected int max_recover_count; + protected int recover_time; + protected boolean reliable_oneway; + protected GIOPVersion giopVersion; + + //TODO: remove ORB's from here if possible, and get CommunicationLayer + public IIOPCommLayer(TIDORB orb) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb); + m_destroyed = false; + m_connection_manager = new IIOPConnectionManager(orb, this); + m_bidirectional_service = null; + m_server_listener = null; + + max_recover_count = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.MAX_COMM_RECOVERING_TRIES + ).getInt(); + + recover_time = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.COMM_RECOVERING_TIME + ).getInt(); + + reliable_oneway = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY + ).getBoolean(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + } + + public IIOPCommLayer(TIDORB orb, SSLIOPCommLayer ssliop_layer) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb); + m_destroyed = false; + m_connection_manager = new IIOPConnectionManager(orb, ssliop_layer); + m_bidirectional_service = null; + m_server_listener = null; + + max_recover_count = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.MAX_COMM_RECOVERING_TRIES + ).getInt(); + + recover_time = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.COMM_RECOVERING_TIME + ).getInt(); + + reliable_oneway = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY + ).getBoolean(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + } + + public boolean isLocal( IIOPIOR ior) + { + if (m_server_listener == null) // no object adaptor initialized + return false; + + // Check matching between IOR ListenPoint and server_listener ListenPoints + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + int i = 0; + + while (i < listen_points.size() ) { + if ( ((ListenPoint)listen_points.elementAt(i)).equals(ior.profileIIOP() + .getListenPoint())) + return true; + i++; + } + return false; + } + + public boolean hasServerListener() + { + return (m_server_listener != null); + } + + /** + * Sends a request (with response) allocating an active connection with the + * corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + protected void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + PolicyContext policy_context = request.getPolicyContext(); + + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendRequest(request, ior); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * Sends a request using the IIOP protocol. + * + * @param request + * the CORBA request. + */ + public void request(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws ForwardRequest + { + request.withResponse(true); + sendRequest(request, ior); + } + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void onewayRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + if ( reliable_oneway ) { + try { + ReliableOnewayThread th = + new ReliableOnewayThread(this, request, ior); + th.start(); + return; + } + catch (Throwable thw) { + throw new NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } else { + + try { + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + + conn = + m_connection_manager + .getClientConnection(profile.getListenPoint(), + request.getPolicyContext()); + + conn.sendOnewayRequestAsync(request, ior); + + } + catch (Throwable th) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + "Exception in oneway remote invocation", + th); + } + } + } + + /** + * Sends a asynchronous request using the IIOP protocol allocating an active + * connection with the corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + public void asyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) //*opc1*, Object ami_handler) + throws ForwardRequest + { + + request.withResponse(true); + + PolicyContext policy_context = request.getPolicyContext(); + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendAsyncRequest(request, ior); //*opc1*, ami_handler); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void reliableOnewayRun( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + PolicyContext policy_context = + request.getPolicyContext(); + + request.reliableOneway(true); + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + + conn = + m_connection_manager + .getClientConnection(profile.getListenPoint(), + policy_context); + + conn.sendOnewayRequestSync(request, ior); + + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) + throw rcf.m_comm_failure; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication" + +" recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + + recover_count--; + + if (m_orb.m_trace != null) { + String[] msg = { "Communication forwarded: ", + fr.forward_reference.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + } + } + } + catch (Throwable e) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Exception in reliable remote oneway invocation :", + e); + } + } + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + */ + public boolean objectExists(IIOPIOR ior, + PolicyContext policy_context) + throws ForwardRequest + { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendLocateRequest(ior, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + org.omg.CORBA.portable.ObjectImpl obj = request.getTarget(); + es.tid.TIDorbj.core.comm.CommunicationDelegate delegate = + (es.tid.TIDorbj.core.comm.CommunicationDelegate) obj + ._get_delegate(); + es.tid.TIDorbj.core.iop.IOR ior = delegate.getReference(); + + IIOPIOR iiopIOR; + if ( ior instanceof IIOPIOR ){ + iiopIOR = ( IIOPIOR )ior; + } else { + throw new org.omg.CORBA.INTERNAL("Not an IIOP IOR."); + } + + PolicyContext policy_context = + delegate.createRequestPolicyContext(); + + IIOPProfile profile; + profile = iiopIOR.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + } + + IIOPConnection conn = null; + int recover_count = max_recover_count; + + while (conn == null) { + + try { + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + } + + conn.prepareRequest(request, iiopIOR); + + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + CDROutputStream stream, + PolicyContext policy_context + ) throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn = null; + int recover_count = max_recover_count; + + while (true) { + try { + + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendRequest(ior, stream, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * ORB Server IIOPConnection part shutdown. + */ + public synchronized void shutdown() + { + try { + if (m_server_listener != null) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "Shutdown IIOPCommLayer .ServerListener"); + } + m_server_listener.shutdown(); + m_server_listener = null; + } + } + catch (Throwable e) {} + } + + /** + * IIOP Layer close. + */ + public synchronized void destroy() + { + if (!m_destroyed) { + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, "Destroying IIOPCommLayer"); + } + + try { + if (m_server_listener != null) { + m_server_listener.shutdown(); + m_server_listener = null; + } + } + catch (Throwable e) {} + + try { + if (m_connection_manager != null) { + m_connection_manager.destroy(); + m_connection_manager = null; + } + } + catch (Throwable e) {} + + m_bidirectional_service = null; + + m_destroyed = true; + } + } + + public synchronized void initServerListener() + { + if (m_server_listener == null) { + m_server_listener = new ServerListener(m_connection_manager); + m_server_listener.setDaemon(false); + try { + + m_server_listener.start(); + + } + catch (Throwable thw) { + m_server_listener = null; + throw new org.omg.CORBA.NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } + } + + public synchronized IOR createIOR(String id, + POAKey key, + TaggedComponent[] extraComponents) + { + if (m_server_listener == null) + throw new org.omg.CORBA.INTERNAL("ServerListener not initialized"); + + // return m_server_listener.createIOR(id, key, components); + + TaggedProfile[] profiles = new TaggedProfile[1]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + int i = 0; + while (i < listen_points.size() ) { + profiles[i] = new IIOPProfile( + this.giopVersion, + (ListenPoint)listen_points.elementAt(i), + key, + components + ); + i++; + } + return new IIOPIOR(id, profiles); + + + } + + public synchronized IOR createIOR(String id, + ObjectKey key, + TaggedComponent[] extraComponents) + { + if (m_server_listener == null) + throw new org.omg.CORBA.INTERNAL("ServerListener not initialized"); + + // return m_server_listener.createIOR(id, key, components); + + + + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + TaggedProfile[] profiles = new TaggedProfile[listen_points.size()]; + int i = 0; + + while (i < listen_points.size() ) { + profiles[i] = new IIOPProfile( + this.giopVersion, + //m_server_listener.getListenPoint(), + (ListenPoint)listen_points.elementAt(i), + key, + components + ); + i++; + } + return new IIOPIOR(id, profiles); + + } + + + public synchronized ServiceContextList getBidirectionalService() + { + if (m_destroyed) + throw new org.omg.CORBA.BAD_INV_ORDER("ORB is destroying"); + + if (m_bidirectional_service == null) { + if (m_server_listener == null) + throw new INTERNAL("Trying to create a bidirectional context " + + "without ListenPoint"); + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + BiDirServiceContext bidir_context = new BiDirServiceContext(listen_points.size()); + + for (int i = 0; i < listen_points.size(); i++) { + bidir_context.m_listen_points[i] = + (ListenPoint)listen_points.elementAt(i); + } + + m_bidirectional_service = new ServiceContextList(1); + m_bidirectional_service.m_components[0] = bidir_context; + + } + + return m_bidirectional_service; + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationDelegate.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationDelegate.java.svn-base new file mode 100644 index 0000000..6c7be9c --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationDelegate.java.svn-base @@ -0,0 +1,364 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; +import org.omg.CORBA.portable.RemarshalException; + +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * @author jprojas + * + */ +public class IIOPCommunicationDelegate extends CommunicationDelegate { + + private IIOPIOR iiopReference; + private IIOPCommunicationLayer communicationLayer; + + /** + * + */ + public IIOPCommunicationDelegate( IIOPCommunicationLayer communicationLayer ) { + super(); + if ( communicationLayer != null ){ + super.setORB( communicationLayer.getORB() ); + this.communicationLayer = communicationLayer; + this.forwardReference = null; + } else { + throw new IllegalArgumentException( + "Parameter 'commLayer' cannot be null" + ); + } + } + + public void setReference(IOR ior) { + IIOPIOR iiopIOR = null; + if(! (ior instanceof IIOPIOR) ) { + iiopIOR = new IIOPIOR(ior); + + } else { + iiopIOR = (IIOPIOR) ior; + } + + super.setReference(iiopIOR); + + IIOPProfile profile = iiopIOR.profileIIOP(); + + PoliciesComponent policiesComponent = profile.getPoliciesComponent(); + + if(policiesComponent != null) { + this.setPolicyContext(policiesComponent.getPolicies()); + } + + + + }//setReference + + + public synchronized IIOPIOR getIIOPReference(){ + if ( this.iiopReference == null ){ + this.iiopReference = new IIOPIOR(); + this.iiopReference.assign( super.reference ); + } + return this.iiopReference; + } + + + public IOR getReference(){ + return getIIOPReference(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#isLocal(org.omg.CORBA.Object) + */ + public boolean isLocal( org.omg.CORBA.Object self) { + + if ( super.getORB() == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO ); + } + + try { + if ( this.forwardReference == null) { + return this.communicationLayer.isLocal( this.getIIOPReference() ); + } else { + return this.forwardReference.is_local(null); + } + } catch ( CommunicationException ce ) { + return false; + } + }//isLocal + + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#non_existent(org.omg.CORBA.Object) + */ + public boolean non_existent(org.omg.CORBA.Object self){ + TIDORB orb = super.getORB(); + if ( orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + PolicyContext request_policy_context = createRequestPolicyContext(); + + CommunicationLayer comm_layer = this.communicationLayer.getCommLayer(); + + try { + + if ( this.forwardReference == null) { + return !comm_layer.objectExists( + this.getIIOPReference(), + request_policy_context); + } else { // there is forwards + boolean non_existent = true; + try { + non_existent = this.forwardReference.non_existent(null); + } + catch (org.omg.CORBA.COMM_FAILURE cf) { + non_existent = true; + } + catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + non_existent = false; + } + + if (non_existent) { + this.forwardReference = null; + } + + return non_existent; + } + } catch (ForwardRequest fe) { + + this.setForward(fe); + + } + + return non_existent(self); + }//non_existent + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#duplicate(org.omg.CORBA.Object) + */ + public Object duplicate(Object self) { + IIOPCommunicationDelegate delegate; + delegate = new IIOPCommunicationDelegate( this.communicationLayer ); + delegate.setReference( this.getReference() ); + + delegate.forwardReference = this.forwardReference; + + //getPolicyContext never returns null. + delegate.setPolicyContext( super.getPolicyContext().duplicate() ); + + ObjectImpl obj = new ObjectImpl(); + + obj._set_delegate(delegate); + + return obj; + }//duplicate + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release(org.omg.CORBA.Object) + */ + public void release(org.omg.CORBA.Object self) { + //Empty treatment + }//release + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release_reply(org.omg.CORBA.Object, org.omg.CORBA.portable.InputStream) + */ + public void release_reply( + org.omg.CORBA.Object object, + org.omg.CORBA.portable.InputStream inputStream ) { + //Empty treatment + }//release_reply + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl) + */ + public void prepareRequest( StreamRequestImpl request ) { + this.communicationLayer.getCommLayer().prepareRequest( request ); + }//prepareRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#onewayRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void onewayRequest(RequestImpl request) { + if ( this.forwardReference != null ) { + this.forwardReference.onewayRequest(request); + } else { + this.communicationLayer.getCommLayer().onewayRequest( request, this.getIIOPReference() ); + } + }//oneWayRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(es.tid.TIDorbj.core.RequestImpl) + */ + public void invoke(RequestImpl request) { + try { + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().request( + request, + (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.invoke(request); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + invoke(request); + + }//forwarded + }//invoke + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(org.omg.CORBA.Object, org.omg.CORBA.portable.OutputStream) + */ + public InputStream invoke( + org.omg.CORBA.Object object, + OutputStream stream + ) throws ApplicationException, + RemarshalException { + + if (is_local(object)) { + throw new BAD_OPERATION("Request is only valid for remote objects"); + } + + if (stream instanceof es.tid.TIDorbj.core.cdr.CDROutputStream) { + + es.tid.TIDorbj.core.cdr.CDROutputStream out = + (es.tid.TIDorbj.core.cdr.CDROutputStream) stream; + try { + if ( this.forwardReference == null) { + return this.communicationLayer.getCommLayer().request( + (IIOPIOR)this.getReference(), + out, + createRequestPolicyContext() + ); + } else { + return this.forwardReference.invoke(object, stream); + } + + } + catch (es.tid.TIDorbj.core.comm.ForwardRequest fr) { + this.setForward(fr); + throw new org.omg.CORBA.portable.RemarshalException(); + } + } else { + throw new org.omg.CORBA.BAD_OPERATION("Not a TIDorbJ's Stream"); + } + }//invoke stream + + // AMI callback operations + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#asyncRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void asyncRequest(RequestImpl request, Object ami_handler ) { + try { + request.set_ami_handler(ami_handler); + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().asyncRequest( + request, (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.asyncRequest(request, ami_handler); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + asyncRequest(request, ami_handler); + + }//forwarded + }//asyncRequest + + + + + +}//IIOPCommunicationLayer diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayer.java.svn-base new file mode 100644 index 0000000..059b05c --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayer.java.svn-base @@ -0,0 +1,376 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.Properties; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationLayer; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.RequestDispatcher; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +/** + * Entry point for the IIOPCommunicationLayer + * + * @author Juan Pablo Rojas + * + * */ +public class IIOPCommunicationLayer implements CommunicationLayer { + + public static String ID = "IIOPCommunicationLayer"; + + /* + * used for incoming requests notifications + */ + private RequestDispatcher dispatcher; + + /* + * the underlying ORB implementation + */ + private TIDORB orb; + + private CommLayer commLayer; + + private IIOPCommunicationLayerPropertiesInfo propertiesInfo; + + /** + * + */ + public IIOPCommunicationLayer() { + + } + + public void setORB(TIDORB orb) { + if ( orb != null ){ + if ( this.orb != null ){ + this.commLayer.shutdown(); + this.propertiesInfo = null; + this.commLayer = null; + } + this.orb = orb; + this.propertiesInfo = IIOPCommunicationLayerPropertiesInfo.getInstance(); + this.orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + ) + ); + + + this.commLayer = new CommLayer( + this.orb + ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public CommLayer getCommLayer(){ + return this.commLayer; + } + + + public void setServerModeEnabled( boolean value ){ + if ( value ){ + this.commLayer.getExternalLayer().initServerListener(); + } + } + + public boolean isServerModeEnabled(){ + return this.commLayer.getExternalLayer().hasServerListener(); + } + + public synchronized ServiceContextList getBidirectionalService() { + return this.commLayer.getExternalLayer().getBidirectionalService(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String) + */ + public CommunicationDelegate createDelegate(String url) throws CommunicationException { + + CommunicationDelegate delegate; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorb:" ) ){ + ior = Corbaloc.getIOR( url ); + } else if(url.startsWith( "corbaloc::" ) || + url.startsWith( "corbaloc:iiop:" )) { + ior = IIOPCorbaloc.getIOR( url ); + } else { + ior = IIOPIOR.fromString(this.orb, url); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + delegate = createDelegate( ior ); + } else { + delegate = null; + } + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String, java.util.Properties) + */ + public CommunicationDelegate createDelegate(String url, Properties info) throws CommunicationException { + return createDelegate( url ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR) + */ + public CommunicationDelegate createDelegate(IOR ior) throws CommunicationException { + IIOPCommunicationDelegate delegate = new IIOPCommunicationDelegate( this ); + delegate.setReference( ior ); + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR, java.util.Properties) + */ + public CommunicationDelegate createDelegate(IOR ior, Properties info) throws CommunicationException { + return createDelegate( ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(java.lang.String) + */ + public boolean accepts(String url) throws CommunicationException { + return url!= null && + ( url.startsWith( "corbaloc:iiop:" ) || + url.startsWith( "corbaloc:tidorb:" ) || + url.startsWith( "corbaloc::" ) || + ( + url.startsWith( "IOR" ) && + this.accepts( DefaultIOR.fromString( this.orb, url ) ) + ) + ); + }//accepts + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(org.omg.IOP.IOR) + */ + public boolean accepts(IOR ior) throws CommunicationException { + boolean accepted; + accepted = ior instanceof IIOPIOR; + + int profilesCount = ior.memberCount(); + for (int i = 0; !accepted && i < profilesCount; i++) { + accepted = ior.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value; + } + + return accepted; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createIOR(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public IOR createIOR(String repositoryId, + ObjectKey key, + TaggedComponent[] components) + throws CommunicationException { + return this.commLayer.getExternalLayer().createIOR( + repositoryId, + key, + components + ); + }//createIOR + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createURL(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public String createURL(String repositoryId, ObjectKey key) throws CommunicationException { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(es.tid.TIDorbj.core.iop.IOR) + */ + public String getInitialReference( IOR ior ) throws CommunicationException { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(java.lang.String) + */ + public String getInitialReference( String url ) throws CommunicationException { + String initialReference; + try { + initialReference = IIOPCorbaloc.getObjectId( url ); + } catch ( Throwable th ){ + initialReference = null; + } + return initialReference; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(es.tid.TIDorbj.core.iop.IOR) + */ + public boolean isLocal(IOR ior) throws CommunicationException { + return ior != null && this.accepts( ior ) && this.commLayer.isLocal( (IIOPIOR)ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(java.lang.String) + */ + public boolean isLocal(String url) throws CommunicationException { + boolean isLocal; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorbj:" ) ){ + ior = Corbaloc.getIOR( url ); + } else { + ior = IIOPCorbaloc.getIOR( url ); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + isLocal = this.isLocal( ior ); + } else { + isLocal = false; + } + return isLocal; + }//isLocal + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getPropertyInfo(java.lang.String, java.util.Properties) + */ + public PropertyInfo[] getPropertiesInfo() { + return ( PropertyInfo[] )this.propertiesInfo.map.entrySet().toArray( new PropertyInfo[0] ); + }//getPropertiInfo + + public PropertyInfo getPropertyInfo( String name){ + return ( PropertyInfo )this.propertiesInfo.map.get( name ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMajorVersion() + */ + public int getMajorVersion() { + return 1; + }//getMajorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMinorVersion() + */ + public int getMinorVersion() { + return 0; + }//getMinorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getId() + */ + public String getId() { + return IIOPCommunicationLayer.ID; + } + + public String toString(){ + + String hostSpec; + hostSpec = this.propertiesInfo.hostName.value; + if ( hostSpec == null ){ + hostSpec = this.propertiesInfo.hostAddress.value; + } + if ( hostSpec == null ){ + try { + hostSpec = java.net.InetAddress.getLocalHost().getHostName(); + } + catch (Exception e) {} + } + + StringBuffer toString = new StringBuffer( "[ " ) + .append( IIOPCommunicationLayer.ID ) + .append( " ( iiop://" ) + .append( hostSpec ) + .append( ':' ) + .append( this.propertiesInfo.port.value ) + .append( " )" ) + .append( " ]"); + + return toString.toString(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#shutdown(boolean) + */ + public void shutdown( boolean waitForCompletion ) { + if ( this.commLayer != null ){ + if ( waitForCompletion ){ + this.commLayer.shutdown(); + } else { + this.commLayer.destroy(); + } + this.commLayer = null; + } + } + + + /** + * PRIVATE METHODS + * @author jprojas + */ + + public void dump(java.io.PrintWriter writer){ + this.propertiesInfo.dump(writer); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base new file mode 100644 index 0000000..2fe25bd --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCommunicationLayerPropertiesInfo.java.svn-base @@ -0,0 +1,508 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import es.tid.TIDorbj.core.comm.PropertyInfo; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +//TODO:change to IIOPCommunicationLayerPropertiesInfo +public class IIOPCommunicationLayerPropertiesInfo { + + /** + * Assures that a oneway request could be forwarded. "true" or "false". + */ + public final static String RELIABLE_ONEWAY + = "es.tid.TIDorbj.iiop.reliable_oneway"; + public final static String DEFAULT_RELIABLE_ONEWAY + = "false"; + + + /** + * Fragment size Property name. + */ + public final static String FRAGMENT_SIZE + = "es.tid.TIDorbj.iiop.fragment_size"; + public final static String DEFAULT_FRAGMENT_SIZE + = "4096"; + + + /** + * GIOP version Property name. Values: "1.0", "1.1" and "1.2" + */ + public final static String GIOP_VERSION = + "es.tid.TIDorbj.iiop.GIOPVersion"; + public final static String DEFAULT_GIOP_VERSION + = "1.2"; + + /** + * ORB's maximum opened connections number. Value must be greater or equals + * to 0. Default value: 30. + */ + public final static String MAX_OPENED_CONNECTIONS + = "es.tid.TIDorbj.iiop.max_connections"; + public final static String DEFAULT_MAX_OPENED_CONNECTIONS + = "30"; + + + /** + * DefaultORB's maximum recovering a communication tries. Default value: + * 3. + * TODO: max_comm_recovering_times -> max_comm_recovering_tries, update doc + */ + public final static String MAX_COMM_RECOVERING_TRIES + = "es.tid.TIDorbj.iiop.max_comm_recovering_tries"; + public final static String DEFAULT_MAX_COMM_RECOVERING_TRIES = "3"; + + + /** + * ORB's maximum time upon recovering a communication. Values must be + * greater or equal than 0. + */ + public final static String COMM_RECOVERING_TIME + = "es.tid.TIDorbj.iiop.comm_recover_time"; + public final static String DEFAULT_COMM_RECOVERING_TIME + = "1000"; + + /** + * Maximum uncompleted messages per IIOPConnection. Default value: + * 25. + */ + public final static String MAX_UNCOMPLETED_MESSAGES = + "es.tid.TIDorbj.iiop.max_uncompleted_messages"; + public final static String DEFAULT_MAX_UNCOMPLETED_MESSAGES = "25"; + + /** + * IIOP hostname used for generated IORs and URLs. Default value: null + */ + public final static String HOST_NAME + = "es.tid.TIDorbj.iiop.host"; + public final static String DEFAULT_HOST_NAME + = null; + + /** + * IP address used for generated IORs and URLs. Default value: null + */ + public final static String HOST_ADDRESS + = "es.tid.TIDorbj.iiop.address"; + public final static String DEFAULT_HOST_ADDRESS + = null; + + /** + * IIOP port used for generated IORs and URLs. Default value: 0 + */ + public final static String PORT + = "es.tid.TIDorbj.iiop.port"; + public final static String DEFAULT_PORT + = "0"; + + + /** + * Sockets SO_LIGER property. Values must be greater or equal than -1. + * Default value -1 (no linger) + */ + public final static String SOCKET_LINGER + = "es.tid.TIDorbj.iiop.socket_linger"; + public final static String DEFAULT_SOCKET_LINGER + = "-1"; + + /** + * Sockets SO_TIMEOUT property. Values must be greater or equal than -1. + * Default value 0 (no timeout) + */ + public final static String SOCKET_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_timeout"; + public final static String DEFAULT_SOCKET_TIMEOUT + = "0"; + + + /** + * Sockets TCP_NODELAY property. Values must be "true" or "false". + */ + public final static String TCP_NODELAY + = "es.tid.TIDorbj.iiop.tcp_nodelay"; + public final static String DEFAULT_TCP_NODELAY + = "true"; + + /** + * Sockets TCP_CONNECT_TIMEOUT property. Values must be greater or equal to + * 0. Default value 1000. + */ + public final static String SOCKET_CONNECT_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_connect_timeout"; + public final static String DEFAULT_SOCKET_CONNECT_TIMEOUT + = "1000"; + + /** + * Sockets TCP_WRITE_TIMEOUT property. Values must be greater or equal to 0. + * Default value 2000. + */ + public final static String SOCKET_WRITE_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_write_timeout"; + public final static String DEFAULT_SOCKET_WRITE_TIMEOUT + = "2000"; + + /** + * Server sockets BACKLOG property. Values must be greater or equal to 0. + * Default value. 10. + */ + public final static String SERVER_SOCKET_BACKLOG + = "es.tid.TIDorbj.iiop.server_socket_backlog"; + public final static String DEFAULT_SERVER_SOCKET_BACKLOG + = "10"; + + /** + * Server sockets RECONNECT property. Values must be greater or equal to + * 0. Default value: 0 + */ + public final static String SERVER_SOCKET_RECONNECT + = "es.tid.TIDorbj.iiop.server_socket_reconnect"; + public final static String DEFAULT_SERVER_SOCKET_RECONNECT + = "0"; + + /** + * mcpg - IPV6 property. Values must be "true" or "false". + */ + public final static String IPV6 + = "es.tid.TIDorbj.iiop.ipv6"; + public final static String DEFAULT_IPV6 + = "false"; + + /** + * mcpg - IFACEo property. Only need if there are an comunication of client in TIDorbC. + */ + public final static String IFACE + = "es.tid.TIDorbj.iiop.iface"; + public final static String DEFAULT_IFACE + = "eth0"; + + + public PropertyInfo reliableOneWay; + public PropertyInfo fragmentSize; + public PropertyInfo giopVersion; + public PropertyInfo maxOpenedConnections; + public PropertyInfo maxCommRecoveringTries; + public PropertyInfo commRecoveringTime; + public PropertyInfo maxUncompletedMessages; + public PropertyInfo hostName; + public PropertyInfo hostAddress; + public PropertyInfo port; + public PropertyInfo socketLinger; + public PropertyInfo socketTimeout; + public PropertyInfo socketNoDelay; + public PropertyInfo connectTimeout; + public PropertyInfo writeTimeout; + public PropertyInfo serverSocketBacklog; + public PropertyInfo serverSocketReconnect; + + public PropertyInfo ipv6; + public PropertyInfo iface; + + public HashMap map; + + public IIOPCommunicationLayerPropertiesInfo() { + + map = new HashMap( 20 ); + + /** + * CONNECTION STUFF + */ + reliableOneWay = new PropertyInfo( + RELIABLE_ONEWAY, + DEFAULT_RELIABLE_ONEWAY + ); + reliableOneWay.setDescription( + "Whether oneway request should be reliable or not." + ); + reliableOneWay.setRequired( false ); + reliableOneWay.setChoices ( null ); + map.put( RELIABLE_ONEWAY, reliableOneWay ); + + + /** + * TRANSMISSION STUFF + */ + fragmentSize = new PropertyInfo( + FRAGMENT_SIZE, + DEFAULT_FRAGMENT_SIZE + ); + fragmentSize.setDescription( + "Maximum fragment message size. Must be > 1024 and multiple of 8." + ); + fragmentSize.setRequired( false ); + fragmentSize.setChoices ( null ); + map.put( FRAGMENT_SIZE, fragmentSize ); + + + giopVersion = new PropertyInfo( + GIOP_VERSION, + DEFAULT_GIOP_VERSION + ); + giopVersion.setDescription( + "Default GIOP version used for communications. One of " + + "1.0 1.1 or 1.2" + ); + giopVersion.setRequired( false ); + giopVersion.setChoices ( new String[]{ "1.0", "1.1", "1.2" } ); + map.put( GIOP_VERSION, giopVersion ); + + + maxOpenedConnections = new PropertyInfo( + MAX_OPENED_CONNECTIONS, + DEFAULT_MAX_OPENED_CONNECTIONS + ); + maxOpenedConnections.setDescription( + "ORB's maximum opened connections number" + ); + maxOpenedConnections.setRequired( false ); + maxOpenedConnections.setChoices ( null ); + map.put( MAX_OPENED_CONNECTIONS, maxOpenedConnections ); + + + maxCommRecoveringTries = new PropertyInfo( + MAX_COMM_RECOVERING_TRIES, + DEFAULT_MAX_COMM_RECOVERING_TRIES + ); + maxCommRecoveringTries.setDescription( + "DefaultORB's maximum communication recovering tries." + ); + maxCommRecoveringTries.setRequired( false ); + maxCommRecoveringTries.setChoices ( null ); + map.put( MAX_COMM_RECOVERING_TRIES, maxCommRecoveringTries ); + + + commRecoveringTime = new PropertyInfo( + COMM_RECOVERING_TIME, + DEFAULT_COMM_RECOVERING_TIME + ); + commRecoveringTime.setDescription( + "ORB's maximum time upon recovering a communication." + ); + commRecoveringTime.setRequired( false ); + commRecoveringTime.setChoices ( null ); + map.put( COMM_RECOVERING_TIME, commRecoveringTime ); + + + maxUncompletedMessages = new PropertyInfo( + MAX_UNCOMPLETED_MESSAGES, + DEFAULT_MAX_UNCOMPLETED_MESSAGES + ); + maxUncompletedMessages.setDescription( + "Maximum uncompleted messages allowed upon connections." + ); + maxUncompletedMessages.setRequired( false ); + maxUncompletedMessages.setChoices ( null ); + map.put( MAX_UNCOMPLETED_MESSAGES, maxUncompletedMessages ); + + + hostName = new PropertyInfo( + HOST_NAME, + DEFAULT_HOST_NAME + ); + hostName.setDescription( + "Hostname used when generating IOR's and URL's." + ); + hostName.setRequired( false ); + hostName.setChoices ( null ); + map.put( HOST_NAME, hostName ); + + + hostAddress = new PropertyInfo( + HOST_ADDRESS, + DEFAULT_HOST_ADDRESS + ); + hostAddress.setDescription( + "Address used when generating IOR's and URL's." + ); + hostAddress.setRequired( false ); + hostAddress.setChoices ( null ); + map.put( HOST_ADDRESS, hostAddress ); + + + port = new PropertyInfo( + PORT, + DEFAULT_PORT + ); + port.setDescription( + "Port used when generating IOR's and URL's." + ); + port.setRequired( false ); + port.setChoices ( null ); + map.put( PORT, port ); + + + socketLinger = new PropertyInfo( + SOCKET_LINGER, + DEFAULT_SOCKET_LINGER + ); + socketLinger.setDescription( + "Sockets SO_LIGER property." + ); + socketLinger.setRequired( false ); + socketLinger.setChoices ( null ); + map.put( SOCKET_LINGER, socketLinger ); + + + socketTimeout = new PropertyInfo( + SOCKET_TIMEOUT, + DEFAULT_SOCKET_TIMEOUT + ); + socketTimeout.setDescription( + "Sockets timeout." + ); + socketTimeout.setRequired( false ); + socketTimeout.setChoices ( null ); + map.put( SOCKET_TIMEOUT, socketTimeout ); + + + socketNoDelay = new PropertyInfo( + TCP_NODELAY, + DEFAULT_TCP_NODELAY + ); + socketNoDelay.setDescription( + "Sockets NO_DELAY property." + ); + socketNoDelay.setRequired( false ); + socketNoDelay.setChoices ( null ); + map.put( TCP_NODELAY, socketNoDelay ); + + + connectTimeout = new PropertyInfo( + SOCKET_CONNECT_TIMEOUT, + DEFAULT_SOCKET_CONNECT_TIMEOUT + ); + connectTimeout.setDescription( + "Sockets connect timeout." + ); + connectTimeout.setRequired( false ); + connectTimeout.setChoices ( null ); + map.put( SOCKET_CONNECT_TIMEOUT, connectTimeout ); + + + writeTimeout = new PropertyInfo( + SOCKET_WRITE_TIMEOUT, + DEFAULT_SOCKET_WRITE_TIMEOUT + ); + writeTimeout.setDescription( + "Sockets write timeout." + ); + writeTimeout.setRequired( false ); + writeTimeout.setChoices ( null ); + map.put( SOCKET_WRITE_TIMEOUT, writeTimeout ); + + + serverSocketBacklog = new PropertyInfo( + SERVER_SOCKET_BACKLOG, + DEFAULT_SERVER_SOCKET_BACKLOG + ); + serverSocketBacklog.setDescription( + "Server sockets BACKLOG." + ); + serverSocketBacklog.setRequired( false ); + serverSocketBacklog.setChoices ( null ); + map.put( SERVER_SOCKET_BACKLOG, serverSocketBacklog ); + + + serverSocketReconnect = new PropertyInfo( + SERVER_SOCKET_RECONNECT, + DEFAULT_SERVER_SOCKET_RECONNECT + ); + serverSocketReconnect.setDescription( + "Server sockets RECONNECT." + ); + serverSocketReconnect.setRequired( false ); + serverSocketReconnect.setChoices ( null ); + map.put( SERVER_SOCKET_RECONNECT, serverSocketReconnect ); + + ipv6 = new PropertyInfo( + IPV6, + DEFAULT_IPV6 + ); + ipv6.setDescription( + "IPV6 property." + ); + ipv6.setRequired( false ); + ipv6.setChoices ( null ); + map.put( IPV6, ipv6 ); + + //mcpg + iface = new PropertyInfo( + IFACE, + DEFAULT_IFACE + ); + iface.setDescription( + "IFACE property." + ); + iface.setRequired( false ); + iface.setChoices ( null ); + map.put( IFACE, iface ); + + } + + public static IIOPCommunicationLayerPropertiesInfo getInstance(){ + return new IIOPCommunicationLayerPropertiesInfo(); + } + + public void dump(java.io.PrintWriter writer) + { + writer.println("IIOPCommunicationLayer properties:"); + + Iterator it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry e = (Map.Entry)it.next(); + writer.print('\t'); + writer.print(e.getKey()); + writer.print('='); + writer.print( ((PropertyInfo)e.getValue()).getValue()); + writer.println(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnection.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnection.java.svn-base new file mode 100644 index 0000000..e59f0e9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnection.java.svn-base @@ -0,0 +1,507 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.io.IOException; +import java.net.Socket; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; +import java.net.InetAddress; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; + +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayerPropertiesInfo; + +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb IIOP IIOPConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IIOPConnection extends Connection { + + /** + * IIOPConnection Socket. + */ + java.net.Socket m_socket; + + /** + * IIOPConnection Socket InputStream. + */ + public java.io.InputStream m_socket_in; + + /** + * IIOPConnection Socket OutputStream. + */ + public java.io.OutputStream m_socket_out; + + + private boolean tcpNoDelay; + private int soTimeout; + private int soLinger; + private int socketWriteTimeout; + + + private IIOPConnection(IIOPConnectionManager mngr, java.net.Socket socket) + { + super(mngr); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + tcpNoDelay = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.TCP_NODELAY ) + .getBoolean(); + + soTimeout = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_TIMEOUT ) + .getInt(); + + soLinger = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_LINGER ) + .getInt(); + + socketWriteTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_WRITE_TIMEOUT ) + .getInt(); + + try { + this.m_socket = socket; + + my_port = socket.getLocalPort(); + + socket.setTcpNoDelay( tcpNoDelay ); + socket.setSoTimeout( soTimeout ); + + socket.setSoLinger( soLinger != -1, soLinger ); + + m_socket_in = socket.getInputStream(); + m_socket_out = socket.getOutputStream(); + } + catch (java.io.IOException ioe) { + throw new OBJECT_NOT_EXIST(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + } + + m_write_monitor = new ConnectionWriteMonitor( socketWriteTimeout ); + } + + /** + * IIOPConnection hash code. + */ + public int hashCode() { + // return my_port; + return m_socket.hashCode(); + } + + public boolean equals(Object obj) { + return obj instanceof IIOPConnection && + ( ( IIOPConnection )obj ).my_port == my_port; + } + + public String toString() { + if (m_str == null) { + if (m_mode == CLIENT_MODE) { + m_str = "Client IIOPConnection at " + m_socket.toString(); + } else if (m_mode == SERVER_MODE) { + m_str = "Server IIOPConnection at " + m_socket.toString(); + } else { + m_str = "Bidirectional IIOPConnection at " + m_socket.toString(); + } + } + return m_str; + } + + /** + * Creates a new connection in SERVER_MODE. + * + * @param mngr + * the manager + * @param sock + * Socket created in the accept + * method in a ServerSocket object. + */ + public static IIOPConnection serverConnection(IIOPConnectionManager mngr, + java.net.Socket sock) { + IIOPConnection conn = new IIOPConnection(mngr, sock); + conn.m_mode = SERVER_MODE; + conn.init(); + + if (conn.m_orb.m_trace != null) { + conn.m_orb.printTrace(Trace.DEBUG, "Creating " + conn.toString()); + } + + return conn; + } + + /** + * Creates a new connection in CLIENT_MODE. + */ + + public static IIOPConnection clientConnection(IIOPConnectionManager mngr, + ListenPoint listen_point) + { + try { + + // create the socket + Socket socket = + new Socket(listen_point.m_host, listen_point.m_port); + IIOPConnection conn = new IIOPConnection(mngr, socket); + + conn.m_mode = CLIENT_MODE; + + conn.m_initial_point = listen_point; + + conn.addListenPoint(listen_point); + + conn.init(); + + return conn; + + } + catch (java.io.IOException ioe) { + throw new TRANSIENT(ioe.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + catch (java.lang.SecurityException sce) { + throw new NO_PERMISSION(sce.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void close() + { + try { + m_socket.close(); + } + catch (IOException ioe) {} + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, + toString() + + " client socket closed"); + + // notify the writers blocked in write_monitor + + m_write_monitor.setException(m_state.getError()); + + // notify the locks + + LockEnumeration enumer = m_lock_list.elements(); + Lock lock; + + while (enumer.hasMoreElements()) { + lock = enumer.next(); + synchronized (lock) { + lock.cancelWaiting(); + } + } + + AMILockEnumeration ami_enum = m_ami_lock_list.elements(); + AMILock ami_lock; + + while (ami_enum.hasMoreElements()) { + ami_lock = ami_enum.next(); + synchronized (ami_lock) { + ami_lock.notify(); + } + } + + if (m_addresses != null) { + m_addresses.clear(); + } + + // clear buffers + + Enumeration msgs = m_uncompleted_messages.elements(); + + while (msgs.hasMoreElements()) { + m_uncompleted_messages.remove(msgs.nextElement()); + } + + } + + protected void dispatchRequest(GIOPLocateRequestMessage message) { + + ObjectKey obj_key; + obj_key = message.extractAddress().getObjectKey(); + + IIOPLocateResponseHandler responseHandler; + responseHandler = new IIOPLocateResponseHandler( + this, + message.getHeader().getVersion(), + message.getRequestId(), + obj_key + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + m_requests_in_POA.inc(); + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + } + + protected void dispatchRequest(GIOPRequestMessage message) { + + ServerRequestImpl serverRequest; + serverRequest = message.extractRequest(m_orb); + + + String ssl_key_store_file = new String(""); + String ssl_key_store_passwd = new String(""); + + if (m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + != null) { + ssl_key_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + ssl_key_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + } + + // Check SSL: all TCP request are not dispached + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + serverRequest.setSystemException( + new NO_PERMISSION("SSL target can not dispatch TCP requests ") ); + sendReply(serverRequest, null); + //delete request; + return; + } + + + ObjectKey objectKey; + objectKey = serverRequest.getTarget().getObjectKey(); + + IIOPResponseHandler responseHandler; + responseHandler = new IIOPResponseHandler( + this, + message.getHeader().getVersion(), + serverRequest, + objectKey, + message.getRequestInvocationPolicies() + + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * TODO: ask juan: in previous code, when reference has been located, + * if it's not local just returns... which should be the + * refactoring mapping since the POAKey is resolved outside, + * under ExecThread, and there's "no way?" to acces the object + * reference to check if either it's local or not + * Previous code + if (!obj_impl._is_local()) { + // oneway request to a non local object: DISCARD + return; + } + * */ + + if (serverRequest.withResponse()) { + m_requests_in_POA.inc(); + } + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + } + + + public void read(byte[] buffer, int offset, int length) + { + + try { + int numReadNow = 0; + + while (length > 0) { + + numReadNow = m_socket_in.read(buffer, offset, length); + + if (numReadNow < 0) { + throw new COMM_FAILURE("Broken IIOPConnection", 0, + CompletionStatus.COMPLETED_NO); + } + + offset += numReadNow; + length -= numReadNow; + + } + + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer) + { + try { + + m_socket_out.write(buffer, 0, buffer.length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer, int offset, int length) + { + try { + m_socket_out.write(buffer, offset, length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnectionManager.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnectionManager.java.svn-base new file mode 100644 index 0000000..22a6370 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPConnectionManager.java.svn-base @@ -0,0 +1,746 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.net.Socket; +import javax.net.ssl.SSLSocket; + +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TRANSIENT; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.poa.POAImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.comm.ssliop.SSLConnection; + +/** + * Manages the opened connections. When a connection is needed, try to reuse an + * opened one. When there is too many connection opened or there are some + * connection that have remained idle too long, they will be closed. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + + +// TODO: move comm.iiop.IIOPConnectionManager to comm.ConnectionManager + +public class IIOPConnectionManager extends es.tid.TIDorbj.core.ORBComponent +{ + + /** + * The communication Layer. + */ + + IIOPCommLayer commLayer; + + /** + * The ORB has been destroyed. + */ + + protected boolean m_destroyed; + + /** + * Maintains a UseTable with IIOPConnection + * objects. Then, when the table removes older connections, the manager + * close them. + */ + UseTable m_connections; + + /** + * Opened client connections. This table allows reuse opened connections for + * a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_client_connections; + + /** + * Opened bidirectional connections. This table allows reuse opened + * connections for a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_bidirectional_connections; + + /** + * Connections that are opening now. Other threads that want to open a new + * connection to the same listen point must wait to not open more than one + * connection. + */ + java.util.Hashtable m_connections_opening; + + int maxOpenedConnections; + int connectTimeout; + boolean ipv6; + + + /** + * Opened SSL client connections. This table allows reuse opened connections for + * a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_ssl_client_connections; + + public IIOPConnectionManager( TIDORB orb, IIOPCommLayer commLayer ) + { + super(orb); + this.commLayer = commLayer; + m_client_connections = new java.util.Hashtable(); + m_bidirectional_connections = new java.util.Hashtable(); + m_ssl_client_connections = new java.util.Hashtable(); + + maxOpenedConnections = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.MAX_OPENED_CONNECTIONS ) + .getInt(); + + connectTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_CONNECT_TIMEOUT ) + .getInt(); + + + m_connections = new UseTable( maxOpenedConnections ); + + + m_connections_opening = new java.util.Hashtable(); + m_destroyed = false; + + //mcpg + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + if (this.ipv6 == true) + { + System.setProperty("java.net.preferIPv6Address","true"); + System.setProperty("java.net.preferIPv4Stack","false"); + } + } + + /** + * Notifies the connection use. + * + * @param conn + * the connection in use + */ + /* synchronized */ + + //public synchronized void use(IIOPConnection conn) + public synchronized void use(Connection conn) + { + if (m_destroyed) + return; + + m_connections.use(conn); + } + + /** + * The manager is Notified a connection is been closing. + * + * @param conn + * the connection that is closing. + */ + + //synchronized public void closing(IIOPConnection conn) + synchronized public void closing(Connection conn) + { + if (m_destroyed) + return; + + removeListenPoints(conn); + + m_connections.remove(conn); + } + + /** + * When a new Socket is created (a new connection has been accepted by the + * ServerSocket) a new IIOPConnection, in SERVER mode, must be + * registered. + * + * @param socket + * the new socket. + */ + + synchronized public void createServerConnection(Socket socket) + { + if (m_destroyed) { + // drop the socket + try { + socket.close(); + } + catch (java.io.IOException ioe) {} + } else { + // create the new connection and add the new connection to + // connection table + newConnection(IIOPConnection.serverConnection(this, socket)); + } + } + + + /** + * Saves the ListenPoint associated to a bidirectional + * connection to be used as a client connection when a connection to the + * listen point will be required. + * + * @param listen_point + * the ListenPoint where the connection will be + * seen as a client connection. + * @param conn + * the bidirectional connection. + */ + + synchronized public void + addBidirectionalConnection(ListenPoint listen_point, +// IIOPConnection conn) + Connection conn) + { + if (m_destroyed) + return; + + m_bidirectional_connections.put(listen_point, conn); + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public IIOPConnection getClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + //opened connection + IIOPConnection conn = null; + // check if a connection is opening now + OpeningLock opening_lock = null; + // this thread must open a connection and unlock the OpeningLock + boolean open_a_connection = false; + + synchronized (this) { + if (m_destroyed) + throw new TRANSIENT("IIOP Layer shutdown", 0, + CompletionStatus.COMPLETED_NO); + + // looks for an existing connection + + conn = (IIOPConnection) m_bidirectional_connections.get(listen_point); + + if (conn != null) + return conn; + + conn = (IIOPConnection) m_client_connections.get(listen_point); + + if (conn != null) + return conn; + + // check if is opening now + opening_lock = (OpeningLock) + m_connections_opening.get(listen_point); + + // create a lock + if (opening_lock == null) { + opening_lock = new OpeningLock(); + m_connections_opening.put(listen_point, opening_lock); + open_a_connection = true; + } + } + + if (!open_a_connection) { + try { + conn = (IIOPConnection)opening_lock.waitOpening( this.connectTimeout ); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + if (m_orb.m_trace != null) { + String[] msg = { "Socket connection timeout exceeded", + "waiting to connecting with ", + listen_point.toString(), + ". Released lock over it." }; + m_orb.printTrace(Trace.DEBUG, msg); + } + m_connections_opening.remove(listen_point); + throw new TRANSIENT(ce.toString()); + } + } + + } else { + try { + conn = openClientConnection(listen_point, policy_context); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + opening_lock.setError(ce); + m_connections_opening.remove(listen_point); + throw ce; + } + } + + synchronized (this) { + + newConnection(conn); + + // add the new connection to the client_connections + + m_client_connections.put(listen_point, conn); + + opening_lock.setOpened(conn); + m_connections_opening.remove(listen_point); + } + + if (m_orb.m_trace != null) { + String[] msg = { conn.toString(), " Opened!" }; + m_orb.printTrace(Trace.DEBUG, msg); + } + + } + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ( (!conn.isBidirectionalConnection()) + && (bidir != null) + && (bidir.value() == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode( + commLayer.getBidirectionalService() + ); + } + + return conn; + } + + private IIOPConnection + openClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + IIOPConnection conn = null; + + // create a new connection + if (m_orb.m_trace != null) { + String[] msg = { "Opening client connection with ", + listen_point.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + // create the new connection + conn = IIOPConnection.clientConnection(this, listen_point); + + // is bidirectional ??? + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ((bidir != null && bidir.value() + == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode(commLayer.getBidirectionalService()); + } else { + + es.tid.TIDorbj.core.poa.CurrentImpl poa_current = + m_orb.initPOACurrent(); + + if (poa_current.inContext()) { + try { + POAImpl current_poa = (POAImpl) poa_current.get_POA(); + + if (current_poa.isBidirectional()) + conn.setBidirectionalMode( + commLayer.getBidirectionalService()); + + } + catch (org.omg.PortableServer.CurrentPackage.NoContext nc) {} + // add the new connection to connection table + } + } + + return conn; + } + + + private SSLConnection + openSSLClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + SSLConnection conn = null; + + // create a new connection + if (m_orb.m_trace != null) { + String[] msg = { "Opening client connection with ", + listen_point.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + // create the new connection + conn = SSLConnection.clientConnection(this, listen_point); + + // is bidirectional ??? + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ((bidir != null && bidir.value() + == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode(commLayer.getBidirectionalService()); + } else { + + es.tid.TIDorbj.core.poa.CurrentImpl poa_current = + m_orb.initPOACurrent(); + + if (poa_current.inContext()) { + try { + POAImpl current_poa = (POAImpl) poa_current.get_POA(); + + if (current_poa.isBidirectional()) + conn.setBidirectionalMode( + commLayer.getBidirectionalService()); + + } + catch (org.omg.PortableServer.CurrentPackage.NoContext nc) {} + // add the new connection to connection table + } + } + + return conn; + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public void prepareClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + getClientConnection(listen_point, policy_context); + } + + /** + * Checks in a new connection for manage it. + * + * @param conn + * the bidirectional connection. + */ + protected void newConnection(IIOPConnection conn) + { + try { + + m_connections.append(conn); + + } catch (es.tid.TIDorbj.core.util.FullUseTableException f) { + conn.closeByManager(); + if (conn.isClientConnection()) { + throw new TRANSIENT( + "Maximun of Connections reached, and all are in use, try later!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + Object[] removed = m_connections.getRemovedObjects(); + + if (removed != null) { + for (int i = 0; i < removed.length; i++) { + closeConnection((IIOPConnection) removed[i]); + } + } + } + + + + /** + * Checks in a new connection for manage it. + * + * @param conn + * the bidirectional connection. + */ + protected void newConnection(SSLConnection conn) + { + try { + + m_connections.append(conn); + + } catch (es.tid.TIDorbj.core.util.FullUseTableException f) { + conn.closeByManager(); + if (conn.isClientConnection()) { + throw new TRANSIENT( + "Maximun of Connections reached, and all are in use, try later!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + Object[] removed = m_connections.getRemovedObjects(); + + if (removed != null) { + for (int i = 0; i < removed.length; i++) { + closeConnection((IIOPConnection) removed[i]); + } + } + } + + /** + * Removes from the client connection table the listen points associated to + * a connection. + * + * @param conn + * the connection. + */ + //protected void removeListenPoints(IIOPConnection conn) + protected void removeListenPoints(Connection conn) + { + java.util.Enumeration points = conn.getListenPoints(); + if (points == null) + return; + + // remove listenPoints + while (points.hasMoreElements()) { + + ListenPoint _listen_point = (ListenPoint) points.nextElement(); + + // remove from client_connections + m_client_connections.remove(_listen_point); + + // remove from bidirectional_connections if ListenPoint refers to + // the given connection + //if ((IIOPConnection) m_bidirectional_connections.get(_listen_point) + if ((Connection) m_bidirectional_connections.get(_listen_point) + == conn) + m_bidirectional_connections.remove(_listen_point); + } + } + + /** + * Close the connection due to it has been decided that it not has been used + * for a long time. + * + * @param conn + * the connection. + */ + //protected void closeConnection(IIOPConnection conn) + protected void closeConnection(Connection conn) + { + removeListenPoints(conn); + conn.closeByManager(); + } + + /** + * @return true if it has not any active connection + */ + public boolean activeConnections() + { + return m_connections.getSize() > 0; + } + + /** + * Close all connections due to an ORB close session. + */ + synchronized public void destroy() + { + if (!m_destroyed) { + java.util.Enumeration conns = m_connections.elements(); + + //IIOPConnection conn; + Connection conn; + + while (conns.hasMoreElements()) { + conn = (IIOPConnection) conns.nextElement(); + m_connections.remove(conn); + closeConnection(conn); + } + + m_destroyed = true; + } + } + + + + + /** + * When a new SSLSocket is created (a new connection has been accepted by the + * ServerSocket) a new IIOPConnection, in SERVER mode, must be + * registered. + * + * @param socket + * the new socket. + */ + + synchronized public void createSSLServerConnection(SSLSocket socket) + { + if (m_destroyed) { + // drop the socket + try { + socket.close(); + } + catch (java.io.IOException ioe) {} + } else { + // create the new connection and add the new connection to + // connection table + newConnection(SSLConnection.serverConnection(this, socket)); + } + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public SSLConnection getSSLClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + //opened connection + SSLConnection conn = null; + // check if a connection is opening now + OpeningLock opening_lock = null; + // this thread must open a connection and unlock the OpeningLock + boolean open_a_connection = false; + + synchronized (this) { + if (m_destroyed) + throw new TRANSIENT("IIOP Layer shutdown", 0, + CompletionStatus.COMPLETED_NO); + + // looks for an existing connection + +// conn = (IIOPConnection) m_bidirectional_connections.get(listen_point); + +// if (conn != null) +// return conn; + + conn = (SSLConnection) m_ssl_client_connections.get(listen_point); + + if (conn != null) + return conn; + + // check if is opening now + opening_lock = (OpeningLock) + m_connections_opening.get(listen_point); + + // create a lock + if (opening_lock == null) { + opening_lock = new OpeningLock(); + m_connections_opening.put(listen_point, opening_lock); + open_a_connection = true; + } + } + + if (!open_a_connection) { + try { + conn = (SSLConnection)opening_lock.waitOpening( this.connectTimeout ); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + if (m_orb.m_trace != null) { + String[] msg = { "Socket connection timeout exceeded", + "waiting to connecting with ", + listen_point.toString(), + ". Released lock over it." }; + m_orb.printTrace(Trace.DEBUG, msg); + } + m_connections_opening.remove(listen_point); + throw new TRANSIENT(ce.toString()); + } + } + + } else { + try { + conn = openSSLClientConnection(listen_point, policy_context); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + opening_lock.setError(ce); + m_connections_opening.remove(listen_point); + throw ce; + } + } + + synchronized (this) { + + newConnection(conn); + + // add the new connection to the client_connections + + m_ssl_client_connections.put(listen_point, conn); + + opening_lock.setOpened(conn); + m_connections_opening.remove(listen_point); + } + + if (m_orb.m_trace != null) { + String[] msg = { conn.toString(), " Opened!" }; + m_orb.printTrace(Trace.DEBUG, msg); + } + + } + +// BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + +// if ( (!conn.isBidirectionalConnection()) +// && (bidir != null) +// && (bidir.value() == org.omg.BiDirPolicy.BOTH.value) +// && (commLayer.hasServerListener())) { +// conn.setBidirectionalMode( +// commLayer.getBidirectionalService() +// ); +// } + + return conn; + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCorbaloc.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCorbaloc.java.svn-base new file mode 100644 index 0000000..26f5b55 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPCorbaloc.java.svn-base @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.StringTokenizer; + +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.Corbaloc; + +public class IIOPCorbaloc +{ + + public static String getObjectId(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, path, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:iiop:")) { + corbaloc = corbaloc_URL.substring(14); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + return corbaloc.substring(slashposition + 1); + } + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, url_key, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:iiop:")) { + corbaloc = corbaloc_URL.substring(14); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + url_key = corbaloc.substring(slashposition + 1); + + ObjectKey objectkey = createKey(url_key); + + profiles = new IIOPProfile[1]; + + profiles[0] = new IIOPProfile(version, listener, objectkey, null); + + return new IIOPIOR("", profiles); + } + + /** + * Simulates an usual ObjectKey, that is marshaled in an Encapsulation, but + * instead, the url ObjectKey is marshaled as a ulong value (the size) and + * the char array of the string (without the end of string character *. + * + * @param url + * @return + * @throws org.omg.CORBA.ORBPackage.InvalidName + */ + private static ObjectKey createKey(String url_key) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + CDROutputStream output = + new CDROutputStream(null, + new byte[url_key.length() + CDR.ULONG_SIZE]); + + char[] url_buffer = url_key.toCharArray(); + + output.write_ulong(url_buffer.length); + output.write_char_array(url_buffer, 0, url_buffer.length); + + CDRInputStream input = (CDRInputStream) output.create_input_stream(); + + Encapsulation encap = input.readEncapsulation(); + + return new ObjectKey(encap); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPIOR.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPIOR.java.svn-base new file mode 100644 index 0000000..e0ae912 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPIOR.java.svn-base @@ -0,0 +1,245 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.iiop.IORAddressingInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.util.Base16Codec; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.ziop.ZIOP; + +/** + * Representation of an Internet Object Reference (IOR). An IOR is compounded + * by; + *

    + *
  • at least one TaggedProfile + *
  • the repositoryId of the reference + *
+ * In addition, the ior has its stringified representation and its marshaled + * value. + * + * @autor Juan A. Cáceres + * @version 2.0 + */ + +public class IIOPIOR extends IOR +{ + + String toString; + + // IIOP optimizations + + boolean iiopProfileSearched; + + IIOPProfile iiopProfile; + + int iiopProfilePosition; + + int hash_code = -1; + + boolean ziopSearched; + + boolean hasZIOPPolicies; + + public IIOPIOR() { + this.toString = null; + this.iiopProfile = null; + this.iiopProfileSearched = false; + this.iiopProfilePosition = 0; + this.ziopSearched = false; + this.hasZIOPPolicies = false; + } + + public IIOPIOR(String id, TaggedProfile[] profiles) { + super( id, profiles ); + this.toString = null; + this.ziopSearched = false; + this.hasZIOPPolicies = false; + } + + public IIOPIOR( IOR ior ){ + assign( ior ); + } + + public void assign(IIOPIOR ior) { + super.profiles = ior.profiles; + super.type_id = ior.type_id; + this.toString = ior.toString; + } + + + public static IIOPIOR fromString(TIDORB orb, String ior_str) { + int length = ior_str.length(); + if (((length % 2) != 0) || (length < 14)) + throw new INV_OBJREF("IOR format error: invalid ior length.", 0, + CompletionStatus.COMPLETED_NO); + if (!ior_str.startsWith("IOR:")) + throw new INV_OBJREF("Invalid IOR format id: \"IOR:\".", 0, + CompletionStatus.COMPLETED_NO); + + byte[] buffer = new byte[(length - 4) / 2]; + char[] ior_chars = ior_str.toCharArray(); + int j = 4; + try { + for (int i = 0; i < buffer.length; i++) + buffer[i] = + (byte) (16 * (Base16Codec.getValue(ior_chars[j++])) + + Base16Codec.getValue(ior_chars[j++])); + } + catch (Exception e) { + throw new INV_OBJREF(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + // create the the ior with the new buffer + IIOPIOR ior = new IIOPIOR(); + + CDRInputStream internet_cdr = new CDRInputStream(orb, buffer); + + internet_cdr.setByteOrder(internet_cdr.read_boolean()); + + ior.read(internet_cdr); + + ior.toString = ior_str; + + return ior; + } + + + public synchronized IIOPProfile profileIIOP() { + if (iiopProfile != null) + return iiopProfile; + + if (iiopProfileSearched) + throw new org.omg.CORBA.INV_OBJREF(); + + iiopProfileSearched = true; + + int count = super.memberCount(); + + for (int i = 0; i < count; i++) { + if ( super.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value) { + iiopProfilePosition = i; + iiopProfile = ( IIOPProfile ) getProfile( i ); + return iiopProfile; + } + } + + throw new org.omg.CORBA.INV_OBJREF(); + } + + public ObjectKey getObjectKey() { + IIOPProfile profile = this.profileIIOP(); + + return profile.getObjectKey(); + } + + public TargetAddress toObjectKeyAddress() { + TargetAddress address = new TargetAddress(); + + address.setObjectKey(getObjectKey()); + + return address; + } + + public TargetAddress toProfileAddress() { + + IIOPProfile profile = profileIIOP(); + + TargetAddress address = new TargetAddress(); + + address.profile(profile); + + return address; + } + + public TargetAddress toIORAddress() { + IIOPProfile profile = profileIIOP(); + + TargetAddress address = new TargetAddress(); + + address.ior(new IORAddressingInfo(iiopProfilePosition, this)); + + return address; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.iop.IOR#toURL() + */ + public String toURL() { + return Corbaloc.toURL( this ); + } + + public boolean is_ZIOP() { + if (!ziopSearched) { + hasZIOPPolicies = ZIOP.checkCompressionEnabled(profileIIOP().getPolicies()); + ziopSearched = true; + } + return hasZIOPPolicies; + } + + public PolicyContext policies() { + IIOPProfile profile = profileIIOP(); + return profile.getPolicies(); + } + + public org.omg.SSLIOP.SSL get_SSL() { + if (!this.iiopProfileSearched) + return this.profileIIOP().getSSLComponent().getSSL(); + else + throw new org.omg.CORBA.INV_OBJREF("No SSL Component found in IOR", 0, + CompletionStatus.COMPLETED_NO); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..1a7d6f2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPLocateResponseHandler.java.svn-base @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.LocateResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + */ +public class IIOPLocateResponseHandler extends QueuedLocateResponseHandler implements LocateResponseHandler { + + private IIOPConnection conn; + private GIOPVersion version; + private RequestId requestId; + private ObjectKey objectKey; + + + public IIOPLocateResponseHandler( IIOPConnection conn, + GIOPVersion version, + RequestId requestId, + ObjectKey objectKey) + { + setConnection( conn ); + setVersion ( version ); + setRequestId ( requestId ); + setObjectKey ( objectKey ); + } + + public void setConnection( IIOPConnection conn ){ + this.conn = conn; + } + + public IIOPConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setRequestId( RequestId requestId ){ + this.requestId = requestId; + } + + public RequestId getRequestId(){ + return this.requestId; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + throw new INTERNAL("Not supported"); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, reference ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, e ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#setResponseValue(boolean) + */ + public void submitResponse( boolean value ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, value ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPProfile.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPProfile.java.svn-base new file mode 100644 index 0000000..9a673e5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPProfile.java.svn-base @@ -0,0 +1,402 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.IOP.TAG_INTERNET_IOP; +import org.omg.IOP.TAG_ORB_TYPE; +import org.omg.IOP.TAG_POLICIES; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.iop.ORBComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.security.CSIComponent; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedComponentReader; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * IIOPProfile defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class IIOPProfile extends TaggedProfile { + + private GIOPVersion m_version; + + private ListenPoint m_listen_point; + + private ObjectKey m_object_key; + + private TaggedComponent[] m_components; + + private CDRInputStream m_profile_data; + + public IIOPProfile() + { + super(TAG_INTERNET_IOP.value); + + m_version = null; + m_listen_point = null; + m_object_key = null; + m_components = null; + m_profile_data = null; + } + + public IIOPProfile(GIOPVersion version, ListenPoint listen_point) + { + super(TAG_INTERNET_IOP.value); + this.m_version = version; + this.m_listen_point = listen_point; + m_object_key = null; + m_components = null; + m_profile_data = null; + } + + public IIOPProfile(GIOPVersion version, + ListenPoint listen_point, + ObjectKey object_key, + TaggedComponent[] tagged_components) + { + super(TAG_INTERNET_IOP.value); + this.m_version = version; + this.m_listen_point = listen_point; + this.m_object_key = object_key; + m_components = tagged_components; + m_profile_data = null; + } + + public GIOPVersion getVersion() + { + if (m_version == null) + extractMembers(); + return m_version; + + } + + public ListenPoint getListenPoint() + { + if (m_listen_point == null) + extractMembers(); + + // Remove %interface from host string + int pos = m_listen_point.m_host.indexOf("%"); + if (pos != -1) { + String only_host_string; + only_host_string = m_listen_point.m_host.substring(0,pos); + m_listen_point.m_host = only_host_string; + } + + return m_listen_point; + } + + public ObjectKey getObjectKey() + { + if (m_object_key == null) + extractMembers(); + return m_object_key; + } + + public TaggedComponent[] getTaggedComponents() + { + if (m_components == null) + extractMembers(); + return m_components; + } + + public boolean equal( Object profile) + { + if (m_profile_data != null) + extractMembers(); + + IIOPProfile iiopProfile; + if ( profile instanceof IIOPProfile ){ + iiopProfile = ( IIOPProfile )profile; + } else { + iiopProfile = null; + } + + return iiopProfile != null && + getVersion() .equal ( iiopProfile.getVersion() ) && + getListenPoint().equals( iiopProfile.getListenPoint() ) && + getObjectKey() .equal ( iiopProfile.getObjectKey() ); + } + + public void partialRead( es.tid.TIDorbj.core.cdr.CDRInputStream input ) { + m_profile_data = input.copy(); + input.skipEncapsulation(); + } + + synchronized protected void extractMembers() { + if (m_version != null) // has the members + return; + + if (m_profile_data == null) + throw new org.omg.CORBA.INTERNAL("Empty Profile"); + + m_profile_data.enterEncapsulation(); + + m_version = GIOPVersion.read(m_profile_data); + + m_listen_point = ListenPoint.read(m_profile_data); + + m_object_key = new ObjectKey(); + m_object_key.read( m_profile_data ); + if (m_version.minor != 0) { + int size = m_profile_data.read_ulong(); + if (size < 0) { + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + } else { + m_components = new TaggedComponent[size]; + for (int i = 0; i < size; i++) { + + TaggedComponent comp = + TaggedComponentReader.read(m_profile_data); + + m_components[i] = comp; + + // Check tag + + if (comp.m_tag == TAG_POLICIES.value) { + PoliciesComponent policies_component = (PoliciesComponent) comp; + //m_policies = policies_component.getPolicies(); + } + if (comp.m_tag == TAG_SSL_SEC_TRANS.value) { + SSLComponent ssl_component = (SSLComponent) comp; + m_listen_point.m_ssl_port = ssl_component.getSSLPort(); + // m_ssl = ssl_component.getSSL(); + } + if (comp.m_tag == TAG_CSI_SEC_MECH_LIST.value) { + CSIComponent csi_component = (CSIComponent) comp; + + } + + } + } + } + + m_profile_data = null; + } + + public void write(CDROutputStream out) + { + extractMembers(); + + // write tag + out.write_ulong(tag); + + // write profile data + + out.enterEncapsulation(); + + m_version.write(out); + ListenPoint.write(out, m_listen_point); + m_object_key.write(out); + + if (m_version.minor != 0) { + if (m_components == null) + out.write_ulong(0); + else { + out.write_ulong(m_components.length); + for (int i = 0; i < m_components.length; i++) + m_components[i].write(out); + } + } + + out.exitEncapsulation(); + } + + public String toString() + { + if (m_profile_data != null) + extractMembers(); + + boolean from_tidorb = false; + + if (m_components != null) + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_ORB_TYPE.value) { + if (((ORBComponent) m_components[i]).m_orb_type + == ConfORB.ORB_TYPE.m_orb_type) { + from_tidorb = true; + break; + } + } + + StringBuffer buffer = new StringBuffer(); + + buffer.append("Profile: { "); + buffer.append('\n'); + buffer.append('\t'); + buffer.append(getVersion().toString()); + buffer.append(", "); + buffer.append('\n'); + buffer.append('\t'); + buffer.append(getListenPoint().toString()); + buffer.append(", "); + + ORBComponent orb_component = getORBComponent(); + if (orb_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_ORB_TYPE: "); + buffer.append(orb_component.toString()); + } + + PoliciesComponent policies_component = getPoliciesComponent(); + if (policies_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_POLICIES: "); + buffer.append(policies_component.toString()); + } + + + SSLComponent ssl_component = getSSLComponent(); + if (ssl_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_SSL_SEC_TRANS: "); + buffer.append(ssl_component.toString()); + } + + CSIComponent csi_component = getCSIComponent(); + if (csi_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_CSI_SEC_MECH_LIST: "); + buffer.append(csi_component.toString()); + } + + buffer.append('\n'); + buffer.append('\t'); + + if ( from_tidorb ) { + POAKey key; + try { + key = POAKey.createKey( getObjectKey().getMarshaledKey() ); + buffer.append( key.toString() ); + } catch ( Throwable th ) { + buffer.append( "ObjectKey[OPAQUE]" ); + } + + } else { + buffer.append("ObjectKey[OPAQUE]"); + } + buffer.append('\n'); + buffer.append('}'); + + return buffer.toString(); + } + + /** + * @return + */ + public PoliciesComponent getPoliciesComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_POLICIES.value) { + return (PoliciesComponent) m_components[i]; + } + } + + return null; + } + + + public ORBComponent getORBComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_ORB_TYPE.value) { + return (ORBComponent) m_components[i]; + } + } + + return null; + } + + public SSLComponent getSSLComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_SSL_SEC_TRANS.value) { + return (SSLComponent) m_components[i]; + } + } + return null; + } + + + public CSIComponent getCSIComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_CSI_SEC_MECH_LIST.value) { + return (CSIComponent) m_components[i]; + } + } + return null; + } + + + public PolicyContext getPolicies() + { + PoliciesComponent policies_component = this.getPoliciesComponent(); + if (policies_component != null) + return policies_component.getPolicies(); + else + return null; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPResponseHandler.java.svn-base new file mode 100644 index 0000000..505a642 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IIOPResponseHandler.java.svn-base @@ -0,0 +1,193 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + + +/** + * ResponseHandler implementation for the IIOPCommunicationLayer + * + * @author jprojas + * + */ +public class IIOPResponseHandler extends QueuedResponseHandler implements ResponseHandler { + + private IIOPConnection conn; + private GIOPVersion version; + private ServerRequestImpl serverRequest; + private ObjectKey objectKey; + private PolicyContext policySupplier; + + public IIOPResponseHandler( IIOPConnection conn, + GIOPVersion version, + ServerRequestImpl + serverRequest, + ObjectKey objectKey, + PolicyContext policySupplier){ + setConnection( conn ); + setVersion( version ); + setServerRequest( serverRequest ); + setObjectKey( objectKey ); + setPolicyContext( policySupplier ); + } + + public void setConnection( IIOPConnection conn ){ + this.conn = conn; + } + + public IIOPConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setServerRequest( ServerRequestImpl serverRequest ){ + this.serverRequest = serverRequest; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + /** + * @param policySupplier The policySupplier to set. + */ + public void setPolicyContext(PolicyContext policySupplier) + { + this.policySupplier = policySupplier; + } + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + return this.policySupplier; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.serverRequest.setForward( reference ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + if( this.serverRequest.withResponse() ) { + this.serverRequest.setSystemException( e ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.conn.sendReply( this.serverRequest, this.policySupplier ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /** + * remove from here + * @author jprojas + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IORAddressingInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IORAddressingInfo.java.svn-base new file mode 100644 index 0000000..5180293 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/IORAddressingInfo.java.svn-base @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +/** + * IORAddressingInfo structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class IORAddressingInfo { + + public int m_selected_profile_index; + + public IOR m_ior; + + public IIOPProfile getProfileIIOP() + { + if (m_selected_profile_index == -1) + return null; + else + return (IIOPProfile) m_ior.getProfile(m_selected_profile_index); + } + + public IORAddressingInfo(int selected_profile_index, IOR ior) + { + this.m_selected_profile_index = selected_profile_index; + this.m_ior = ior; + } + + public static IORAddressingInfo + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int index; + + index = input.read_ulong(); + + IOR ior = new DefaultIOR(); + + ior.read(input); + + if (index >= ior.memberCount()) + throw new MARSHAL("Invalid selected Profile Number: " + index, + 0, + CompletionStatus.COMPLETED_NO); + + return new IORAddressingInfo(index, ior); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_selected_profile_index); + m_ior.write(output); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ListenPoint.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ListenPoint.java.svn-base new file mode 100644 index 0000000..f7e6a45 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ListenPoint.java.svn-base @@ -0,0 +1,110 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +/** + * ListenPoint structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ListenPoint +{ + private String m_str; + + public String m_host; + + public int m_port; + + public int m_ssl_port; + + public ListenPoint(String host, int port) + { + m_str = null; + m_host = host; + m_port = port; + m_ssl_port = 0; + } + + public boolean equals(Object obj) + { + if (obj instanceof ListenPoint) { + ListenPoint other = (ListenPoint) obj; + return (m_port == other.m_port) && (m_host.equals(other.m_host)); + } + + return false; + } + + public int hashCode() + { + return m_host.hashCode() + m_port; + } + + public static ListenPoint read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + return new ListenPoint(input.read_string(), + 0xffff & input.read_ushort()); + } + + public static void write(es.tid.TIDorbj.core.cdr.CDROutputStream output, + ListenPoint point) + { + output.write_string(point.m_host); + output.write_ushort((short) point.m_port); + } + + public String toString() + { + if (m_str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("ListenPoint("); + buffer.append(String.valueOf(m_port)); + buffer.append('@'); + buffer.append(m_host); + buffer.append(')'); + m_str = buffer.toString(); + } + return m_str; + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/Lock.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/Lock.java.svn-base new file mode 100644 index 0000000..a61d5d8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/Lock.java.svn-base @@ -0,0 +1,133 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.util.OperationCompletion; + +/** + * Lock where the the threads that have invoked a request must be locket until + * the complete response has been replied or the response timeout has expired. + * + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class Lock +{ + + /** + * The Operation Completion Status. + */ + OperationCompletion m_state; + + /** + * Request identifier. This identifier will be the key for the connection + * thread to + */ + + RequestId m_request_id; + + GIOPFragmentedMessage message; + + public Lock() + { + m_request_id = null; + message = null; + m_state = new OperationCompletion(); + } + + public RequestId requestId() + { + return m_request_id; + } + + public void requestId(RequestId id) + { + m_request_id = id; + } + + public boolean getCompleted() + { + return m_state.isCompleted(); + } + + public void setCompleted() + { + m_state.setCompleted(); + } + + public void setMessage(GIOPFragmentedMessage msg) + { + message = msg; + } + + public GIOPFragmentedMessage getMessage() + { + return message; + } + + public void waitForCompletion(long how_long) + { + try { + m_state.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + public void cancelWaiting() + { + m_state.interruptWaiting(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockEnumeration.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockEnumeration.java.svn-base new file mode 100644 index 0000000..bea3bf2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockEnumeration.java.svn-base @@ -0,0 +1,63 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +public class LockEnumeration +{ + java.util.Enumeration m_elements; + + public LockEnumeration(java.util.Enumeration elements) + { + m_elements = elements; + } + + public boolean hasMoreElements() + { + return m_elements.hasMoreElements(); + } + + public Lock next() + { + return (Lock) m_elements.nextElement(); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockList.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockList.java.svn-base new file mode 100644 index 0000000..9e386ff --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/LockList.java.svn-base @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.giop.RequestId; + +public class LockList +{ + + java.util.Hashtable m_table; + + public LockList() + { + m_table = new java.util.Hashtable(); + } + + public void put(Lock lock) + { + m_table.put(lock.requestId(), lock); + } + + public Lock get(RequestId request_id) + { + return (Lock) m_table.get(request_id); + } + + public void remove(RequestId request_id) + { + m_table.remove(request_id); + } + + public int size() + { + return m_table.size(); + } + + public LockEnumeration elements() + { + return new LockEnumeration(m_table.elements()); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/OpeningLock.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/OpeningLock.java.svn-base new file mode 100644 index 0000000..562764e --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/OpeningLock.java.svn-base @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.Connection; + +/** + * + * Maintains the connection opening lock. + * + * @author Juan A. Caceres + * @version 1.0 + */ + +class OpeningLock +{ + + public final static int OPENING = 0; + + public final static int OPENED = 1; + + public final static int ERROR = 2; + + private int m_status; + + //private IIOPConnection m_opened_connection; + private Connection m_opened_connection; + + private org.omg.CORBA.COMM_FAILURE m_error; + + public OpeningLock() + { + m_status = OPENING; + m_opened_connection = null; + m_error = null; + } + + //public synchronized IIOPConnection waitOpening(long time) + public synchronized Connection waitOpening(long time) + { + if (m_status == OPENING) { + try { + wait(time); + } + catch (InterruptedException ioe) {} + } + + if (m_status == OPENED) + return m_opened_connection; + + else if (m_status == ERROR) + throw m_error; + else + //throw new org.omg.CORBA.COMM_FAILURE("IIOPConnection timout"); + throw new org.omg.CORBA.COMM_FAILURE("Connection timout"); + } + + //public synchronized void setOpened(IIOPConnection conn) + public synchronized void setOpened(Connection conn) + { + m_status = OPENED; + m_opened_connection = conn; + notifyAll(); + } + + public synchronized void setError(org.omg.CORBA.COMM_FAILURE failure) + { + m_status = ERROR; + m_error = failure; + notifyAll(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/RECOVERABLE_COMM_FAILURE.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/RECOVERABLE_COMM_FAILURE.java.svn-base new file mode 100644 index 0000000..e7c7c97 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/RECOVERABLE_COMM_FAILURE.java.svn-base @@ -0,0 +1,63 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +/** + * Failure thrown in connection that can be recovered for resending requests. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class RECOVERABLE_COMM_FAILURE extends Exception +{ + + public org.omg.CORBA.COMM_FAILURE m_comm_failure; + + public RECOVERABLE_COMM_FAILURE(COMM_FAILURE failure) + { + m_comm_failure = failure; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ReliableOnewayThread.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ReliableOnewayThread.java.svn-base new file mode 100644 index 0000000..feb5481 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ReliableOnewayThread.java.svn-base @@ -0,0 +1,67 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.RequestImpl; + + +public class ReliableOnewayThread extends java.lang.Thread +{ + IIOPCommLayer m_comm; + + RequestImpl m_request; + + IIOPIOR m_ior; + + public ReliableOnewayThread(IIOPCommLayer comm, RequestImpl req, IIOPIOR ior) + { + this.m_comm = comm; + m_request = req; + this.m_ior = ior; + } + + public void run() + { + m_comm.reliableOnewayRun(m_request, m_ior); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ServerListener.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ServerListener.java.svn-base new file mode 100644 index 0000000..3112b48 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/ServerListener.java.svn-base @@ -0,0 +1,376 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.Trace; + +public class ServerListener extends Thread +{ + + /** + * ServerSocket state + */ + + boolean m_shutdowned; + + boolean m_connected; + + /** + * ServerSocket where the communication layer will accept connections. This + * socket will be only avalilable when a the ORB's run method + * had been invoked. + */ + ServerSocket m_server_socket; + + /** + * Conection manager. + */ + IIOPConnectionManager m_manager; + + /** + * Listen points where the ServerSocket will be listening. This + * Vector { point(host,port) } will be used to create de local IOR's. + */ + java.util.Vector m_listen_points; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + ServiceContextList m_bidirectional_service; + + es.tid.TIDorbj.core.TIDORB m_orb; + + String hostAddress; + String hostName; + int port; + int backlog; + int reconnect; + GIOPVersion giopVersion; + boolean ipv6; + String iface; + String m_listen_points_string; + + public ServerListener(IIOPConnectionManager manager) + { + m_shutdowned = true; + m_connected = false; + + this.m_manager = manager; + m_orb = manager.orb(); + + m_listen_points = new java.util.Vector(); + InetAddress inet; + + + this.hostAddress = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS ) + .getValue(); + this.hostName = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_NAME ) + .getValue(); + this.port = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.PORT ) + .getInt(); + this.backlog = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_BACKLOG ) + .getInt(); + this.reconnect = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_RECONNECT ) + .getInt(); + this.giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + this.iface = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IFACE ) + .getString(); + + + try { + if ( hostAddress == null) { + m_server_socket = new ServerSocket( this.port , this.backlog ); + } else { + m_server_socket = new ServerSocket( + this.port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + + if (this.hostName != null) { + m_listen_points.addElement(new ListenPoint(this.hostName, + m_server_socket.getLocalPort())); + } else { + + if (this.ipv6) { + if ( hostAddress == null) { + inet = InetAddress.getByName("::1"); //ip6-localhost"); + } + else { + inet = InetAddress.getByName(hostAddress); + } + m_listen_points.addElement(new ListenPoint( + inet.getHostAddress(), + m_server_socket.getLocalPort())); + } + + inet = InetAddress.getLocalHost(); + m_listen_points.addElement(new ListenPoint( + inet.getHostAddress()+ "%" + iface, + m_server_socket.getLocalPort())); + } + + m_shutdowned = false; + m_connected = true; + + } + catch (java.io.IOException e) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open ServerSocket: " + e.toString() + ); + } + + m_listen_points_string = ""; + for (int i = 0; i < m_listen_points.size(); i++) { + m_listen_points_string += m_listen_points.elementAt(i).toString(); + m_listen_points_string += " "; + } + + + m_orb.printTrace( + Trace.DEBUG, "ServerListener connected at: " + m_listen_points_string + ); + } + + public java.util.Vector getListenPoints() { + return m_listen_points; + } + + public synchronized void shutdown() { + if (!m_shutdowned) { + m_shutdowned = true; + try { + m_server_socket.close(); + } catch (Throwable th) {} + + m_server_socket = null; + + m_orb.printTrace( + Trace.DEBUG, "ServerListener at " + m_listen_points_string + " shutdown!" + ); + } + } + + public synchronized void resetServerSocket() { + if (!m_shutdowned) { + try { + if (m_server_socket != null) + m_server_socket.close(); + } + catch (Throwable th) {} + + try { + if ( this.hostAddress == null) { + m_server_socket = new ServerSocket( + ((ListenPoint)m_listen_points.elementAt(0)).m_port, + this.backlog + ); + } else { + m_server_socket = new ServerSocket( + ((ListenPoint)m_listen_points.elementAt(0)).m_port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + } catch (Throwable th) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open ServerSocket: " + th.toString() + ); + } + } + } + + public void run() + { + while (!m_shutdowned) { + while (m_connected) { + + Socket client_socket = null; + try { + client_socket = m_server_socket.accept(); + } catch (Throwable se) { + + if ( m_shutdowned ){ + return; + } + + m_connected = false; + + m_orb.printTrace( + Trace.ERROR, "Error in ServerSocket.accept(): ", se + ); + } + + try { + if (client_socket != null) { + m_manager.createServerConnection(client_socket); + } + } catch (Throwable e) { + try { + client_socket.close(); + } catch (Throwable t) {} + + m_orb.printTrace( + Trace.ERROR, "Error creating ServerConnection: ", e + ); + } + } + + if ((!m_connected) && (!m_shutdowned)) { + + // RECONNECT + + //printTrace will check for a trace handler existence + m_orb.printTrace( Trace.DEBUG, "Trying to reconnect server socket "); + + try { + resetServerSocket(); + m_connected = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, "ServerSocket reconnected" + ); + } + } catch (Throwable th) { + m_orb.printTrace( + Trace.ERROR, "ServerSocket reconnect error: ", th + ); + try { + Thread.sleep( this.reconnect ); + } catch (InterruptedException e) {} + } + } + } + } + + public IOR createIOR(String id, POAKey key, + TaggedComponent[] extraComponents) { + + TaggedProfile[] profiles = new TaggedProfile[m_listen_points.size()]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + for (int i = 0; i < m_listen_points.size(); i++) { + profiles[i] = new IIOPProfile(this.giopVersion, + (ListenPoint)m_listen_points.elementAt(i), + key, + components); + } + + return new IIOPIOR(id, profiles); + }//createIOR + + public IOR createIOR(String id, ObjectKey key, + TaggedComponent[] extraComponents) { + + TaggedProfile[] profiles = new TaggedProfile[m_listen_points.size()]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + for (int i = 0; i < m_listen_points.size(); i++) { + profiles[i] = new IIOPProfile(this.giopVersion, + (ListenPoint)m_listen_points.elementAt(i), + key, + components); + } + + return new IIOPIOR(id, profiles); + }//createIOR + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/TargetAddress.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/TargetAddress.java.svn-base new file mode 100644 index 0000000..cf2c8ac --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/TargetAddress.java.svn-base @@ -0,0 +1,206 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.iop.TaggedProfileReader; + +/** + * Union TargetAddress defined in GIOP module (version 1.2). + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: jprojas: should be refactored to use a generic profile and moved to giop +//package +public class TargetAddress +{ + + short m_discriminator; + + protected ObjectKey m_object_key; + + protected IIOPProfile m_profile; + + protected IORAddressingInfo m_ior; + + public TargetAddress() + { + reset(); + } + + public short setObjectKey(ObjectKey value) + { + reset(); + m_discriminator = AddressingDisposition._KeyAddr; + m_object_key = value; + return m_discriminator; + } + + public IIOPProfile profile() + { + return m_profile; + } + + public short profile(IIOPProfile value) + { + reset(); + m_discriminator = AddressingDisposition._ProfileAddr; + m_profile = value; + return m_discriminator; + } + + public IORAddressingInfo ior() + { + return m_ior; + } + + public short ior(IORAddressingInfo value) + { + reset(); + m_discriminator = AddressingDisposition._ReferenceAddr; + m_ior = value; + return m_discriminator; + } + + public short discriminator() + { + return m_discriminator; + } + + private void reset() + { + m_discriminator = -1; + m_object_key = null; + m_profile = null; + m_ior = null; + } + + public ObjectKey getObjectKey() + { + if (m_discriminator < 0) + return null; + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + return m_object_key; + case AddressingDisposition._ProfileAddr: + return m_profile.getObjectKey(); + case AddressingDisposition._ReferenceAddr: + TaggedProfile tag_profile; + tag_profile = + m_ior.m_ior.getProfile(m_ior.m_selected_profile_index); + if (tag_profile instanceof IIOPProfile) + return ((IIOPProfile) tag_profile).getObjectKey(); + else + return null; // I can not know how select get the object key + default: + return null; + } + } + + public boolean write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + if (m_discriminator < 0) + return false; + out.write_short(m_discriminator); + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + m_object_key.write(out); + break; + case AddressingDisposition._ProfileAddr: + m_profile.write(out); + break; + case AddressingDisposition._ReferenceAddr: + m_ior.write(out); + break; + default: + return false; + } + return true; + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream in) + { + reset(); + AddressingDisposition disposition = + AddressingDisposition.from_short(in.read_short()); + + if (disposition == null) { + throw new MARSHAL("Invalid TargetAddress discriminator", + 0, + CompletionStatus.COMPLETED_NO); + } + + m_discriminator = disposition.value(); + + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + m_object_key = new ObjectKey(); + m_object_key.read(in); + break; + case AddressingDisposition._ProfileAddr: + TaggedProfile tag_profile = TaggedProfileReader.read(in); + if (tag_profile instanceof IIOPProfile) + m_profile = (IIOPProfile) tag_profile; + else + throw new MARSHAL("IIOP Profile expected.", + 0, + CompletionStatus.COMPLETED_NO); + + break; + case AddressingDisposition._ReferenceAddr: + m_ior = IORAddressingInfo.read(in); + break; + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/WriteTimeout.java.svn-base b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/WriteTimeout.java.svn-base new file mode 100644 index 0000000..1c33b21 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/.svn/text-base/WriteTimeout.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +public class WriteTimeout extends Exception +{} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/CommLayer.java b/source/es/tid/TIDorbj/core/comm/iiop/CommLayer.java new file mode 100644 index 0000000..9bfe6ac --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/CommLayer.java @@ -0,0 +1,248 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.comm.local.LocalCommLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommLayer; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Communication Layer. It will manage requests, dispatching these to the local + * or the internet communication layers. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @see es.tid.TIDorbj.core.comm.local.LocalCommLayer + * @see es.tid.TIDorbj.core.comm.iiopCommLayer + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +// TODO: move comm.iiop.CommLayer to comm.CommLayer + +public class CommLayer extends CommunicationLayer +{ + /** + * the internet layer for sending remote request + */ + IIOPCommLayer m_external_layer; + + /** + * the local layer for sending request to local objects. + */ + es.tid.TIDorbj.core.comm.local.LocalCommLayer m_internal_layer; + + public CommLayer(es.tid.TIDorbj.core.TIDORB orb) + { + super(orb); + + if ( orb.m_conf.comm_layers.indexOf("es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer" ) > -1 ) { + m_external_layer = new SSLIOPCommLayer(orb); + } else { + m_external_layer = new IIOPCommLayer(orb); + } + + m_internal_layer = new LocalCommLayer(orb); + } + + /** + * Sends a request. + * + * @param request + * the CORBA request. + */ + public void request( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + // check policy context + + try { + + if (isLocal(ior)) { + // si es local + m_internal_layer.request(request, ior); + } else { + m_external_layer.request(request, ior); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Sends a oneway request. + * + * @param request + * the CORBA request. + */ + public void onewayRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + try { + if (isLocal(ior)) { + // si es local + m_internal_layer.onewayRequest(request, ior); + } else { + m_external_layer.onewayRequest(request, ior); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + // AMI callback operations + + /** + * Sends a asynchronous request. + * + * @param request + * the CORBA request. + */ + public void asyncRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) //*opc1*, Object ami_handler) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + // check policy context + + try { + + if (isLocal(ior)) { + // si es local + m_internal_layer.asyncRequest(request, ior); //*opc1*, ami_handler); + } else { + m_external_layer.asyncRequest(request, ior); //*opc1*, ami_handler); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Sends a object existence request using the local or the IIOP + * communication layers. + * + * @param ior + * the object IOR. + */ + + public boolean objectExists( IIOPIOR ior, + PolicyContext policy_context) + throws es.tid.TIDorbj.core.comm.ForwardRequest + { + + try { + if (isLocal(ior)) { + return m_internal_layer.objectExists(ior, policy_context); + } else { + return m_external_layer.objectExists(ior, policy_context); + } + } + catch (java.lang.OutOfMemoryError ome) { + throw new org.omg.CORBA.NO_MEMORY(); + } + } + + /** + * Test whether an ior is local to the ORB or not. + * + * @param ior + * the object IOR. + */ + public boolean isLocal( IIOPIOR ior) + { + return m_external_layer.isLocal(ior); + } + + public void shutdown() + { + m_external_layer.shutdown(); + } + + public void destroy() + { + m_external_layer.destroy(); + } + + public IIOPCommLayer getExternalLayer() + { + return m_external_layer; + } + + /** + * Prepare a stream based request. + * + * @param request + * the CORBA request. + */ + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + m_external_layer.prepareRequest(request); + } + + public org.omg.CORBA.portable.InputStream + request(IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + PolicyContext policy_context) + throws es.tid.TIDorbj.core.comm.ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException + { + return m_external_layer.request(ior, stream, policy_context); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.java b/source/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.java new file mode 100644 index 0000000..9d6ece0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/CommunicationLayer.java @@ -0,0 +1,124 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 8 $ +* Date: $Date: 2006-01-24 17:36:46 +0100 (Tue, 24 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.comm.ForwardRequest; + +/** + * Base class for the ORB communications layers. + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class CommunicationLayer extends es.tid.TIDorbj.core.ORBComponent +{ + public CommunicationLayer(es.tid.TIDorbj.core.TIDORB orb) + { + super(orb); + } + + /** + * Sends a request. + * + * @param request + * the CORBA request. + */ + public abstract void request( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) + throws ForwardRequest; + + /** + * Sends a oneway request. + * + * @param request + * the CORBA request. + */ + public abstract void onewayRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior); + + /** + * Sends a asynchronous request. + * + * @param request + * the CORBA request. + */ + public abstract void asyncRequest( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior /* *opc1* , Object ami_handler*/) throws ForwardRequest; + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + * + */ + public abstract boolean + objectExists( + IIOPIOR ior, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws ForwardRequest; + + /** + * Prepare a stream based request. + * + * @param request + * the CORBA request. + */ + public abstract void prepareRequest( + es.tid.TIDorbj.core.StreamRequestImpl request ); + + public abstract org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ConnectionState.java b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionState.java new file mode 100644 index 0000000..5954e97 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionState.java @@ -0,0 +1,163 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +/** + * TIDorb IIOP IIOPConnection State. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class ConnectionState +{ + + /** + * Open connection state. + */ + public final static short OPEN_STATE = 0; + + /** + * Open connection state. + */ + public final static short CLOSING_STATE = 1; + + /** + * Open connection state. + */ + public final static short ERROR_STATE = 2; + + /** + * IIOPConnection state. + */ + private short m_state; + + /** + * IIOPConnection error that unhabilitates the connection. + */ + protected COMM_FAILURE m_connection_error; + + public ConnectionState() + { + m_state = OPEN_STATE; + m_connection_error = null; + } + + synchronized public boolean setClosing() + { + if (m_state != OPEN_STATE) + return false; + + m_state = CLOSING_STATE; + + return true; + } + + synchronized public boolean isOpen() + { + return m_state == OPEN_STATE; + } + + synchronized public boolean seterror(COMM_FAILURE error) + { + if (m_state == ERROR_STATE) { + return false; + } else if (m_state == CLOSING_STATE) { + m_state = ERROR_STATE; + m_connection_error = error; + return false; + } else { // OPEN_STATE + m_state = ERROR_STATE; + m_connection_error = error; + return true; + } + } + + synchronized public short getValue() + { + return m_state; + } + + public COMM_FAILURE getError() + { + return m_connection_error; + } + + /** + * Verify if the reply can be sent. + */ + synchronized public void verifyForReply() + { + switch (m_state) + { + case OPEN_STATE: + return; + case CLOSING_STATE: + throw new COMM_FAILURE("IIOPConnection is closed."); + case ERROR_STATE: + throw m_connection_error; + } + } + + /** + * Verify if the request can be sent. + */ + synchronized public void verifyForRequest() + throws RECOVERABLE_COMM_FAILURE + { + switch (m_state) + { + case OPEN_STATE: + return; + case CLOSING_STATE: + throw new RECOVERABLE_COMM_FAILURE( + new COMM_FAILURE("IIOPConnection is closed.")); + case ERROR_STATE: + throw new RECOVERABLE_COMM_FAILURE(m_connection_error); + } + } + +} + diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.java b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.java new file mode 100644 index 0000000..ac59088 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionThread.java @@ -0,0 +1,70 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + + +import es.tid.TIDorbj.core.comm.Connection; + +/** + * Thread that receives messages in the connection. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +// TODO: move comm.iiop.ConnectionThread to comm.ConnectionThread + +public class ConnectionThread extends java.lang.Thread +{ + Connection m_connection; + + public ConnectionThread(Connection conn) + { + m_connection = conn; + } + + public void run() + { + m_connection.receiveMessage(); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.java b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.java new file mode 100644 index 0000000..db05129 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ConnectionWriteMonitor.java @@ -0,0 +1,115 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision: 478 $ + * Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ + * Last modified by: $Author: avega $ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +public class ConnectionWriteMonitor +{ + final static int FREE = 0; + + final static int WRITTING = 1; + + final static int ERROR = 2; + + int m_status; + + int m_timeout; + + COMM_FAILURE m_exception; + + public ConnectionWriteMonitor(int timeout) + { + m_timeout = timeout; + m_status = FREE; + m_exception = null; + } + + public synchronized void initWrite() + throws WriteTimeout + { + long t0 = new java.util.Date().getTime();//msegs + long t1; + long dif = 0; + + while ( m_status==WRITTING && dif < m_timeout){ + try { + wait(m_timeout); + } + catch (java.lang.InterruptedException ie) {} + + t1 = new java.util.Date().getTime(); + dif = t1-t0; + } + + if (m_status == WRITTING) { + m_status = ERROR; + m_exception = new COMM_FAILURE("Socket write timeout"); + throw new WriteTimeout(); + } + + if (m_status == ERROR) + throw m_exception; + + if (m_status == FREE) + m_status = WRITTING; + } + + public synchronized void endWrite() + { + m_status = FREE; + notify(); + } + + public COMM_FAILURE getException() + { + return m_exception; + } + + public synchronized void setException(COMM_FAILURE cf) + { + m_exception = cf; + notifyAll(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.java b/source/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.java new file mode 100644 index 0000000..ff43202 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/FragmentedMessageHolder.java @@ -0,0 +1,77 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.util.RemovableObject; + +/** + * Adapter class for maintaining an uncompleted fragmented message in a + * UseTable. + * + * @see es.tid.TIDorbj.core.util.UseTable + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class FragmentedMessageHolder + implements RemovableObject +{ + + public GIOPFragmentedMessage m_message; + + public FragmentedMessageHolder(GIOPFragmentedMessage msg) + { + m_message = msg; + } + + /** + * The message will always can be removed. + */ + public boolean canBeRemoved() + { + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.java new file mode 100644 index 0000000..8b7a96b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommLayer.java @@ -0,0 +1,1047 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESOURCES; +import org.omg.CORBA.Object; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayerPropertiesInfo; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * IIOP Communications layer. It will manage the request for a remote object + * using the IIOP Protocol. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IIOPCommLayer extends es.tid.TIDorbj.core.comm.iiop.CommunicationLayer +{ + /** + * The ORB has been destroyed. + */ + + public boolean m_destroyed; + + /** + * Server Socket listening thread. + */ + protected ServerListener m_server_listener; + + /** + * Conection manager. + */ + protected IIOPConnectionManager m_connection_manager; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + protected ServiceContextList m_bidirectional_service; + + protected int max_recover_count; + protected int recover_time; + protected boolean reliable_oneway; + protected GIOPVersion giopVersion; + + //TODO: remove ORB's from here if possible, and get CommunicationLayer + public IIOPCommLayer(TIDORB orb) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb); + m_destroyed = false; + m_connection_manager = new IIOPConnectionManager(orb, this); + m_bidirectional_service = null; + m_server_listener = null; + + max_recover_count = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.MAX_COMM_RECOVERING_TRIES + ).getInt(); + + recover_time = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.COMM_RECOVERING_TIME + ).getInt(); + + reliable_oneway = orb.getCommunicationManager().getLayerById( + IIOPCommunicationLayer.ID + ).getPropertyInfo( + IIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY + ).getBoolean(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + } + + public IIOPCommLayer(TIDORB orb, SSLIOPCommLayer ssliop_layer) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb); + m_destroyed = false; + m_connection_manager = new IIOPConnectionManager(orb, ssliop_layer); + m_bidirectional_service = null; + m_server_listener = null; + + max_recover_count = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.MAX_COMM_RECOVERING_TRIES + ).getInt(); + + recover_time = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.COMM_RECOVERING_TIME + ).getInt(); + + reliable_oneway = orb.getCommunicationManager().getLayerById( + SSLIOPCommunicationLayer.ID + ).getPropertyInfo( + SSLIOPCommunicationLayerPropertiesInfo.RELIABLE_ONEWAY + ).getBoolean(); + + giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + } + + public boolean isLocal( IIOPIOR ior) + { + if (m_server_listener == null) // no object adaptor initialized + return false; + + // Check matching between IOR ListenPoint and server_listener ListenPoints + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + int i = 0; + + while (i < listen_points.size() ) { + if ( ((ListenPoint)listen_points.elementAt(i)).equals(ior.profileIIOP() + .getListenPoint())) + return true; + i++; + } + return false; + } + + public boolean hasServerListener() + { + return (m_server_listener != null); + } + + /** + * Sends a request (with response) allocating an active connection with the + * corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + protected void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + PolicyContext policy_context = request.getPolicyContext(); + + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendRequest(request, ior); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * Sends a request using the IIOP protocol. + * + * @param request + * the CORBA request. + */ + public void request(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws ForwardRequest + { + request.withResponse(true); + sendRequest(request, ior); + } + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void onewayRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + if ( reliable_oneway ) { + try { + ReliableOnewayThread th = + new ReliableOnewayThread(this, request, ior); + th.start(); + return; + } + catch (Throwable thw) { + throw new NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } else { + + try { + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + + conn = + m_connection_manager + .getClientConnection(profile.getListenPoint(), + request.getPolicyContext()); + + conn.sendOnewayRequestAsync(request, ior); + + } + catch (Throwable th) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + "Exception in oneway remote invocation", + th); + } + } + } + + /** + * Sends a asynchronous request using the IIOP protocol allocating an active + * connection with the corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + public void asyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) //*opc1*, Object ami_handler) + throws ForwardRequest + { + + request.withResponse(true); + + PolicyContext policy_context = request.getPolicyContext(); + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendAsyncRequest(request, ior); //*opc1*, ami_handler); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void reliableOnewayRun( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + PolicyContext policy_context = + request.getPolicyContext(); + + request.reliableOneway(true); + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + + conn = + m_connection_manager + .getClientConnection(profile.getListenPoint(), + policy_context); + + conn.sendOnewayRequestSync(request, ior); + + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) + throw rcf.m_comm_failure; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication" + +" recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + + recover_count--; + + if (m_orb.m_trace != null) { + String[] msg = { "Communication forwarded: ", + fr.forward_reference.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + } + } + } + catch (Throwable e) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Exception in reliable remote oneway invocation :", + e); + } + } + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + */ + public boolean objectExists(IIOPIOR ior, + PolicyContext policy_context) + throws ForwardRequest + { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendLocateRequest(ior, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + org.omg.CORBA.portable.ObjectImpl obj = request.getTarget(); + es.tid.TIDorbj.core.comm.CommunicationDelegate delegate = + (es.tid.TIDorbj.core.comm.CommunicationDelegate) obj + ._get_delegate(); + es.tid.TIDorbj.core.iop.IOR ior = delegate.getReference(); + + IIOPIOR iiopIOR; + if ( ior instanceof IIOPIOR ){ + iiopIOR = ( IIOPIOR )ior; + } else { + throw new org.omg.CORBA.INTERNAL("Not an IIOP IOR."); + } + + PolicyContext policy_context = + delegate.createRequestPolicyContext(); + + IIOPProfile profile; + profile = iiopIOR.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + } + + IIOPConnection conn = null; + int recover_count = max_recover_count; + + while (conn == null) { + + try { + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + } + + conn.prepareRequest(request, iiopIOR); + + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + CDROutputStream stream, + PolicyContext policy_context + ) throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + IIOPConnection conn = null; + int recover_count = max_recover_count; + + while (true) { + try { + + conn = + m_connection_manager.getClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendRequest(ior, stream, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * ORB Server IIOPConnection part shutdown. + */ + public synchronized void shutdown() + { + try { + if (m_server_listener != null) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "Shutdown IIOPCommLayer .ServerListener"); + } + m_server_listener.shutdown(); + m_server_listener = null; + } + } + catch (Throwable e) {} + } + + /** + * IIOP Layer close. + */ + public synchronized void destroy() + { + if (!m_destroyed) { + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, "Destroying IIOPCommLayer"); + } + + try { + if (m_server_listener != null) { + m_server_listener.shutdown(); + m_server_listener = null; + } + } + catch (Throwable e) {} + + try { + if (m_connection_manager != null) { + m_connection_manager.destroy(); + m_connection_manager = null; + } + } + catch (Throwable e) {} + + m_bidirectional_service = null; + + m_destroyed = true; + } + } + + public synchronized void initServerListener() + { + if (m_server_listener == null) { + m_server_listener = new ServerListener(m_connection_manager); + m_server_listener.setDaemon(false); + try { + + m_server_listener.start(); + + } + catch (Throwable thw) { + m_server_listener = null; + throw new org.omg.CORBA.NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } + } + + public synchronized IOR createIOR(String id, + POAKey key, + TaggedComponent[] extraComponents) + { + if (m_server_listener == null) + throw new org.omg.CORBA.INTERNAL("ServerListener not initialized"); + + // return m_server_listener.createIOR(id, key, components); + + TaggedProfile[] profiles = new TaggedProfile[1]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + int i = 0; + while (i < listen_points.size() ) { + profiles[i] = new IIOPProfile( + this.giopVersion, + (ListenPoint)listen_points.elementAt(i), + key, + components + ); + i++; + } + return new IIOPIOR(id, profiles); + + + } + + public synchronized IOR createIOR(String id, + ObjectKey key, + TaggedComponent[] extraComponents) + { + if (m_server_listener == null) + throw new org.omg.CORBA.INTERNAL("ServerListener not initialized"); + + // return m_server_listener.createIOR(id, key, components); + + + + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + TaggedProfile[] profiles = new TaggedProfile[listen_points.size()]; + int i = 0; + + while (i < listen_points.size() ) { + profiles[i] = new IIOPProfile( + this.giopVersion, + //m_server_listener.getListenPoint(), + (ListenPoint)listen_points.elementAt(i), + key, + components + ); + i++; + } + return new IIOPIOR(id, profiles); + + } + + + public synchronized ServiceContextList getBidirectionalService() + { + if (m_destroyed) + throw new org.omg.CORBA.BAD_INV_ORDER("ORB is destroying"); + + if (m_bidirectional_service == null) { + if (m_server_listener == null) + throw new INTERNAL("Trying to create a bidirectional context " + + "without ListenPoint"); + + java.util.Vector listen_points = m_server_listener.getListenPoints(); + + BiDirServiceContext bidir_context = new BiDirServiceContext(listen_points.size()); + + for (int i = 0; i < listen_points.size(); i++) { + bidir_context.m_listen_points[i] = + (ListenPoint)listen_points.elementAt(i); + } + + m_bidirectional_service = new ServiceContextList(1); + m_bidirectional_service.m_components[0] = bidir_context; + + } + + return m_bidirectional_service; + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.java new file mode 100644 index 0000000..5df3b43 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationDelegate.java @@ -0,0 +1,364 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; +import org.omg.CORBA.portable.RemarshalException; + +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * @author jprojas + * + */ +public class IIOPCommunicationDelegate extends CommunicationDelegate { + + private IIOPIOR iiopReference; + private IIOPCommunicationLayer communicationLayer; + + /** + * + */ + public IIOPCommunicationDelegate( IIOPCommunicationLayer communicationLayer ) { + super(); + if ( communicationLayer != null ){ + super.setORB( communicationLayer.getORB() ); + this.communicationLayer = communicationLayer; + this.forwardReference = null; + } else { + throw new IllegalArgumentException( + "Parameter 'commLayer' cannot be null" + ); + } + } + + public void setReference(IOR ior) { + IIOPIOR iiopIOR = null; + if(! (ior instanceof IIOPIOR) ) { + iiopIOR = new IIOPIOR(ior); + + } else { + iiopIOR = (IIOPIOR) ior; + } + + super.setReference(iiopIOR); + + IIOPProfile profile = iiopIOR.profileIIOP(); + + PoliciesComponent policiesComponent = profile.getPoliciesComponent(); + + if(policiesComponent != null) { + this.setPolicyContext(policiesComponent.getPolicies()); + } + + + + }//setReference + + + public synchronized IIOPIOR getIIOPReference(){ + if ( this.iiopReference == null ){ + this.iiopReference = new IIOPIOR(); + this.iiopReference.assign( super.reference ); + } + return this.iiopReference; + } + + + public IOR getReference(){ + return getIIOPReference(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#isLocal(org.omg.CORBA.Object) + */ + public boolean isLocal( org.omg.CORBA.Object self) { + + if ( super.getORB() == null) { + throw new BAD_OPERATION( + "ORB Singleton", 0, CompletionStatus.COMPLETED_NO ); + } + + try { + if ( this.forwardReference == null) { + return this.communicationLayer.isLocal( this.getIIOPReference() ); + } else { + return this.forwardReference.is_local(null); + } + } catch ( CommunicationException ce ) { + return false; + } + }//isLocal + + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#non_existent(org.omg.CORBA.Object) + */ + public boolean non_existent(org.omg.CORBA.Object self){ + TIDORB orb = super.getORB(); + if ( orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + PolicyContext request_policy_context = createRequestPolicyContext(); + + CommunicationLayer comm_layer = this.communicationLayer.getCommLayer(); + + try { + + if ( this.forwardReference == null) { + return !comm_layer.objectExists( + this.getIIOPReference(), + request_policy_context); + } else { // there is forwards + boolean non_existent = true; + try { + non_existent = this.forwardReference.non_existent(null); + } + catch (org.omg.CORBA.COMM_FAILURE cf) { + non_existent = true; + } + catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + non_existent = false; + } + + if (non_existent) { + this.forwardReference = null; + } + + return non_existent; + } + } catch (ForwardRequest fe) { + + this.setForward(fe); + + } + + return non_existent(self); + }//non_existent + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#duplicate(org.omg.CORBA.Object) + */ + public Object duplicate(Object self) { + IIOPCommunicationDelegate delegate; + delegate = new IIOPCommunicationDelegate( this.communicationLayer ); + delegate.setReference( this.getReference() ); + + delegate.forwardReference = this.forwardReference; + + //getPolicyContext never returns null. + delegate.setPolicyContext( super.getPolicyContext().duplicate() ); + + ObjectImpl obj = new ObjectImpl(); + + obj._set_delegate(delegate); + + return obj; + }//duplicate + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release(org.omg.CORBA.Object) + */ + public void release(org.omg.CORBA.Object self) { + //Empty treatment + }//release + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release_reply(org.omg.CORBA.Object, org.omg.CORBA.portable.InputStream) + */ + public void release_reply( + org.omg.CORBA.Object object, + org.omg.CORBA.portable.InputStream inputStream ) { + //Empty treatment + }//release_reply + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl) + */ + public void prepareRequest( StreamRequestImpl request ) { + this.communicationLayer.getCommLayer().prepareRequest( request ); + }//prepareRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#onewayRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void onewayRequest(RequestImpl request) { + if ( this.forwardReference != null ) { + this.forwardReference.onewayRequest(request); + } else { + this.communicationLayer.getCommLayer().onewayRequest( request, this.getIIOPReference() ); + } + }//oneWayRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(es.tid.TIDorbj.core.RequestImpl) + */ + public void invoke(RequestImpl request) { + try { + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().request( + request, + (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.invoke(request); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + invoke(request); + + }//forwarded + }//invoke + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(org.omg.CORBA.Object, org.omg.CORBA.portable.OutputStream) + */ + public InputStream invoke( + org.omg.CORBA.Object object, + OutputStream stream + ) throws ApplicationException, + RemarshalException { + + if (is_local(object)) { + throw new BAD_OPERATION("Request is only valid for remote objects"); + } + + if (stream instanceof es.tid.TIDorbj.core.cdr.CDROutputStream) { + + es.tid.TIDorbj.core.cdr.CDROutputStream out = + (es.tid.TIDorbj.core.cdr.CDROutputStream) stream; + try { + if ( this.forwardReference == null) { + return this.communicationLayer.getCommLayer().request( + (IIOPIOR)this.getReference(), + out, + createRequestPolicyContext() + ); + } else { + return this.forwardReference.invoke(object, stream); + } + + } + catch (es.tid.TIDorbj.core.comm.ForwardRequest fr) { + this.setForward(fr); + throw new org.omg.CORBA.portable.RemarshalException(); + } + } else { + throw new org.omg.CORBA.BAD_OPERATION("Not a TIDorbJ's Stream"); + } + }//invoke stream + + // AMI callback operations + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#asyncRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void asyncRequest(RequestImpl request, Object ami_handler ) { + try { + request.set_ami_handler(ami_handler); + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().asyncRequest( + request, (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.asyncRequest(request, ami_handler); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + asyncRequest(request, ami_handler); + + }//forwarded + }//asyncRequest + + + + + +}//IIOPCommunicationLayer diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.java new file mode 100644 index 0000000..aa5014d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayer.java @@ -0,0 +1,376 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.Properties; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationLayer; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.RequestDispatcher; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +/** + * Entry point for the IIOPCommunicationLayer + * + * @author Juan Pablo Rojas + * + * */ +public class IIOPCommunicationLayer implements CommunicationLayer { + + public static String ID = "IIOPCommunicationLayer"; + + /* + * used for incoming requests notifications + */ + private RequestDispatcher dispatcher; + + /* + * the underlying ORB implementation + */ + private TIDORB orb; + + private CommLayer commLayer; + + private IIOPCommunicationLayerPropertiesInfo propertiesInfo; + + /** + * + */ + public IIOPCommunicationLayer() { + + } + + public void setORB(TIDORB orb) { + if ( orb != null ){ + if ( this.orb != null ){ + this.commLayer.shutdown(); + this.propertiesInfo = null; + this.commLayer = null; + } + this.orb = orb; + this.propertiesInfo = IIOPCommunicationLayerPropertiesInfo.getInstance(); + this.orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + ) + ); + + + this.commLayer = new CommLayer( + this.orb + ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public CommLayer getCommLayer(){ + return this.commLayer; + } + + + public void setServerModeEnabled( boolean value ){ + if ( value ){ + this.commLayer.getExternalLayer().initServerListener(); + } + } + + public boolean isServerModeEnabled(){ + return this.commLayer.getExternalLayer().hasServerListener(); + } + + public synchronized ServiceContextList getBidirectionalService() { + return this.commLayer.getExternalLayer().getBidirectionalService(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String) + */ + public CommunicationDelegate createDelegate(String url) throws CommunicationException { + + CommunicationDelegate delegate; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorb:" ) ){ + ior = Corbaloc.getIOR( url ); + } else if(url.startsWith( "corbaloc::" ) || + url.startsWith( "corbaloc:iiop:" )) { + ior = IIOPCorbaloc.getIOR( url ); + } else { + ior = IIOPIOR.fromString(this.orb, url); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + delegate = createDelegate( ior ); + } else { + delegate = null; + } + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String, java.util.Properties) + */ + public CommunicationDelegate createDelegate(String url, Properties info) throws CommunicationException { + return createDelegate( url ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR) + */ + public CommunicationDelegate createDelegate(IOR ior) throws CommunicationException { + IIOPCommunicationDelegate delegate = new IIOPCommunicationDelegate( this ); + delegate.setReference( ior ); + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR, java.util.Properties) + */ + public CommunicationDelegate createDelegate(IOR ior, Properties info) throws CommunicationException { + return createDelegate( ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(java.lang.String) + */ + public boolean accepts(String url) throws CommunicationException { + return url!= null && + ( url.startsWith( "corbaloc:iiop:" ) || + url.startsWith( "corbaloc:tidorb:" ) || + url.startsWith( "corbaloc::" ) || + ( + url.startsWith( "IOR" ) && + this.accepts( DefaultIOR.fromString( this.orb, url ) ) + ) + ); + }//accepts + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(org.omg.IOP.IOR) + */ + public boolean accepts(IOR ior) throws CommunicationException { + boolean accepted; + accepted = ior instanceof IIOPIOR; + + int profilesCount = ior.memberCount(); + for (int i = 0; !accepted && i < profilesCount; i++) { + accepted = ior.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value; + } + + return accepted; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createIOR(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public IOR createIOR(String repositoryId, + ObjectKey key, + TaggedComponent[] components) + throws CommunicationException { + return this.commLayer.getExternalLayer().createIOR( + repositoryId, + key, + components + ); + }//createIOR + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createURL(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public String createURL(String repositoryId, ObjectKey key) throws CommunicationException { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(es.tid.TIDorbj.core.iop.IOR) + */ + public String getInitialReference( IOR ior ) throws CommunicationException { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(java.lang.String) + */ + public String getInitialReference( String url ) throws CommunicationException { + String initialReference; + try { + initialReference = IIOPCorbaloc.getObjectId( url ); + } catch ( Throwable th ){ + initialReference = null; + } + return initialReference; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(es.tid.TIDorbj.core.iop.IOR) + */ + public boolean isLocal(IOR ior) throws CommunicationException { + return ior != null && this.accepts( ior ) && this.commLayer.isLocal( (IIOPIOR)ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(java.lang.String) + */ + public boolean isLocal(String url) throws CommunicationException { + boolean isLocal; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorbj:" ) ){ + ior = Corbaloc.getIOR( url ); + } else { + ior = IIOPCorbaloc.getIOR( url ); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + isLocal = this.isLocal( ior ); + } else { + isLocal = false; + } + return isLocal; + }//isLocal + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getPropertyInfo(java.lang.String, java.util.Properties) + */ + public PropertyInfo[] getPropertiesInfo() { + return ( PropertyInfo[] )this.propertiesInfo.map.entrySet().toArray( new PropertyInfo[0] ); + }//getPropertiInfo + + public PropertyInfo getPropertyInfo( String name){ + return ( PropertyInfo )this.propertiesInfo.map.get( name ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMajorVersion() + */ + public int getMajorVersion() { + return 1; + }//getMajorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMinorVersion() + */ + public int getMinorVersion() { + return 0; + }//getMinorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getId() + */ + public String getId() { + return IIOPCommunicationLayer.ID; + } + + public String toString(){ + + String hostSpec; + hostSpec = this.propertiesInfo.hostName.value; + if ( hostSpec == null ){ + hostSpec = this.propertiesInfo.hostAddress.value; + } + if ( hostSpec == null ){ + try { + hostSpec = java.net.InetAddress.getLocalHost().getHostName(); + } + catch (Exception e) {} + } + + StringBuffer toString = new StringBuffer( "[ " ) + .append( IIOPCommunicationLayer.ID ) + .append( " ( iiop://" ) + .append( hostSpec ) + .append( ':' ) + .append( this.propertiesInfo.port.value ) + .append( " )" ) + .append( " ]"); + + return toString.toString(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#shutdown(boolean) + */ + public void shutdown( boolean waitForCompletion ) { + if ( this.commLayer != null ){ + if ( waitForCompletion ){ + this.commLayer.shutdown(); + } else { + this.commLayer.destroy(); + } + this.commLayer = null; + } + } + + + /** + * PRIVATE METHODS + * @author jprojas + */ + + public void dump(java.io.PrintWriter writer){ + this.propertiesInfo.dump(writer); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.java new file mode 100644 index 0000000..0d128cb --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCommunicationLayerPropertiesInfo.java @@ -0,0 +1,508 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import es.tid.TIDorbj.core.comm.PropertyInfo; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +//TODO:change to IIOPCommunicationLayerPropertiesInfo +public class IIOPCommunicationLayerPropertiesInfo { + + /** + * Assures that a oneway request could be forwarded. "true" or "false". + */ + public final static String RELIABLE_ONEWAY + = "es.tid.TIDorbj.iiop.reliable_oneway"; + public final static String DEFAULT_RELIABLE_ONEWAY + = "false"; + + + /** + * Fragment size Property name. + */ + public final static String FRAGMENT_SIZE + = "es.tid.TIDorbj.iiop.fragment_size"; + public final static String DEFAULT_FRAGMENT_SIZE + = "4096"; + + + /** + * GIOP version Property name. Values: "1.0", "1.1" and "1.2" + */ + public final static String GIOP_VERSION = + "es.tid.TIDorbj.iiop.GIOPVersion"; + public final static String DEFAULT_GIOP_VERSION + = "1.2"; + + /** + * ORB's maximum opened connections number. Value must be greater or equals + * to 0. Default value: 30. + */ + public final static String MAX_OPENED_CONNECTIONS + = "es.tid.TIDorbj.iiop.max_connections"; + public final static String DEFAULT_MAX_OPENED_CONNECTIONS + = "30"; + + + /** + * DefaultORB's maximum recovering a communication tries. Default value: + * 3. + * TODO: max_comm_recovering_times -> max_comm_recovering_tries, update doc + */ + public final static String MAX_COMM_RECOVERING_TRIES + = "es.tid.TIDorbj.iiop.max_comm_recovering_tries"; + public final static String DEFAULT_MAX_COMM_RECOVERING_TRIES = "3"; + + + /** + * ORB's maximum time upon recovering a communication. Values must be + * greater or equal than 0. + */ + public final static String COMM_RECOVERING_TIME + = "es.tid.TIDorbj.iiop.comm_recover_time"; + public final static String DEFAULT_COMM_RECOVERING_TIME + = "1000"; + + /** + * Maximum uncompleted messages per IIOPConnection. Default value: + * 25. + */ + public final static String MAX_UNCOMPLETED_MESSAGES = + "es.tid.TIDorbj.iiop.max_uncompleted_messages"; + public final static String DEFAULT_MAX_UNCOMPLETED_MESSAGES = "25"; + + /** + * IIOP hostname used for generated IORs and URLs. Default value: null + */ + public final static String HOST_NAME + = "es.tid.TIDorbj.iiop.host"; + public final static String DEFAULT_HOST_NAME + = null; + + /** + * IP address used for generated IORs and URLs. Default value: null + */ + public final static String HOST_ADDRESS + = "es.tid.TIDorbj.iiop.address"; + public final static String DEFAULT_HOST_ADDRESS + = null; + + /** + * IIOP port used for generated IORs and URLs. Default value: 0 + */ + public final static String PORT + = "es.tid.TIDorbj.iiop.port"; + public final static String DEFAULT_PORT + = "0"; + + + /** + * Sockets SO_LIGER property. Values must be greater or equal than -1. + * Default value -1 (no linger) + */ + public final static String SOCKET_LINGER + = "es.tid.TIDorbj.iiop.socket_linger"; + public final static String DEFAULT_SOCKET_LINGER + = "-1"; + + /** + * Sockets SO_TIMEOUT property. Values must be greater or equal than -1. + * Default value 0 (no timeout) + */ + public final static String SOCKET_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_timeout"; + public final static String DEFAULT_SOCKET_TIMEOUT + = "0"; + + + /** + * Sockets TCP_NODELAY property. Values must be "true" or "false". + */ + public final static String TCP_NODELAY + = "es.tid.TIDorbj.iiop.tcp_nodelay"; + public final static String DEFAULT_TCP_NODELAY + = "true"; + + /** + * Sockets TCP_CONNECT_TIMEOUT property. Values must be greater or equal to + * 0. Default value 1000. + */ + public final static String SOCKET_CONNECT_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_connect_timeout"; + public final static String DEFAULT_SOCKET_CONNECT_TIMEOUT + = "1000"; + + /** + * Sockets TCP_WRITE_TIMEOUT property. Values must be greater or equal to 0. + * Default value 2000. + */ + public final static String SOCKET_WRITE_TIMEOUT + = "es.tid.TIDorbj.iiop.socket_write_timeout"; + public final static String DEFAULT_SOCKET_WRITE_TIMEOUT + = "2000"; + + /** + * Server sockets BACKLOG property. Values must be greater or equal to 0. + * Default value. 10. + */ + public final static String SERVER_SOCKET_BACKLOG + = "es.tid.TIDorbj.iiop.server_socket_backlog"; + public final static String DEFAULT_SERVER_SOCKET_BACKLOG + = "10"; + + /** + * Server sockets RECONNECT property. Values must be greater or equal to + * 0. Default value: 0 + */ + public final static String SERVER_SOCKET_RECONNECT + = "es.tid.TIDorbj.iiop.server_socket_reconnect"; + public final static String DEFAULT_SERVER_SOCKET_RECONNECT + = "0"; + + /** + * mcpg - IPV6 property. Values must be "true" or "false". + */ + public final static String IPV6 + = "es.tid.TIDorbj.iiop.ipv6"; + public final static String DEFAULT_IPV6 + = "false"; + + /** + * mcpg - IFACEo property. Only need if there are an comunication of client in TIDorbC. + */ + public final static String IFACE + = "es.tid.TIDorbj.iiop.iface"; + public final static String DEFAULT_IFACE + = "eth0"; + + + public PropertyInfo reliableOneWay; + public PropertyInfo fragmentSize; + public PropertyInfo giopVersion; + public PropertyInfo maxOpenedConnections; + public PropertyInfo maxCommRecoveringTries; + public PropertyInfo commRecoveringTime; + public PropertyInfo maxUncompletedMessages; + public PropertyInfo hostName; + public PropertyInfo hostAddress; + public PropertyInfo port; + public PropertyInfo socketLinger; + public PropertyInfo socketTimeout; + public PropertyInfo socketNoDelay; + public PropertyInfo connectTimeout; + public PropertyInfo writeTimeout; + public PropertyInfo serverSocketBacklog; + public PropertyInfo serverSocketReconnect; + + public PropertyInfo ipv6; + public PropertyInfo iface; + + public HashMap map; + + public IIOPCommunicationLayerPropertiesInfo() { + + map = new HashMap( 20 ); + + /** + * CONNECTION STUFF + */ + reliableOneWay = new PropertyInfo( + RELIABLE_ONEWAY, + DEFAULT_RELIABLE_ONEWAY + ); + reliableOneWay.setDescription( + "Whether oneway request should be reliable or not." + ); + reliableOneWay.setRequired( false ); + reliableOneWay.setChoices ( null ); + map.put( RELIABLE_ONEWAY, reliableOneWay ); + + + /** + * TRANSMISSION STUFF + */ + fragmentSize = new PropertyInfo( + FRAGMENT_SIZE, + DEFAULT_FRAGMENT_SIZE + ); + fragmentSize.setDescription( + "Maximum fragment message size. Must be > 1024 and multiple of 8." + ); + fragmentSize.setRequired( false ); + fragmentSize.setChoices ( null ); + map.put( FRAGMENT_SIZE, fragmentSize ); + + + giopVersion = new PropertyInfo( + GIOP_VERSION, + DEFAULT_GIOP_VERSION + ); + giopVersion.setDescription( + "Default GIOP version used for communications. One of " + + "1.0 1.1 or 1.2" + ); + giopVersion.setRequired( false ); + giopVersion.setChoices ( new String[]{ "1.0", "1.1", "1.2" } ); + map.put( GIOP_VERSION, giopVersion ); + + + maxOpenedConnections = new PropertyInfo( + MAX_OPENED_CONNECTIONS, + DEFAULT_MAX_OPENED_CONNECTIONS + ); + maxOpenedConnections.setDescription( + "ORB's maximum opened connections number" + ); + maxOpenedConnections.setRequired( false ); + maxOpenedConnections.setChoices ( null ); + map.put( MAX_OPENED_CONNECTIONS, maxOpenedConnections ); + + + maxCommRecoveringTries = new PropertyInfo( + MAX_COMM_RECOVERING_TRIES, + DEFAULT_MAX_COMM_RECOVERING_TRIES + ); + maxCommRecoveringTries.setDescription( + "DefaultORB's maximum communication recovering tries." + ); + maxCommRecoveringTries.setRequired( false ); + maxCommRecoveringTries.setChoices ( null ); + map.put( MAX_COMM_RECOVERING_TRIES, maxCommRecoveringTries ); + + + commRecoveringTime = new PropertyInfo( + COMM_RECOVERING_TIME, + DEFAULT_COMM_RECOVERING_TIME + ); + commRecoveringTime.setDescription( + "ORB's maximum time upon recovering a communication." + ); + commRecoveringTime.setRequired( false ); + commRecoveringTime.setChoices ( null ); + map.put( COMM_RECOVERING_TIME, commRecoveringTime ); + + + maxUncompletedMessages = new PropertyInfo( + MAX_UNCOMPLETED_MESSAGES, + DEFAULT_MAX_UNCOMPLETED_MESSAGES + ); + maxUncompletedMessages.setDescription( + "Maximum uncompleted messages allowed upon connections." + ); + maxUncompletedMessages.setRequired( false ); + maxUncompletedMessages.setChoices ( null ); + map.put( MAX_UNCOMPLETED_MESSAGES, maxUncompletedMessages ); + + + hostName = new PropertyInfo( + HOST_NAME, + DEFAULT_HOST_NAME + ); + hostName.setDescription( + "Hostname used when generating IOR's and URL's." + ); + hostName.setRequired( false ); + hostName.setChoices ( null ); + map.put( HOST_NAME, hostName ); + + + hostAddress = new PropertyInfo( + HOST_ADDRESS, + DEFAULT_HOST_ADDRESS + ); + hostAddress.setDescription( + "Address used when generating IOR's and URL's." + ); + hostAddress.setRequired( false ); + hostAddress.setChoices ( null ); + map.put( HOST_ADDRESS, hostAddress ); + + + port = new PropertyInfo( + PORT, + DEFAULT_PORT + ); + port.setDescription( + "Port used when generating IOR's and URL's." + ); + port.setRequired( false ); + port.setChoices ( null ); + map.put( PORT, port ); + + + socketLinger = new PropertyInfo( + SOCKET_LINGER, + DEFAULT_SOCKET_LINGER + ); + socketLinger.setDescription( + "Sockets SO_LIGER property." + ); + socketLinger.setRequired( false ); + socketLinger.setChoices ( null ); + map.put( SOCKET_LINGER, socketLinger ); + + + socketTimeout = new PropertyInfo( + SOCKET_TIMEOUT, + DEFAULT_SOCKET_TIMEOUT + ); + socketTimeout.setDescription( + "Sockets timeout." + ); + socketTimeout.setRequired( false ); + socketTimeout.setChoices ( null ); + map.put( SOCKET_TIMEOUT, socketTimeout ); + + + socketNoDelay = new PropertyInfo( + TCP_NODELAY, + DEFAULT_TCP_NODELAY + ); + socketNoDelay.setDescription( + "Sockets NO_DELAY property." + ); + socketNoDelay.setRequired( false ); + socketNoDelay.setChoices ( null ); + map.put( TCP_NODELAY, socketNoDelay ); + + + connectTimeout = new PropertyInfo( + SOCKET_CONNECT_TIMEOUT, + DEFAULT_SOCKET_CONNECT_TIMEOUT + ); + connectTimeout.setDescription( + "Sockets connect timeout." + ); + connectTimeout.setRequired( false ); + connectTimeout.setChoices ( null ); + map.put( SOCKET_CONNECT_TIMEOUT, connectTimeout ); + + + writeTimeout = new PropertyInfo( + SOCKET_WRITE_TIMEOUT, + DEFAULT_SOCKET_WRITE_TIMEOUT + ); + writeTimeout.setDescription( + "Sockets write timeout." + ); + writeTimeout.setRequired( false ); + writeTimeout.setChoices ( null ); + map.put( SOCKET_WRITE_TIMEOUT, writeTimeout ); + + + serverSocketBacklog = new PropertyInfo( + SERVER_SOCKET_BACKLOG, + DEFAULT_SERVER_SOCKET_BACKLOG + ); + serverSocketBacklog.setDescription( + "Server sockets BACKLOG." + ); + serverSocketBacklog.setRequired( false ); + serverSocketBacklog.setChoices ( null ); + map.put( SERVER_SOCKET_BACKLOG, serverSocketBacklog ); + + + serverSocketReconnect = new PropertyInfo( + SERVER_SOCKET_RECONNECT, + DEFAULT_SERVER_SOCKET_RECONNECT + ); + serverSocketReconnect.setDescription( + "Server sockets RECONNECT." + ); + serverSocketReconnect.setRequired( false ); + serverSocketReconnect.setChoices ( null ); + map.put( SERVER_SOCKET_RECONNECT, serverSocketReconnect ); + + ipv6 = new PropertyInfo( + IPV6, + DEFAULT_IPV6 + ); + ipv6.setDescription( + "IPV6 property." + ); + ipv6.setRequired( false ); + ipv6.setChoices ( null ); + map.put( IPV6, ipv6 ); + + //mcpg + iface = new PropertyInfo( + IFACE, + DEFAULT_IFACE + ); + iface.setDescription( + "IFACE property." + ); + iface.setRequired( false ); + iface.setChoices ( null ); + map.put( IFACE, iface ); + + } + + public static IIOPCommunicationLayerPropertiesInfo getInstance(){ + return new IIOPCommunicationLayerPropertiesInfo(); + } + + public void dump(java.io.PrintWriter writer) + { + writer.println("IIOPCommunicationLayer properties:"); + + Iterator it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry e = (Map.Entry)it.next(); + writer.print('\t'); + writer.print(e.getKey()); + writer.print('='); + writer.print( ((PropertyInfo)e.getValue()).getValue()); + writer.println(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.java new file mode 100644 index 0000000..22aa2d3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnection.java @@ -0,0 +1,507 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.io.IOException; +import java.net.Socket; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; +import java.net.InetAddress; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; + +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayer; +import es.tid.TIDorbj.core.comm.ssliop.SSLIOPCommunicationLayerPropertiesInfo; + +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb IIOP IIOPConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class IIOPConnection extends Connection { + + /** + * IIOPConnection Socket. + */ + java.net.Socket m_socket; + + /** + * IIOPConnection Socket InputStream. + */ + public java.io.InputStream m_socket_in; + + /** + * IIOPConnection Socket OutputStream. + */ + public java.io.OutputStream m_socket_out; + + + private boolean tcpNoDelay; + private int soTimeout; + private int soLinger; + private int socketWriteTimeout; + + + private IIOPConnection(IIOPConnectionManager mngr, java.net.Socket socket) + { + super(mngr); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + tcpNoDelay = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.TCP_NODELAY ) + .getBoolean(); + + soTimeout = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_TIMEOUT ) + .getInt(); + + soLinger = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_LINGER ) + .getInt(); + + socketWriteTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_WRITE_TIMEOUT ) + .getInt(); + + try { + this.m_socket = socket; + + my_port = socket.getLocalPort(); + + socket.setTcpNoDelay( tcpNoDelay ); + socket.setSoTimeout( soTimeout ); + + socket.setSoLinger( soLinger != -1, soLinger ); + + m_socket_in = socket.getInputStream(); + m_socket_out = socket.getOutputStream(); + } + catch (java.io.IOException ioe) { + throw new OBJECT_NOT_EXIST(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + } + + m_write_monitor = new ConnectionWriteMonitor( socketWriteTimeout ); + } + + /** + * IIOPConnection hash code. + */ + public int hashCode() { + // return my_port; + return m_socket.hashCode(); + } + + public boolean equals(Object obj) { + return obj instanceof IIOPConnection && + ( ( IIOPConnection )obj ).my_port == my_port; + } + + public String toString() { + if (m_str == null) { + if (m_mode == CLIENT_MODE) { + m_str = "Client IIOPConnection at " + m_socket.toString(); + } else if (m_mode == SERVER_MODE) { + m_str = "Server IIOPConnection at " + m_socket.toString(); + } else { + m_str = "Bidirectional IIOPConnection at " + m_socket.toString(); + } + } + return m_str; + } + + /** + * Creates a new connection in SERVER_MODE. + * + * @param mngr + * the manager + * @param sock + * Socket created in the accept + * method in a ServerSocket object. + */ + public static IIOPConnection serverConnection(IIOPConnectionManager mngr, + java.net.Socket sock) { + IIOPConnection conn = new IIOPConnection(mngr, sock); + conn.m_mode = SERVER_MODE; + conn.init(); + + if (conn.m_orb.m_trace != null) { + conn.m_orb.printTrace(Trace.DEBUG, "Creating " + conn.toString()); + } + + return conn; + } + + /** + * Creates a new connection in CLIENT_MODE. + */ + + public static IIOPConnection clientConnection(IIOPConnectionManager mngr, + ListenPoint listen_point) + { + try { + + // create the socket + Socket socket = + new Socket(listen_point.m_host, listen_point.m_port); + IIOPConnection conn = new IIOPConnection(mngr, socket); + + conn.m_mode = CLIENT_MODE; + + conn.m_initial_point = listen_point; + + conn.addListenPoint(listen_point); + + conn.init(); + + return conn; + + } + catch (java.io.IOException ioe) { + throw new TRANSIENT(ioe.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + catch (java.lang.SecurityException sce) { + throw new NO_PERMISSION(sce.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + } + + protected void close() + { + try { + m_socket.close(); + } + catch (IOException ioe) {} + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, + toString() + + " client socket closed"); + + // notify the writers blocked in write_monitor + + m_write_monitor.setException(m_state.getError()); + + // notify the locks + + LockEnumeration enumer = m_lock_list.elements(); + Lock lock; + + while (enumer.hasMoreElements()) { + lock = enumer.next(); + synchronized (lock) { + lock.cancelWaiting(); + } + } + + AMILockEnumeration ami_enum = m_ami_lock_list.elements(); + AMILock ami_lock; + + while (ami_enum.hasMoreElements()) { + ami_lock = ami_enum.next(); + synchronized (ami_lock) { + ami_lock.notify(); + } + } + + if (m_addresses != null) { + m_addresses.clear(); + } + + // clear buffers + + Enumeration msgs = m_uncompleted_messages.elements(); + + while (msgs.hasMoreElements()) { + m_uncompleted_messages.remove(msgs.nextElement()); + } + + } + + protected void dispatchRequest(GIOPLocateRequestMessage message) { + + ObjectKey obj_key; + obj_key = message.extractAddress().getObjectKey(); + + IIOPLocateResponseHandler responseHandler; + responseHandler = new IIOPLocateResponseHandler( + this, + message.getHeader().getVersion(), + message.getRequestId(), + obj_key + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + m_requests_in_POA.inc(); + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + } + + protected void dispatchRequest(GIOPRequestMessage message) { + + ServerRequestImpl serverRequest; + serverRequest = message.extractRequest(m_orb); + + + String ssl_key_store_file = new String(""); + String ssl_key_store_passwd = new String(""); + + if (m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + != null) { + ssl_key_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + ssl_key_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + } + + // Check SSL: all TCP request are not dispached + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + serverRequest.setSystemException( + new NO_PERMISSION("SSL target can not dispatch TCP requests ") ); + sendReply(serverRequest, null); + //delete request; + return; + } + + + ObjectKey objectKey; + objectKey = serverRequest.getTarget().getObjectKey(); + + IIOPResponseHandler responseHandler; + responseHandler = new IIOPResponseHandler( + this, + message.getHeader().getVersion(), + serverRequest, + objectKey, + message.getRequestInvocationPolicies() + + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * TODO: ask juan: in previous code, when reference has been located, + * if it's not local just returns... which should be the + * refactoring mapping since the POAKey is resolved outside, + * under ExecThread, and there's "no way?" to acces the object + * reference to check if either it's local or not + * Previous code + if (!obj_impl._is_local()) { + // oneway request to a non local object: DISCARD + return; + } + * */ + + if (serverRequest.withResponse()) { + m_requests_in_POA.inc(); + } + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + } + + + public void read(byte[] buffer, int offset, int length) + { + + try { + int numReadNow = 0; + + while (length > 0) { + + numReadNow = m_socket_in.read(buffer, offset, length); + + if (numReadNow < 0) { + throw new COMM_FAILURE("Broken IIOPConnection", 0, + CompletionStatus.COMPLETED_NO); + } + + offset += numReadNow; + length -= numReadNow; + + } + + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer) + { + try { + + m_socket_out.write(buffer, 0, buffer.length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer, int offset, int length) + { + try { + m_socket_out.write(buffer, offset, length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.java new file mode 100644 index 0000000..feaccc8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPConnectionManager.java @@ -0,0 +1,746 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.net.Socket; +import javax.net.ssl.SSLSocket; + +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TRANSIENT; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.poa.POAImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.comm.ssliop.SSLConnection; + +/** + * Manages the opened connections. When a connection is needed, try to reuse an + * opened one. When there is too many connection opened or there are some + * connection that have remained idle too long, they will be closed. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + + +// TODO: move comm.iiop.IIOPConnectionManager to comm.ConnectionManager + +public class IIOPConnectionManager extends es.tid.TIDorbj.core.ORBComponent +{ + + /** + * The communication Layer. + */ + + IIOPCommLayer commLayer; + + /** + * The ORB has been destroyed. + */ + + protected boolean m_destroyed; + + /** + * Maintains a UseTable with IIOPConnection + * objects. Then, when the table removes older connections, the manager + * close them. + */ + UseTable m_connections; + + /** + * Opened client connections. This table allows reuse opened connections for + * a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_client_connections; + + /** + * Opened bidirectional connections. This table allows reuse opened + * connections for a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_bidirectional_connections; + + /** + * Connections that are opening now. Other threads that want to open a new + * connection to the same listen point must wait to not open more than one + * connection. + */ + java.util.Hashtable m_connections_opening; + + int maxOpenedConnections; + int connectTimeout; + boolean ipv6; + + + /** + * Opened SSL client connections. This table allows reuse opened connections for + * a given listen point. + *

+ * This is a Hashtable, the stored object class is + * IIOPConnection and the keys are ListenPoints. + */ + + java.util.Hashtable m_ssl_client_connections; + + public IIOPConnectionManager( TIDORB orb, IIOPCommLayer commLayer ) + { + super(orb); + this.commLayer = commLayer; + m_client_connections = new java.util.Hashtable(); + m_bidirectional_connections = new java.util.Hashtable(); + m_ssl_client_connections = new java.util.Hashtable(); + + maxOpenedConnections = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.MAX_OPENED_CONNECTIONS ) + .getInt(); + + connectTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_CONNECT_TIMEOUT ) + .getInt(); + + + m_connections = new UseTable( maxOpenedConnections ); + + + m_connections_opening = new java.util.Hashtable(); + m_destroyed = false; + + //mcpg + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + if (this.ipv6 == true) + { + System.setProperty("java.net.preferIPv6Address","true"); + System.setProperty("java.net.preferIPv4Stack","false"); + } + } + + /** + * Notifies the connection use. + * + * @param conn + * the connection in use + */ + /* synchronized */ + + //public synchronized void use(IIOPConnection conn) + public synchronized void use(Connection conn) + { + if (m_destroyed) + return; + + m_connections.use(conn); + } + + /** + * The manager is Notified a connection is been closing. + * + * @param conn + * the connection that is closing. + */ + + //synchronized public void closing(IIOPConnection conn) + synchronized public void closing(Connection conn) + { + if (m_destroyed) + return; + + removeListenPoints(conn); + + m_connections.remove(conn); + } + + /** + * When a new Socket is created (a new connection has been accepted by the + * ServerSocket) a new IIOPConnection, in SERVER mode, must be + * registered. + * + * @param socket + * the new socket. + */ + + synchronized public void createServerConnection(Socket socket) + { + if (m_destroyed) { + // drop the socket + try { + socket.close(); + } + catch (java.io.IOException ioe) {} + } else { + // create the new connection and add the new connection to + // connection table + newConnection(IIOPConnection.serverConnection(this, socket)); + } + } + + + /** + * Saves the ListenPoint associated to a bidirectional + * connection to be used as a client connection when a connection to the + * listen point will be required. + * + * @param listen_point + * the ListenPoint where the connection will be + * seen as a client connection. + * @param conn + * the bidirectional connection. + */ + + synchronized public void + addBidirectionalConnection(ListenPoint listen_point, +// IIOPConnection conn) + Connection conn) + { + if (m_destroyed) + return; + + m_bidirectional_connections.put(listen_point, conn); + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public IIOPConnection getClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + //opened connection + IIOPConnection conn = null; + // check if a connection is opening now + OpeningLock opening_lock = null; + // this thread must open a connection and unlock the OpeningLock + boolean open_a_connection = false; + + synchronized (this) { + if (m_destroyed) + throw new TRANSIENT("IIOP Layer shutdown", 0, + CompletionStatus.COMPLETED_NO); + + // looks for an existing connection + + conn = (IIOPConnection) m_bidirectional_connections.get(listen_point); + + if (conn != null) + return conn; + + conn = (IIOPConnection) m_client_connections.get(listen_point); + + if (conn != null) + return conn; + + // check if is opening now + opening_lock = (OpeningLock) + m_connections_opening.get(listen_point); + + // create a lock + if (opening_lock == null) { + opening_lock = new OpeningLock(); + m_connections_opening.put(listen_point, opening_lock); + open_a_connection = true; + } + } + + if (!open_a_connection) { + try { + conn = (IIOPConnection)opening_lock.waitOpening( this.connectTimeout ); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + if (m_orb.m_trace != null) { + String[] msg = { "Socket connection timeout exceeded", + "waiting to connecting with ", + listen_point.toString(), + ". Released lock over it." }; + m_orb.printTrace(Trace.DEBUG, msg); + } + m_connections_opening.remove(listen_point); + throw new TRANSIENT(ce.toString()); + } + } + + } else { + try { + conn = openClientConnection(listen_point, policy_context); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + opening_lock.setError(ce); + m_connections_opening.remove(listen_point); + throw ce; + } + } + + synchronized (this) { + + newConnection(conn); + + // add the new connection to the client_connections + + m_client_connections.put(listen_point, conn); + + opening_lock.setOpened(conn); + m_connections_opening.remove(listen_point); + } + + if (m_orb.m_trace != null) { + String[] msg = { conn.toString(), " Opened!" }; + m_orb.printTrace(Trace.DEBUG, msg); + } + + } + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ( (!conn.isBidirectionalConnection()) + && (bidir != null) + && (bidir.value() == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode( + commLayer.getBidirectionalService() + ); + } + + return conn; + } + + private IIOPConnection + openClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + IIOPConnection conn = null; + + // create a new connection + if (m_orb.m_trace != null) { + String[] msg = { "Opening client connection with ", + listen_point.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + // create the new connection + conn = IIOPConnection.clientConnection(this, listen_point); + + // is bidirectional ??? + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ((bidir != null && bidir.value() + == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode(commLayer.getBidirectionalService()); + } else { + + es.tid.TIDorbj.core.poa.CurrentImpl poa_current = + m_orb.initPOACurrent(); + + if (poa_current.inContext()) { + try { + POAImpl current_poa = (POAImpl) poa_current.get_POA(); + + if (current_poa.isBidirectional()) + conn.setBidirectionalMode( + commLayer.getBidirectionalService()); + + } + catch (org.omg.PortableServer.CurrentPackage.NoContext nc) {} + // add the new connection to connection table + } + } + + return conn; + } + + + private SSLConnection + openSSLClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + SSLConnection conn = null; + + // create a new connection + if (m_orb.m_trace != null) { + String[] msg = { "Opening client connection with ", + listen_point.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + // create the new connection + conn = SSLConnection.clientConnection(this, listen_point); + + // is bidirectional ??? + + BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + + if ((bidir != null && bidir.value() + == org.omg.BiDirPolicy.BOTH.value) + && (commLayer.hasServerListener())) { + conn.setBidirectionalMode(commLayer.getBidirectionalService()); + } else { + + es.tid.TIDorbj.core.poa.CurrentImpl poa_current = + m_orb.initPOACurrent(); + + if (poa_current.inContext()) { + try { + POAImpl current_poa = (POAImpl) poa_current.get_POA(); + + if (current_poa.isBidirectional()) + conn.setBidirectionalMode( + commLayer.getBidirectionalService()); + + } + catch (org.omg.PortableServer.CurrentPackage.NoContext nc) {} + // add the new connection to connection table + } + } + + return conn; + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public void prepareClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + getClientConnection(listen_point, policy_context); + } + + /** + * Checks in a new connection for manage it. + * + * @param conn + * the bidirectional connection. + */ + protected void newConnection(IIOPConnection conn) + { + try { + + m_connections.append(conn); + + } catch (es.tid.TIDorbj.core.util.FullUseTableException f) { + conn.closeByManager(); + if (conn.isClientConnection()) { + throw new TRANSIENT( + "Maximun of Connections reached, and all are in use, try later!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + Object[] removed = m_connections.getRemovedObjects(); + + if (removed != null) { + for (int i = 0; i < removed.length; i++) { + closeConnection((IIOPConnection) removed[i]); + } + } + } + + + + /** + * Checks in a new connection for manage it. + * + * @param conn + * the bidirectional connection. + */ + protected void newConnection(SSLConnection conn) + { + try { + + m_connections.append(conn); + + } catch (es.tid.TIDorbj.core.util.FullUseTableException f) { + conn.closeByManager(); + if (conn.isClientConnection()) { + throw new TRANSIENT( + "Maximun of Connections reached, and all are in use, try later!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + Object[] removed = m_connections.getRemovedObjects(); + + if (removed != null) { + for (int i = 0; i < removed.length; i++) { + closeConnection((IIOPConnection) removed[i]); + } + } + } + + /** + * Removes from the client connection table the listen points associated to + * a connection. + * + * @param conn + * the connection. + */ + //protected void removeListenPoints(IIOPConnection conn) + protected void removeListenPoints(Connection conn) + { + java.util.Enumeration points = conn.getListenPoints(); + if (points == null) + return; + + // remove listenPoints + while (points.hasMoreElements()) { + + ListenPoint _listen_point = (ListenPoint) points.nextElement(); + + // remove from client_connections + m_client_connections.remove(_listen_point); + + // remove from bidirectional_connections if ListenPoint refers to + // the given connection + //if ((IIOPConnection) m_bidirectional_connections.get(_listen_point) + if ((Connection) m_bidirectional_connections.get(_listen_point) + == conn) + m_bidirectional_connections.remove(_listen_point); + } + } + + /** + * Close the connection due to it has been decided that it not has been used + * for a long time. + * + * @param conn + * the connection. + */ + //protected void closeConnection(IIOPConnection conn) + protected void closeConnection(Connection conn) + { + removeListenPoints(conn); + conn.closeByManager(); + } + + /** + * @return true if it has not any active connection + */ + public boolean activeConnections() + { + return m_connections.getSize() > 0; + } + + /** + * Close all connections due to an ORB close session. + */ + synchronized public void destroy() + { + if (!m_destroyed) { + java.util.Enumeration conns = m_connections.elements(); + + //IIOPConnection conn; + Connection conn; + + while (conns.hasMoreElements()) { + conn = (IIOPConnection) conns.nextElement(); + m_connections.remove(conn); + closeConnection(conn); + } + + m_destroyed = true; + } + } + + + + + /** + * When a new SSLSocket is created (a new connection has been accepted by the + * ServerSocket) a new IIOPConnection, in SERVER mode, must be + * registered. + * + * @param socket + * the new socket. + */ + + synchronized public void createSSLServerConnection(SSLSocket socket) + { + if (m_destroyed) { + // drop the socket + try { + socket.close(); + } + catch (java.io.IOException ioe) {} + } else { + // create the new connection and add the new connection to + // connection table + newConnection(SSLConnection.serverConnection(this, socket)); + } + } + + /** + * Looks for a client connection with the listen point. If it does not + * exist, then the creates one. + * + * @param listen_point + * the ListenPoint that determines a remote ORB in + * a Object reference. + */ + public SSLConnection getSSLClientConnection(ListenPoint listen_point, + PolicyContext policy_context) + { + //opened connection + SSLConnection conn = null; + // check if a connection is opening now + OpeningLock opening_lock = null; + // this thread must open a connection and unlock the OpeningLock + boolean open_a_connection = false; + + synchronized (this) { + if (m_destroyed) + throw new TRANSIENT("IIOP Layer shutdown", 0, + CompletionStatus.COMPLETED_NO); + + // looks for an existing connection + +// conn = (IIOPConnection) m_bidirectional_connections.get(listen_point); + +// if (conn != null) +// return conn; + + conn = (SSLConnection) m_ssl_client_connections.get(listen_point); + + if (conn != null) + return conn; + + // check if is opening now + opening_lock = (OpeningLock) + m_connections_opening.get(listen_point); + + // create a lock + if (opening_lock == null) { + opening_lock = new OpeningLock(); + m_connections_opening.put(listen_point, opening_lock); + open_a_connection = true; + } + } + + if (!open_a_connection) { + try { + conn = (SSLConnection)opening_lock.waitOpening( this.connectTimeout ); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + if (m_orb.m_trace != null) { + String[] msg = { "Socket connection timeout exceeded", + "waiting to connecting with ", + listen_point.toString(), + ". Released lock over it." }; + m_orb.printTrace(Trace.DEBUG, msg); + } + m_connections_opening.remove(listen_point); + throw new TRANSIENT(ce.toString()); + } + } + + } else { + try { + conn = openSSLClientConnection(listen_point, policy_context); + } catch (org.omg.CORBA.COMM_FAILURE ce) { + synchronized (this) { + opening_lock.setError(ce); + m_connections_opening.remove(listen_point); + throw ce; + } + } + + synchronized (this) { + + newConnection(conn); + + // add the new connection to the client_connections + + m_ssl_client_connections.put(listen_point, conn); + + opening_lock.setOpened(conn); + m_connections_opening.remove(listen_point); + } + + if (m_orb.m_trace != null) { + String[] msg = { conn.toString(), " Opened!" }; + m_orb.printTrace(Trace.DEBUG, msg); + } + + } + +// BidirectionalPolicy bidir = policy_context.getBidirectionalPolicy(); + +// if ( (!conn.isBidirectionalConnection()) +// && (bidir != null) +// && (bidir.value() == org.omg.BiDirPolicy.BOTH.value) +// && (commLayer.hasServerListener())) { +// conn.setBidirectionalMode( +// commLayer.getBidirectionalService() +// ); +// } + + return conn; + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.java new file mode 100644 index 0000000..b419afc --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPCorbaloc.java @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.util.StringTokenizer; + +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.Corbaloc; + +public class IIOPCorbaloc +{ + + public static String getObjectId(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, path, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:iiop:")) { + corbaloc = corbaloc_URL.substring(14); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + return corbaloc.substring(slashposition + 1); + } + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, url_key, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:iiop:")) { + corbaloc = corbaloc_URL.substring(14); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + url_key = corbaloc.substring(slashposition + 1); + + ObjectKey objectkey = createKey(url_key); + + profiles = new IIOPProfile[1]; + + profiles[0] = new IIOPProfile(version, listener, objectkey, null); + + return new IIOPIOR("", profiles); + } + + /** + * Simulates an usual ObjectKey, that is marshaled in an Encapsulation, but + * instead, the url ObjectKey is marshaled as a ulong value (the size) and + * the char array of the string (without the end of string character *. + * + * @param url + * @return + * @throws org.omg.CORBA.ORBPackage.InvalidName + */ + private static ObjectKey createKey(String url_key) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + CDROutputStream output = + new CDROutputStream(null, + new byte[url_key.length() + CDR.ULONG_SIZE]); + + char[] url_buffer = url_key.toCharArray(); + + output.write_ulong(url_buffer.length); + output.write_char_array(url_buffer, 0, url_buffer.length); + + CDRInputStream input = (CDRInputStream) output.create_input_stream(); + + Encapsulation encap = input.readEncapsulation(); + + return new ObjectKey(encap); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.java new file mode 100644 index 0000000..454a124 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPIOR.java @@ -0,0 +1,245 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.iiop.IORAddressingInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.util.Corbaloc; +import es.tid.TIDorbj.util.Base16Codec; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.ziop.ZIOP; + +/** + * Representation of an Internet Object Reference (IOR). An IOR is compounded + * by; + *

    + *
  • at least one TaggedProfile + *
  • the repositoryId of the reference + *
+ * In addition, the ior has its stringified representation and its marshaled + * value. + * + * @autor Juan A. Cáceres + * @version 2.0 + */ + +public class IIOPIOR extends IOR +{ + + String toString; + + // IIOP optimizations + + boolean iiopProfileSearched; + + IIOPProfile iiopProfile; + + int iiopProfilePosition; + + int hash_code = -1; + + boolean ziopSearched; + + boolean hasZIOPPolicies; + + public IIOPIOR() { + this.toString = null; + this.iiopProfile = null; + this.iiopProfileSearched = false; + this.iiopProfilePosition = 0; + this.ziopSearched = false; + this.hasZIOPPolicies = false; + } + + public IIOPIOR(String id, TaggedProfile[] profiles) { + super( id, profiles ); + this.toString = null; + this.ziopSearched = false; + this.hasZIOPPolicies = false; + } + + public IIOPIOR( IOR ior ){ + assign( ior ); + } + + public void assign(IIOPIOR ior) { + super.profiles = ior.profiles; + super.type_id = ior.type_id; + this.toString = ior.toString; + } + + + public static IIOPIOR fromString(TIDORB orb, String ior_str) { + int length = ior_str.length(); + if (((length % 2) != 0) || (length < 14)) + throw new INV_OBJREF("IOR format error: invalid ior length.", 0, + CompletionStatus.COMPLETED_NO); + if (!ior_str.startsWith("IOR:")) + throw new INV_OBJREF("Invalid IOR format id: \"IOR:\".", 0, + CompletionStatus.COMPLETED_NO); + + byte[] buffer = new byte[(length - 4) / 2]; + char[] ior_chars = ior_str.toCharArray(); + int j = 4; + try { + for (int i = 0; i < buffer.length; i++) + buffer[i] = + (byte) (16 * (Base16Codec.getValue(ior_chars[j++])) + + Base16Codec.getValue(ior_chars[j++])); + } + catch (Exception e) { + throw new INV_OBJREF(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + // create the the ior with the new buffer + IIOPIOR ior = new IIOPIOR(); + + CDRInputStream internet_cdr = new CDRInputStream(orb, buffer); + + internet_cdr.setByteOrder(internet_cdr.read_boolean()); + + ior.read(internet_cdr); + + ior.toString = ior_str; + + return ior; + } + + + public synchronized IIOPProfile profileIIOP() { + if (iiopProfile != null) + return iiopProfile; + + if (iiopProfileSearched) + throw new org.omg.CORBA.INV_OBJREF(); + + iiopProfileSearched = true; + + int count = super.memberCount(); + + for (int i = 0; i < count; i++) { + if ( super.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value) { + iiopProfilePosition = i; + iiopProfile = ( IIOPProfile ) getProfile( i ); + return iiopProfile; + } + } + + throw new org.omg.CORBA.INV_OBJREF(); + } + + public ObjectKey getObjectKey() { + IIOPProfile profile = this.profileIIOP(); + + return profile.getObjectKey(); + } + + public TargetAddress toObjectKeyAddress() { + TargetAddress address = new TargetAddress(); + + address.setObjectKey(getObjectKey()); + + return address; + } + + public TargetAddress toProfileAddress() { + + IIOPProfile profile = profileIIOP(); + + TargetAddress address = new TargetAddress(); + + address.profile(profile); + + return address; + } + + public TargetAddress toIORAddress() { + IIOPProfile profile = profileIIOP(); + + TargetAddress address = new TargetAddress(); + + address.ior(new IORAddressingInfo(iiopProfilePosition, this)); + + return address; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.iop.IOR#toURL() + */ + public String toURL() { + return Corbaloc.toURL( this ); + } + + public boolean is_ZIOP() { + if (!ziopSearched) { + hasZIOPPolicies = ZIOP.checkCompressionEnabled(profileIIOP().getPolicies()); + ziopSearched = true; + } + return hasZIOPPolicies; + } + + public PolicyContext policies() { + IIOPProfile profile = profileIIOP(); + return profile.getPolicies(); + } + + public org.omg.SSLIOP.SSL get_SSL() { + if (!this.iiopProfileSearched) + return this.profileIIOP().getSSLComponent().getSSL(); + else + throw new org.omg.CORBA.INV_OBJREF("No SSL Component found in IOR", 0, + CompletionStatus.COMPLETED_NO); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.java new file mode 100644 index 0000000..8a9ae41 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPLocateResponseHandler.java @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.LocateResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + */ +public class IIOPLocateResponseHandler extends QueuedLocateResponseHandler implements LocateResponseHandler { + + private IIOPConnection conn; + private GIOPVersion version; + private RequestId requestId; + private ObjectKey objectKey; + + + public IIOPLocateResponseHandler( IIOPConnection conn, + GIOPVersion version, + RequestId requestId, + ObjectKey objectKey) + { + setConnection( conn ); + setVersion ( version ); + setRequestId ( requestId ); + setObjectKey ( objectKey ); + } + + public void setConnection( IIOPConnection conn ){ + this.conn = conn; + } + + public IIOPConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setRequestId( RequestId requestId ){ + this.requestId = requestId; + } + + public RequestId getRequestId(){ + return this.requestId; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + throw new INTERNAL("Not supported"); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, reference ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, e ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#setResponseValue(boolean) + */ + public void submitResponse( boolean value ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, value ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.java new file mode 100644 index 0000000..639a80b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPProfile.java @@ -0,0 +1,402 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.IOP.TAG_INTERNET_IOP; +import org.omg.IOP.TAG_ORB_TYPE; +import org.omg.IOP.TAG_POLICIES; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.iop.ORBComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.security.CSIComponent; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedComponentReader; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * IIOPProfile defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class IIOPProfile extends TaggedProfile { + + private GIOPVersion m_version; + + private ListenPoint m_listen_point; + + private ObjectKey m_object_key; + + private TaggedComponent[] m_components; + + private CDRInputStream m_profile_data; + + public IIOPProfile() + { + super(TAG_INTERNET_IOP.value); + + m_version = null; + m_listen_point = null; + m_object_key = null; + m_components = null; + m_profile_data = null; + } + + public IIOPProfile(GIOPVersion version, ListenPoint listen_point) + { + super(TAG_INTERNET_IOP.value); + this.m_version = version; + this.m_listen_point = listen_point; + m_object_key = null; + m_components = null; + m_profile_data = null; + } + + public IIOPProfile(GIOPVersion version, + ListenPoint listen_point, + ObjectKey object_key, + TaggedComponent[] tagged_components) + { + super(TAG_INTERNET_IOP.value); + this.m_version = version; + this.m_listen_point = listen_point; + this.m_object_key = object_key; + m_components = tagged_components; + m_profile_data = null; + } + + public GIOPVersion getVersion() + { + if (m_version == null) + extractMembers(); + return m_version; + + } + + public ListenPoint getListenPoint() + { + if (m_listen_point == null) + extractMembers(); + + // Remove %interface from host string + int pos = m_listen_point.m_host.indexOf("%"); + if (pos != -1) { + String only_host_string; + only_host_string = m_listen_point.m_host.substring(0,pos); + m_listen_point.m_host = only_host_string; + } + + return m_listen_point; + } + + public ObjectKey getObjectKey() + { + if (m_object_key == null) + extractMembers(); + return m_object_key; + } + + public TaggedComponent[] getTaggedComponents() + { + if (m_components == null) + extractMembers(); + return m_components; + } + + public boolean equal( Object profile) + { + if (m_profile_data != null) + extractMembers(); + + IIOPProfile iiopProfile; + if ( profile instanceof IIOPProfile ){ + iiopProfile = ( IIOPProfile )profile; + } else { + iiopProfile = null; + } + + return iiopProfile != null && + getVersion() .equal ( iiopProfile.getVersion() ) && + getListenPoint().equals( iiopProfile.getListenPoint() ) && + getObjectKey() .equal ( iiopProfile.getObjectKey() ); + } + + public void partialRead( es.tid.TIDorbj.core.cdr.CDRInputStream input ) { + m_profile_data = input.copy(); + input.skipEncapsulation(); + } + + synchronized protected void extractMembers() { + if (m_version != null) // has the members + return; + + if (m_profile_data == null) + throw new org.omg.CORBA.INTERNAL("Empty Profile"); + + m_profile_data.enterEncapsulation(); + + m_version = GIOPVersion.read(m_profile_data); + + m_listen_point = ListenPoint.read(m_profile_data); + + m_object_key = new ObjectKey(); + m_object_key.read( m_profile_data ); + if (m_version.minor != 0) { + int size = m_profile_data.read_ulong(); + if (size < 0) { + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + } else { + m_components = new TaggedComponent[size]; + for (int i = 0; i < size; i++) { + + TaggedComponent comp = + TaggedComponentReader.read(m_profile_data); + + m_components[i] = comp; + + // Check tag + + if (comp.m_tag == TAG_POLICIES.value) { + PoliciesComponent policies_component = (PoliciesComponent) comp; + //m_policies = policies_component.getPolicies(); + } + if (comp.m_tag == TAG_SSL_SEC_TRANS.value) { + SSLComponent ssl_component = (SSLComponent) comp; + m_listen_point.m_ssl_port = ssl_component.getSSLPort(); + // m_ssl = ssl_component.getSSL(); + } + if (comp.m_tag == TAG_CSI_SEC_MECH_LIST.value) { + CSIComponent csi_component = (CSIComponent) comp; + + } + + } + } + } + + m_profile_data = null; + } + + public void write(CDROutputStream out) + { + extractMembers(); + + // write tag + out.write_ulong(tag); + + // write profile data + + out.enterEncapsulation(); + + m_version.write(out); + ListenPoint.write(out, m_listen_point); + m_object_key.write(out); + + if (m_version.minor != 0) { + if (m_components == null) + out.write_ulong(0); + else { + out.write_ulong(m_components.length); + for (int i = 0; i < m_components.length; i++) + m_components[i].write(out); + } + } + + out.exitEncapsulation(); + } + + public String toString() + { + if (m_profile_data != null) + extractMembers(); + + boolean from_tidorb = false; + + if (m_components != null) + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_ORB_TYPE.value) { + if (((ORBComponent) m_components[i]).m_orb_type + == ConfORB.ORB_TYPE.m_orb_type) { + from_tidorb = true; + break; + } + } + + StringBuffer buffer = new StringBuffer(); + + buffer.append("Profile: { "); + buffer.append('\n'); + buffer.append('\t'); + buffer.append(getVersion().toString()); + buffer.append(", "); + buffer.append('\n'); + buffer.append('\t'); + buffer.append(getListenPoint().toString()); + buffer.append(", "); + + ORBComponent orb_component = getORBComponent(); + if (orb_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_ORB_TYPE: "); + buffer.append(orb_component.toString()); + } + + PoliciesComponent policies_component = getPoliciesComponent(); + if (policies_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_POLICIES: "); + buffer.append(policies_component.toString()); + } + + + SSLComponent ssl_component = getSSLComponent(); + if (ssl_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_SSL_SEC_TRANS: "); + buffer.append(ssl_component.toString()); + } + + CSIComponent csi_component = getCSIComponent(); + if (csi_component != null) { + buffer.append('\n'); + buffer.append('\t'); + buffer.append("TAG_CSI_SEC_MECH_LIST: "); + buffer.append(csi_component.toString()); + } + + buffer.append('\n'); + buffer.append('\t'); + + if ( from_tidorb ) { + POAKey key; + try { + key = POAKey.createKey( getObjectKey().getMarshaledKey() ); + buffer.append( key.toString() ); + } catch ( Throwable th ) { + buffer.append( "ObjectKey[OPAQUE]" ); + } + + } else { + buffer.append("ObjectKey[OPAQUE]"); + } + buffer.append('\n'); + buffer.append('}'); + + return buffer.toString(); + } + + /** + * @return + */ + public PoliciesComponent getPoliciesComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_POLICIES.value) { + return (PoliciesComponent) m_components[i]; + } + } + + return null; + } + + + public ORBComponent getORBComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_ORB_TYPE.value) { + return (ORBComponent) m_components[i]; + } + } + + return null; + } + + public SSLComponent getSSLComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_SSL_SEC_TRANS.value) { + return (SSLComponent) m_components[i]; + } + } + return null; + } + + + public CSIComponent getCSIComponent() + { + if (m_components != null) { + for (int i = 0; i < m_components.length; i++) + if (m_components[i].m_tag == TAG_CSI_SEC_MECH_LIST.value) { + return (CSIComponent) m_components[i]; + } + } + return null; + } + + + public PolicyContext getPolicies() + { + PoliciesComponent policies_component = this.getPoliciesComponent(); + if (policies_component != null) + return policies_component.getPolicies(); + else + return null; + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.java b/source/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.java new file mode 100644 index 0000000..756c957 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IIOPResponseHandler.java @@ -0,0 +1,193 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + + +/** + * ResponseHandler implementation for the IIOPCommunicationLayer + * + * @author jprojas + * + */ +public class IIOPResponseHandler extends QueuedResponseHandler implements ResponseHandler { + + private IIOPConnection conn; + private GIOPVersion version; + private ServerRequestImpl serverRequest; + private ObjectKey objectKey; + private PolicyContext policySupplier; + + public IIOPResponseHandler( IIOPConnection conn, + GIOPVersion version, + ServerRequestImpl + serverRequest, + ObjectKey objectKey, + PolicyContext policySupplier){ + setConnection( conn ); + setVersion( version ); + setServerRequest( serverRequest ); + setObjectKey( objectKey ); + setPolicyContext( policySupplier ); + } + + public void setConnection( IIOPConnection conn ){ + this.conn = conn; + } + + public IIOPConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setServerRequest( ServerRequestImpl serverRequest ){ + this.serverRequest = serverRequest; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + /** + * @param policySupplier The policySupplier to set. + */ + public void setPolicyContext(PolicyContext policySupplier) + { + this.policySupplier = policySupplier; + } + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + return this.policySupplier; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.serverRequest.setForward( reference ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + if( this.serverRequest.withResponse() ) { + this.serverRequest.setSystemException( e ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.conn.sendReply( this.serverRequest, this.policySupplier ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /** + * remove from here + * @author jprojas + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.java b/source/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.java new file mode 100644 index 0000000..1b01475 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/IORAddressingInfo.java @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +/** + * IORAddressingInfo structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class IORAddressingInfo { + + public int m_selected_profile_index; + + public IOR m_ior; + + public IIOPProfile getProfileIIOP() + { + if (m_selected_profile_index == -1) + return null; + else + return (IIOPProfile) m_ior.getProfile(m_selected_profile_index); + } + + public IORAddressingInfo(int selected_profile_index, IOR ior) + { + this.m_selected_profile_index = selected_profile_index; + this.m_ior = ior; + } + + public static IORAddressingInfo + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int index; + + index = input.read_ulong(); + + IOR ior = new DefaultIOR(); + + ior.read(input); + + if (index >= ior.memberCount()) + throw new MARSHAL("Invalid selected Profile Number: " + index, + 0, + CompletionStatus.COMPLETED_NO); + + return new IORAddressingInfo(index, ior); + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_selected_profile_index); + m_ior.write(output); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ListenPoint.java b/source/es/tid/TIDorbj/core/comm/iiop/ListenPoint.java new file mode 100644 index 0000000..95f6b63 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ListenPoint.java @@ -0,0 +1,110 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +/** + * ListenPoint structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ListenPoint +{ + private String m_str; + + public String m_host; + + public int m_port; + + public int m_ssl_port; + + public ListenPoint(String host, int port) + { + m_str = null; + m_host = host; + m_port = port; + m_ssl_port = 0; + } + + public boolean equals(Object obj) + { + if (obj instanceof ListenPoint) { + ListenPoint other = (ListenPoint) obj; + return (m_port == other.m_port) && (m_host.equals(other.m_host)); + } + + return false; + } + + public int hashCode() + { + return m_host.hashCode() + m_port; + } + + public static ListenPoint read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + return new ListenPoint(input.read_string(), + 0xffff & input.read_ushort()); + } + + public static void write(es.tid.TIDorbj.core.cdr.CDROutputStream output, + ListenPoint point) + { + output.write_string(point.m_host); + output.write_ushort((short) point.m_port); + } + + public String toString() + { + if (m_str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("ListenPoint("); + buffer.append(String.valueOf(m_port)); + buffer.append('@'); + buffer.append(m_host); + buffer.append(')'); + m_str = buffer.toString(); + } + return m_str; + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/Lock.java b/source/es/tid/TIDorbj/core/comm/iiop/Lock.java new file mode 100644 index 0000000..cdf463a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/Lock.java @@ -0,0 +1,133 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.INTERNAL; + +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.util.OperationCompletion; + +/** + * Lock where the the threads that have invoked a request must be locket until + * the complete response has been replied or the response timeout has expired. + * + * + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class Lock +{ + + /** + * The Operation Completion Status. + */ + OperationCompletion m_state; + + /** + * Request identifier. This identifier will be the key for the connection + * thread to + */ + + RequestId m_request_id; + + GIOPFragmentedMessage message; + + public Lock() + { + m_request_id = null; + message = null; + m_state = new OperationCompletion(); + } + + public RequestId requestId() + { + return m_request_id; + } + + public void requestId(RequestId id) + { + m_request_id = id; + } + + public boolean getCompleted() + { + return m_state.isCompleted(); + } + + public void setCompleted() + { + m_state.setCompleted(); + } + + public void setMessage(GIOPFragmentedMessage msg) + { + message = msg; + } + + public GIOPFragmentedMessage getMessage() + { + return message; + } + + public void waitForCompletion(long how_long) + { + try { + m_state.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + public void cancelWaiting() + { + m_state.interruptWaiting(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.java b/source/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.java new file mode 100644 index 0000000..a2449a2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/LockEnumeration.java @@ -0,0 +1,63 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +public class LockEnumeration +{ + java.util.Enumeration m_elements; + + public LockEnumeration(java.util.Enumeration elements) + { + m_elements = elements; + } + + public boolean hasMoreElements() + { + return m_elements.hasMoreElements(); + } + + public Lock next() + { + return (Lock) m_elements.nextElement(); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/LockList.java b/source/es/tid/TIDorbj/core/comm/iiop/LockList.java new file mode 100644 index 0000000..208d0f3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/LockList.java @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.giop.RequestId; + +public class LockList +{ + + java.util.Hashtable m_table; + + public LockList() + { + m_table = new java.util.Hashtable(); + } + + public void put(Lock lock) + { + m_table.put(lock.requestId(), lock); + } + + public Lock get(RequestId request_id) + { + return (Lock) m_table.get(request_id); + } + + public void remove(RequestId request_id) + { + m_table.remove(request_id); + } + + public int size() + { + return m_table.size(); + } + + public LockEnumeration elements() + { + return new LockEnumeration(m_table.elements()); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/OpeningLock.java b/source/es/tid/TIDorbj/core/comm/iiop/OpeningLock.java new file mode 100644 index 0000000..a612721 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/OpeningLock.java @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.comm.Connection; + +/** + * + * Maintains the connection opening lock. + * + * @author Juan A. Caceres + * @version 1.0 + */ + +class OpeningLock +{ + + public final static int OPENING = 0; + + public final static int OPENED = 1; + + public final static int ERROR = 2; + + private int m_status; + + //private IIOPConnection m_opened_connection; + private Connection m_opened_connection; + + private org.omg.CORBA.COMM_FAILURE m_error; + + public OpeningLock() + { + m_status = OPENING; + m_opened_connection = null; + m_error = null; + } + + //public synchronized IIOPConnection waitOpening(long time) + public synchronized Connection waitOpening(long time) + { + if (m_status == OPENING) { + try { + wait(time); + } + catch (InterruptedException ioe) {} + } + + if (m_status == OPENED) + return m_opened_connection; + + else if (m_status == ERROR) + throw m_error; + else + //throw new org.omg.CORBA.COMM_FAILURE("IIOPConnection timout"); + throw new org.omg.CORBA.COMM_FAILURE("Connection timout"); + } + + //public synchronized void setOpened(IIOPConnection conn) + public synchronized void setOpened(Connection conn) + { + m_status = OPENED; + m_opened_connection = conn; + notifyAll(); + } + + public synchronized void setError(org.omg.CORBA.COMM_FAILURE failure) + { + m_status = ERROR; + m_error = failure; + notifyAll(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.java b/source/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.java new file mode 100644 index 0000000..4a23e4f --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/RECOVERABLE_COMM_FAILURE.java @@ -0,0 +1,63 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.COMM_FAILURE; + +/** + * Failure thrown in connection that can be recovered for resending requests. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class RECOVERABLE_COMM_FAILURE extends Exception +{ + + public org.omg.CORBA.COMM_FAILURE m_comm_failure; + + public RECOVERABLE_COMM_FAILURE(COMM_FAILURE failure) + { + m_comm_failure = failure; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.java b/source/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.java new file mode 100644 index 0000000..7480357 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ReliableOnewayThread.java @@ -0,0 +1,67 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import es.tid.TIDorbj.core.RequestImpl; + + +public class ReliableOnewayThread extends java.lang.Thread +{ + IIOPCommLayer m_comm; + + RequestImpl m_request; + + IIOPIOR m_ior; + + public ReliableOnewayThread(IIOPCommLayer comm, RequestImpl req, IIOPIOR ior) + { + this.m_comm = comm; + m_request = req; + this.m_ior = ior; + } + + public void run() + { + m_comm.reliableOnewayRun(m_request, m_ior); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/ServerListener.java b/source/es/tid/TIDorbj/core/comm/iiop/ServerListener.java new file mode 100644 index 0000000..0e5cab8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/ServerListener.java @@ -0,0 +1,376 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 445 $ +* Date: $Date: 2010-01-21 18:29:00 +0100 (Thu, 21 Jan 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.Trace; + +public class ServerListener extends Thread +{ + + /** + * ServerSocket state + */ + + boolean m_shutdowned; + + boolean m_connected; + + /** + * ServerSocket where the communication layer will accept connections. This + * socket will be only avalilable when a the ORB's run method + * had been invoked. + */ + ServerSocket m_server_socket; + + /** + * Conection manager. + */ + IIOPConnectionManager m_manager; + + /** + * Listen points where the ServerSocket will be listening. This + * Vector { point(host,port) } will be used to create de local IOR's. + */ + java.util.Vector m_listen_points; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + ServiceContextList m_bidirectional_service; + + es.tid.TIDorbj.core.TIDORB m_orb; + + String hostAddress; + String hostName; + int port; + int backlog; + int reconnect; + GIOPVersion giopVersion; + boolean ipv6; + String iface; + String m_listen_points_string; + + public ServerListener(IIOPConnectionManager manager) + { + m_shutdowned = true; + m_connected = false; + + this.m_manager = manager; + m_orb = manager.orb(); + + m_listen_points = new java.util.Vector(); + InetAddress inet; + + + this.hostAddress = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS ) + .getValue(); + this.hostName = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_NAME ) + .getValue(); + this.port = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.PORT ) + .getInt(); + this.backlog = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_BACKLOG ) + .getInt(); + this.reconnect = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_RECONNECT ) + .getInt(); + this.giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + this.ipv6 = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IPV6 ) + .getBoolean(); + this.iface = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.IFACE ) + .getString(); + + + try { + if ( hostAddress == null) { + m_server_socket = new ServerSocket( this.port , this.backlog ); + } else { + m_server_socket = new ServerSocket( + this.port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + + if (this.hostName != null) { + m_listen_points.addElement(new ListenPoint(this.hostName, + m_server_socket.getLocalPort())); + } else { + + if (this.ipv6) { + if ( hostAddress == null) { + inet = InetAddress.getByName("::1"); //ip6-localhost"); + } + else { + inet = InetAddress.getByName(hostAddress); + } + m_listen_points.addElement(new ListenPoint( + inet.getHostAddress(), + m_server_socket.getLocalPort())); + } + + inet = InetAddress.getLocalHost(); + m_listen_points.addElement(new ListenPoint( + inet.getHostAddress()+ "%" + iface, + m_server_socket.getLocalPort())); + } + + m_shutdowned = false; + m_connected = true; + + } + catch (java.io.IOException e) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open ServerSocket: " + e.toString() + ); + } + + m_listen_points_string = ""; + for (int i = 0; i < m_listen_points.size(); i++) { + m_listen_points_string += m_listen_points.elementAt(i).toString(); + m_listen_points_string += " "; + } + + + m_orb.printTrace( + Trace.DEBUG, "ServerListener connected at: " + m_listen_points_string + ); + } + + public java.util.Vector getListenPoints() { + return m_listen_points; + } + + public synchronized void shutdown() { + if (!m_shutdowned) { + m_shutdowned = true; + try { + m_server_socket.close(); + } catch (Throwable th) {} + + m_server_socket = null; + + m_orb.printTrace( + Trace.DEBUG, "ServerListener at " + m_listen_points_string + " shutdown!" + ); + } + } + + public synchronized void resetServerSocket() { + if (!m_shutdowned) { + try { + if (m_server_socket != null) + m_server_socket.close(); + } + catch (Throwable th) {} + + try { + if ( this.hostAddress == null) { + m_server_socket = new ServerSocket( + ((ListenPoint)m_listen_points.elementAt(0)).m_port, + this.backlog + ); + } else { + m_server_socket = new ServerSocket( + ((ListenPoint)m_listen_points.elementAt(0)).m_port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + } catch (Throwable th) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open ServerSocket: " + th.toString() + ); + } + } + } + + public void run() + { + while (!m_shutdowned) { + while (m_connected) { + + Socket client_socket = null; + try { + client_socket = m_server_socket.accept(); + } catch (Throwable se) { + + if ( m_shutdowned ){ + return; + } + + m_connected = false; + + m_orb.printTrace( + Trace.ERROR, "Error in ServerSocket.accept(): ", se + ); + } + + try { + if (client_socket != null) { + m_manager.createServerConnection(client_socket); + } + } catch (Throwable e) { + try { + client_socket.close(); + } catch (Throwable t) {} + + m_orb.printTrace( + Trace.ERROR, "Error creating ServerConnection: ", e + ); + } + } + + if ((!m_connected) && (!m_shutdowned)) { + + // RECONNECT + + //printTrace will check for a trace handler existence + m_orb.printTrace( Trace.DEBUG, "Trying to reconnect server socket "); + + try { + resetServerSocket(); + m_connected = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, "ServerSocket reconnected" + ); + } + } catch (Throwable th) { + m_orb.printTrace( + Trace.ERROR, "ServerSocket reconnect error: ", th + ); + try { + Thread.sleep( this.reconnect ); + } catch (InterruptedException e) {} + } + } + } + } + + public IOR createIOR(String id, POAKey key, + TaggedComponent[] extraComponents) { + + TaggedProfile[] profiles = new TaggedProfile[m_listen_points.size()]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + for (int i = 0; i < m_listen_points.size(); i++) { + profiles[i] = new IIOPProfile(this.giopVersion, + (ListenPoint)m_listen_points.elementAt(i), + key, + components); + } + + return new IIOPIOR(id, profiles); + }//createIOR + + public IOR createIOR(String id, ObjectKey key, + TaggedComponent[] extraComponents) { + + TaggedProfile[] profiles = new TaggedProfile[m_listen_points.size()]; + + TaggedComponent[] components = null; + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + 1]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + components[extraComponents.length] = ConfORB.ORB_TYPE; + } else { + components = new TaggedComponent[1]; + components[0] = ConfORB.ORB_TYPE; + } + + for (int i = 0; i < m_listen_points.size(); i++) { + profiles[i] = new IIOPProfile(this.giopVersion, + (ListenPoint)m_listen_points.elementAt(i), + key, + components); + } + + return new IIOPIOR(id, profiles); + }//createIOR + +} diff --git a/source/es/tid/TIDorbj/core/comm/iiop/TargetAddress.java b/source/es/tid/TIDorbj/core/comm/iiop/TargetAddress.java new file mode 100644 index 0000000..bcba253 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/TargetAddress.java @@ -0,0 +1,206 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.iop.TaggedProfileReader; + +/** + * Union TargetAddress defined in GIOP module (version 1.2). + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: jprojas: should be refactored to use a generic profile and moved to giop +//package +public class TargetAddress +{ + + short m_discriminator; + + protected ObjectKey m_object_key; + + protected IIOPProfile m_profile; + + protected IORAddressingInfo m_ior; + + public TargetAddress() + { + reset(); + } + + public short setObjectKey(ObjectKey value) + { + reset(); + m_discriminator = AddressingDisposition._KeyAddr; + m_object_key = value; + return m_discriminator; + } + + public IIOPProfile profile() + { + return m_profile; + } + + public short profile(IIOPProfile value) + { + reset(); + m_discriminator = AddressingDisposition._ProfileAddr; + m_profile = value; + return m_discriminator; + } + + public IORAddressingInfo ior() + { + return m_ior; + } + + public short ior(IORAddressingInfo value) + { + reset(); + m_discriminator = AddressingDisposition._ReferenceAddr; + m_ior = value; + return m_discriminator; + } + + public short discriminator() + { + return m_discriminator; + } + + private void reset() + { + m_discriminator = -1; + m_object_key = null; + m_profile = null; + m_ior = null; + } + + public ObjectKey getObjectKey() + { + if (m_discriminator < 0) + return null; + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + return m_object_key; + case AddressingDisposition._ProfileAddr: + return m_profile.getObjectKey(); + case AddressingDisposition._ReferenceAddr: + TaggedProfile tag_profile; + tag_profile = + m_ior.m_ior.getProfile(m_ior.m_selected_profile_index); + if (tag_profile instanceof IIOPProfile) + return ((IIOPProfile) tag_profile).getObjectKey(); + else + return null; // I can not know how select get the object key + default: + return null; + } + } + + public boolean write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + if (m_discriminator < 0) + return false; + out.write_short(m_discriminator); + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + m_object_key.write(out); + break; + case AddressingDisposition._ProfileAddr: + m_profile.write(out); + break; + case AddressingDisposition._ReferenceAddr: + m_ior.write(out); + break; + default: + return false; + } + return true; + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream in) + { + reset(); + AddressingDisposition disposition = + AddressingDisposition.from_short(in.read_short()); + + if (disposition == null) { + throw new MARSHAL("Invalid TargetAddress discriminator", + 0, + CompletionStatus.COMPLETED_NO); + } + + m_discriminator = disposition.value(); + + switch (m_discriminator) + { + case AddressingDisposition._KeyAddr: + m_object_key = new ObjectKey(); + m_object_key.read(in); + break; + case AddressingDisposition._ProfileAddr: + TaggedProfile tag_profile = TaggedProfileReader.read(in); + if (tag_profile instanceof IIOPProfile) + m_profile = (IIOPProfile) tag_profile; + else + throw new MARSHAL("IIOP Profile expected.", + 0, + CompletionStatus.COMPLETED_NO); + + break; + case AddressingDisposition._ReferenceAddr: + m_ior = IORAddressingInfo.read(in); + break; + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.java b/source/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.java new file mode 100644 index 0000000..abcd9e9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/iiop/WriteTimeout.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.iiop; + +public class WriteTimeout extends Exception +{} diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/all-wcprops b/source/es/tid/TIDorbj/core/comm/local/.svn/all-wcprops new file mode 100644 index 0000000..efe2dfc --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/all-wcprops @@ -0,0 +1,35 @@ +K 25 +svn:wc:ra_dav:version-url +V 85 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local +END +LocalLocateResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 117 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.java +END +LocalCommLayer.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local/LocalCommLayer.java +END +LocalResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.java +END +LocalServerRequest.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local/LocalServerRequest.java +END +AMILocalResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.java +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/entries b/source/es/tid/TIDorbj/core/comm/local/.svn/entries new file mode 100644 index 0000000..413e00f --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/entries @@ -0,0 +1,207 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/local +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + + + + + + + + +() + +LocalLocateResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +2780780c4138b6bd1a075cbaad134c98 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5896 + +LocalCommLayer.java +file + + + + +2010-04-28T10:50:46.000000Z +3e38caf1107d5483311e34ea8ac10cd3 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +16760 + +LocalResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +24b740438f75c1ed246a55cf984811a9 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5315 + +LocalServerRequest.java +file + + + + +2009-05-27T12:24:01.000000Z +ca9195fb58ffbe3d8cc2d86bc35c772e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4592 + +AMILocalResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +c7993c980a77b09ec4532cb2b1995cb8 +2006-01-31T16:34:41.000000Z +12 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +7341 + diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/AMILocalResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/AMILocalResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/AMILocalResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalCommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalCommLayer.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalCommLayer.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalLocateResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalServerRequest.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalServerRequest.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/prop-base/LocalServerRequest.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/AMILocalResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/AMILocalResponseHandler.java.svn-base new file mode 100644 index 0000000..29ea8d4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/AMILocalResponseHandler.java.svn-base @@ -0,0 +1,236 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationDelegate; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ + +/* + * TODO: this class and its peer LocalLocateResponseHandler are too similar, + * check it! + */ + +public class AMILocalResponseHandler extends QueuedResponseHandler { + + + private LocalServerRequest serverRequest; + private ObjectKey objectKey; + + private OperationCompletion completionStatus; + + private Object forwardReference; + private SystemException exception; + + private PolicyContext requestPolicyContext; + + private TIDORB m_orb; + + public AMILocalResponseHandler( + ObjectKey objectKey, + LocalServerRequest serverRequest, TIDORB orb ){ + this.objectKey = objectKey; + this.serverRequest = serverRequest; + this.completionStatus = new OperationCompletion(); + this.m_orb = orb; + } + + /** + * OWN METHODS + */ + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.serverRequest.getLocalRequest().getPolicyContext(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.serverRequest.setForward( reference ); + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + this.exception = e; + this.serverRequest.setSystemException( e ); + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + // TODO Auto-generated method stub + + } + + private void putReply() { + RequestImpl request = serverRequest.getLocalRequest(); + Object ami_handler = request.get_ami_handler(); + RequestImpl replyHandlerRequest = (RequestImpl) ami_handler._request(request.operation()); + if (request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_in_arg(); + $ami_return_val.read_value(request.return_value().create_input_stream(), request.return_value().type()); + } + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + + if ( serverRequest.isForwarded() ) { + + IIOPIOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = + ( ( org.omg.CORBA.portable.ObjectImpl )forward )._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = ( ( IIOPCommunicationDelegate )forward_delegate ).getIIOPReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IIOPIOR.fromString(m_orb, m_orb.object_to_string( forward ) + ); + } + + //throw new es.tid.TIDorbj.core.comm.ForwardRequest( forwarded_ior ); + } + + } +} diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalCommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalCommLayer.java.svn-base new file mode 100644 index 0000000..a56d283 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalCommLayer.java.svn-base @@ -0,0 +1,471 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision$ + * Date: $Date$ + * Last modified by: $Author$ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.Delegate; +import org.omg.CORBA.portable.ObjectImpl; +import org.omg.CORBA.portable.ValueBase; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationDelegate; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.poa.ExecThread; +import es.tid.TIDorbj.core.poa.POAManagerImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * Layer that dispatchs the request to local objects. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Javier Fdez. Mejuto + * @version 1.0 + */ + +//TODO: maybe local comm layer should be a CommunicationLayer itself +public class LocalCommLayer extends + es.tid.TIDorbj.core.comm.iiop.CommunicationLayer { + public LocalCommLayer( es.tid.TIDorbj.core.TIDORB orb ) { + super( orb ); + } + + public boolean objectExists( IIOPIOR ior, PolicyContext policy_context ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + try { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + ObjectKey objectKey = ior.getObjectKey(); + + LocalLocateResponseHandler responseHandler; + responseHandler = new LocalLocateResponseHandler( + objectKey, + policy_context + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * Local request cannot be dispatched regularly because the + * dispatcher should wait for them... think of this later + * CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + */ + + // Check if the the thread that invoked the request is an ExecThread + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( responseHandler ); + } else { + // application invocation + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + + responseHandler.waitForCompletion(timeout); + + + } + + // Invoking poaManager + + if ( ! responseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( responseHandler.isExceptionSet() ) { + throw responseHandler.getException(); + } + + if ( responseHandler.isForwarded() ) { + IIOPIOR forwardIOR; + + org.omg.CORBA.Object forwardReference; + forwardReference = responseHandler.getForwardReference(); + + if ( forwardReference instanceof ValueBase ) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + if ( forwardReference instanceof ObjectImpl ){ + ObjectImpl reference; + reference = ( ( ObjectImpl )forwardReference ); + + Delegate forwardDelegate; + forwardDelegate = reference._get_delegate(); + + if ( forwardDelegate instanceof IIOPCommunicationDelegate ) { + forwardIOR = ( ( IIOPCommunicationDelegate )forwardDelegate ) + .getIIOPReference(); + } else { + //TODO: ask juan: this could happen? + // write ior from anothers's ORB Object + forwardIOR = IIOPIOR.fromString( m_orb, m_orb + .object_to_string( forwardReference ) ); + } + throw new ForwardRequest( forwardIOR ); + } else { + throw new org.omg.CORBA.INV_OBJREF(); + } + } + + // Return results + return responseHandler.getResult(); + } catch ( INTERNAL e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.ERROR, + "INTERNAL Exception in local oneway invocation", + e + ); + } + throw e; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.ERROR, + "Exception in local location invocation", + e + ); + } + throw e; + } + } + + public void request( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + try { + + request.withResponse( true ); + sendRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + throw fr; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, "Exception in local invocation", + e ); + } + throw e; + } + } + + public void onewayRequest( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + request.withResponse( false ); + sendRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + // unreachable + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, + "Exception in local oneway invocaton", e ); + } + throw e; + } + } + + //corregir + public void asyncRequest( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + try { + + request.withResponse( true ); + sendAsyncRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + throw fr; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, "Exception in local asynchronous invocation", + e ); + } + throw e; + } + } + + protected void sendRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + long timeout = QoS.checkRequestTime(this.m_orb, + request.getPolicyContext()); + + ObjectKey objectKey = ior.getObjectKey(); + + PolicyContext policyContext; + policyContext = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest; + serverRequest = new LocalServerRequest( request ); + + + //CreatingResponseHandler + LocalResponseHandler responseHandler; + responseHandler = new LocalResponseHandler( + objectKey, + serverRequest ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + POAManagerImpl poaManager; + poaManager = ( POAManagerImpl ) m_orb.initPOA().the_POAManager(); + if ( ! request.withResponse() ) { + // Invoking poaManager + poaManager.put( responseHandler ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread; + currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( responseHandler ); + } else { // application invocation + // Invoking poaManager + poaManager.put( responseHandler ); + + responseHandler.waitForCompletion(timeout ); + } + + if ( ! responseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( serverRequest.isForwarded() ) { + + IIOPIOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = + ( ( org.omg.CORBA.portable.ObjectImpl )forward )._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = + ( ( IIOPCommunicationDelegate )forward_delegate ).getIIOPReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IIOPIOR.fromString( + m_orb, + m_orb.object_to_string( forward ) + ); + } + + throw new es.tid.TIDorbj.core.comm.ForwardRequest( forwarded_ior ); + } + } + } + + + protected void sendAsyncRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + long timeout = QoS.checkRequestTime(this.m_orb, + request.getPolicyContext()); + + ObjectKey objectKey = ior.getObjectKey(); + + PolicyContext policyContext; + policyContext = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest; + serverRequest = new LocalServerRequest( request ); + + + //CreatingResponseHandler + AMILocalResponseHandler amiResponseHandler; + amiResponseHandler = new AMILocalResponseHandler(objectKey, serverRequest, m_orb ); + amiResponseHandler.setSerial(m_orb.getRequestCounter().next()); + + POAManagerImpl poaManager; + poaManager = ( POAManagerImpl ) m_orb.initPOA().the_POAManager(); + if ( ! request.withResponse() ) { + // Invoking poaManager + poaManager.put( amiResponseHandler ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread; + currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( amiResponseHandler ); + } else { // application invocation + // Invoking poaManager + poaManager.put( amiResponseHandler ); + } + + + /*if ( ! amiResponseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + }*/ + + } + } + + + /** + + protected void sendRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.ForwardRequest { + + ObjectKey key = ior.getObjectKey(); + POAKey poaKey; + if ( key instanceof POAKey ) { + poaKey = ( POAKey ) key; + } else { + poaKey = new POAKey( key.getMarshaledKey() ); + } + + PolicyContext policy_context = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest = new LocalServerRequest( request ); + + // Creating LocalRequest + LocalRequest localRequest = new LocalRequest( poaKey, m_orb.initPOA(), + serverRequest ); + + if ( !request.withResponse() ) { + // Invoking poaManager + POAManagerImpl poaManager = ( POAManagerImpl ) m_orb.initPOA() + .the_POAManager(); + poaManager.put( localRequest ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread this_thread = Thread.currentThread(); + + POAManagerImpl poaManager = ( POAManagerImpl ) m_orb.initPOA() + .the_POAManager(); + + if ( this_thread instanceof ExecThread ) { + ( ( ExecThread ) this_thread ).processLocalRequest( + localRequest, poaManager ); + } else { // application invocation + // Invoking poaManager + poaManager.put( localRequest ); + localRequest.waitForCompletion( PolicyUtil + .getRelativeRequestTimeoutValue( policy_context ) ); + } + + if ( !localRequest.getCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( serverRequest.isForwarded() ) { + + es.tid.TIDorbj.core.iop.IOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = ( ( org.omg.CORBA.portable.ObjectImpl ) forward ) + ._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = ( ( IIOPCommunicationDelegate ) forward_delegate ) + .getReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IOR.fromString( m_orb, m_orb + .object_to_string( forward ) ); + } + + throw new es.tid.TIDorbj.core.ForwardRequest( forwarded_ior ); + } + } + } + + */ + + public void prepareRequest( es.tid.TIDorbj.core.StreamRequestImpl request ) { + throw new org.omg.CORBA.INTERNAL(); + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws es.tid.TIDorbj.core.comm.ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + throw new org.omg.CORBA.INTERNAL(); + } + + public void dump(java.io.PrintWriter writer){ + } +} diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..9ea1d14 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalLocateResponseHandler.java.svn-base @@ -0,0 +1,199 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class LocalLocateResponseHandler extends QueuedLocateResponseHandler { + + private OperationCompletion completionStatus; + + private ObjectKey objectKey; + + //To store whether the object was found or not + private boolean locationResult; + + private Object forwardReference; + + private SystemException exception; + + private PolicyContext requestPolicyContext; + + + public LocalLocateResponseHandler( ObjectKey key, PolicyContext ctx){ + this.completionStatus = new OperationCompletion(); + this.objectKey = key; + this.requestPolicyContext = ctx; + } + + /** + * OWN METHODS + */ + public boolean getResult(){ + return this.locationResult; + } + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /** + * INHERITED METHODS + */ + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.requestPolicyContext; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException systemException ) { + this.exception = systemException; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#submitResponse(boolean) + */ + public void submitResponse( boolean value ) { + this.locationResult = value; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /*TODO: remove from here upon refactoring completion*/ + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.poa.QueuedRequest#sendError(org.omg.CORBA.SystemException, es.tid.TIDorbj.util.Trace) + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + } + + + /**/ + +} diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalResponseHandler.java.svn-base new file mode 100644 index 0000000..37dce97 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalResponseHandler.java.svn-base @@ -0,0 +1,184 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ + +/* + * TODO: this class and its peer LocalLocateResponseHandler are too similar, + * check it! + */ + +public class LocalResponseHandler extends QueuedResponseHandler { + + + private LocalServerRequest serverRequest; + private ObjectKey objectKey; + + private OperationCompletion completionStatus; + + private Object forwardReference; + private SystemException exception; + + private PolicyContext requestPolicyContext; + + public LocalResponseHandler( + ObjectKey objectKey, + LocalServerRequest serverRequest ){ + this.objectKey = objectKey; + this.serverRequest = serverRequest; + this.completionStatus = new OperationCompletion(); + } + + /** + * OWN METHODS + */ + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.serverRequest.getLocalRequest().getPolicyContext(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.serverRequest.setForward( reference ); + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + this.exception = e; + this.serverRequest.setSystemException( e ); + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + this.completionStatus.setCompleted(); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + // TODO Auto-generated method stub + + } + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalServerRequest.java.svn-base b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalServerRequest.java.svn-base new file mode 100644 index 0000000..e01724a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/.svn/text-base/LocalServerRequest.java.svn-base @@ -0,0 +1,159 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.NVList; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; + +public class LocalServerRequest extends org.omg.CORBA.ServerRequest +{ + + RequestImpl m_local_request; + + NVList m_server_parameters; + + org.omg.CORBA.Object m_forward_obj; + + public LocalServerRequest(RequestImpl request) + { + m_local_request = request; + m_server_parameters = null; + m_forward_obj = null; + } + + public String operation() + { + return m_local_request.operation(); + } + + public org.omg.CORBA.Context ctx() + { + return m_local_request.ctx(); + } + + public void arguments(org.omg.CORBA.NVList nv) + { + if (nv == null) + throw new BAD_PARAM("Null NVList reference", 0, + CompletionStatus.COMPLETED_NO); + + m_server_parameters = nv; + // performance improvement: wrap the parameter anys and do not copy then + // ONLY WITH NO ONEWAY REQUEST!!!!! + + boolean wrap_anys = m_local_request.withResponse(); + + NVListImpl.assignInArguments(m_local_request.arguments(), + m_server_parameters, wrap_anys); + } + + public void set_result(Any result) + { + if (result == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + Any result_any = m_local_request.return_value(); + AnyImpl.assignValue(result, result_any); + } + + public void set_exception(Any except) + { + if (except == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + m_local_request.setUserException(except); + } + + // TIDorb operations + + public void fixOutArguments() + { + // performance improvement: wrap the parameter anys and do not copy them + // ONLY WITH NO ONEWAY REQUEST!!!!! + NVListImpl.assignOutArguments(m_server_parameters, + m_local_request.arguments(), true); + } + + public void setSystemException(org.omg.CORBA.SystemException except) + { + if (except == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + m_local_request.setSystemException(except); + } + + public boolean isForwarded() + { + return m_forward_obj != null; + } + + public void setForward(org.omg.CORBA.Object obj) + { + m_forward_obj = obj; + } + + public org.omg.CORBA.Object getForward() + { + return m_forward_obj; + } + + public void destroy() + { + NVListImpl.destroy(m_server_parameters); + } + + public RequestImpl getLocalRequest() + { + return m_local_request; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.java b/source/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.java new file mode 100644 index 0000000..1b0a0df --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/AMILocalResponseHandler.java @@ -0,0 +1,236 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 12 $ +* Date: $Date: 2006-01-31 17:34:41 +0100 (Tue, 31 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationDelegate; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ + +/* + * TODO: this class and its peer LocalLocateResponseHandler are too similar, + * check it! + */ + +public class AMILocalResponseHandler extends QueuedResponseHandler { + + + private LocalServerRequest serverRequest; + private ObjectKey objectKey; + + private OperationCompletion completionStatus; + + private Object forwardReference; + private SystemException exception; + + private PolicyContext requestPolicyContext; + + private TIDORB m_orb; + + public AMILocalResponseHandler( + ObjectKey objectKey, + LocalServerRequest serverRequest, TIDORB orb ){ + this.objectKey = objectKey; + this.serverRequest = serverRequest; + this.completionStatus = new OperationCompletion(); + this.m_orb = orb; + } + + /** + * OWN METHODS + */ + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.serverRequest.getLocalRequest().getPolicyContext(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.serverRequest.setForward( reference ); + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + this.exception = e; + this.serverRequest.setSystemException( e ); + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + this.completionStatus.setCompleted(); + this.putReply(); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + // TODO Auto-generated method stub + + } + + private void putReply() { + RequestImpl request = serverRequest.getLocalRequest(); + Object ami_handler = request.get_ami_handler(); + RequestImpl replyHandlerRequest = (RequestImpl) ami_handler._request(request.operation()); + if (request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_in_arg(); + $ami_return_val.read_value(request.return_value().create_input_stream(), request.return_value().type()); + } + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + + if ( serverRequest.isForwarded() ) { + + IIOPIOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = + ( ( org.omg.CORBA.portable.ObjectImpl )forward )._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = ( ( IIOPCommunicationDelegate )forward_delegate ).getIIOPReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IIOPIOR.fromString(m_orb, m_orb.object_to_string( forward ) + ); + } + + //throw new es.tid.TIDorbj.core.comm.ForwardRequest( forwarded_ior ); + } + + } +} diff --git a/source/es/tid/TIDorbj/core/comm/local/LocalCommLayer.java b/source/es/tid/TIDorbj/core/comm/local/LocalCommLayer.java new file mode 100644 index 0000000..d5d7863 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/LocalCommLayer.java @@ -0,0 +1,471 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJ + * Programming Language: Java + * + * File: $Source$ + * Version: $Revision: 395 $ + * Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ + * Last modified by: $Author: avega $ + * + * (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo + * S.A.Unipersonal (Telef�nica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.Delegate; +import org.omg.CORBA.portable.ObjectImpl; +import org.omg.CORBA.portable.ValueBase; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationDelegate; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.poa.ExecThread; +import es.tid.TIDorbj.core.poa.POAManagerImpl; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * Layer that dispatchs the request to local objects. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Javier Fdez. Mejuto + * @version 1.0 + */ + +//TODO: maybe local comm layer should be a CommunicationLayer itself +public class LocalCommLayer extends + es.tid.TIDorbj.core.comm.iiop.CommunicationLayer { + public LocalCommLayer( es.tid.TIDorbj.core.TIDORB orb ) { + super( orb ); + } + + public boolean objectExists( IIOPIOR ior, PolicyContext policy_context ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + try { + + long timeout = QoS.checkRequestTime(this.m_orb, + policy_context); + + ObjectKey objectKey = ior.getObjectKey(); + + LocalLocateResponseHandler responseHandler; + responseHandler = new LocalLocateResponseHandler( + objectKey, + policy_context + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * Local request cannot be dispatched regularly because the + * dispatcher should wait for them... think of this later + * CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + */ + + // Check if the the thread that invoked the request is an ExecThread + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( responseHandler ); + } else { + // application invocation + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + + responseHandler.waitForCompletion(timeout); + + + } + + // Invoking poaManager + + if ( ! responseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( responseHandler.isExceptionSet() ) { + throw responseHandler.getException(); + } + + if ( responseHandler.isForwarded() ) { + IIOPIOR forwardIOR; + + org.omg.CORBA.Object forwardReference; + forwardReference = responseHandler.getForwardReference(); + + if ( forwardReference instanceof ValueBase ) { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + if ( forwardReference instanceof ObjectImpl ){ + ObjectImpl reference; + reference = ( ( ObjectImpl )forwardReference ); + + Delegate forwardDelegate; + forwardDelegate = reference._get_delegate(); + + if ( forwardDelegate instanceof IIOPCommunicationDelegate ) { + forwardIOR = ( ( IIOPCommunicationDelegate )forwardDelegate ) + .getIIOPReference(); + } else { + //TODO: ask juan: this could happen? + // write ior from anothers's ORB Object + forwardIOR = IIOPIOR.fromString( m_orb, m_orb + .object_to_string( forwardReference ) ); + } + throw new ForwardRequest( forwardIOR ); + } else { + throw new org.omg.CORBA.INV_OBJREF(); + } + } + + // Return results + return responseHandler.getResult(); + } catch ( INTERNAL e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.ERROR, + "INTERNAL Exception in local oneway invocation", + e + ); + } + throw e; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.ERROR, + "Exception in local location invocation", + e + ); + } + throw e; + } + } + + public void request( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + try { + + request.withResponse( true ); + sendRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + throw fr; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, "Exception in local invocation", + e ); + } + throw e; + } + } + + public void onewayRequest( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + request.withResponse( false ); + sendRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + // unreachable + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, + "Exception in local oneway invocaton", e ); + } + throw e; + } + } + + //corregir + public void asyncRequest( es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + try { + + request.withResponse( true ); + sendAsyncRequest( request, ior ); + + } catch ( es.tid.TIDorbj.core.comm.ForwardRequest fr ) { + throw fr; + } catch ( RuntimeException e ) { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( Trace.ERROR, "Exception in local asynchronous invocation", + e ); + } + throw e; + } + } + + protected void sendRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + long timeout = QoS.checkRequestTime(this.m_orb, + request.getPolicyContext()); + + ObjectKey objectKey = ior.getObjectKey(); + + PolicyContext policyContext; + policyContext = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest; + serverRequest = new LocalServerRequest( request ); + + + //CreatingResponseHandler + LocalResponseHandler responseHandler; + responseHandler = new LocalResponseHandler( + objectKey, + serverRequest ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + POAManagerImpl poaManager; + poaManager = ( POAManagerImpl ) m_orb.initPOA().the_POAManager(); + if ( ! request.withResponse() ) { + // Invoking poaManager + poaManager.put( responseHandler ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread; + currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( responseHandler ); + } else { // application invocation + // Invoking poaManager + poaManager.put( responseHandler ); + + responseHandler.waitForCompletion(timeout ); + } + + if ( ! responseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( serverRequest.isForwarded() ) { + + IIOPIOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = + ( ( org.omg.CORBA.portable.ObjectImpl )forward )._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = + ( ( IIOPCommunicationDelegate )forward_delegate ).getIIOPReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IIOPIOR.fromString( + m_orb, + m_orb.object_to_string( forward ) + ); + } + + throw new es.tid.TIDorbj.core.comm.ForwardRequest( forwarded_ior ); + } + } + } + + + protected void sendAsyncRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.comm.ForwardRequest { + + long timeout = QoS.checkRequestTime(this.m_orb, + request.getPolicyContext()); + + ObjectKey objectKey = ior.getObjectKey(); + + PolicyContext policyContext; + policyContext = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest; + serverRequest = new LocalServerRequest( request ); + + + //CreatingResponseHandler + AMILocalResponseHandler amiResponseHandler; + amiResponseHandler = new AMILocalResponseHandler(objectKey, serverRequest, m_orb ); + amiResponseHandler.setSerial(m_orb.getRequestCounter().next()); + + POAManagerImpl poaManager; + poaManager = ( POAManagerImpl ) m_orb.initPOA().the_POAManager(); + if ( ! request.withResponse() ) { + // Invoking poaManager + poaManager.put( amiResponseHandler ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread currentThread = Thread.currentThread(); + + if ( currentThread instanceof ExecThread ) { + ExecThread currentExecThread; + currentExecThread = ( ExecThread )currentThread; + currentExecThread.processLocalRequest( amiResponseHandler ); + } else { // application invocation + // Invoking poaManager + poaManager.put( amiResponseHandler ); + } + + + /*if ( ! amiResponseHandler.isCompleted() ) { + throw new NO_RESPONSE(); + }*/ + + } + } + + + /** + + protected void sendRequest( RequestImpl request, IOR ior ) + throws es.tid.TIDorbj.core.ForwardRequest { + + ObjectKey key = ior.getObjectKey(); + POAKey poaKey; + if ( key instanceof POAKey ) { + poaKey = ( POAKey ) key; + } else { + poaKey = new POAKey( key.getMarshaledKey() ); + } + + PolicyContext policy_context = request.getPolicyContext(); + + // Creating ServerRequest + LocalServerRequest serverRequest = new LocalServerRequest( request ); + + // Creating LocalRequest + LocalRequest localRequest = new LocalRequest( poaKey, m_orb.initPOA(), + serverRequest ); + + if ( !request.withResponse() ) { + // Invoking poaManager + POAManagerImpl poaManager = ( POAManagerImpl ) m_orb.initPOA() + .the_POAManager(); + poaManager.put( localRequest ); + } else { + // Check if the the thread that invoked the request is an ExecThread + + Thread this_thread = Thread.currentThread(); + + POAManagerImpl poaManager = ( POAManagerImpl ) m_orb.initPOA() + .the_POAManager(); + + if ( this_thread instanceof ExecThread ) { + ( ( ExecThread ) this_thread ).processLocalRequest( + localRequest, poaManager ); + } else { // application invocation + // Invoking poaManager + poaManager.put( localRequest ); + localRequest.waitForCompletion( PolicyUtil + .getRelativeRequestTimeoutValue( policy_context ) ); + } + + if ( !localRequest.getCompleted() ) { + throw new NO_RESPONSE(); + } + + if ( serverRequest.isForwarded() ) { + + es.tid.TIDorbj.core.iop.IOR forwarded_ior; + + org.omg.CORBA.Object forward = serverRequest.getForward(); + + if ( forward instanceof org.omg.CORBA.portable.ValueBase ) + throw new org.omg.CORBA.NO_IMPLEMENT(); + + if ( ! ( forward instanceof org.omg.CORBA.portable.ObjectImpl ) ) + throw new org.omg.CORBA.INV_OBJREF(); + + org.omg.CORBA.portable.Delegate forward_delegate = ( ( org.omg.CORBA.portable.ObjectImpl ) forward ) + ._get_delegate(); + + if ( forward_delegate instanceof IIOPCommunicationDelegate ) { + forwarded_ior = ( ( IIOPCommunicationDelegate ) forward_delegate ) + .getReference(); + } else { // write ior from anothers's ORB Object + forwarded_ior = IOR.fromString( m_orb, m_orb + .object_to_string( forward ) ); + } + + throw new es.tid.TIDorbj.core.ForwardRequest( forwarded_ior ); + } + } + } + + */ + + public void prepareRequest( es.tid.TIDorbj.core.StreamRequestImpl request ) { + throw new org.omg.CORBA.INTERNAL(); + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + es.tid.TIDorbj.core.cdr.CDROutputStream stream, + es.tid.TIDorbj.core.policy.PolicyContext policy_context ) + throws es.tid.TIDorbj.core.comm.ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + throw new org.omg.CORBA.INTERNAL(); + } + + public void dump(java.io.PrintWriter writer){ + } +} diff --git a/source/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.java b/source/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.java new file mode 100644 index 0000000..eb9e2b5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/LocalLocateResponseHandler.java @@ -0,0 +1,199 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class LocalLocateResponseHandler extends QueuedLocateResponseHandler { + + private OperationCompletion completionStatus; + + private ObjectKey objectKey; + + //To store whether the object was found or not + private boolean locationResult; + + private Object forwardReference; + + private SystemException exception; + + private PolicyContext requestPolicyContext; + + + public LocalLocateResponseHandler( ObjectKey key, PolicyContext ctx){ + this.completionStatus = new OperationCompletion(); + this.objectKey = key; + this.requestPolicyContext = ctx; + } + + /** + * OWN METHODS + */ + public boolean getResult(){ + return this.locationResult; + } + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /** + * INHERITED METHODS + */ + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.requestPolicyContext; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException systemException ) { + this.exception = systemException; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#submitResponse(boolean) + */ + public void submitResponse( boolean value ) { + this.locationResult = value; + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /*TODO: remove from here upon refactoring completion*/ + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.poa.QueuedRequest#sendError(org.omg.CORBA.SystemException, es.tid.TIDorbj.util.Trace) + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + } + + + /**/ + +} diff --git a/source/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.java b/source/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.java new file mode 100644 index 0000000..25647f0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/LocalResponseHandler.java @@ -0,0 +1,184 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.OperationCompletion; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ + +/* + * TODO: this class and its peer LocalLocateResponseHandler are too similar, + * check it! + */ + +public class LocalResponseHandler extends QueuedResponseHandler { + + + private LocalServerRequest serverRequest; + private ObjectKey objectKey; + + private OperationCompletion completionStatus; + + private Object forwardReference; + private SystemException exception; + + private PolicyContext requestPolicyContext; + + public LocalResponseHandler( + ObjectKey objectKey, + LocalServerRequest serverRequest ){ + this.objectKey = objectKey; + this.serverRequest = serverRequest; + this.completionStatus = new OperationCompletion(); + } + + /** + * OWN METHODS + */ + + public boolean isForwarded(){ + return this.forwardReference != null; + } + + public Object getForwardReference(){ + return this.forwardReference; + } + + public boolean isCompleted(){ + return this.completionStatus.isCompleted(); + } + + public boolean isExceptionSet(){ + return this.exception != null; + } + + public SystemException getException(){ + return this.exception; + } + + + public void waitForCompletion(long how_long) + { + try { + this.completionStatus.waitForCompletion(how_long); + } + catch (java.lang.InterruptedException ie) { + throw new INTERNAL("Unexpected Interrupted Exception"); + } + catch (es.tid.TIDorbj.core.util.OnlyOneThreadCanWait only) { + throw new INTERNAL("Only one Thread can wait in the request lock."); + } + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext() { + return this.serverRequest.getLocalRequest().getPolicyContext(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + this.forwardReference = reference; + this.serverRequest.setForward( reference ); + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + this.exception = e; + this.serverRequest.setSystemException( e ); + this.completionStatus.setCompleted(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + this.completionStatus.setCompleted(); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + // TODO Auto-generated method stub + + } + + + +} diff --git a/source/es/tid/TIDorbj/core/comm/local/LocalServerRequest.java b/source/es/tid/TIDorbj/core/comm/local/LocalServerRequest.java new file mode 100644 index 0000000..66c130c --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/local/LocalServerRequest.java @@ -0,0 +1,159 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.local; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.NVList; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; + +public class LocalServerRequest extends org.omg.CORBA.ServerRequest +{ + + RequestImpl m_local_request; + + NVList m_server_parameters; + + org.omg.CORBA.Object m_forward_obj; + + public LocalServerRequest(RequestImpl request) + { + m_local_request = request; + m_server_parameters = null; + m_forward_obj = null; + } + + public String operation() + { + return m_local_request.operation(); + } + + public org.omg.CORBA.Context ctx() + { + return m_local_request.ctx(); + } + + public void arguments(org.omg.CORBA.NVList nv) + { + if (nv == null) + throw new BAD_PARAM("Null NVList reference", 0, + CompletionStatus.COMPLETED_NO); + + m_server_parameters = nv; + // performance improvement: wrap the parameter anys and do not copy then + // ONLY WITH NO ONEWAY REQUEST!!!!! + + boolean wrap_anys = m_local_request.withResponse(); + + NVListImpl.assignInArguments(m_local_request.arguments(), + m_server_parameters, wrap_anys); + } + + public void set_result(Any result) + { + if (result == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + Any result_any = m_local_request.return_value(); + AnyImpl.assignValue(result, result_any); + } + + public void set_exception(Any except) + { + if (except == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + m_local_request.setUserException(except); + } + + // TIDorb operations + + public void fixOutArguments() + { + // performance improvement: wrap the parameter anys and do not copy them + // ONLY WITH NO ONEWAY REQUEST!!!!! + NVListImpl.assignOutArguments(m_server_parameters, + m_local_request.arguments(), true); + } + + public void setSystemException(org.omg.CORBA.SystemException except) + { + if (except == null) + throw new BAD_PARAM("Null any reference", 0, + CompletionStatus.COMPLETED_NO); + + m_local_request.setSystemException(except); + } + + public boolean isForwarded() + { + return m_forward_obj != null; + } + + public void setForward(org.omg.CORBA.Object obj) + { + m_forward_obj = obj; + } + + public org.omg.CORBA.Object getForward() + { + return m_forward_obj; + } + + public void destroy() + { + NVListImpl.destroy(m_server_parameters); + } + + public RequestImpl getLocalRequest() + { + return m_local_request; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/all-wcprops b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/all-wcprops new file mode 100644 index 0000000..0c2fd88 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/all-wcprops @@ -0,0 +1,65 @@ +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop +END +SSLConnection.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.java +END +SSLIOPCommLayer.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.java +END +SSLComponent.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.java +END +SSLIOPCommunicationLayerPropertiesInfo.java +K 25 +svn:wc:ra_dav:version-url +V 130 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.java +END +SSLLocateResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.java +END +SSLIOPCommunicationDelegate.java +K 25 +svn:wc:ra_dav:version-url +V 119 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.java +END +SSLIOPCommunicationLayer.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.java +END +SSLIOPCorbaloc.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.java +END +SSLResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.java +END +SSLServerListener.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.java +END diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/entries b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/entries new file mode 100644 index 0000000..40c2b4d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/entries @@ -0,0 +1,368 @@ +10 + +dir +478 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/comm/ssliop +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +SSLConnection.java +file + + + + +2011-03-27T14:09:43.000000Z +ebdeafb18c5f8e84c7fbd41dc54e9c52 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +19383 + +SSLIOPCommLayer.java +file + + + + +2011-03-27T14:09:43.000000Z +13eed8eeea3ba096354cde0cd37ae378 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +30617 + +SSLComponent.java +file + + + + +2011-03-27T14:09:43.000000Z +7b7711347a611b7222d765076e83d2d7 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +5882 + +SSLIOPCommunicationLayerPropertiesInfo.java +file + + + + +2011-03-27T14:09:43.000000Z +f483ec1e3a08e0ae93808219f1d63661 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +8429 + +SSLLocateResponseHandler.java +file + + + + +2011-03-27T14:09:43.000000Z +ff94f16e58bbe7cd4f175049d2fd2643 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +5665 + +SSLIOPCommunicationDelegate.java +file + + + + +2011-03-27T14:09:43.000000Z +a124ab3bde21ef922960d5c1d9a4759c +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +12137 + +SSLIOPCommunicationLayer.java +file + + + + +2011-03-27T14:09:43.000000Z +1ad7ec1691a572d69296d16ab4cb2868 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +12905 + +SSLIOPCorbaloc.java +file + + + + +2011-03-27T14:09:43.000000Z +1faafc4c18485ff5a23a8ad1801a7bd9 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +7069 + +SSLResponseHandler.java +file + + + + +2011-03-27T14:09:43.000000Z +26e1c9761d87114c3c6ce04471a3c11b +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +5908 + +SSLServerListener.java +file + + + + +2011-03-27T14:09:43.000000Z +56d008a02e5fb412f25b84390030c452 +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +15524 + diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLComponent.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLComponent.java.svn-base new file mode 100644 index 0000000..02258d2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLComponent.java.svn-base @@ -0,0 +1,195 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.SSLIOP.SSL; +import org.omg.SSLIOP.SSLHelper; + + +/** + * SSLComponent data struct defined in the GIOP Module. + * + * @autor avega + * @version 1.0 + */ +public class SSLComponent extends TaggedComponent +{ + + private SSL m_ssl; + + public SSLComponent() + { + super(TAG_SSL_SEC_TRANS.value); + m_ssl = new SSL(); + } + + public SSLComponent(SSL ssl) + { + super(TAG_SSL_SEC_TRANS.value); + m_ssl = ssl; + } + + + public short getTargetSupports() + { + return m_ssl.target_supports; + } + + + public short getTargetRequires() + { + return m_ssl.target_requires; + } + + + public short getSSLPort() + { + return m_ssl.port; + } + + + public SSL getSSL() + { + return m_ssl; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + SSLHelper.write(out, m_ssl); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_ssl = SSLHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("port: "); + if (m_ssl.port < 0) { + int myint = 65536 + m_ssl.port; + print_buffer.print(myint); + } + else { + print_buffer.print(m_ssl.port); + } + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("target_supports: "); + print_buffer.print(print_AssociationOptions(m_ssl.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("target_requires: "); + print_buffer.print(print_AssociationOptions(m_ssl.target_requires)); + return buffer.toString(); + } + + + public static String print_AssociationOptions(int mask) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + if ( (mask & org.omg.Security.NoProtection.value) > 0) { + print_buffer.print("\n \t \t \t NoProtection"); + } + if ( (mask & org.omg.Security.Integrity.value) > 0) { + print_buffer.print("\n \t \t \t Integrity"); + } + if ( (mask & org.omg.Security.Confidentiality.value) > 0) { + print_buffer.print("\n \t \t \t Confidentiality"); + } + if ( (mask & org.omg.Security.DetectReplay.value) > 0) { + print_buffer.print("\n \t \t \t DetectReplay"); + } + if ( (mask & org.omg.Security.DetectMisordering.value) > 0) { + print_buffer.print("\n \t \t \t DetectMisordering"); + } + if ( (mask & org.omg.Security.EstablishTrustInTarget.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInTarget"); + } + if ( (mask & org.omg.Security.EstablishTrustInClient.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInClient"); + } + if ( (mask & org.omg.Security.NoDelegation.value) > 0) { + print_buffer.print("\n \t \t \t NoDelegation"); + } + if ( (mask & org.omg.Security.SimpleDelegation.value) > 0) { + print_buffer.print("\n \t \t \t SimpleDelegation"); + } + if ( (mask & org.omg.Security.CompositeDelegation.value) > 0) { + print_buffer.print("\n \t \t \t CompositeDelegation"); + } + if ( (mask & org.omg.CSIIOP.IdentityAssertion.value) > 0) { + print_buffer.print("\n \t \t \t IdentityAssertion"); + } + if ( (mask & org.omg.CSIIOP.DelegationByClient.value) > 0) { + print_buffer.print("\n \t \t \t DelegationByClient"); + } + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLConnection.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLConnection.java.svn-base new file mode 100644 index 0000000..ce5015b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLConnection.java.svn-base @@ -0,0 +1,577 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.io.IOException; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.SSLContext; + +import java.security.KeyStore; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; + +import java.io.FileInputStream; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; +import es.tid.TIDorbj.core.comm.iiop.*; + +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb SSLIOP SSLConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SSLConnection extends Connection { + + /** + * SSLConnection Socket. + */ + javax.net.ssl.SSLSocket m_socket; + + /** + * SSLConnection Socket InputStream. + */ + public java.io.InputStream m_socket_in; + + /** + * SSLConnection Socket OutputStream. + */ + public java.io.OutputStream m_socket_out; + + private boolean tcpNoDelay; + private int soTimeout; + private int soLinger; + + private int socketWriteTimeout; + + String ssl_key_store_file; + String ssl_key_store_passwd; + String ssl_version; + + + private SSLConnection(IIOPConnectionManager mngr, javax.net.ssl.SSLSocket socket) + { + super(mngr); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + tcpNoDelay = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.TCP_NODELAY ) + .getBoolean(); + + soTimeout = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_TIMEOUT ) + .getInt(); + + soLinger = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_LINGER ) + .getInt(); + + socketWriteTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_WRITE_TIMEOUT ) + .getInt(); + + + try { + this.m_socket = socket; + + my_port = socket.getLocalPort(); + + socket.setTcpNoDelay( tcpNoDelay ); + socket.setSoTimeout( soTimeout ); + + socket.setSoLinger( soLinger != -1, soLinger ); + + m_socket_in = socket.getInputStream(); + m_socket_out = socket.getOutputStream(); + } + catch (java.io.IOException ioe) { + throw new OBJECT_NOT_EXIST(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + } + + m_write_monitor = new ConnectionWriteMonitor( socketWriteTimeout ); + } + + + /** + * SSLConnection hash code. + */ + public int hashCode() { + // return my_port; + return m_socket.hashCode(); + } + + public boolean equals(Object obj) { + return obj instanceof SSLConnection && + ( ( SSLConnection )obj ).my_port == my_port; + } + + public String toString() { + if (m_str == null) { + if (m_mode == CLIENT_MODE) { + m_str = "Client SSLConnection at " + m_socket.toString(); + } else if (m_mode == SERVER_MODE) { + m_str = "Server SSLConnection at " + m_socket.toString(); + } else { + m_str = "Bidirectional SSLConnection at " + m_socket.toString(); + } + } + return m_str; + } + + /** + * Creates a new connection in SERVER_MODE. + * + * @param mngr + * the manager + * @param sock + * Socket created in the accept + * method in a ServerSocket object. + */ + public static SSLConnection serverConnection(IIOPConnectionManager mngr, + javax.net.ssl.SSLSocket sock) { + SSLConnection conn = new SSLConnection(mngr, sock); + conn.m_mode = SERVER_MODE; + conn.init(); + + if (conn.m_orb.m_trace != null) { + conn.m_orb.printTrace(Trace.DEBUG, "Creating " + conn.toString()); + } + + return conn; + } + + /** + * Creates a new connection in CLIENT_MODE. + */ + + public static SSLConnection clientConnection(IIOPConnectionManager mngr, + ListenPoint listen_point) + { + + String ssl_key_store_file = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + String ssl_key_store_passwd = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + + String ssl_key_store_type = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_type_name ) + .getValue(); + + String ssl_trust_store_file = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_file_name ) + .getValue(); + + String ssl_trust_store_passwd = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_passwd_name ) + .getValue(); + + String ssl_trust_store_type = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_type_name ) + .getValue(); + + String ssl_version = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_version_name ) + .getValue(); + + + SSLSocketFactory ssf = null; + + try { + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); // TODO: put in param + kmf.init(ks, ksPass); + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getSocketFactory(); + + } catch (java.lang.Exception e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + else { + ssf = (SSLSocketFactory) SSLSocketFactory.getDefault(); + } + // create the socket + SSLSocket socket = + (SSLSocket) ssf.createSocket(listen_point.m_host, listen_point.m_ssl_port); + + socket.startHandshake(); + + SSLConnection conn = new SSLConnection(mngr, socket); + conn.m_mode = CLIENT_MODE; + conn.m_initial_point = listen_point; + conn.addListenPoint(listen_point); + conn.init(); + return conn; + + } + catch (java.io.IOException ioe) { + throw new TRANSIENT(ioe.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + catch (java.lang.SecurityException sce) { + throw new NO_PERMISSION(sce.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + + protected void close() + { + try { + m_socket.close(); + } + catch (IOException ioe) {} + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, + toString() + + " client socket closed"); + + // notify the writers blocked in write_monitor + + m_write_monitor.setException(m_state.getError()); + + // notify the locks + + LockEnumeration enumer = m_lock_list.elements(); + Lock lock; + + while (enumer.hasMoreElements()) { + lock = enumer.next(); + synchronized (lock) { + lock.cancelWaiting(); + } + } + + AMILockEnumeration ami_enum = m_ami_lock_list.elements(); + AMILock ami_lock; + + while (ami_enum.hasMoreElements()) { + ami_lock = ami_enum.next(); + synchronized (ami_lock) { + ami_lock.notify(); + } + } + + if (m_addresses != null) { + m_addresses.clear(); + } + + // clear buffers + + Enumeration msgs = m_uncompleted_messages.elements(); + + while (msgs.hasMoreElements()) { + m_uncompleted_messages.remove(msgs.nextElement()); + } + + // send_buffer = null; + // send_header_buffer = null; + // receive_header_buffer = null; + } + + protected void dispatchRequest(GIOPLocateRequestMessage message) { + + ObjectKey obj_key; + obj_key = message.extractAddress().getObjectKey(); + + SSLLocateResponseHandler responseHandler; + responseHandler = new SSLLocateResponseHandler( + this, + message.getHeader().getVersion(), + message.getRequestId(), + obj_key + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + m_requests_in_POA.inc(); + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + } + + protected void dispatchRequest(GIOPRequestMessage message) { + + ServerRequestImpl serverRequest; + serverRequest = message.extractRequest(m_orb); + + ObjectKey objectKey; + objectKey = serverRequest.getTarget().getObjectKey(); + + SSLResponseHandler responseHandler; + responseHandler = new SSLResponseHandler( + this, + message.getHeader().getVersion(), + serverRequest, + objectKey, + message.getRequestInvocationPolicies() + + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * TODO: ask juan: in previous code, when reference has been located, + * if it's not local just returns... which should be the + * refactoring mapping since the POAKey is resolved outside, + * under ExecThread, and there's "no way?" to acces the object + * reference to check if either it's local or not + * Previous code + if (!obj_impl._is_local()) { + // oneway request to a non local object: DISCARD + return; + } + * */ + + if (serverRequest.withResponse()) { + m_requests_in_POA.inc(); + } + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + } + + public void read(byte[] buffer, int offset, int length) + { + try { + int numReadNow = 0; + + while (length > 0) { + + numReadNow = m_socket_in.read(buffer, offset, length); + if (numReadNow < 0) { + throw new COMM_FAILURE("Broken SSLConnection", 0, + CompletionStatus.COMPLETED_NO); + } + + offset += numReadNow; + length -= numReadNow; + + } + + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer) + { + try { + + m_socket_out.write(buffer, 0, buffer.length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer, int offset, int length) + { + try { + m_socket_out.write(buffer, offset, length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommLayer.java.svn-base new file mode 100644 index 0000000..288b75a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommLayer.java.svn-base @@ -0,0 +1,962 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 309 $ +* Date: $Date: 2008-11-07 09:54:08 +0100 (Fri, 07 Nov 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.Properties; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESOURCES; +import org.omg.CORBA.Object; + +import org.omg.SSLIOP.SSL; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * IIOP Communications layer. It will manage the request for a remote object + * using the IIOP Protocol. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SSLIOPCommLayer extends es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer +{ + + + /** + * Server Socket listening thread. + */ + SSLServerListener m_ssl_server_listener; + + private SSLIOPCommunicationLayerPropertiesInfo propertiesInfo; + + public SSLIOPCommLayer(TIDORB orb) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb, null); + + this.propertiesInfo = SSLIOPCommunicationLayerPropertiesInfo.getInstance(); + + orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + )); + + + } + + public boolean isLocal( IIOPIOR ior) + { + if (m_ssl_server_listener == null) // no object adaptor initialized + return false; + + // Check SSLComponent of IOR... + es.tid.TIDorbj.core.comm.ssliop.SSLComponent ior_ssl_component = + ior.profileIIOP().getSSLComponent(); + + if (ior_ssl_component == null) + return false; + + + org.omg.SSLIOP.SSL ssl = ior_ssl_component.getSSL(); + + es.tid.TIDorbj.core.comm.iiop.ListenPoint server_listen_point = + m_ssl_server_listener.getListenPoint(); + + es.tid.TIDorbj.core.comm.iiop.ListenPoint ior_listen_point = + ior.profileIIOP().getListenPoint(); + + return ( server_listen_point.m_host.equals(ior_listen_point.m_host) + && (server_listen_point.m_port == ssl.port) ); + + } + + public boolean hasServerListener() + { + return (m_ssl_server_listener != null); + } + + /** + * Sends a request (with response) allocating an active connection with the + * corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + protected void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + PolicyContext policy_context = request.getPolicyContext(); + + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendRequest(request, ior); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * Sends a request using the IIOP protocol. + * + * @param request + * the CORBA request. + */ + public void request(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws ForwardRequest + { + request.withResponse(true); + sendRequest(request, ior); + } + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void onewayRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + if ( reliable_oneway ) { + try { + ReliableOnewayThread th = + new ReliableOnewayThread(this, request, ior); + th.start(); + return; + } + catch (Throwable thw) { + throw new NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } else { + + try { + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + + conn = + m_connection_manager + .getSSLClientConnection(profile.getListenPoint(), + request.getPolicyContext()); + + conn.sendOnewayRequestAsync(request, ior); + + } + catch (Throwable th) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + "Exception in oneway remote invocation", + th); + } + } + } + + /** + * Sends a asynchronous request using the IIOP protocol allocating an active + * connection with the corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + public void asyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + request.withResponse(true); + + PolicyContext policy_context = request.getPolicyContext(); + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendAsyncRequest(request, ior); //*opc1*, ami_handler); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void reliableOnewayRun( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + PolicyContext policy_context = + request.getPolicyContext(); + + request.reliableOneway(true); + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + + conn = + m_connection_manager + .getSSLClientConnection(profile.getListenPoint(), + policy_context); + + conn.sendOnewayRequestSync(request, ior); + + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) + throw rcf.m_comm_failure; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication" + +" recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + + recover_count--; + + if (m_orb.m_trace != null) { + String[] msg = { "Communication forwarded: ", + fr.forward_reference.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + } + } + } + catch (Throwable e) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Exception in reliable remote oneway invocation :", + e); + } + } + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + */ + public boolean objectExists(IIOPIOR ior, + PolicyContext policy_context) + throws ForwardRequest + { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendLocateRequest(ior, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + org.omg.CORBA.portable.ObjectImpl obj = request.getTarget(); + es.tid.TIDorbj.core.comm.CommunicationDelegate delegate = + (es.tid.TIDorbj.core.comm.CommunicationDelegate) obj._get_delegate(); + es.tid.TIDorbj.core.iop.IOR ior = delegate.getReference(); + + IIOPIOR iiopIOR; + if ( ior instanceof IIOPIOR ){ + iiopIOR = ( IIOPIOR )ior; + } else { + throw new org.omg.CORBA.INTERNAL("Not an IIOP IOR."); + } + + PolicyContext policy_context = + delegate.createRequestPolicyContext(); + + IIOPProfile profile; + profile = iiopIOR.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + } + + SSLConnection conn = null; + int recover_count = max_recover_count; + + while (conn == null) { + + try { + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + } + + conn.prepareRequest(request, iiopIOR); + + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + CDROutputStream stream, + PolicyContext policy_context + ) throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn = null; + int recover_count = max_recover_count; + + while (true) { + try { + + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendRequest(ior, stream, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * ORB Server IIOPConnection part shutdown. + */ + public synchronized void shutdown() + { + try { + if (m_ssl_server_listener != null) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "Shutdown SSLIOPCommLayer .SSLServerListener"); + } + m_ssl_server_listener.shutdown(); + m_ssl_server_listener = null; + } + } + catch (Throwable e) {} + + ((es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer)this).shutdown(); + } + + /** + * IIOP Layer close. + */ + public synchronized void destroy() + { + if (!m_destroyed) { + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, "Destroying SSLIOPCommLayer"); + } + + try { + if (m_ssl_server_listener != null) { + m_ssl_server_listener.shutdown(); + m_ssl_server_listener = null; + } + } + catch (Throwable e) {} + + ((es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer)this).destroy(); + } + } + + public synchronized void initServerListener() + { + if (m_ssl_server_listener == null) { + m_ssl_server_listener = new SSLServerListener(m_connection_manager); + m_ssl_server_listener.setDaemon(false); + try { + + m_ssl_server_listener.start(); + + } + catch (Throwable thw) { + m_ssl_server_listener = null; + throw new org.omg.CORBA.NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } + + // Also init IIOP server listener. It will always repond "NO_PERMISSION" + super.initServerListener(); + + } + + public synchronized IOR createIOR(String id, + POAKey key, + TaggedComponent[] extraComponents) + { + if (m_ssl_server_listener == null) + throw new org.omg.CORBA.INTERNAL("SSLServerListener not initialized"); + + TaggedComponent[] components = null; + int num_components = 1; // SSLComponent + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + num_components]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + } else { + components = new TaggedComponent[num_components]; + } + + // Add SSLComponent + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) m_ssl_server_listener.getListenPoint().m_port); + + SSLComponent ssl_component = new SSLComponent(ssl); + components[num_components - 1] = ssl_component; + + + return super.createIOR(id, key, components); + + } + + public synchronized IOR createIOR(String id, + ObjectKey key, + TaggedComponent[] extraComponents) + { + if (m_ssl_server_listener == null) + throw new org.omg.CORBA.INTERNAL("SSLServerListener not initialized"); + + TaggedComponent[] components = null; + int num_components = 1; // SSLComponent + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + num_components]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + } else { + components = new TaggedComponent[num_components]; + } + + // Add SSLComponent + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) m_ssl_server_listener.getListenPoint().m_port); + + SSLComponent ssl_component = new SSLComponent(ssl); + components[num_components - 1] = ssl_component; + + return super.createIOR(id, key, components); + + } + + +// public synchronized ServiceContextList getBidirectionalService() +// { +// if (m_destroyed) +// throw new org.omg.CORBA.BAD_INV_ORDER("ORB is destroying"); + +// if (m_bidirectional_service == null) { +// if (m_ssl_server_listener == null) +// throw new INTERNAL("Trying to create a bidirectional context " +// + "without ListenPoint"); + +// BiDirServiceContext bidir_context = new BiDirServiceContext(1); + +// bidir_context.m_listen_points[0] = +// m_ssl_server_listener.getListenPoint(); + +// m_bidirectional_service = new ServiceContextList(1); +// m_bidirectional_service.m_components[0] = bidir_context; + +// } + +// return m_bidirectional_service; +// } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationDelegate.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationDelegate.java.svn-base new file mode 100644 index 0000000..50adff2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationDelegate.java.svn-base @@ -0,0 +1,366 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 391 $ +* Date: $Date: 2009-05-25 16:58:01 +0200 (Mon, 25 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; +import org.omg.CORBA.portable.RemarshalException; + +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.comm.iiop.CommunicationLayer; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * @author avega + * + */ +public class SSLIOPCommunicationDelegate extends CommunicationDelegate { + + private IIOPIOR ssliopReference; + private SSLIOPCommunicationLayer communicationLayer; + + /** + * + */ + public SSLIOPCommunicationDelegate( SSLIOPCommunicationLayer communicationLayer ) { + super(); + if ( communicationLayer != null ){ + super.setORB( communicationLayer.getORB() ); + this.communicationLayer = communicationLayer; + this.forwardReference = null; + } else { + throw new IllegalArgumentException( + "Parameter 'commLayer' cannot be null" + ); + } + } + + public void setReference(IOR ior) { + IIOPIOR iiopIOR = null; + if(! (ior instanceof IIOPIOR) ) { + iiopIOR = new IIOPIOR(ior); + + } else { + iiopIOR = (IIOPIOR) ior; + } + + super.setReference(iiopIOR); + + IIOPProfile profile = iiopIOR.profileIIOP(); + + PoliciesComponent policiesComponent = profile.getPoliciesComponent(); + + if(policiesComponent != null) { + this.setPolicyContext(policiesComponent.getPolicies()); + } + + + + }//setReference + + + public synchronized IIOPIOR getIIOPReference(){ + if ( this.ssliopReference == null ){ + this.ssliopReference = new IIOPIOR(); + this.ssliopReference.assign( super.reference ); + } + return this.ssliopReference; + } + + + public IOR getReference(){ + return getIIOPReference(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#isLocal(org.omg.CORBA.Object) + */ + public boolean isLocal( org.omg.CORBA.Object self) { + + if ( super.getORB() == null) { + throw new BAD_OPERATION("ORB Singleton", 0, + CompletionStatus.COMPLETED_NO ); + } + + try { + if ( this.forwardReference == null) { + return this.communicationLayer.isLocal( this.getIIOPReference() ); + } else { + return this.forwardReference.is_local(null); + } + } catch ( CommunicationException ce ) { + return false; + } + }//isLocal + + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#non_existent(org.omg.CORBA.Object) + */ + public boolean non_existent(org.omg.CORBA.Object self){ + TIDORB orb = super.getORB(); + if ( orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + PolicyContext request_policy_context = createRequestPolicyContext(); + + CommunicationLayer comm_layer = this.communicationLayer.getCommLayer(); + + try { + + if ( this.forwardReference == null) { + return !comm_layer.objectExists( + this.getIIOPReference(), + request_policy_context); + } else { // there is forwards + boolean non_existent = true; + try { + non_existent = this.forwardReference.non_existent(null); + } + catch (org.omg.CORBA.COMM_FAILURE cf) { + non_existent = true; + } + catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + non_existent = false; + } + + if (non_existent) { + this.forwardReference = null; + } + + return non_existent; + } + } catch (ForwardRequest fe) { + + this.setForward(fe); + + } + + return non_existent(self); + }//non_existent + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#duplicate(org.omg.CORBA.Object) + */ + public Object duplicate(Object self) { + SSLIOPCommunicationDelegate delegate; + delegate = new SSLIOPCommunicationDelegate( this.communicationLayer ); + delegate.setReference( this.getReference() ); + + delegate.forwardReference = this.forwardReference; + + //getPolicyContext never returns null. + delegate.setPolicyContext( super.getPolicyContext().duplicate() ); + + ObjectImpl obj = new ObjectImpl(); + + obj._set_delegate(delegate); + + return obj; + }//duplicate + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release(org.omg.CORBA.Object) + */ + public void release(org.omg.CORBA.Object self) { + //Empty treatment + }//release + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release_reply(org.omg.CORBA.Object, org.omg.CORBA.portable.InputStream) + */ + public void release_reply(org.omg.CORBA.Object object, + org.omg.CORBA.portable.InputStream inputStream ) { + //Empty treatment + }//release_reply + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl) + */ + public void prepareRequest( StreamRequestImpl request ) { + this.communicationLayer.getCommLayer().prepareRequest( request ); + }//prepareRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#onewayRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void onewayRequest(RequestImpl request) { + if ( this.forwardReference != null ) { + this.forwardReference.onewayRequest(request); + } else { + this.communicationLayer.getCommLayer().onewayRequest( request, this.getIIOPReference() ); + } + }//oneWayRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(es.tid.TIDorbj.core.RequestImpl) + */ + public void invoke(RequestImpl request) { + try { + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().request( + request, + (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.invoke(request); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + invoke(request); + + }//forwarded + }//invoke + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(org.omg.CORBA.Object, org.omg.CORBA.portable.OutputStream) + */ + public InputStream invoke(org.omg.CORBA.Object object, + OutputStream stream ) + throws ApplicationException, RemarshalException + { + + if (is_local(object)) { + throw new BAD_OPERATION("Request is only valid for remote objects"); + } + + if (stream instanceof es.tid.TIDorbj.core.cdr.CDROutputStream) { + + es.tid.TIDorbj.core.cdr.CDROutputStream out = + (es.tid.TIDorbj.core.cdr.CDROutputStream) stream; + try { + if ( this.forwardReference == null) { + return this.communicationLayer.getCommLayer().request( + (IIOPIOR)this.getReference(), + out, + createRequestPolicyContext() + ); + } else { + return this.forwardReference.invoke(object, stream); + } + + } + catch (es.tid.TIDorbj.core.comm.ForwardRequest fr) { + this.setForward(fr); + throw new org.omg.CORBA.portable.RemarshalException(); + } + } else { + throw new org.omg.CORBA.BAD_OPERATION("Not a TIDorbJ's Stream"); + } + }//invoke stream + + // AMI callback operations + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#asyncRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void asyncRequest(RequestImpl request, Object ami_handler ) { + try { + request.set_ami_handler(ami_handler); + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().asyncRequest( + request, (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.asyncRequest(request, ami_handler); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + asyncRequest(request, ami_handler); + + }//forwarded + }//asyncRequest + + + + + +}//SSLIOPCommunicationDelegate diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayer.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayer.java.svn-base new file mode 100644 index 0000000..b3b0cbc --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayer.java.svn-base @@ -0,0 +1,398 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 274 $ +* Date: $Date: 2008-04-12 16:33:40 +0200 (Sat, 12 Apr 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.Properties; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationLayer; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.RequestDispatcher; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.CommLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +/** + * Entry point for the SSLIOPCommunicationLayer + * + * @author + * + * + */ +public class SSLIOPCommunicationLayer implements CommunicationLayer { + + public static String ID = "SSLIOPCommunicationLayer"; + + /* + * used for incoming requests notifications + */ + private RequestDispatcher dispatcher; + + /* + * the underlying ORB implementation + */ + private TIDORB orb; + + private CommLayer commLayer; + + private SSLIOPCommunicationLayerPropertiesInfo propertiesInfo; + + /** + * + */ + public SSLIOPCommunicationLayer() { + IIOPCommunicationLayer.ID = "SSLIOPCommunicationLayer"; + } + + public void setORB(TIDORB orb) { + if ( orb != null ){ + if ( this.orb != null ){ + this.commLayer.shutdown(); + this.propertiesInfo = null; + this.commLayer = null; + } + this.orb = orb; + this.propertiesInfo = SSLIOPCommunicationLayerPropertiesInfo.getInstance(); + this.orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + ) + ); + + + this.commLayer = new CommLayer( this.orb ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public CommLayer getCommLayer(){ + return this.commLayer; + } + + + public void setServerModeEnabled( boolean value ){ + if ( value ){ + this.commLayer.getExternalLayer().initServerListener(); + } + } + + public boolean isServerModeEnabled(){ + return this.commLayer.getExternalLayer().hasServerListener(); + } + + public synchronized ServiceContextList getBidirectionalService() { + return this.commLayer.getExternalLayer().getBidirectionalService(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String) + */ + public CommunicationDelegate createDelegate(String url) throws CommunicationException { + CommunicationDelegate delegate; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorb:" ) ){ + ior = Corbaloc.getIOR( url ); + } else if ( url.startsWith( "corbaloc:ssliop:" )) { + ior = SSLIOPCorbaloc.getIOR( url ); + } else if ( url.startsWith( "corbaloc:" )) { + ior = IIOPCorbaloc.getIOR( url ); + } else { + ior = IIOPIOR.fromString(this.orb, url); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + delegate = createDelegate( ior ); + } else { + delegate = null; + } + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String, java.util.Properties) + */ + public CommunicationDelegate createDelegate(String url, Properties info) + throws CommunicationException + { + return createDelegate( url ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR) + */ + public CommunicationDelegate createDelegate(IOR ior) + throws CommunicationException + { + SSLIOPCommunicationDelegate delegate = new SSLIOPCommunicationDelegate( this ); + delegate.setReference( ior ); + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR, java.util.Properties) + */ + public CommunicationDelegate createDelegate(IOR ior, Properties info) + throws CommunicationException + { + return createDelegate( ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(java.lang.String) + */ + public boolean accepts(String url) + throws CommunicationException + { + return url!= null && + ( url.startsWith( "corbaloc:ssliop:" ) || + url.startsWith( "corbaloc:tidorb:" ) || + url.startsWith( "corbaloc::" ) || + ( + url.startsWith( "IOR" ) && + this.accepts( DefaultIOR.fromString( this.orb, url ) ) + ) + ); + }//accepts + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(org.omg.IOP.IOR) + */ + public boolean accepts(IOR ior) + throws CommunicationException + { + boolean accepted; + accepted = ior instanceof IIOPIOR; + + int profilesCount = ior.memberCount(); + for (int i = 0; !accepted && i < profilesCount; i++) { + accepted = ior.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value; + } + + return accepted; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createIOR(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public IOR createIOR(String repositoryId, + ObjectKey key, + TaggedComponent[] components) + throws CommunicationException + { + return this.commLayer.getExternalLayer().createIOR( + repositoryId, + key, + components + ); + }//createIOR + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createURL(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public String createURL(String repositoryId, ObjectKey key) + throws CommunicationException + { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(es.tid.TIDorbj.core.iop.IOR) + */ + public String getInitialReference( IOR ior ) + throws CommunicationException + { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(java.lang.String) + */ + public String getInitialReference( String url ) + throws CommunicationException + { + String initialReference; + try { + initialReference = IIOPCorbaloc.getObjectId( url ); + } catch ( Throwable th ){ + initialReference = null; + } + return initialReference; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(es.tid.TIDorbj.core.iop.IOR) + */ + public boolean isLocal(IOR ior) + throws CommunicationException + { + return ior != null && this.accepts( ior ) && this.commLayer.isLocal( (IIOPIOR)ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(java.lang.String) + */ + public boolean isLocal(String url) throws CommunicationException { + boolean isLocal; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorbj:" ) ){ + ior = Corbaloc.getIOR( url ); + } else { + ior = IIOPCorbaloc.getIOR( url ); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + isLocal = this.isLocal( ior ); + } else { + isLocal = false; + } + return isLocal; + }//isLocal + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getPropertyInfo(java.lang.String, java.util.Properties) + */ + public PropertyInfo[] getPropertiesInfo() { + return ( PropertyInfo[] )this.propertiesInfo.map.entrySet().toArray( new PropertyInfo[0] ); + }//getPropertiInfo + + public PropertyInfo getPropertyInfo( String name){ + return ( PropertyInfo )this.propertiesInfo.map.get( name ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMajorVersion() + */ + public int getMajorVersion() { + return 1; + }//getMajorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMinorVersion() + */ + public int getMinorVersion() { + return 0; + }//getMinorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getId() + */ + public String getId() { + return SSLIOPCommunicationLayer.ID; + } + + public String toString(){ + + String hostSpec; + hostSpec = this.propertiesInfo.hostName.value; + if ( hostSpec == null ){ + hostSpec = this.propertiesInfo.hostAddress.value; + } + if ( hostSpec == null ){ + try { + hostSpec = java.net.InetAddress.getLocalHost().getHostName(); + } + catch (Exception e) {} + } + + StringBuffer toString = new StringBuffer( "[ " ) + .append( SSLIOPCommunicationLayer.ID ) + .append( " ( ssliop://" ) // TODO: change to ssliop:// + .append( hostSpec ) + .append( ':' ) + .append( this.propertiesInfo.ssl_port.value ) + .append( " )" ) + .append( " ]"); + + return toString.toString(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#shutdown(boolean) + */ + public void shutdown( boolean waitForCompletion ) { + if ( this.commLayer != null ){ + if ( waitForCompletion ){ + this.commLayer.shutdown(); + } else { + this.commLayer.destroy(); + } + this.commLayer = null; + } + } + + + /** + * PRIVATE METHODS + * @author avega + */ + + public void dump(java.io.PrintWriter writer){ + this.propertiesInfo.dump(writer); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayerPropertiesInfo.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayerPropertiesInfo.java.svn-base new file mode 100644 index 0000000..c7d6142 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCommunicationLayerPropertiesInfo.java.svn-base @@ -0,0 +1,292 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 274 $ +* Date: $Date: 2008-04-12 16:33:40 +0200 (Sat, 12 Apr 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; + +/** + * @author avega + * + * + * + */ +public class SSLIOPCommunicationLayerPropertiesInfo + extends IIOPCommunicationLayerPropertiesInfo{ + + + + /* + * Key Store options + */ + public final static String DEFAULT_SSL_KEY_STORE_FILE = null; + + public final static String ssl_key_store_file_name = + "es.tid.TIDorbj.ssliop.key_store_file"; + + + public final static String DEFAULT_SSL_KEY_STORE_PASSWD = null; + + public final static String ssl_key_store_passwd_name = + "es.tid.TIDorbj.ssliop.key_store_passwd"; + + + public final static String DEFAULT_SSL_KEY_STORE_TYPE = "JKS"; + + public final static String ssl_key_store_type_name = + "es.tid.TIDorbj.ssliop.key_store_type"; + + + /* + * TrustManager options + */ + public final static String DEFAULT_SSL_TRUST_STORE_FILE = null; + + public final static String ssl_trust_store_file_name = + "es.tid.TIDorbj.ssliop.trust_store_file"; + + + public final static String DEFAULT_SSL_TRUST_STORE_PASSWD = null; + + public final static String ssl_trust_store_passwd_name = + "es.tid.TIDorbj.ssliop.trust_store_passwd"; + + + public final static String DEFAULT_SSL_TRUST_STORE_TYPE = "JKS"; + + public final static String ssl_trust_store_type_name = + "es.tid.TIDorbj.ssliop.trust_store_type"; + + + /** + * SSL port used for generated IORs and URLs. Default value: 0 + */ + public final static String DEFAULT_SSL_PORT = "0"; + + public final static String ssl_port_name = + "es.tid.TIDorbj.ssliop.port"; + + + + + /** + * SSL version to be used by SSLIOP layer + * SSLv2 is not recomended due to security flaws + * Values must be 0 (SSLv2), 1 (SSLv3), 2 (SSLv23), 3 (TLSv1) + * Default value: 2 + */ + public final static String DEFAULT_SSL_VERSION = "SSLv3"; + + public final static String ssl_version_name = + "es.tid.TIDorbj.ssliop.ssl_version"; + + + + public PropertyInfo ssl_key_store_file; + public PropertyInfo ssl_key_store_passwd; + public PropertyInfo ssl_key_store_type; /* JKS or PKCS12 */ + + public PropertyInfo ssl_trust_store_file; + public PropertyInfo ssl_trust_store_passwd; + public PropertyInfo ssl_trust_store_type; /* JKS or PKCS12 */ + + public PropertyInfo ssl_port; + public PropertyInfo ssl_version; + + //public HashMap map; + + public SSLIOPCommunicationLayerPropertiesInfo() { + + super(); + + // TODO: resize map ?? + + /** + * SSL KEY STORE FILE + */ + ssl_key_store_file = new PropertyInfo( + ssl_key_store_file_name, + DEFAULT_SSL_KEY_STORE_FILE + ); + ssl_key_store_file.setDescription( + "Key Store file name." + ); + ssl_key_store_file.setRequired( false ); + ssl_key_store_file.setChoices ( null ); + map.put( ssl_key_store_file_name, ssl_key_store_file ); + + + /** + * SSL KEY STORE PASSWD + */ + ssl_key_store_passwd = new PropertyInfo( + ssl_key_store_passwd_name, + DEFAULT_SSL_KEY_STORE_PASSWD + ); + ssl_key_store_passwd.setDescription( + "Key Store passwd." + ); + ssl_key_store_passwd.setRequired( false ); + ssl_key_store_passwd.setChoices ( null ); + map.put( ssl_key_store_passwd_name, ssl_key_store_passwd ); + + + /** + * SSL TRUST STORE TYPE + */ + ssl_key_store_type = new PropertyInfo( + ssl_key_store_type_name, + DEFAULT_SSL_KEY_STORE_TYPE + ); + ssl_key_store_passwd.setDescription( + "Key Store type." + ); + ssl_key_store_passwd.setRequired( false ); + ssl_key_store_passwd.setChoices ( new String[]{ "JKS", "PCKS12" } ); + map.put( ssl_key_store_type_name, ssl_key_store_type ); + + + + + /** + * SSL TRUST STORE FILE + */ + ssl_trust_store_file = new PropertyInfo( + ssl_trust_store_file_name, + DEFAULT_SSL_TRUST_STORE_FILE + ); + ssl_trust_store_file.setDescription( + "Trust Store file name." + ); + ssl_trust_store_file.setRequired( false ); + ssl_trust_store_file.setChoices ( null ); + map.put( ssl_trust_store_file_name, ssl_trust_store_file ); + + + /** + * SSL TRUST STORE PASSWD + */ + ssl_trust_store_passwd = new PropertyInfo( + ssl_trust_store_passwd_name, + DEFAULT_SSL_TRUST_STORE_PASSWD + ); + ssl_trust_store_passwd.setDescription( + "Key Store passwd." + ); + ssl_trust_store_passwd.setRequired( false ); + ssl_trust_store_passwd.setChoices ( null ); + map.put( ssl_trust_store_passwd_name, ssl_trust_store_passwd ); + + + /** + * SSL TRUST STORE TYPE + */ + ssl_trust_store_type = new PropertyInfo( + ssl_trust_store_type_name, + DEFAULT_SSL_TRUST_STORE_TYPE + ); + ssl_trust_store_passwd.setDescription( + "Trust Store type." + ); + ssl_trust_store_passwd.setRequired( false ); + ssl_trust_store_passwd.setChoices ( new String[]{ "JKS", "PCKS12" } ); + map.put( ssl_trust_store_type_name, ssl_trust_store_type ); + + + + /** + * SSL PORT + */ + ssl_port = new PropertyInfo( + ssl_port_name, + DEFAULT_SSL_PORT + ); + ssl_port.setDescription( + "SSL port." + ); + ssl_port.setRequired( false ); + ssl_port.setChoices ( null ); + map.put( ssl_port_name, ssl_port ); + + + /** + * SSL VERSION + */ + ssl_version = new PropertyInfo( + ssl_version_name, + DEFAULT_SSL_VERSION + ); + ssl_version.setDescription( + "SSL Version" + ); + ssl_version.setRequired( false ); + ssl_version.setChoices ( new String[]{ "SSLv2", "SSLv3", "SSLv23", "TLSv1" } ); + map.put( ssl_version_name, ssl_version ); + + + + } + + public static SSLIOPCommunicationLayerPropertiesInfo getInstance(){ + return new SSLIOPCommunicationLayerPropertiesInfo(); + } + + public void dump(java.io.PrintWriter writer) + { + writer.println("SSLIOPCommunicationLayer properties:"); + + Iterator it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry e = (Map.Entry)it.next(); + writer.print('\t'); + writer.print(e.getKey()); + writer.print('='); + writer.print( ((PropertyInfo)e.getValue()).getValue()); + writer.println(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCorbaloc.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCorbaloc.java.svn-base new file mode 100644 index 0000000..dfa6513 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLIOPCorbaloc.java.svn-base @@ -0,0 +1,202 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.StringTokenizer; + +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +import org.omg.SSLIOP.SSL; +import org.omg.CSIIOP.*; + +public class SSLIOPCorbaloc +{ + + public static String getObjectId(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, path, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:ssliop:")) { + corbaloc = corbaloc_URL.substring(16); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + return corbaloc.substring(slashposition + 1); + } + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, url_key, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:ssliop:")) { + corbaloc = corbaloc_URL.substring(16); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + url_key = corbaloc.substring(slashposition + 1); + + ObjectKey objectkey = createKey(url_key); + + + // Add to components a new SSLComponent with a listenpoint port as SSL + TaggedComponent[] components = new TaggedComponent[1]; + + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) listener.m_port); + SSLComponent ssl_component = new SSLComponent(ssl); + components[0] = ssl_component; + + listener.m_ssl_port = listener.m_port; + listener.m_port = 0; // not used + + + profiles = new IIOPProfile[1]; + + //profiles[0] = new IIOPProfile(version, listener, objectkey, null); + profiles[0] = new IIOPProfile(version, listener, objectkey, components); + + return new IIOPIOR("", profiles); + } + + /** + * Simulates an usual ObjectKey, that is marshaled in an Encapsulation, but + * instead, the url ObjectKey is marshaled as a ulong value (the size) and + * the char array of the string (without the end of string character *. + * + * @param url + * @return + * @throws org.omg.CORBA.ORBPackage.InvalidName + */ + private static ObjectKey createKey(String url_key) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + CDROutputStream output = + new CDROutputStream(null, + new byte[url_key.length() + CDR.ULONG_SIZE]); + + char[] url_buffer = url_key.toCharArray(); + + output.write_ulong(url_buffer.length); + output.write_char_array(url_buffer, 0, url_buffer.length); + + CDRInputStream input = (CDRInputStream) output.create_input_stream(); + + Encapsulation encap = input.readEncapsulation(); + + return new ObjectKey(encap); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..4e2ef90 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLLocateResponseHandler.java.svn-base @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.LocateResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + */ +public class SSLLocateResponseHandler extends QueuedLocateResponseHandler implements LocateResponseHandler { + + private SSLConnection conn; + private GIOPVersion version; + private RequestId requestId; + private ObjectKey objectKey; + + + public SSLLocateResponseHandler( SSLConnection conn, + GIOPVersion version, + RequestId requestId, + ObjectKey objectKey) + { + setConnection( conn ); + setVersion ( version ); + setRequestId ( requestId ); + setObjectKey ( objectKey ); + } + + public void setConnection( SSLConnection conn ){ + this.conn = conn; + } + + public SSLConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setRequestId( RequestId requestId ){ + this.requestId = requestId; + } + + public RequestId getRequestId(){ + return this.requestId; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + throw new INTERNAL("Not supported"); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, reference ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, e ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#setResponseValue(boolean) + */ + public void submitResponse( boolean value ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, value ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLResponseHandler.java.svn-base new file mode 100644 index 0000000..6d65d39 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLResponseHandler.java.svn-base @@ -0,0 +1,193 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + + +/** + * ResponseHandler implementation for the IIOPCommunicationLayer + * + * @author jprojas + * + */ +public class SSLResponseHandler extends QueuedResponseHandler implements ResponseHandler { + + private SSLConnection conn; + private GIOPVersion version; + private ServerRequestImpl serverRequest; + private ObjectKey objectKey; + private PolicyContext policySupplier; + + public SSLResponseHandler( SSLConnection conn, + GIOPVersion version, + ServerRequestImpl + serverRequest, + ObjectKey objectKey, + PolicyContext policySupplier){ + setConnection( conn ); + setVersion( version ); + setServerRequest( serverRequest ); + setObjectKey( objectKey ); + setPolicyContext( policySupplier ); + } + + public void setConnection( SSLConnection conn ){ + this.conn = conn; + } + + public SSLConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setServerRequest( ServerRequestImpl serverRequest ){ + this.serverRequest = serverRequest; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + /** + * @param policySupplier The policySupplier to set. + */ + public void setPolicyContext(PolicyContext policySupplier) + { + this.policySupplier = policySupplier; + } + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + return this.policySupplier; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.serverRequest.setForward( reference ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + if( this.serverRequest.withResponse() ) { + this.serverRequest.setSystemException( e ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.conn.sendReply( this.serverRequest, this.policySupplier ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /** + * remove from here + * @author jprojas + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLServerListener.java.svn-base b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLServerListener.java.svn-base new file mode 100644 index 0000000..014b03d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/.svn/text-base/SSLServerListener.java.svn-base @@ -0,0 +1,462 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 379 $ +* Date: $Date: 2009-04-07 12:17:19 +0200 (Tue, 07 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2010 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.net.InetAddress; +import java.net.Socket; +import javax.net.ssl.SSLServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLContext; + +import java.security.KeyStore; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; + +import java.io.FileInputStream; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.Trace; + +import org.omg.SSLIOP.SSL; +import org.omg.CSIIOP.*; + + +public class SSLServerListener extends Thread +{ + + /** + * SSLServerSocket state + */ + + boolean m_shutdowned; + + boolean m_connected; + + /** + * SSLServerSocket where the communication layer will accept connections. This + * socket will be only avalilable when a the ORB's run method + * had been invoked. + */ + SSLServerSocket m_server_socket; + + /** + * Conection manager. + */ + IIOPConnectionManager m_manager; + + + /** + * Listen point where the SSLServerSocket will be listening. This + * point(host,port) will be used to create de local IOR's. + */ + ListenPoint m_listen_point; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + ServiceContextList m_bidirectional_service; + + es.tid.TIDorbj.core.TIDORB m_orb; + + String hostAddress; + String hostName; + int port; + int backlog; + int reconnect; + GIOPVersion giopVersion; + + String ssl_key_store_file; + String ssl_key_store_passwd; + String ssl_key_store_type; + + String ssl_trust_store_file; + String ssl_trust_store_passwd; + String ssl_trust_store_type; + + String ssl_version; + + + public SSLServerListener(IIOPConnectionManager manager) + { + m_shutdowned = true; + m_connected = false; + + this.m_manager = manager; + m_orb = manager.orb(); + + this.hostAddress = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS ) + .getValue(); + this.hostName = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_NAME ) + .getValue(); +// this.port = +// m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) +// .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.PORT ) +// .getInt(); + this.backlog = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_BACKLOG ) + .getInt(); + this.reconnect = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_RECONNECT ) + .getInt(); + this.giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + + // SSL options + + this.ssl_key_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + this.ssl_key_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + + this.ssl_key_store_type = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_type_name ) + .getValue(); + + this.ssl_trust_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_file_name ) + .getValue(); + + this.ssl_trust_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_passwd_name ) + .getValue(); + + this.ssl_trust_store_type = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_type_name ) + .getValue(); + + this.ssl_version = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_version_name ) + .getValue(); + + // port is ssl_port + this.port = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_port_name ) + .getInt(); + + + + + + + + SSLServerSocketFactory ssf = null; + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); + kmf.init(ks, ksPass); + + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getServerSocketFactory(); + + } catch (Exception e) { + throw new org.omg.CORBA.INITIALIZE("Can init SSLServerSocketFactory: " + + e.toString() ); + } + + } else { + // TODO: bad initialized?? + ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + } + + try { + if ( hostAddress == null) { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + this.port , + this.backlog ); + + } else { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + this.port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + + if ( this.hostName != null) { + m_listen_point = new ListenPoint( + this.hostName , + m_server_socket.getLocalPort() + ); + } else { + m_listen_point = new ListenPoint( + InetAddress.getLocalHost().getHostAddress(), + m_server_socket.getLocalPort() + ); + } + + m_shutdowned = false; + m_connected = true; + + } + catch (java.io.IOException e) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open SSLServerSocket: " + e.toString() + ); + } + + m_orb.printTrace( + Trace.DEBUG, "SSLServerListener connected at: " + m_listen_point.toString() + ); + } + + public ListenPoint getListenPoint() { + return m_listen_point; + } + + public synchronized void shutdown() { + if (!m_shutdowned) { + m_shutdowned = true; + try { + m_server_socket.close(); + } catch (Throwable th) {} + + m_server_socket = null; + + m_orb.printTrace( + Trace.DEBUG, "SSLServerListener at " + m_listen_point.toString() + " shutdown!" + ); + } + } + + public synchronized void resetServerSocket() { + if (!m_shutdowned) { + try { + if (m_server_socket != null) + m_server_socket.close(); + } + catch (Throwable th) {} + + SSLServerSocketFactory ssf = null; + + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); + kmf.init(ks, ksPass); + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getServerSocketFactory(); + + if ( this.hostAddress == null) { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + m_listen_point.m_port, + this.backlog + ); + } else { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + m_listen_point.m_port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + } catch (Throwable th) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open SSLServerSocket: " + th.toString() + ); + } + + } else { + ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + } + } + } + + public void run() + { + while (!m_shutdowned) { + while (m_connected) { + + Socket client_socket = null; + try { + client_socket = m_server_socket.accept(); + } catch (Throwable se) { + + if ( m_shutdowned ){ + return; + } + + m_connected = false; + + m_orb.printTrace( + Trace.ERROR, "Error in SSLServerSocket.accept(): ", se + ); + } + + try { + if (client_socket != null) { + m_manager.createSSLServerConnection((SSLSocket)client_socket); + } + } catch (Throwable e) { + try { + client_socket.close(); + } catch (Throwable t) {} + + m_orb.printTrace( + Trace.ERROR, "Error creating SSLServerConnection: ", e + ); + } + } + + if ((!m_connected) && (!m_shutdowned)) { + + // RECONNECT + + //printTrace will check for a trace handler existence + m_orb.printTrace( Trace.DEBUG, "Trying to reconnect server socket "); + + try { + resetServerSocket(); + m_connected = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, "SSLServerSocket reconnected" + ); + } + } catch (Throwable th) { + m_orb.printTrace( + Trace.ERROR, "SSLServerSocket reconnect error: ", th + ); + try { + Thread.sleep( this.reconnect ); + } catch (InterruptedException e) {} + } + } + } + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.java new file mode 100644 index 0000000..02258d2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLComponent.java @@ -0,0 +1,195 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.SSLIOP.SSL; +import org.omg.SSLIOP.SSLHelper; + + +/** + * SSLComponent data struct defined in the GIOP Module. + * + * @autor avega + * @version 1.0 + */ +public class SSLComponent extends TaggedComponent +{ + + private SSL m_ssl; + + public SSLComponent() + { + super(TAG_SSL_SEC_TRANS.value); + m_ssl = new SSL(); + } + + public SSLComponent(SSL ssl) + { + super(TAG_SSL_SEC_TRANS.value); + m_ssl = ssl; + } + + + public short getTargetSupports() + { + return m_ssl.target_supports; + } + + + public short getTargetRequires() + { + return m_ssl.target_requires; + } + + + public short getSSLPort() + { + return m_ssl.port; + } + + + public SSL getSSL() + { + return m_ssl; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + SSLHelper.write(out, m_ssl); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_ssl = SSLHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("port: "); + if (m_ssl.port < 0) { + int myint = 65536 + m_ssl.port; + print_buffer.print(myint); + } + else { + print_buffer.print(m_ssl.port); + } + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("target_supports: "); + print_buffer.print(print_AssociationOptions(m_ssl.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("target_requires: "); + print_buffer.print(print_AssociationOptions(m_ssl.target_requires)); + return buffer.toString(); + } + + + public static String print_AssociationOptions(int mask) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + if ( (mask & org.omg.Security.NoProtection.value) > 0) { + print_buffer.print("\n \t \t \t NoProtection"); + } + if ( (mask & org.omg.Security.Integrity.value) > 0) { + print_buffer.print("\n \t \t \t Integrity"); + } + if ( (mask & org.omg.Security.Confidentiality.value) > 0) { + print_buffer.print("\n \t \t \t Confidentiality"); + } + if ( (mask & org.omg.Security.DetectReplay.value) > 0) { + print_buffer.print("\n \t \t \t DetectReplay"); + } + if ( (mask & org.omg.Security.DetectMisordering.value) > 0) { + print_buffer.print("\n \t \t \t DetectMisordering"); + } + if ( (mask & org.omg.Security.EstablishTrustInTarget.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInTarget"); + } + if ( (mask & org.omg.Security.EstablishTrustInClient.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInClient"); + } + if ( (mask & org.omg.Security.NoDelegation.value) > 0) { + print_buffer.print("\n \t \t \t NoDelegation"); + } + if ( (mask & org.omg.Security.SimpleDelegation.value) > 0) { + print_buffer.print("\n \t \t \t SimpleDelegation"); + } + if ( (mask & org.omg.Security.CompositeDelegation.value) > 0) { + print_buffer.print("\n \t \t \t CompositeDelegation"); + } + if ( (mask & org.omg.CSIIOP.IdentityAssertion.value) > 0) { + print_buffer.print("\n \t \t \t IdentityAssertion"); + } + if ( (mask & org.omg.CSIIOP.DelegationByClient.value) > 0) { + print_buffer.print("\n \t \t \t DelegationByClient"); + } + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.java new file mode 100644 index 0000000..ce5015b --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLConnection.java @@ -0,0 +1,577 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.io.IOException; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.SSLContext; + +import java.security.KeyStore; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; + +import java.io.FileInputStream; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.Bounds; +import org.omg.CORBA.COMM_FAILURE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_PERMISSION; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.TRANSIENT; +import org.omg.CORBA.INITIALIZE; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ReplyHandlerStub; +import org.omg.Compression.COMPRESSORID_NONE; +import org.omg.Compression.CompressorIdLevel; +import org.omg.Compression.COMPRESSORID_ZLIB; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.NamedValueImpl; +import es.tid.TIDorbj.core.ORBComponent; +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.Connection; +import es.tid.TIDorbj.core.comm.CommunicationManager; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.AddressingDisposition; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.GIOPCancelRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPHeader; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPLocateRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPRequestMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.comm.giop.LocateReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.MessageFactory; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.giop.ZIOPMessage; +import es.tid.TIDorbj.core.comm.iiop.*; + +import es.tid.TIDorbj.core.ziop.ZIOP; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.AMILock; +import es.tid.TIDorbj.core.messaging.AMILockEnumeration; +import es.tid.TIDorbj.core.messaging.AMILockList; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.core.util.Counter; +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.RemovableObject; +import es.tid.TIDorbj.core.util.UseTable; +import es.tid.TIDorbj.util.Trace; + +/** + * TIDorb SSLIOP SSLConnection: sends and receives IIOP Messages under the GIOP + * protocol. + * + *

+ * Copyright 2000 Telefónica I+D. Printed in Spain (Europe). All Rights + * Reserved. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SSLConnection extends Connection { + + /** + * SSLConnection Socket. + */ + javax.net.ssl.SSLSocket m_socket; + + /** + * SSLConnection Socket InputStream. + */ + public java.io.InputStream m_socket_in; + + /** + * SSLConnection Socket OutputStream. + */ + public java.io.OutputStream m_socket_out; + + private boolean tcpNoDelay; + private int soTimeout; + private int soLinger; + + private int socketWriteTimeout; + + String ssl_key_store_file; + String ssl_key_store_passwd; + String ssl_version; + + + private SSLConnection(IIOPConnectionManager mngr, javax.net.ssl.SSLSocket socket) + { + super(mngr); + + m_manager = mngr; + + + m_addresses = new Hashtable(); + m_bidirectional_service = null; + m_send_bidirectional_service = false; + + tcpNoDelay = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.TCP_NODELAY ) + .getBoolean(); + + soTimeout = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_TIMEOUT ) + .getInt(); + + soLinger = m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_LINGER ) + .getInt(); + + socketWriteTimeout = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SOCKET_WRITE_TIMEOUT ) + .getInt(); + + + try { + this.m_socket = socket; + + my_port = socket.getLocalPort(); + + socket.setTcpNoDelay( tcpNoDelay ); + socket.setSoTimeout( soTimeout ); + + socket.setSoLinger( soLinger != -1, soLinger ); + + m_socket_in = socket.getInputStream(); + m_socket_out = socket.getOutputStream(); + } + catch (java.io.IOException ioe) { + throw new OBJECT_NOT_EXIST(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + } + + m_write_monitor = new ConnectionWriteMonitor( socketWriteTimeout ); + } + + + /** + * SSLConnection hash code. + */ + public int hashCode() { + // return my_port; + return m_socket.hashCode(); + } + + public boolean equals(Object obj) { + return obj instanceof SSLConnection && + ( ( SSLConnection )obj ).my_port == my_port; + } + + public String toString() { + if (m_str == null) { + if (m_mode == CLIENT_MODE) { + m_str = "Client SSLConnection at " + m_socket.toString(); + } else if (m_mode == SERVER_MODE) { + m_str = "Server SSLConnection at " + m_socket.toString(); + } else { + m_str = "Bidirectional SSLConnection at " + m_socket.toString(); + } + } + return m_str; + } + + /** + * Creates a new connection in SERVER_MODE. + * + * @param mngr + * the manager + * @param sock + * Socket created in the accept + * method in a ServerSocket object. + */ + public static SSLConnection serverConnection(IIOPConnectionManager mngr, + javax.net.ssl.SSLSocket sock) { + SSLConnection conn = new SSLConnection(mngr, sock); + conn.m_mode = SERVER_MODE; + conn.init(); + + if (conn.m_orb.m_trace != null) { + conn.m_orb.printTrace(Trace.DEBUG, "Creating " + conn.toString()); + } + + return conn; + } + + /** + * Creates a new connection in CLIENT_MODE. + */ + + public static SSLConnection clientConnection(IIOPConnectionManager mngr, + ListenPoint listen_point) + { + + String ssl_key_store_file = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + String ssl_key_store_passwd = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + + String ssl_key_store_type = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_type_name ) + .getValue(); + + String ssl_trust_store_file = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_file_name ) + .getValue(); + + String ssl_trust_store_passwd = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_passwd_name ) + .getValue(); + + String ssl_trust_store_type = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_type_name ) + .getValue(); + + String ssl_version = + mngr.orb().getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_version_name ) + .getValue(); + + + SSLSocketFactory ssf = null; + + try { + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); // TODO: put in param + kmf.init(ks, ksPass); + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getSocketFactory(); + + } catch (java.lang.Exception e) { + throw new INITIALIZE(e.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + else { + ssf = (SSLSocketFactory) SSLSocketFactory.getDefault(); + } + // create the socket + SSLSocket socket = + (SSLSocket) ssf.createSocket(listen_point.m_host, listen_point.m_ssl_port); + + socket.startHandshake(); + + SSLConnection conn = new SSLConnection(mngr, socket); + conn.m_mode = CLIENT_MODE; + conn.m_initial_point = listen_point; + conn.addListenPoint(listen_point); + conn.init(); + return conn; + + } + catch (java.io.IOException ioe) { + throw new TRANSIENT(ioe.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + catch (java.lang.SecurityException sce) { + throw new NO_PERMISSION(sce.toString(), 0, + CompletionStatus.COMPLETED_NO); + } + + } + + + protected void close() + { + try { + m_socket.close(); + } + catch (IOException ioe) {} + + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEEP_DEBUG, + toString() + + " client socket closed"); + + // notify the writers blocked in write_monitor + + m_write_monitor.setException(m_state.getError()); + + // notify the locks + + LockEnumeration enumer = m_lock_list.elements(); + Lock lock; + + while (enumer.hasMoreElements()) { + lock = enumer.next(); + synchronized (lock) { + lock.cancelWaiting(); + } + } + + AMILockEnumeration ami_enum = m_ami_lock_list.elements(); + AMILock ami_lock; + + while (ami_enum.hasMoreElements()) { + ami_lock = ami_enum.next(); + synchronized (ami_lock) { + ami_lock.notify(); + } + } + + if (m_addresses != null) { + m_addresses.clear(); + } + + // clear buffers + + Enumeration msgs = m_uncompleted_messages.elements(); + + while (msgs.hasMoreElements()) { + m_uncompleted_messages.remove(msgs.nextElement()); + } + + // send_buffer = null; + // send_header_buffer = null; + // receive_header_buffer = null; + } + + protected void dispatchRequest(GIOPLocateRequestMessage message) { + + ObjectKey obj_key; + obj_key = message.extractAddress().getObjectKey(); + + SSLLocateResponseHandler responseHandler; + responseHandler = new SSLLocateResponseHandler( + this, + message.getHeader().getVersion(), + message.getRequestId(), + obj_key + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + m_requests_in_POA.inc(); + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + + } + + protected void dispatchRequest(GIOPRequestMessage message) { + + ServerRequestImpl serverRequest; + serverRequest = message.extractRequest(m_orb); + + ObjectKey objectKey; + objectKey = serverRequest.getTarget().getObjectKey(); + + SSLResponseHandler responseHandler; + responseHandler = new SSLResponseHandler( + this, + message.getHeader().getVersion(), + serverRequest, + objectKey, + message.getRequestInvocationPolicies() + + ); + + responseHandler.setSerial(m_orb.getRequestCounter().next()); + + /* + * TODO: ask juan: in previous code, when reference has been located, + * if it's not local just returns... which should be the + * refactoring mapping since the POAKey is resolved outside, + * under ExecThread, and there's "no way?" to acces the object + * reference to check if either it's local or not + * Previous code + if (!obj_impl._is_local()) { + // oneway request to a non local object: DISCARD + return; + } + * */ + + if (serverRequest.withResponse()) { + m_requests_in_POA.inc(); + } + CommunicationManager.getInstance( this.m_orb ) + .getRequestDispatcher().dispatchRequest( responseHandler ); + } + + public void read(byte[] buffer, int offset, int length) + { + try { + int numReadNow = 0; + + while (length > 0) { + + numReadNow = m_socket_in.read(buffer, offset, length); + if (numReadNow < 0) { + throw new COMM_FAILURE("Broken SSLConnection", 0, + CompletionStatus.COMPLETED_NO); + } + + offset += numReadNow; + length -= numReadNow; + + } + + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer) + { + try { + + m_socket_out.write(buffer, 0, buffer.length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + protected void write(byte[] buffer, int offset, int length) + { + try { + m_socket_out.write(buffer, offset, length); + m_socket_out.flush(); + } + catch (IOException ioe) { + COMM_FAILURE connection_error = + new COMM_FAILURE(ioe.toString(), + 0, + CompletionStatus.COMPLETED_NO); + closeByBrokenConnection(connection_error); + + throw connection_error; + } + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.java new file mode 100644 index 0000000..288b75a --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommLayer.java @@ -0,0 +1,962 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 309 $ +* Date: $Date: 2008-11-07 09:54:08 +0100 (Fri, 07 Nov 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.Properties; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_RESOURCES; +import org.omg.CORBA.Object; + +import org.omg.SSLIOP.SSL; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.BiDirServiceContext; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * IIOP Communications layer. It will manage the request for a remote object + * using the IIOP Protocol. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SSLIOPCommLayer extends es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer +{ + + + /** + * Server Socket listening thread. + */ + SSLServerListener m_ssl_server_listener; + + private SSLIOPCommunicationLayerPropertiesInfo propertiesInfo; + + public SSLIOPCommLayer(TIDORB orb) + { + // crear la conexion servidora y lanzar threads de escucha + super(orb, null); + + this.propertiesInfo = SSLIOPCommunicationLayerPropertiesInfo.getInstance(); + + orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + )); + + + } + + public boolean isLocal( IIOPIOR ior) + { + if (m_ssl_server_listener == null) // no object adaptor initialized + return false; + + // Check SSLComponent of IOR... + es.tid.TIDorbj.core.comm.ssliop.SSLComponent ior_ssl_component = + ior.profileIIOP().getSSLComponent(); + + if (ior_ssl_component == null) + return false; + + + org.omg.SSLIOP.SSL ssl = ior_ssl_component.getSSL(); + + es.tid.TIDorbj.core.comm.iiop.ListenPoint server_listen_point = + m_ssl_server_listener.getListenPoint(); + + es.tid.TIDorbj.core.comm.iiop.ListenPoint ior_listen_point = + ior.profileIIOP().getListenPoint(); + + return ( server_listen_point.m_host.equals(ior_listen_point.m_host) + && (server_listen_point.m_port == ssl.port) ); + + } + + public boolean hasServerListener() + { + return (m_ssl_server_listener != null); + } + + /** + * Sends a request (with response) allocating an active connection with the + * corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + protected void sendRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + PolicyContext policy_context = request.getPolicyContext(); + + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendRequest(request, ior); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * Sends a request using the IIOP protocol. + * + * @param request + * the CORBA request. + */ + public void request(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + throws ForwardRequest + { + request.withResponse(true); + sendRequest(request, ior); + } + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void onewayRequest(es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior) + { + if ( reliable_oneway ) { + try { + ReliableOnewayThread th = + new ReliableOnewayThread(this, request, ior); + th.start(); + return; + } + catch (Throwable thw) { + throw new NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } else { + + try { + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + + conn = + m_connection_manager + .getSSLClientConnection(profile.getListenPoint(), + request.getPolicyContext()); + + conn.sendOnewayRequestAsync(request, ior); + + } + catch (Throwable th) { + if (m_orb.m_trace != null) + m_orb.printTrace(Trace.DEBUG, + "Exception in oneway remote invocation", + th); + } + } + } + + /** + * Sends a asynchronous request using the IIOP protocol allocating an active + * connection with the corresponding server referenced by its target address. + *

+ * If necessary, tries to do a recovery loop. + * + * @param request + * the CORBA request. + */ + public void asyncRequest(es.tid.TIDorbj.core.RequestImpl request, IIOPIOR ior) + throws ForwardRequest + { + + request.withResponse(true); + + PolicyContext policy_context = request.getPolicyContext(); + + // PolicyContext policy_context = request + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL( "Can not get IIOP Profile." ); + } + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context + ); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + {"Can not recover the communication any more: ", + ce.toString() }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + conn.sendAsyncRequest(request, ior); //*opc1*, ami_handler); + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + rcf.m_comm_failure.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + recover_time + + " milliseconds."); + } + + try { + Thread.sleep( recover_time ); + } + catch (InterruptedException e) {} + + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + + /** + * Sends a oneway request using the IIOP protocol allocating an active + * IIOPConnection with the server referenced in the request target address. + * + * @param request + * the CORBA request. + */ + public void reliableOnewayRun( + es.tid.TIDorbj.core.RequestImpl request, + IIOPIOR ior ) { + try { + + PolicyContext policy_context = + request.getPolicyContext(); + + request.reliableOneway(true); + + request.withResponse(false); + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + + conn = + m_connection_manager + .getSSLClientConnection(profile.getListenPoint(), + policy_context); + + conn.sendOnewayRequestSync(request, ior); + + return; + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) + throw rcf.m_comm_failure; + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication" + +" recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + + recover_count--; + + if (m_orb.m_trace != null) { + String[] msg = { "Communication forwarded: ", + fr.forward_reference.toString() }; + m_orb.printTrace(Trace.DEBUG, msg); + } + } + } + } + catch (Throwable e) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Exception in reliable remote oneway invocation :", + e); + } + } + + /** + * Sends a object existence request. + * + * @param ior + * the object IOR. + */ + public boolean objectExists(IIOPIOR ior, + PolicyContext policy_context) + throws ForwardRequest + { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn; + int recover_count = max_recover_count; + + // recovering loop + + while (true) { + + try { + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendLocateRequest(ior, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + public void prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl request) + { + org.omg.CORBA.portable.ObjectImpl obj = request.getTarget(); + es.tid.TIDorbj.core.comm.CommunicationDelegate delegate = + (es.tid.TIDorbj.core.comm.CommunicationDelegate) obj._get_delegate(); + es.tid.TIDorbj.core.iop.IOR ior = delegate.getReference(); + + IIOPIOR iiopIOR; + if ( ior instanceof IIOPIOR ){ + iiopIOR = ( IIOPIOR )ior; + } else { + throw new org.omg.CORBA.INTERNAL("Not an IIOP IOR."); + } + + PolicyContext policy_context = + delegate.createRequestPolicyContext(); + + IIOPProfile profile; + profile = iiopIOR.profileIIOP(); + + if (profile == null) { + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + } + + SSLConnection conn = null; + int recover_count = max_recover_count; + + while (conn == null) { + + try { + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = + { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE -> Communication " + + "recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + } + + conn.prepareRequest(request, iiopIOR); + + } + + public org.omg.CORBA.portable.InputStream request( + IIOPIOR ior, + CDROutputStream stream, + PolicyContext policy_context + ) throws ForwardRequest, + org.omg.CORBA.portable.ApplicationException, + org.omg.CORBA.portable.RemarshalException { + + IIOPProfile profile = ior.profileIIOP(); + + if (profile == null) + throw new org.omg.CORBA.INTERNAL("Can not get IIOP Profile."); + + SSLConnection conn = null; + int recover_count = max_recover_count; + + while (true) { + try { + + conn = + m_connection_manager.getSSLClientConnection( + profile.getListenPoint(), + policy_context); + + } + catch (org.omg.CORBA.COMM_FAILURE ce) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) { + String[] msg = { + "Can not recover the communication any more: ", + ce.toString() + }; + + m_orb.printTrace(Trace.DEBUG, msg); + } + + throw ce; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + continue; + } + + try { + + return conn.sendRequest(ior, stream, policy_context); + + } + catch (RECOVERABLE_COMM_FAILURE rcf) { + + recover_count--; + + if (recover_count <= 0) { + if (m_orb.m_trace != null) + m_orb.printTrace( + Trace.DEBUG, + "Can not recover the communication any more: ", + rcf.m_comm_failure); + + throw rcf.m_comm_failure; + } + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, + "CORBA::COMM_FAILURE->Communication recovered, waiting " + + this.recover_time + + " milliseconds."); + } + + try { + Thread.sleep( this.recover_time ); + } + catch (InterruptedException e) {} + + } + catch (ForwardRequest fr) { + throw fr; + } + catch (RuntimeException re) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.ERROR, + "Exception in remote invocation", re); + } + throw re; + } + } + } + + /** + * ORB Server IIOPConnection part shutdown. + */ + public synchronized void shutdown() + { + try { + if (m_ssl_server_listener != null) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, + "Shutdown SSLIOPCommLayer .SSLServerListener"); + } + m_ssl_server_listener.shutdown(); + m_ssl_server_listener = null; + } + } + catch (Throwable e) {} + + ((es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer)this).shutdown(); + } + + /** + * IIOP Layer close. + */ + public synchronized void destroy() + { + if (!m_destroyed) { + + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEBUG, "Destroying SSLIOPCommLayer"); + } + + try { + if (m_ssl_server_listener != null) { + m_ssl_server_listener.shutdown(); + m_ssl_server_listener = null; + } + } + catch (Throwable e) {} + + ((es.tid.TIDorbj.core.comm.iiop.IIOPCommLayer)this).destroy(); + } + } + + public synchronized void initServerListener() + { + if (m_ssl_server_listener == null) { + m_ssl_server_listener = new SSLServerListener(m_connection_manager); + m_ssl_server_listener.setDaemon(false); + try { + + m_ssl_server_listener.start(); + + } + catch (Throwable thw) { + m_ssl_server_listener = null; + throw new org.omg.CORBA.NO_RESOURCES("Can't create thread: " + + thw.toString()); + } + } + + // Also init IIOP server listener. It will always repond "NO_PERMISSION" + super.initServerListener(); + + } + + public synchronized IOR createIOR(String id, + POAKey key, + TaggedComponent[] extraComponents) + { + if (m_ssl_server_listener == null) + throw new org.omg.CORBA.INTERNAL("SSLServerListener not initialized"); + + TaggedComponent[] components = null; + int num_components = 1; // SSLComponent + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + num_components]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + } else { + components = new TaggedComponent[num_components]; + } + + // Add SSLComponent + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) m_ssl_server_listener.getListenPoint().m_port); + + SSLComponent ssl_component = new SSLComponent(ssl); + components[num_components - 1] = ssl_component; + + + return super.createIOR(id, key, components); + + } + + public synchronized IOR createIOR(String id, + ObjectKey key, + TaggedComponent[] extraComponents) + { + if (m_ssl_server_listener == null) + throw new org.omg.CORBA.INTERNAL("SSLServerListener not initialized"); + + TaggedComponent[] components = null; + int num_components = 1; // SSLComponent + + if(extraComponents != null) { + components = new TaggedComponent[extraComponents.length + num_components]; + System.arraycopy(extraComponents, 0, components, 0, extraComponents.length); + } else { + components = new TaggedComponent[num_components]; + } + + // Add SSLComponent + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) m_ssl_server_listener.getListenPoint().m_port); + + SSLComponent ssl_component = new SSLComponent(ssl); + components[num_components - 1] = ssl_component; + + return super.createIOR(id, key, components); + + } + + +// public synchronized ServiceContextList getBidirectionalService() +// { +// if (m_destroyed) +// throw new org.omg.CORBA.BAD_INV_ORDER("ORB is destroying"); + +// if (m_bidirectional_service == null) { +// if (m_ssl_server_listener == null) +// throw new INTERNAL("Trying to create a bidirectional context " +// + "without ListenPoint"); + +// BiDirServiceContext bidir_context = new BiDirServiceContext(1); + +// bidir_context.m_listen_points[0] = +// m_ssl_server_listener.getListenPoint(); + +// m_bidirectional_service = new ServiceContextList(1); +// m_bidirectional_service.m_components[0] = bidir_context; + +// } + +// return m_bidirectional_service; +// } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.java new file mode 100644 index 0000000..50adff2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationDelegate.java @@ -0,0 +1,366 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 391 $ +* Date: $Date: 2009-05-25 16:58:01 +0200 (Mon, 25 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Object; +import org.omg.CORBA.portable.ApplicationException; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; +import org.omg.CORBA.portable.RemarshalException; + +import es.tid.TIDorbj.core.ObjectImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.StreamRequestImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.comm.iiop.CommunicationLayer; + +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * @author avega + * + */ +public class SSLIOPCommunicationDelegate extends CommunicationDelegate { + + private IIOPIOR ssliopReference; + private SSLIOPCommunicationLayer communicationLayer; + + /** + * + */ + public SSLIOPCommunicationDelegate( SSLIOPCommunicationLayer communicationLayer ) { + super(); + if ( communicationLayer != null ){ + super.setORB( communicationLayer.getORB() ); + this.communicationLayer = communicationLayer; + this.forwardReference = null; + } else { + throw new IllegalArgumentException( + "Parameter 'commLayer' cannot be null" + ); + } + } + + public void setReference(IOR ior) { + IIOPIOR iiopIOR = null; + if(! (ior instanceof IIOPIOR) ) { + iiopIOR = new IIOPIOR(ior); + + } else { + iiopIOR = (IIOPIOR) ior; + } + + super.setReference(iiopIOR); + + IIOPProfile profile = iiopIOR.profileIIOP(); + + PoliciesComponent policiesComponent = profile.getPoliciesComponent(); + + if(policiesComponent != null) { + this.setPolicyContext(policiesComponent.getPolicies()); + } + + + + }//setReference + + + public synchronized IIOPIOR getIIOPReference(){ + if ( this.ssliopReference == null ){ + this.ssliopReference = new IIOPIOR(); + this.ssliopReference.assign( super.reference ); + } + return this.ssliopReference; + } + + + public IOR getReference(){ + return getIIOPReference(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#isLocal(org.omg.CORBA.Object) + */ + public boolean isLocal( org.omg.CORBA.Object self) { + + if ( super.getORB() == null) { + throw new BAD_OPERATION("ORB Singleton", 0, + CompletionStatus.COMPLETED_NO ); + } + + try { + if ( this.forwardReference == null) { + return this.communicationLayer.isLocal( this.getIIOPReference() ); + } else { + return this.forwardReference.is_local(null); + } + } catch ( CommunicationException ce ) { + return false; + } + }//isLocal + + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#non_existent(org.omg.CORBA.Object) + */ + public boolean non_existent(org.omg.CORBA.Object self){ + TIDORB orb = super.getORB(); + if ( orb == null) { + throw new BAD_OPERATION("ORB Singleton"); + } + + PolicyContext request_policy_context = createRequestPolicyContext(); + + CommunicationLayer comm_layer = this.communicationLayer.getCommLayer(); + + try { + + if ( this.forwardReference == null) { + return !comm_layer.objectExists( + this.getIIOPReference(), + request_policy_context); + } else { // there is forwards + boolean non_existent = true; + try { + non_existent = this.forwardReference.non_existent(null); + } + catch (org.omg.CORBA.COMM_FAILURE cf) { + non_existent = true; + } + catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + non_existent = false; + } + + if (non_existent) { + this.forwardReference = null; + } + + return non_existent; + } + } catch (ForwardRequest fe) { + + this.setForward(fe); + + } + + return non_existent(self); + }//non_existent + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#duplicate(org.omg.CORBA.Object) + */ + public Object duplicate(Object self) { + SSLIOPCommunicationDelegate delegate; + delegate = new SSLIOPCommunicationDelegate( this.communicationLayer ); + delegate.setReference( this.getReference() ); + + delegate.forwardReference = this.forwardReference; + + //getPolicyContext never returns null. + delegate.setPolicyContext( super.getPolicyContext().duplicate() ); + + ObjectImpl obj = new ObjectImpl(); + + obj._set_delegate(delegate); + + return obj; + }//duplicate + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release(org.omg.CORBA.Object) + */ + public void release(org.omg.CORBA.Object self) { + //Empty treatment + }//release + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#release_reply(org.omg.CORBA.Object, org.omg.CORBA.portable.InputStream) + */ + public void release_reply(org.omg.CORBA.Object object, + org.omg.CORBA.portable.InputStream inputStream ) { + //Empty treatment + }//release_reply + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#prepareRequest(es.tid.TIDorbj.core.StreamRequestImpl) + */ + public void prepareRequest( StreamRequestImpl request ) { + this.communicationLayer.getCommLayer().prepareRequest( request ); + }//prepareRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#onewayRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void onewayRequest(RequestImpl request) { + if ( this.forwardReference != null ) { + this.forwardReference.onewayRequest(request); + } else { + this.communicationLayer.getCommLayer().onewayRequest( request, this.getIIOPReference() ); + } + }//oneWayRequest + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(es.tid.TIDorbj.core.RequestImpl) + */ + public void invoke(RequestImpl request) { + try { + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().request( + request, + (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.invoke(request); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + invoke(request); + + }//forwarded + }//invoke + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#invoke(org.omg.CORBA.Object, org.omg.CORBA.portable.OutputStream) + */ + public InputStream invoke(org.omg.CORBA.Object object, + OutputStream stream ) + throws ApplicationException, RemarshalException + { + + if (is_local(object)) { + throw new BAD_OPERATION("Request is only valid for remote objects"); + } + + if (stream instanceof es.tid.TIDorbj.core.cdr.CDROutputStream) { + + es.tid.TIDorbj.core.cdr.CDROutputStream out = + (es.tid.TIDorbj.core.cdr.CDROutputStream) stream; + try { + if ( this.forwardReference == null) { + return this.communicationLayer.getCommLayer().request( + (IIOPIOR)this.getReference(), + out, + createRequestPolicyContext() + ); + } else { + return this.forwardReference.invoke(object, stream); + } + + } + catch (es.tid.TIDorbj.core.comm.ForwardRequest fr) { + this.setForward(fr); + throw new org.omg.CORBA.portable.RemarshalException(); + } + } else { + throw new org.omg.CORBA.BAD_OPERATION("Not a TIDorbJ's Stream"); + } + }//invoke stream + + // AMI callback operations + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationDelegate#asyncRequest(es.tid.TIDorbj.core.RequestImpl) + */ + public void asyncRequest(RequestImpl request, Object ami_handler ) { + try { + request.set_ami_handler(ami_handler); + if ( this.forwardReference == null ) { + this.communicationLayer.getCommLayer().asyncRequest( + request, (IIOPIOR)this.getReference() + ); + } else { + // there is forwards + this.forwardReference.asyncRequest(request, ami_handler); + + } + } catch (org.omg.CORBA.COMM_FAILURE cf) { + this.forwardReference = null; + throw cf; + } catch (org.omg.CORBA.OBJECT_NOT_EXIST one) { + this.forwardReference = null; + throw one; + } catch (ForwardRequest fe) { + + this.setForward(fe); + + request.setPolicyContext(this.forwardReference.createRequestPolicyContext()); + + asyncRequest(request, ami_handler); + + }//forwarded + }//asyncRequest + + + + + +}//SSLIOPCommunicationDelegate diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.java new file mode 100644 index 0000000..b3b0cbc --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayer.java @@ -0,0 +1,398 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 274 $ +* Date: $Date: 2008-04-12 16:33:40 +0200 (Sat, 12 Apr 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.Properties; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.CommunicationLayer; +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.RequestDispatcher; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.CommLayer; +import es.tid.TIDorbj.core.comm.iiop.IIOPCorbaloc; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +/** + * Entry point for the SSLIOPCommunicationLayer + * + * @author + * + * + */ +public class SSLIOPCommunicationLayer implements CommunicationLayer { + + public static String ID = "SSLIOPCommunicationLayer"; + + /* + * used for incoming requests notifications + */ + private RequestDispatcher dispatcher; + + /* + * the underlying ORB implementation + */ + private TIDORB orb; + + private CommLayer commLayer; + + private SSLIOPCommunicationLayerPropertiesInfo propertiesInfo; + + /** + * + */ + public SSLIOPCommunicationLayer() { + IIOPCommunicationLayer.ID = "SSLIOPCommunicationLayer"; + } + + public void setORB(TIDORB orb) { + if ( orb != null ){ + if ( this.orb != null ){ + this.commLayer.shutdown(); + this.propertiesInfo = null; + this.commLayer = null; + } + this.orb = orb; + this.propertiesInfo = SSLIOPCommunicationLayerPropertiesInfo.getInstance(); + this.orb.m_conf.fillPropertyInfo( + (PropertyInfo[]) + this.propertiesInfo.map.values().toArray( + new PropertyInfo[]{} + ) + ); + + + this.commLayer = new CommLayer( this.orb ); + } else { + throw new IllegalArgumentException( "Parameter 'orb' cannot be null" ); + } + }//setORB + + public TIDORB getORB() { + return this.orb; + }//getORB + + public CommLayer getCommLayer(){ + return this.commLayer; + } + + + public void setServerModeEnabled( boolean value ){ + if ( value ){ + this.commLayer.getExternalLayer().initServerListener(); + } + } + + public boolean isServerModeEnabled(){ + return this.commLayer.getExternalLayer().hasServerListener(); + } + + public synchronized ServiceContextList getBidirectionalService() { + return this.commLayer.getExternalLayer().getBidirectionalService(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String) + */ + public CommunicationDelegate createDelegate(String url) throws CommunicationException { + CommunicationDelegate delegate; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorb:" ) ){ + ior = Corbaloc.getIOR( url ); + } else if ( url.startsWith( "corbaloc:ssliop:" )) { + ior = SSLIOPCorbaloc.getIOR( url ); + } else if ( url.startsWith( "corbaloc:" )) { + ior = IIOPCorbaloc.getIOR( url ); + } else { + ior = IIOPIOR.fromString(this.orb, url); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + delegate = createDelegate( ior ); + } else { + delegate = null; + } + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#connect(java.lang.String, java.util.Properties) + */ + public CommunicationDelegate createDelegate(String url, Properties info) + throws CommunicationException + { + return createDelegate( url ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR) + */ + public CommunicationDelegate createDelegate(IOR ior) + throws CommunicationException + { + SSLIOPCommunicationDelegate delegate = new SSLIOPCommunicationDelegate( this ); + delegate.setReference( ior ); + return delegate; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createDelegate(es.tid.TIDorbj.core.iop.IOR, java.util.Properties) + */ + public CommunicationDelegate createDelegate(IOR ior, Properties info) + throws CommunicationException + { + return createDelegate( ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(java.lang.String) + */ + public boolean accepts(String url) + throws CommunicationException + { + return url!= null && + ( url.startsWith( "corbaloc:ssliop:" ) || + url.startsWith( "corbaloc:tidorb:" ) || + url.startsWith( "corbaloc::" ) || + ( + url.startsWith( "IOR" ) && + this.accepts( DefaultIOR.fromString( this.orb, url ) ) + ) + ); + }//accepts + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#accepts(org.omg.IOP.IOR) + */ + public boolean accepts(IOR ior) + throws CommunicationException + { + boolean accepted; + accepted = ior instanceof IIOPIOR; + + int profilesCount = ior.memberCount(); + for (int i = 0; !accepted && i < profilesCount; i++) { + accepted = ior.getProfile( i ).tag == org.omg.IOP.TAG_INTERNET_IOP.value; + } + + return accepted; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createIOR(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public IOR createIOR(String repositoryId, + ObjectKey key, + TaggedComponent[] components) + throws CommunicationException + { + return this.commLayer.getExternalLayer().createIOR( + repositoryId, + key, + components + ); + }//createIOR + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#createURL(java.lang.String, es.tid.TIDorbj.core.comm.iiop.ObjectKey) + */ + public String createURL(String repositoryId, ObjectKey key) + throws CommunicationException + { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(es.tid.TIDorbj.core.iop.IOR) + */ + public String getInitialReference( IOR ior ) + throws CommunicationException + { + throw new NO_IMPLEMENT(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getInitialReference(java.lang.String) + */ + public String getInitialReference( String url ) + throws CommunicationException + { + String initialReference; + try { + initialReference = IIOPCorbaloc.getObjectId( url ); + } catch ( Throwable th ){ + initialReference = null; + } + return initialReference; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(es.tid.TIDorbj.core.iop.IOR) + */ + public boolean isLocal(IOR ior) + throws CommunicationException + { + return ior != null && this.accepts( ior ) && this.commLayer.isLocal( (IIOPIOR)ior ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#isLocal(java.lang.String) + */ + public boolean isLocal(String url) throws CommunicationException { + boolean isLocal; + if ( this.accepts( url ) ){ + IOR ior; + try { + if ( url.startsWith( "corbaloc:tidorbj:" ) ){ + ior = Corbaloc.getIOR( url ); + } else { + ior = IIOPCorbaloc.getIOR( url ); + } + } catch ( InvalidName in ){ + throw new CommunicationException( "Invalid url: " + in.getMessage(), in ); + } + isLocal = this.isLocal( ior ); + } else { + isLocal = false; + } + return isLocal; + }//isLocal + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getPropertyInfo(java.lang.String, java.util.Properties) + */ + public PropertyInfo[] getPropertiesInfo() { + return ( PropertyInfo[] )this.propertiesInfo.map.entrySet().toArray( new PropertyInfo[0] ); + }//getPropertiInfo + + public PropertyInfo getPropertyInfo( String name){ + return ( PropertyInfo )this.propertiesInfo.map.get( name ); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMajorVersion() + */ + public int getMajorVersion() { + return 1; + }//getMajorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getMinorVersion() + */ + public int getMinorVersion() { + return 0; + }//getMinorVersion + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#getId() + */ + public String getId() { + return SSLIOPCommunicationLayer.ID; + } + + public String toString(){ + + String hostSpec; + hostSpec = this.propertiesInfo.hostName.value; + if ( hostSpec == null ){ + hostSpec = this.propertiesInfo.hostAddress.value; + } + if ( hostSpec == null ){ + try { + hostSpec = java.net.InetAddress.getLocalHost().getHostName(); + } + catch (Exception e) {} + } + + StringBuffer toString = new StringBuffer( "[ " ) + .append( SSLIOPCommunicationLayer.ID ) + .append( " ( ssliop://" ) // TODO: change to ssliop:// + .append( hostSpec ) + .append( ':' ) + .append( this.propertiesInfo.ssl_port.value ) + .append( " )" ) + .append( " ]"); + + return toString.toString(); + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.CommunicationLayer#shutdown(boolean) + */ + public void shutdown( boolean waitForCompletion ) { + if ( this.commLayer != null ){ + if ( waitForCompletion ){ + this.commLayer.shutdown(); + } else { + this.commLayer.destroy(); + } + this.commLayer = null; + } + } + + + /** + * PRIVATE METHODS + * @author avega + */ + + public void dump(java.io.PrintWriter writer){ + this.propertiesInfo.dump(writer); + } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.java new file mode 100644 index 0000000..c7d6142 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCommunicationLayerPropertiesInfo.java @@ -0,0 +1,292 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 274 $ +* Date: $Date: 2008-04-12 16:33:40 +0200 (Sat, 12 Apr 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefnica Investigacin y Desarrollo +* S.A.Unipersonal (Telefnica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import es.tid.TIDorbj.core.comm.PropertyInfo; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayerPropertiesInfo; + +/** + * @author avega + * + * + * + */ +public class SSLIOPCommunicationLayerPropertiesInfo + extends IIOPCommunicationLayerPropertiesInfo{ + + + + /* + * Key Store options + */ + public final static String DEFAULT_SSL_KEY_STORE_FILE = null; + + public final static String ssl_key_store_file_name = + "es.tid.TIDorbj.ssliop.key_store_file"; + + + public final static String DEFAULT_SSL_KEY_STORE_PASSWD = null; + + public final static String ssl_key_store_passwd_name = + "es.tid.TIDorbj.ssliop.key_store_passwd"; + + + public final static String DEFAULT_SSL_KEY_STORE_TYPE = "JKS"; + + public final static String ssl_key_store_type_name = + "es.tid.TIDorbj.ssliop.key_store_type"; + + + /* + * TrustManager options + */ + public final static String DEFAULT_SSL_TRUST_STORE_FILE = null; + + public final static String ssl_trust_store_file_name = + "es.tid.TIDorbj.ssliop.trust_store_file"; + + + public final static String DEFAULT_SSL_TRUST_STORE_PASSWD = null; + + public final static String ssl_trust_store_passwd_name = + "es.tid.TIDorbj.ssliop.trust_store_passwd"; + + + public final static String DEFAULT_SSL_TRUST_STORE_TYPE = "JKS"; + + public final static String ssl_trust_store_type_name = + "es.tid.TIDorbj.ssliop.trust_store_type"; + + + /** + * SSL port used for generated IORs and URLs. Default value: 0 + */ + public final static String DEFAULT_SSL_PORT = "0"; + + public final static String ssl_port_name = + "es.tid.TIDorbj.ssliop.port"; + + + + + /** + * SSL version to be used by SSLIOP layer + * SSLv2 is not recomended due to security flaws + * Values must be 0 (SSLv2), 1 (SSLv3), 2 (SSLv23), 3 (TLSv1) + * Default value: 2 + */ + public final static String DEFAULT_SSL_VERSION = "SSLv3"; + + public final static String ssl_version_name = + "es.tid.TIDorbj.ssliop.ssl_version"; + + + + public PropertyInfo ssl_key_store_file; + public PropertyInfo ssl_key_store_passwd; + public PropertyInfo ssl_key_store_type; /* JKS or PKCS12 */ + + public PropertyInfo ssl_trust_store_file; + public PropertyInfo ssl_trust_store_passwd; + public PropertyInfo ssl_trust_store_type; /* JKS or PKCS12 */ + + public PropertyInfo ssl_port; + public PropertyInfo ssl_version; + + //public HashMap map; + + public SSLIOPCommunicationLayerPropertiesInfo() { + + super(); + + // TODO: resize map ?? + + /** + * SSL KEY STORE FILE + */ + ssl_key_store_file = new PropertyInfo( + ssl_key_store_file_name, + DEFAULT_SSL_KEY_STORE_FILE + ); + ssl_key_store_file.setDescription( + "Key Store file name." + ); + ssl_key_store_file.setRequired( false ); + ssl_key_store_file.setChoices ( null ); + map.put( ssl_key_store_file_name, ssl_key_store_file ); + + + /** + * SSL KEY STORE PASSWD + */ + ssl_key_store_passwd = new PropertyInfo( + ssl_key_store_passwd_name, + DEFAULT_SSL_KEY_STORE_PASSWD + ); + ssl_key_store_passwd.setDescription( + "Key Store passwd." + ); + ssl_key_store_passwd.setRequired( false ); + ssl_key_store_passwd.setChoices ( null ); + map.put( ssl_key_store_passwd_name, ssl_key_store_passwd ); + + + /** + * SSL TRUST STORE TYPE + */ + ssl_key_store_type = new PropertyInfo( + ssl_key_store_type_name, + DEFAULT_SSL_KEY_STORE_TYPE + ); + ssl_key_store_passwd.setDescription( + "Key Store type." + ); + ssl_key_store_passwd.setRequired( false ); + ssl_key_store_passwd.setChoices ( new String[]{ "JKS", "PCKS12" } ); + map.put( ssl_key_store_type_name, ssl_key_store_type ); + + + + + /** + * SSL TRUST STORE FILE + */ + ssl_trust_store_file = new PropertyInfo( + ssl_trust_store_file_name, + DEFAULT_SSL_TRUST_STORE_FILE + ); + ssl_trust_store_file.setDescription( + "Trust Store file name." + ); + ssl_trust_store_file.setRequired( false ); + ssl_trust_store_file.setChoices ( null ); + map.put( ssl_trust_store_file_name, ssl_trust_store_file ); + + + /** + * SSL TRUST STORE PASSWD + */ + ssl_trust_store_passwd = new PropertyInfo( + ssl_trust_store_passwd_name, + DEFAULT_SSL_TRUST_STORE_PASSWD + ); + ssl_trust_store_passwd.setDescription( + "Key Store passwd." + ); + ssl_trust_store_passwd.setRequired( false ); + ssl_trust_store_passwd.setChoices ( null ); + map.put( ssl_trust_store_passwd_name, ssl_trust_store_passwd ); + + + /** + * SSL TRUST STORE TYPE + */ + ssl_trust_store_type = new PropertyInfo( + ssl_trust_store_type_name, + DEFAULT_SSL_TRUST_STORE_TYPE + ); + ssl_trust_store_passwd.setDescription( + "Trust Store type." + ); + ssl_trust_store_passwd.setRequired( false ); + ssl_trust_store_passwd.setChoices ( new String[]{ "JKS", "PCKS12" } ); + map.put( ssl_trust_store_type_name, ssl_trust_store_type ); + + + + /** + * SSL PORT + */ + ssl_port = new PropertyInfo( + ssl_port_name, + DEFAULT_SSL_PORT + ); + ssl_port.setDescription( + "SSL port." + ); + ssl_port.setRequired( false ); + ssl_port.setChoices ( null ); + map.put( ssl_port_name, ssl_port ); + + + /** + * SSL VERSION + */ + ssl_version = new PropertyInfo( + ssl_version_name, + DEFAULT_SSL_VERSION + ); + ssl_version.setDescription( + "SSL Version" + ); + ssl_version.setRequired( false ); + ssl_version.setChoices ( new String[]{ "SSLv2", "SSLv3", "SSLv23", "TLSv1" } ); + map.put( ssl_version_name, ssl_version ); + + + + } + + public static SSLIOPCommunicationLayerPropertiesInfo getInstance(){ + return new SSLIOPCommunicationLayerPropertiesInfo(); + } + + public void dump(java.io.PrintWriter writer) + { + writer.println("SSLIOPCommunicationLayer properties:"); + + Iterator it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry e = (Map.Entry)it.next(); + writer.print('\t'); + writer.print(e.getKey()); + writer.print('='); + writer.print( ((PropertyInfo)e.getValue()).getValue()); + writer.println(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.java new file mode 100644 index 0000000..dfa6513 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLIOPCorbaloc.java @@ -0,0 +1,202 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.util.StringTokenizer; + +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.util.Corbaloc; + +import org.omg.SSLIOP.SSL; +import org.omg.CSIIOP.*; + +public class SSLIOPCorbaloc +{ + + public static String getObjectId(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, path, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:ssliop:")) { + corbaloc = corbaloc_URL.substring(16); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + return corbaloc.substring(slashposition + 1); + } + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc, addr, url_key, v, l; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:ssliop:")) { + corbaloc = corbaloc_URL.substring(16); + } else if (corbaloc_URL.startsWith("corbaloc::")) { + corbaloc = corbaloc_URL.substring(10); + } else { + throw new InvalidName("Invalid corbaloc"); + } + + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = es.tid.TIDorbj.core.util.Corbaloc.parseVersion(v); + } + + } + + l = staddr.nextToken(); + + listener = es.tid.TIDorbj.core.util.Corbaloc.parseListenPoint(l); + + url_key = corbaloc.substring(slashposition + 1); + + ObjectKey objectkey = createKey(url_key); + + + // Add to components a new SSLComponent with a listenpoint port as SSL + TaggedComponent[] components = new TaggedComponent[1]; + + org.omg.SSLIOP.SSL ssl = new org.omg.SSLIOP.SSL ( + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) (org.omg.CSIIOP.Integrity.value | + org.omg.CSIIOP.Confidentiality.value | + org.omg.CSIIOP.NoDelegation.value), + (short) listener.m_port); + SSLComponent ssl_component = new SSLComponent(ssl); + components[0] = ssl_component; + + listener.m_ssl_port = listener.m_port; + listener.m_port = 0; // not used + + + profiles = new IIOPProfile[1]; + + //profiles[0] = new IIOPProfile(version, listener, objectkey, null); + profiles[0] = new IIOPProfile(version, listener, objectkey, components); + + return new IIOPIOR("", profiles); + } + + /** + * Simulates an usual ObjectKey, that is marshaled in an Encapsulation, but + * instead, the url ObjectKey is marshaled as a ulong value (the size) and + * the char array of the string (without the end of string character *. + * + * @param url + * @return + * @throws org.omg.CORBA.ORBPackage.InvalidName + */ + private static ObjectKey createKey(String url_key) + throws org.omg.CORBA.ORBPackage.InvalidName + { + + CDROutputStream output = + new CDROutputStream(null, + new byte[url_key.length() + CDR.ULONG_SIZE]); + + char[] url_buffer = url_key.toCharArray(); + + output.write_ulong(url_buffer.length); + output.write_char_array(url_buffer, 0, url_buffer.length); + + CDRInputStream input = (CDRInputStream) output.create_input_stream(); + + Encapsulation encap = input.readEncapsulation(); + + return new ObjectKey(encap); + } + + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.java new file mode 100644 index 0000000..4e2ef90 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLLocateResponseHandler.java @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.LocateResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.poa.QueuedLocateResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * @author jprojas + * + */ +public class SSLLocateResponseHandler extends QueuedLocateResponseHandler implements LocateResponseHandler { + + private SSLConnection conn; + private GIOPVersion version; + private RequestId requestId; + private ObjectKey objectKey; + + + public SSLLocateResponseHandler( SSLConnection conn, + GIOPVersion version, + RequestId requestId, + ObjectKey objectKey) + { + setConnection( conn ); + setVersion ( version ); + setRequestId ( requestId ); + setObjectKey ( objectKey ); + } + + public void setConnection( SSLConnection conn ){ + this.conn = conn; + } + + public SSLConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setRequestId( RequestId requestId ){ + this.requestId = requestId; + } + + public RequestId getRequestId(){ + return this.requestId; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + throw new INTERNAL("Not supported"); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + throw new NO_IMPLEMENT( + "LocateRequest doesn't have a peer ServerRequest", + 0, + CompletionStatus.COMPLETED_NO + ); + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, reference ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, e ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.LocateResponseHandler#setResponseValue(boolean) + */ + public void submitResponse( boolean value ) { + if ( this.conn != null ){ + this.conn.sendLocateReply( this.version, this.requestId, value ); + } else { + throw new INTERNAL( "No IIOPConnection configured" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + throw new INTERNAL( "LocateRequest requires a return value" ); + } + + /* + * remove from here + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.java new file mode 100644 index 0000000..6d65d39 --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLResponseHandler.java @@ -0,0 +1,193 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 385 $ +* Date: $Date: 2009-04-16 10:15:52 +0200 (Thu, 16 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.Object; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.SystemException; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.ServerRequestImpl; +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.poa.QueuedResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + + +/** + * ResponseHandler implementation for the IIOPCommunicationLayer + * + * @author jprojas + * + */ +public class SSLResponseHandler extends QueuedResponseHandler implements ResponseHandler { + + private SSLConnection conn; + private GIOPVersion version; + private ServerRequestImpl serverRequest; + private ObjectKey objectKey; + private PolicyContext policySupplier; + + public SSLResponseHandler( SSLConnection conn, + GIOPVersion version, + ServerRequestImpl + serverRequest, + ObjectKey objectKey, + PolicyContext policySupplier){ + setConnection( conn ); + setVersion( version ); + setServerRequest( serverRequest ); + setObjectKey( objectKey ); + setPolicyContext( policySupplier ); + } + + public void setConnection( SSLConnection conn ){ + this.conn = conn; + } + + public SSLConnection getConnection(){ + return this.conn; + } + + public void setVersion( GIOPVersion version ){ + this.version = version; + } + + public GIOPVersion getVersion(){ + return this.version; + } + + public void setServerRequest( ServerRequestImpl serverRequest ){ + this.serverRequest = serverRequest; + } + + public void setObjectKey( ObjectKey objectKey ){ + this.objectKey = objectKey; + } + + /** + * @param policySupplier The policySupplier to set. + */ + public void setPolicyContext(PolicyContext policySupplier) + { + this.policySupplier = policySupplier; + } + /* + * (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getPolicyContext() + */ + public PolicyContext getPolicyContext(){ + return this.policySupplier; + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getObjectKey() + */ + public ObjectKey getObjectKey() { + return this.objectKey; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#getServerRequest() + */ + public ServerRequest getServerRequest() { + return this.serverRequest; + } + + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.Object) + */ + public void submitResponse( Object reference ) { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.serverRequest.setForward( reference ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse(org.omg.CORBA.SystemException) + */ + public void submitResponse( SystemException e ) { + if ( this.conn != null ){ + if( this.serverRequest.withResponse() ) { + this.serverRequest.setSystemException( e ); + this.conn.sendReply( this.serverRequest, null ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /* (non-Javadoc) + * @see es.tid.TIDorbj.core.comm.ResponseHandler#submitResponse() + */ + public void submitResponse() { + if ( this.conn != null ){ + if ( this.serverRequest.withResponse() ) { + this.conn.sendReply( this.serverRequest, this.policySupplier ); + } + } else { + throw new INTERNAL( "No IIOPConnection configured!" ); + } + } + + /** + * remove from here + * @author jprojas + */ + public void sendError( SystemException e, Trace trace ) { + throw new NO_IMPLEMENT(); + + } + +} diff --git a/source/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.java b/source/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.java new file mode 100644 index 0000000..014b03d --- /dev/null +++ b/source/es/tid/TIDorbj/core/comm/ssliop/SSLServerListener.java @@ -0,0 +1,462 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 379 $ +* Date: $Date: 2009-04-07 12:17:19 +0200 (Tue, 07 Apr 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2010 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.comm.ssliop; + +import java.net.InetAddress; +import java.net.Socket; +import javax.net.ssl.SSLServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLContext; + +import java.security.KeyStore; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.TrustManagerFactory; + +import java.io.FileInputStream; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.giop.ServiceContextList; +import es.tid.TIDorbj.core.comm.iiop.*; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.Trace; + +import org.omg.SSLIOP.SSL; +import org.omg.CSIIOP.*; + + +public class SSLServerListener extends Thread +{ + + /** + * SSLServerSocket state + */ + + boolean m_shutdowned; + + boolean m_connected; + + /** + * SSLServerSocket where the communication layer will accept connections. This + * socket will be only avalilable when a the ORB's run method + * had been invoked. + */ + SSLServerSocket m_server_socket; + + /** + * Conection manager. + */ + IIOPConnectionManager m_manager; + + + /** + * Listen point where the SSLServerSocket will be listening. This + * point(host,port) will be used to create de local IOR's. + */ + ListenPoint m_listen_point; + + /** + * Service context that contains the information for activating the + * bidirectional service. + */ + ServiceContextList m_bidirectional_service; + + es.tid.TIDorbj.core.TIDORB m_orb; + + String hostAddress; + String hostName; + int port; + int backlog; + int reconnect; + GIOPVersion giopVersion; + + String ssl_key_store_file; + String ssl_key_store_passwd; + String ssl_key_store_type; + + String ssl_trust_store_file; + String ssl_trust_store_passwd; + String ssl_trust_store_type; + + String ssl_version; + + + public SSLServerListener(IIOPConnectionManager manager) + { + m_shutdowned = true; + m_connected = false; + + this.m_manager = manager; + m_orb = manager.orb(); + + this.hostAddress = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_ADDRESS ) + .getValue(); + this.hostName = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.HOST_NAME ) + .getValue(); +// this.port = +// m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) +// .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.PORT ) +// .getInt(); + this.backlog = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_BACKLOG ) + .getInt(); + this.reconnect = + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.SERVER_SOCKET_RECONNECT ) + .getInt(); + this.giopVersion = + GIOPVersion.fromString( + m_orb.getCommunicationManager().getLayerById( IIOPCommunicationLayer.ID ) + .getPropertyInfo( IIOPCommunicationLayerPropertiesInfo.GIOP_VERSION ) + .getString() + ); + + + // SSL options + + this.ssl_key_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_file_name ) + .getValue(); + + this.ssl_key_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_passwd_name ) + .getValue(); + + this.ssl_key_store_type = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_key_store_type_name ) + .getValue(); + + this.ssl_trust_store_file = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_file_name ) + .getValue(); + + this.ssl_trust_store_passwd = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_passwd_name ) + .getValue(); + + this.ssl_trust_store_type = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_trust_store_type_name ) + .getValue(); + + this.ssl_version = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_version_name ) + .getValue(); + + // port is ssl_port + this.port = + m_orb.getCommunicationManager().getLayerById( SSLIOPCommunicationLayer.ID ) + .getPropertyInfo( SSLIOPCommunicationLayerPropertiesInfo.ssl_port_name ) + .getInt(); + + + + + + + + SSLServerSocketFactory ssf = null; + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); + kmf.init(ks, ksPass); + + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getServerSocketFactory(); + + } catch (Exception e) { + throw new org.omg.CORBA.INITIALIZE("Can init SSLServerSocketFactory: " + + e.toString() ); + } + + } else { + // TODO: bad initialized?? + ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + } + + try { + if ( hostAddress == null) { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + this.port , + this.backlog ); + + } else { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + this.port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + + if ( this.hostName != null) { + m_listen_point = new ListenPoint( + this.hostName , + m_server_socket.getLocalPort() + ); + } else { + m_listen_point = new ListenPoint( + InetAddress.getLocalHost().getHostAddress(), + m_server_socket.getLocalPort() + ); + } + + m_shutdowned = false; + m_connected = true; + + } + catch (java.io.IOException e) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open SSLServerSocket: " + e.toString() + ); + } + + m_orb.printTrace( + Trace.DEBUG, "SSLServerListener connected at: " + m_listen_point.toString() + ); + } + + public ListenPoint getListenPoint() { + return m_listen_point; + } + + public synchronized void shutdown() { + if (!m_shutdowned) { + m_shutdowned = true; + try { + m_server_socket.close(); + } catch (Throwable th) {} + + m_server_socket = null; + + m_orb.printTrace( + Trace.DEBUG, "SSLServerListener at " + m_listen_point.toString() + " shutdown!" + ); + } + } + + public synchronized void resetServerSocket() { + if (!m_shutdowned) { + try { + if (m_server_socket != null) + m_server_socket.close(); + } + catch (Throwable th) {} + + SSLServerSocketFactory ssf = null; + + + if ( (!ssl_key_store_file.equals("")) && + (!ssl_key_store_passwd.equals("")) ) { + + try { + + SSLContext sc = SSLContext.getInstance(ssl_version); + + // + // Init KeyStore + // + String ksName = ssl_key_store_file; + char ksPass[] = ssl_key_store_passwd.toCharArray(); + KeyStore ks = KeyStore.getInstance(ssl_key_store_type); + ks.load(new FileInputStream(ksName), ksPass); + + KeyManagerFactory kmf = + KeyManagerFactory.getInstance("SunX509"); + kmf.init(ks, ksPass); + + // + // Init TrustManager + // + String tsName = ssl_trust_store_file; + char tsPass[] = ssl_trust_store_passwd.toCharArray(); + KeyStore ts = KeyStore.getInstance(ssl_trust_store_type); + ts.load(new FileInputStream(tsName), tsPass); + + TrustManagerFactory tmf = + TrustManagerFactory.getInstance("PKIX"); // TODO: put in param + tmf.init(ts); + + // Init SSLContext + sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + ssf = sc.getServerSocketFactory(); + + if ( this.hostAddress == null) { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + m_listen_point.m_port, + this.backlog + ); + } else { + m_server_socket = (SSLServerSocket) ssf.createServerSocket( + m_listen_point.m_port, + this.backlog, + InetAddress.getByName( this.hostAddress ) + ); + } + m_server_socket.setReuseAddress(true); + } catch (Throwable th) { + throw new org.omg.CORBA.INITIALIZE( + "Can not open SSLServerSocket: " + th.toString() + ); + } + + } else { + ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + } + } + } + + public void run() + { + while (!m_shutdowned) { + while (m_connected) { + + Socket client_socket = null; + try { + client_socket = m_server_socket.accept(); + } catch (Throwable se) { + + if ( m_shutdowned ){ + return; + } + + m_connected = false; + + m_orb.printTrace( + Trace.ERROR, "Error in SSLServerSocket.accept(): ", se + ); + } + + try { + if (client_socket != null) { + m_manager.createSSLServerConnection((SSLSocket)client_socket); + } + } catch (Throwable e) { + try { + client_socket.close(); + } catch (Throwable t) {} + + m_orb.printTrace( + Trace.ERROR, "Error creating SSLServerConnection: ", e + ); + } + } + + if ((!m_connected) && (!m_shutdowned)) { + + // RECONNECT + + //printTrace will check for a trace handler existence + m_orb.printTrace( Trace.DEBUG, "Trying to reconnect server socket "); + + try { + resetServerSocket(); + m_connected = true; + + if (m_orb.m_trace != null) { + m_orb.printTrace( + Trace.DEBUG, "SSLServerSocket reconnected" + ); + } + } catch (Throwable th) { + m_orb.printTrace( + Trace.ERROR, "SSLServerSocket reconnect error: ", th + ); + try { + Thread.sleep( this.reconnect ); + } catch (InterruptedException e) {} + } + } + } + } + +} diff --git a/source/es/tid/TIDorbj/core/compression/.svn/all-wcprops b/source/es/tid/TIDorbj/core/compression/.svn/all-wcprops new file mode 100644 index 0000000..ac62d7f --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/all-wcprops @@ -0,0 +1,29 @@ +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression +END +ZlibCompressorImpl.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.java +END +CompressorFactoryImpl.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.java +END +CompressionManagerImpl.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression/CompressionManagerImpl.java +END +CompressorImpl.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression/CompressorImpl.java +END diff --git a/source/es/tid/TIDorbj/core/compression/.svn/entries b/source/es/tid/TIDorbj/core/compression/.svn/entries new file mode 100644 index 0000000..96054f4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/entries @@ -0,0 +1,164 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/compression +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ZlibCompressorImpl.java +file + + + + +2010-04-28T11:50:13.000000Z +e47160cf9dc8b62815204f9095952a25 +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +5648 + +CompressorFactoryImpl.java +file + + + + +2010-04-28T11:50:13.000000Z +631d0856216bb750c1072326ae3457bf +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +4326 + +CompressionManagerImpl.java +file + + + + +2010-04-28T11:50:13.000000Z +f74c5e2390d5a73a872fa2aaa5acaa40 +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + + + + + + + + +6589 + +CompressorImpl.java +file + + + + +2010-04-28T11:50:13.000000Z +5740a5ff7e9485042d63c2b5017d4252 +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +5699 + diff --git a/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressionManagerImpl.java.svn-base b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressionManagerImpl.java.svn-base new file mode 100644 index 0000000..cf585c3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressionManagerImpl.java.svn-base @@ -0,0 +1,206 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source +* Version: 1 +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * CompressionManagerImpl Compression manager. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionManagerImpl extends CompressionManagerLocalBase +{ + + + TIDORB m_orb; + + /** + * m_factories Data structure to store factories. + * + */ + Hashtable m_factories; + + /** + * Creates a new CompressionManagerImpl instance. + * + * @param orb a TIDORB value + */ + public CompressionManagerImpl(TIDORB orb) + { + this.m_orb = orb; + m_factories = new Hashtable(); + + // Creates and registers default provided compressor: ZLib + Short zlib_id = new Short(COMPRESSORID_ZLIB.value); + CompressorFactory zlib_factory = + new CompressorFactoryImpl(orb, zlib_id.shortValue()); + m_factories.put(zlib_id, zlib_factory); + } + + /** + * register_factory Register a compression factory in the + * current manager + * + * @param compressor_factory a CompressorFactory value + * @exception FactoryAlreadyRegistered if an error occurs + */ + synchronized public void register_factory(CompressorFactory compressor_factory) + throws FactoryAlreadyRegistered + { + Short comp_id = new Short(compressor_factory.compressor_id()); + + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory == null) { + m_factories.put(comp_id, compressor_factory); + } + else + throw new FactoryAlreadyRegistered(); + } + + /** + * unregister_factory Unregister a compression factory. + * + * @param compressor_id a short value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public void unregister_factory(short compressor_id) + throws UnknownCompressorId + { + Short comp_id = new Short(compressor_id); + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory != null) { + m_factories.remove(comp_id); + } + else + throw new UnknownCompressorId(); + } + + + /** + * get_factory returns the required factory. + * + * @param compressor_id a short value + * @return a CompressorFactory value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public CompressorFactory get_factory(short compressor_id) + throws UnknownCompressorId + { + + Short comp_id = new Short(compressor_id); + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory == null) { + if ( (compressor_id != COMPRESSORID_GZIP.value) && + (compressor_id != COMPRESSORID_PKZIP.value) && + (compressor_id != COMPRESSORID_BZIP2.value) && + (compressor_id != COMPRESSORID_ZLIB.value) && + (compressor_id != COMPRESSORID_LZMA.value) && + (compressor_id != COMPRESSORID_LZOP.value) && + (compressor_id != COMPRESSORID_RZIP.value) && + (compressor_id != COMPRESSORID_7X.value) && + (compressor_id != COMPRESSORID_XAR.value) ) + throw new UnknownCompressorId(); + else + factory = new CompressorFactoryImpl(m_orb, compressor_id); + } + return factory; + + } + + /** + * get_compressor returns the required compressor. + * + * @param compressor_id a short value + * @param compression_level a short value + * @return a Compressor value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public Compressor get_compressor(short compressor_id, + short compression_level) + throws UnknownCompressorId + { + Short comp_id = new Short(compressor_id); + CompressorFactory factory = (CompressorFactory) m_factories.get(comp_id); + + if (factory != null) { + return factory.get_compressor(compression_level); + } + else + throw new UnknownCompressorId(); + + } + + /** + * get_factories returns all factories. + * + * @return a CompressorFactory[] value + */ + synchronized public CompressorFactory[] get_factories() + { + + Object[] keys = m_factories.keySet().toArray(); + + CompressorFactory[] factories = new CompressorFactory[keys.length]; + + for (int i = 0; i < keys.length; i++) { + factories[i] = (CompressorFactory) m_factories.get(keys[i]); + } + + return factories; + } + + +} diff --git a/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorFactoryImpl.java.svn-base b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorFactoryImpl.java.svn-base new file mode 100644 index 0000000..02a85b7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorFactoryImpl.java.svn-base @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; + +/** + * CompressorFactoryImpl compressor factory class. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressorFactoryImpl extends CompressorFactoryLocalBase +{ + TIDORB m_orb; + + /** + * m_compressor_id identifies the compressor family. + * + */ + short m_compressor_id; + + Hashtable m_compressors; + + /** + * Creates a new CompressorFactoryImpl instance. + * + * @param orb a TIDORB value + * @param compressor_id a short value + */ + public CompressorFactoryImpl(TIDORB orb, short compressor_id) + { + this.m_orb = orb; + this.m_compressor_id = compressor_id; + + switch (m_compressor_id) { + case COMPRESSORID_ZLIB.value: + break; + default: + throw new NO_IMPLEMENT(); + } + m_compressors = new Hashtable(); + } + + + /** + * Returns compressor_id value. + * + * @return a short value + */ + public short compressor_id() + { + return m_compressor_id; + } + + /** + * get_compressor returns a compressor according with the + * required level + * + * @param compression_level a short value + * @return a Compressor value + */ + synchronized public Compressor get_compressor(short compression_level) + { + if (compression_level > 9 ) + throw new BAD_PARAM("Compression level not valid", 44, + CompletionStatus.COMPLETED_NO); + Short comp_level = new Short(compression_level); + Compressor compressor = (Compressor) m_compressors.get(comp_level); + + if (compressor != null) { + return compressor; + } else { + + Compressor new_compressor; + + switch (m_compressor_id) { + case COMPRESSORID_GZIP.value: + case COMPRESSORID_PKZIP.value: + case COMPRESSORID_BZIP2.value: + throw new NO_IMPLEMENT(); + case COMPRESSORID_ZLIB.value: + new_compressor = new ZlibCompressorImpl(m_orb, compression_level, + this); + break; + default: + throw new NO_IMPLEMENT(); + } + m_compressors.put(comp_level, new_compressor); + + return new_compressor; + } + + } + + + +} diff --git a/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorImpl.java.svn-base b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorImpl.java.svn-base new file mode 100644 index 0000000..b55c3cb --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/text-base/CompressorImpl.java.svn-base @@ -0,0 +1,192 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * CompressorImpl is the abstract implementation of a compressor. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public abstract class CompressorImpl extends CompressorLocalBase +{ + + TIDORB m_orb; + short m_level; + long m_compressed_bytes; + long m_uncompressed_bytes; + float m_ratio; + CompressorFactory m_factory; + + + /** + * Creates a new CompressorImpl instance. + * + */ + public CompressorImpl() + { + this.m_orb = null; + this.m_factory = null; + this.m_level = 0; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * Creates a new CompressorImpl instance. + * + * @param level a short value + * @param factory a CompressorFactory value + */ + public CompressorImpl(short level, CompressorFactory factory) + { + this.m_orb = null; + this.m_factory = factory; + this.m_level = level; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * Creates a new CompressorImpl instance. + * + * @param orb a TIDORB value + * @param level a short value + * @param factory a CompressorFactory value + */ + public CompressorImpl(TIDORB orb, short level, CompressorFactory factory) + { + this.m_orb = orb; + this.m_factory = factory; + this.m_level = level; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * compress performs compression over source byte sequence and + * puts the result in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + public abstract void compress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException; + + /** + * decompress performs decompression over source and puts the result + * in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + public abstract void decompress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException; + + /** + * compressor_factory returns its compressor factory. + * + * @return an org.omg.Compression.CompressorFactory value + */ + public org.omg.Compression.CompressorFactory compressor_factory() + { + return m_factory; + } + + /** + * compression_level returns its compression level. + * + * @return a short value + */ + public short compression_level() + { + return m_level; + } + + /** + * Returns compressed_bytes written by this compressor. + * + * @return a long value + */ + public long compressed_bytes() + { + return m_compressed_bytes; + } + + /** + * Returns uncompressed_bytes read by this compressor. + * + * @return a long value + */ + public long uncompressed_bytes() + { + return m_uncompressed_bytes; + } + + /** + * Return compression_ratio reached with this compressor. + * + * @return an int value + */ + public float compression_ratio() + { + return m_ratio; + } + + +} diff --git a/source/es/tid/TIDorbj/core/compression/.svn/text-base/ZlibCompressorImpl.java.svn-base b/source/es/tid/TIDorbj/core/compression/.svn/text-base/ZlibCompressorImpl.java.svn-base new file mode 100644 index 0000000..ec2aee2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/.svn/text-base/ZlibCompressorImpl.java.svn-base @@ -0,0 +1,175 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.zip.*; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * ZlibCompressorImpl Zlib compressor. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class ZlibCompressorImpl extends CompressorImpl +{ + + /** + * Describe constant CHUNK_SIZE here. + * + */ + private int chunk_size; + + + /** + * Creates a new ZlibCompressorImpl instance. + * + * @param orb a TIDORB value + * @param level a short value + * @param factory a CompressorFactory value + */ + public ZlibCompressorImpl(TIDORB orb, short level, CompressorFactory factory) + { + super(orb, level, factory); + chunk_size = orb.m_conf.ziop_chunk_size; + } + + /** + * compress performs compression over source and puts result + * in target + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + synchronized public void compress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException + { + int have = 0; + int source_length = source.length; + + byte[] target_buffer = new byte[0]; + int target_length = 0; + + Deflater compresser = new Deflater(m_level); + + compresser.setInput(source, 0, source.length); + compresser.finish(); + + byte[] out = new byte[chunk_size]; + + do { + have = compresser.deflate(out, 0, chunk_size); + + if (have > 0) { + // Copy 'out' buffer to 'target' OctetSeq + int current_length = target_length; + byte[] aux_buffer = new byte[current_length + have]; + target_length += have; + System.arraycopy(target_buffer, 0, aux_buffer, 0, current_length); + System.arraycopy(out, 0, aux_buffer, current_length, have); + target_buffer = aux_buffer; + } + } while (have > 0 ); + + compresser.end(); + target.value = target_buffer; + + m_compressed_bytes += target.value.length; + m_uncompressed_bytes += source.length; + } + + /** + * decompress performs decompression on source sequence and puts + * result in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + synchronized public void decompress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException + { + + int have = 0; + int source_length = source.length; + + byte[] target_buffer = new byte[0]; + int target_length = 0; + + Inflater decompresser = new Inflater(); + decompresser.setInput(source, 0, source.length); + + byte[] out = new byte[chunk_size]; + + do { + + try { + have = decompresser.inflate(out, 0, chunk_size); + } catch (java.util.zip.DataFormatException dfe) { + throw new org.omg.Compression.CompressionException(); + } + + if ( have > 0) { + // Copy 'out' buffer to 'target' OctetSeq + int current_length = target_length; + byte[] aux_buffer = new byte[current_length + have]; + target_length += have; + System.arraycopy(target_buffer, 0, aux_buffer, 0, current_length); + System.arraycopy(out, 0, aux_buffer, current_length, have); + target_buffer = aux_buffer; + } + } while (have > 0 ); + + decompresser.end(); + target.value = target_buffer; + } + +} diff --git a/source/es/tid/TIDorbj/core/compression/CompressionManagerImpl.java b/source/es/tid/TIDorbj/core/compression/CompressionManagerImpl.java new file mode 100644 index 0000000..cf585c3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/CompressionManagerImpl.java @@ -0,0 +1,206 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source +* Version: 1 +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * CompressionManagerImpl Compression manager. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionManagerImpl extends CompressionManagerLocalBase +{ + + + TIDORB m_orb; + + /** + * m_factories Data structure to store factories. + * + */ + Hashtable m_factories; + + /** + * Creates a new CompressionManagerImpl instance. + * + * @param orb a TIDORB value + */ + public CompressionManagerImpl(TIDORB orb) + { + this.m_orb = orb; + m_factories = new Hashtable(); + + // Creates and registers default provided compressor: ZLib + Short zlib_id = new Short(COMPRESSORID_ZLIB.value); + CompressorFactory zlib_factory = + new CompressorFactoryImpl(orb, zlib_id.shortValue()); + m_factories.put(zlib_id, zlib_factory); + } + + /** + * register_factory Register a compression factory in the + * current manager + * + * @param compressor_factory a CompressorFactory value + * @exception FactoryAlreadyRegistered if an error occurs + */ + synchronized public void register_factory(CompressorFactory compressor_factory) + throws FactoryAlreadyRegistered + { + Short comp_id = new Short(compressor_factory.compressor_id()); + + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory == null) { + m_factories.put(comp_id, compressor_factory); + } + else + throw new FactoryAlreadyRegistered(); + } + + /** + * unregister_factory Unregister a compression factory. + * + * @param compressor_id a short value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public void unregister_factory(short compressor_id) + throws UnknownCompressorId + { + Short comp_id = new Short(compressor_id); + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory != null) { + m_factories.remove(comp_id); + } + else + throw new UnknownCompressorId(); + } + + + /** + * get_factory returns the required factory. + * + * @param compressor_id a short value + * @return a CompressorFactory value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public CompressorFactory get_factory(short compressor_id) + throws UnknownCompressorId + { + + Short comp_id = new Short(compressor_id); + CompressorFactory factory = + (CompressorFactory) m_factories.get(comp_id); + + if (factory == null) { + if ( (compressor_id != COMPRESSORID_GZIP.value) && + (compressor_id != COMPRESSORID_PKZIP.value) && + (compressor_id != COMPRESSORID_BZIP2.value) && + (compressor_id != COMPRESSORID_ZLIB.value) && + (compressor_id != COMPRESSORID_LZMA.value) && + (compressor_id != COMPRESSORID_LZOP.value) && + (compressor_id != COMPRESSORID_RZIP.value) && + (compressor_id != COMPRESSORID_7X.value) && + (compressor_id != COMPRESSORID_XAR.value) ) + throw new UnknownCompressorId(); + else + factory = new CompressorFactoryImpl(m_orb, compressor_id); + } + return factory; + + } + + /** + * get_compressor returns the required compressor. + * + * @param compressor_id a short value + * @param compression_level a short value + * @return a Compressor value + * @exception UnknownCompressorId if an error occurs + */ + synchronized public Compressor get_compressor(short compressor_id, + short compression_level) + throws UnknownCompressorId + { + Short comp_id = new Short(compressor_id); + CompressorFactory factory = (CompressorFactory) m_factories.get(comp_id); + + if (factory != null) { + return factory.get_compressor(compression_level); + } + else + throw new UnknownCompressorId(); + + } + + /** + * get_factories returns all factories. + * + * @return a CompressorFactory[] value + */ + synchronized public CompressorFactory[] get_factories() + { + + Object[] keys = m_factories.keySet().toArray(); + + CompressorFactory[] factories = new CompressorFactory[keys.length]; + + for (int i = 0; i < keys.length; i++) { + factories[i] = (CompressorFactory) m_factories.get(keys[i]); + } + + return factories; + } + + +} diff --git a/source/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.java b/source/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.java new file mode 100644 index 0000000..02a85b7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/CompressorFactoryImpl.java @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; + +/** + * CompressorFactoryImpl compressor factory class. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressorFactoryImpl extends CompressorFactoryLocalBase +{ + TIDORB m_orb; + + /** + * m_compressor_id identifies the compressor family. + * + */ + short m_compressor_id; + + Hashtable m_compressors; + + /** + * Creates a new CompressorFactoryImpl instance. + * + * @param orb a TIDORB value + * @param compressor_id a short value + */ + public CompressorFactoryImpl(TIDORB orb, short compressor_id) + { + this.m_orb = orb; + this.m_compressor_id = compressor_id; + + switch (m_compressor_id) { + case COMPRESSORID_ZLIB.value: + break; + default: + throw new NO_IMPLEMENT(); + } + m_compressors = new Hashtable(); + } + + + /** + * Returns compressor_id value. + * + * @return a short value + */ + public short compressor_id() + { + return m_compressor_id; + } + + /** + * get_compressor returns a compressor according with the + * required level + * + * @param compression_level a short value + * @return a Compressor value + */ + synchronized public Compressor get_compressor(short compression_level) + { + if (compression_level > 9 ) + throw new BAD_PARAM("Compression level not valid", 44, + CompletionStatus.COMPLETED_NO); + Short comp_level = new Short(compression_level); + Compressor compressor = (Compressor) m_compressors.get(comp_level); + + if (compressor != null) { + return compressor; + } else { + + Compressor new_compressor; + + switch (m_compressor_id) { + case COMPRESSORID_GZIP.value: + case COMPRESSORID_PKZIP.value: + case COMPRESSORID_BZIP2.value: + throw new NO_IMPLEMENT(); + case COMPRESSORID_ZLIB.value: + new_compressor = new ZlibCompressorImpl(m_orb, compression_level, + this); + break; + default: + throw new NO_IMPLEMENT(); + } + m_compressors.put(comp_level, new_compressor); + + return new_compressor; + } + + } + + + +} diff --git a/source/es/tid/TIDorbj/core/compression/CompressorImpl.java b/source/es/tid/TIDorbj/core/compression/CompressorImpl.java new file mode 100644 index 0000000..b55c3cb --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/CompressorImpl.java @@ -0,0 +1,192 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.Hashtable; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * CompressorImpl is the abstract implementation of a compressor. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public abstract class CompressorImpl extends CompressorLocalBase +{ + + TIDORB m_orb; + short m_level; + long m_compressed_bytes; + long m_uncompressed_bytes; + float m_ratio; + CompressorFactory m_factory; + + + /** + * Creates a new CompressorImpl instance. + * + */ + public CompressorImpl() + { + this.m_orb = null; + this.m_factory = null; + this.m_level = 0; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * Creates a new CompressorImpl instance. + * + * @param level a short value + * @param factory a CompressorFactory value + */ + public CompressorImpl(short level, CompressorFactory factory) + { + this.m_orb = null; + this.m_factory = factory; + this.m_level = level; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * Creates a new CompressorImpl instance. + * + * @param orb a TIDORB value + * @param level a short value + * @param factory a CompressorFactory value + */ + public CompressorImpl(TIDORB orb, short level, CompressorFactory factory) + { + this.m_orb = orb; + this.m_factory = factory; + this.m_level = level; + this.m_compressed_bytes = 0; + this.m_uncompressed_bytes = 0; + this.m_ratio = 0; + } + + /** + * compress performs compression over source byte sequence and + * puts the result in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + public abstract void compress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException; + + /** + * decompress performs decompression over source and puts the result + * in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + public abstract void decompress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException; + + /** + * compressor_factory returns its compressor factory. + * + * @return an org.omg.Compression.CompressorFactory value + */ + public org.omg.Compression.CompressorFactory compressor_factory() + { + return m_factory; + } + + /** + * compression_level returns its compression level. + * + * @return a short value + */ + public short compression_level() + { + return m_level; + } + + /** + * Returns compressed_bytes written by this compressor. + * + * @return a long value + */ + public long compressed_bytes() + { + return m_compressed_bytes; + } + + /** + * Returns uncompressed_bytes read by this compressor. + * + * @return a long value + */ + public long uncompressed_bytes() + { + return m_uncompressed_bytes; + } + + /** + * Return compression_ratio reached with this compressor. + * + * @return an int value + */ + public float compression_ratio() + { + return m_ratio; + } + + +} diff --git a/source/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.java b/source/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.java new file mode 100644 index 0000000..ec2aee2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/compression/ZlibCompressorImpl.java @@ -0,0 +1,175 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author $ +* +* (C) Copyright 2008 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.compression; + +import java.util.zip.*; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.Compression.*; +import es.tid.TIDorbj.core.TIDORB; + + +/** + * ZlibCompressorImpl Zlib compressor. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class ZlibCompressorImpl extends CompressorImpl +{ + + /** + * Describe constant CHUNK_SIZE here. + * + */ + private int chunk_size; + + + /** + * Creates a new ZlibCompressorImpl instance. + * + * @param orb a TIDORB value + * @param level a short value + * @param factory a CompressorFactory value + */ + public ZlibCompressorImpl(TIDORB orb, short level, CompressorFactory factory) + { + super(orb, level, factory); + chunk_size = orb.m_conf.ziop_chunk_size; + } + + /** + * compress performs compression over source and puts result + * in target + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + synchronized public void compress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException + { + int have = 0; + int source_length = source.length; + + byte[] target_buffer = new byte[0]; + int target_length = 0; + + Deflater compresser = new Deflater(m_level); + + compresser.setInput(source, 0, source.length); + compresser.finish(); + + byte[] out = new byte[chunk_size]; + + do { + have = compresser.deflate(out, 0, chunk_size); + + if (have > 0) { + // Copy 'out' buffer to 'target' OctetSeq + int current_length = target_length; + byte[] aux_buffer = new byte[current_length + have]; + target_length += have; + System.arraycopy(target_buffer, 0, aux_buffer, 0, current_length); + System.arraycopy(out, 0, aux_buffer, current_length, have); + target_buffer = aux_buffer; + } + } while (have > 0 ); + + compresser.end(); + target.value = target_buffer; + + m_compressed_bytes += target.value.length; + m_uncompressed_bytes += source.length; + } + + /** + * decompress performs decompression on source sequence and puts + * result in target. + * + * @param source a byte value + * @param target an org.omg.CORBA.OctetSeqHolder value + * @exception org.omg.Compression.CompressionException if an error occurs + */ + synchronized public void decompress(byte[] source, + org.omg.CORBA.OctetSeqHolder target) + throws org.omg.Compression.CompressionException + { + + int have = 0; + int source_length = source.length; + + byte[] target_buffer = new byte[0]; + int target_length = 0; + + Inflater decompresser = new Inflater(); + decompresser.setInput(source, 0, source.length); + + byte[] out = new byte[chunk_size]; + + do { + + try { + have = decompresser.inflate(out, 0, chunk_size); + } catch (java.util.zip.DataFormatException dfe) { + throw new org.omg.Compression.CompressionException(); + } + + if ( have > 0) { + // Copy 'out' buffer to 'target' OctetSeq + int current_length = target_length; + byte[] aux_buffer = new byte[current_length + have]; + target_length += have; + System.arraycopy(target_buffer, 0, aux_buffer, 0, current_length); + System.arraycopy(out, 0, aux_buffer, current_length, have); + target_buffer = aux_buffer; + } + } while (have > 0 ); + + decompresser.end(); + target.value = target_buffer; + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/all-wcprops b/source/es/tid/TIDorbj/core/iop/.svn/all-wcprops new file mode 100644 index 0000000..30080cd --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/all-wcprops @@ -0,0 +1,65 @@ +K 25 +svn:wc:ra_dav:version-url +V 78 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop +END +TaggedProfileReader.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/TaggedProfileReader.java +END +TaggedComponentReader.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/TaggedComponentReader.java +END +CSIComponent.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/CSIComponent.java +END +ProfileMultipleComponents.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.java +END +SSLComponent.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/SSLComponent.java +END +ORBComponent.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/ORBComponent.java +END +IOR.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/IOR.java +END +TaggedProfile.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/TaggedProfile.java +END +DefaultIOR.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/DefaultIOR.java +END +TaggedComponent.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop/TaggedComponent.java +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/entries b/source/es/tid/TIDorbj/core/iop/.svn/entries new file mode 100644 index 0000000..c63a8ab --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/entries @@ -0,0 +1,368 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/iop +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TaggedProfileReader.java +file + + + + +2009-05-27T12:24:01.000000Z +ae2d1126bf50d0c47fb0cde430a41160 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2917 + +TaggedComponentReader.java +file +478 + + + +2011-04-29T14:42:47.000000Z +1d4c6f3b40c81ac58e2d2c5b9aa43118 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3153 + +CSIComponent.java +file + + + + +2010-04-28T10:47:58.000000Z +250be94cde87b1790fb250d1ebd5c946 +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + + + + + + + + +11602 + +ProfileMultipleComponents.java +file + + + + +2009-05-27T12:24:01.000000Z +a2287a140221a616a486d2ec92da00f2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4437 + +SSLComponent.java +file + + + + +2010-04-28T10:47:58.000000Z +859db675bc13fa5f58268f1fb52c4f1b +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + + + + + + + + +5506 + +ORBComponent.java +file + + + + +2010-04-28T10:47:58.000000Z +3de964984fb6577b2dde5e46b8af93ab +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3178 + +IOR.java +file + + + + +2009-05-27T12:24:01.000000Z +3053c54dfa123b3fd75abdd93705f126 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8640 + +TaggedProfile.java +file + + + + +2009-05-27T12:24:01.000000Z +f1702d4fa98608a3a68a8dcac5dc261d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2654 + +DefaultIOR.java +file + + + + +2009-05-27T12:24:01.000000Z +696853fcdcdc20e0c784fd1395e53a51 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4118 + +TaggedComponent.java +file + + + + +2009-05-27T12:24:01.000000Z +8589b0c30eb4c845b9568c59349bfc3e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2599 + diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/DefaultIOR.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/DefaultIOR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/DefaultIOR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/IOR.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/IOR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/IOR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ORBComponent.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ORBComponent.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ORBComponent.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ProfileMultipleComponents.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ProfileMultipleComponents.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/ProfileMultipleComponents.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponent.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponent.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponent.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponentReader.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponentReader.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedComponentReader.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfile.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfile.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfile.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfileReader.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfileReader.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/prop-base/TaggedProfileReader.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/CSIComponent.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/CSIComponent.java.svn-base new file mode 100644 index 0000000..95f61a1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/CSIComponent.java.svn-base @@ -0,0 +1,330 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2009 Telefonica Investigacion y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import java.io.StringWriter; +import java.io.PrintWriter; +import java.lang.Byte; + +import es.tid.TIDorbj.core.ConfORB; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; +import org.omg.CSIIOP.CompoundSecMechList; +import org.omg.CSIIOP.CompoundSecMechListHelper; +import org.omg.CSIIOP.ServiceConfiguration; +import org.omg.CSI.ITTAbsent; +import org.omg.CSI.ITTAnonymous; +import org.omg.CSI.ITTPrincipalName; +import org.omg.CSI.ITTX509CertChain; +import org.omg.CSI.ITTDistinguishedName; + + + +/** + * CSIComponent data struct defined in the GIOP Module. + * + * @autor + * @version 1.0 + */ +public class CSIComponent extends TaggedComponent +{ + + private CompoundSecMechList m_mec_list; + + public CSIComponent() + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = new CompoundSecMechList(); + } + + public CSIComponent(CompoundSecMechList mec_list) + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = mec_list; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + CompoundSecMechListHelper.write(out, m_mec_list); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_mec_list = CompoundSecMechListHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("stateful: "); + print_buffer.print(m_mec_list.stateful); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + for (int i = 0; i < m_mec_list.mechanism_list.length; i++) { + print_buffer.print("mechanism: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" transport_mech: " + + CSIComponent.print_TransportMechTag( + m_mec_list.mechanism_list[i].transport_mech.tag)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" as_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" client_authentication_mech: " + + print_OID(m_mec_list.mechanism_list[i].as_context_mech.client_authentication_mech)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_name: " + + print_GSS_NT_ExportedName( + m_mec_list.mechanism_list[i].as_context_mech.target_name)); + + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" sas_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" privilege_authorities: " + + CSIComponent.print_PrivilegeAuthorities( + m_mec_list.mechanism_list[i].sas_context_mech.privilege_authorities)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_naming_mechanims: " + + print_OIDList( + m_mec_list.mechanism_list[i].sas_context_mech.supported_naming_mechanisms)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_identity_types: " + + print_IdentityTokenTypes( + m_mec_list.mechanism_list[i].sas_context_mech.supported_identity_types)); + } + return buffer.toString(); + } + + + + public static String print_PrivilegeAuthorities(ServiceConfiguration[] privilege_authorities) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < privilege_authorities.length; i++) { + print_buffer.print("\n \t \t \t sintax: " + privilege_authorities[i].syntax); + print_buffer.print("\n \t \t \t name: " + privilege_authorities[i].name); + } + + return buffer.toString(); + } + + public static String print_OID(byte[] oid) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t OID: "); + + for (int i = 0; i < oid.length; i++) { + String hex = Integer.toHexString(oid[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + } + + return buffer.toString(); + } + + + public static String print_OIDList(byte[][] oid_list) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < oid_list.length; i++) { + print_buffer.print(print_OID(oid_list[i])); + } + + return buffer.toString(); + } + + public static String print_IdentityTokenTypes(int type) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(type) { + case org.omg.CSI.ITTAbsent.value: + print_buffer.print("\n \t \t \t Absent"); + break; + case org.omg.CSI.ITTAnonymous.value: + print_buffer.print("\n \t \t \t Anonymous"); + break; + case org.omg.CSI.ITTPrincipalName.value: + print_buffer.print("\n \t \t \t PrincipalName"); + break; + case org.omg.CSI.ITTX509CertChain.value: + print_buffer.print("\n \t \t \t ITTX509CertChain"); + break; + case org.omg.CSI.ITTDistinguishedName.value: + print_buffer.print("\n \t \t \t ITTDistinguishedName"); + break; + } + return buffer.toString(); + } + + + public static String print_TransportMechTag(int tag) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(tag) { + case org.omg.IOP.TAG_SSL_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_SSL_SEC_TRANS"); + break; + case org.omg.IOP.TAG_TLS_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_TLS_SEC_TRANS"); + break; + case org.omg.IOP.TAG_NULL_TAG.value: + print_buffer.print("\n \t \t \t TAG_NULL_TAG"); + break; + } + return buffer.toString(); + } + + + public static String print_GSS_NT_ExportedName(byte[] name) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t "); + + for (int i = 0; i < name.length; i++) { + String hex = Integer.toHexString(name[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + + } + + return buffer.toString(); + + } + + +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/DefaultIOR.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/DefaultIOR.java.svn-base new file mode 100644 index 0000000..d5df4db --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/DefaultIOR.java.svn-base @@ -0,0 +1,136 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.NO_IMPLEMENT; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class DefaultIOR extends IOR { + + /** + * + */ + public DefaultIOR() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @param type_id + * @param profiles + */ + public DefaultIOR( String type_id, TaggedProfile[] profiles ) { + super( type_id, profiles ); + } + + public static IOR fromString(TIDORB orb, String ior_str) { + + int length = ior_str.length(); + if (((length % 2) != 0) || (length < 14)) + throw new INV_OBJREF("IOR format error: invalid ior length.", 0, + CompletionStatus.COMPLETED_NO); + if (!ior_str.startsWith("IOR:")) + throw new INV_OBJREF("Invalid IOR format id: \"IOR:\".", 0, + CompletionStatus.COMPLETED_NO); + + byte[] buffer = new byte[(length - 4) / 2]; + char[] ior_chars = ior_str.toCharArray(); + int j = 4; + try { + for (int i = 0; i < buffer.length; i++) + buffer[i] = + (byte) (16 * (Base16Codec.getValue(ior_chars[j++])) + + Base16Codec.getValue(ior_chars[j++])); + } + catch (Exception e) { + throw new INV_OBJREF(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + // create the the ior with the new buffer + IOR ior = new DefaultIOR(); + + CDRInputStream internet_cdr = new CDRInputStream(orb, buffer); + + internet_cdr.setByteOrder(internet_cdr.read_boolean()); + + ior.read(internet_cdr); + + ior.toString = ior_str; + + return ior; + } + + public String toURL(){ + return toString(); + } + + public ObjectKey getObjectKey() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toObjectKeyAddress() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toProfileAddress() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toIORAddress() { + throw new NO_IMPLEMENT(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/IOR.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/IOR.java.svn-base new file mode 100644 index 0000000..7b4c952 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/IOR.java.svn-base @@ -0,0 +1,311 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.portable.IDLEntity; +import org.omg.IOP.TAG_INTERNET_IOP; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * Representation of an Internet Object Reference (IOR). An IOR is compounded + * by; + *

    + *
  • at least one TaggedProfile + *
  • the repositoryId of the reference + *
+ * In addition, the ior has its stringified representation and its marshaled + * value. + * + * @autor Juan A. Cáceres + * @version 2.0 + */ + +public abstract class IOR implements IDLEntity { /*extends org.omg.IOP.IOR*/ + + + private static IOR nullIOR; + + String toString; + + + public java.lang.String type_id; + public TaggedProfile[] profiles; + + + int hash_code = -1; + + public IOR() { + toString = null; + } + + public IOR(String type_id, TaggedProfile[] profiles) { + this.type_id = type_id; + this.profiles = profiles; + toString = null; + } + + public static IOR nullIOR() { + if ( nullIOR == null ) { + nullIOR = new DefaultIOR("", new TaggedProfile[0]){ + + }; + } + return nullIOR; + } + + public synchronized void addProfile(TaggedProfile profile) + { + if(this.profiles == null) { + this.profiles = new TaggedProfile[1]; + this.profiles[0] = profile; + } else { + TaggedProfile[] tmp = new TaggedProfile[this.profiles.length + 1]; + System.arraycopy(this.profiles, 0, tmp, 0, this.profiles.length); + tmp[this.profiles.length] = profile; + this.profiles = tmp; + } + this.toString = null; + } + + public synchronized void assign(IOR ior) { + if ( ior != null ) { + this.profiles = ior.profiles; + this.type_id = ior.type_id; + this.toString = ior.toString; + } else { + this.profiles = null; + this.type_id = null; + this.toString = null; + } + } + + public String getTypeId() { + return this.type_id; + } + + public int memberCount() { + return ( this.profiles == null )?0:this.profiles.length; + } + + public TaggedProfile getProfile(int index) { + return (index < 0) || (index >= profiles.length)? + null:profiles[index]; + } + + public boolean equivalent(IOR ior) { + if ((profiles == null) || (ior.profiles == null)) + return false; + + if (!type_id.equals(ior.type_id)) + return false; + + IOR ior_max, ior_min; + + if (memberCount() > ior.memberCount()) { + ior_max = this; + ior_min = ior; + } else { + ior_max = ior; + ior_min = this; + } + + int size_min = ior_min.memberCount(); + int size_max = ior_max.memberCount(); + + for (int i = 0; i < size_min; i++) { + if (ior_min.profiles[i].tag == TAG_INTERNET_IOP.value) { + for (int j = 0; j < size_max; j++) { + if (ior_max.profiles[j].tag == TAG_INTERNET_IOP.value) { + if ( ior_min.profiles[i].equal( ior_max.profiles[j] ) ){ + return true; + } + } + } + } + } + return false; + } + + public String toString() { + return toString(null); + } + + public int hashCode() { + if (hash_code == -1) { + hash_code = toString().hashCode(); + } + return hash_code; + } + + public synchronized String toString(TIDORB orb) { + if (toString == null) { + CDROutputStream ior_output = null; + + if (orb == null) { + ior_output = new CDROutputStream( + orb, + ConfORB.DEFAULT_BLOCK_SIZE + ); + } else { + ior_output = new CDROutputStream(orb, orb.m_conf.block_size); + } + + ior_output.write_boolean(ior_output.getByteOrder()); + + write(ior_output); + + // compound the buffer string + + BufferCDR cdr_buffer = ior_output.getBuffer(); + + int available = cdr_buffer.getAvailable(); + + char[] buffer = new char[(2 * available) + 4]; + + int i = 0; + buffer[i++] = 'I'; + buffer[i++] = 'O'; + buffer[i++] = 'R'; + buffer[i++] = ':'; + + int num_chunks = cdr_buffer.getNumAvailableChunks(); + + ChunkCDR cdr_chunk = null; + + int octet = 0; + int chunk_available; + byte[] ior_data; + + int chunk_no = 0; + + while (i < buffer.length) { + cdr_chunk = cdr_buffer.getChunk(chunk_no++); + chunk_available = cdr_chunk.getAvailable(); + ior_data = cdr_chunk.getBuffer(); + + for (int j = 0; j < chunk_available; j++) { + octet = ior_data[j]; + buffer[i++] = Base16Codec.toBase16[(octet & 0xf0) >> 4]; + buffer[i++] = Base16Codec.toBase16[octet & 0xf]; + } + } + + toString = new String(buffer); + } + + return toString; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) { + // write type_id + out.write_string(type_id); + + // write profiles sequence + + out.write_ulong(profiles.length); + + for (int i = 0; i < profiles.length; i++) { + ((TaggedProfile)profiles[i]).write(out); + } + } + + + public void read(CDRInputStream input) { + type_id = input.read_string(); + + int size = input.read_ulong(); + + if (size < 0) { + throw new INV_OBJREF("Invalid Profile sequence length.", 0, + CompletionStatus.COMPLETED_NO); + } + + profiles = new TaggedProfile[size]; + + int tag; + + for (int i = 0; i < profiles.length; i++) { + profiles[i] = TaggedProfileReader.read(input); + } + } + + + + public static void skip(CDRInputStream input) { + input.skipString(); + + int size = input.read_ulong(); + + if (size < 0) + throw new INV_OBJREF("Invalid Profile sequence length.", 0, + CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < size; i++) { + TaggedProfile.skip(input); + } + + } + + public abstract String toURL(); + + + public abstract ObjectKey getObjectKey(); + + public abstract TargetAddress toObjectKeyAddress(); + + public abstract TargetAddress toProfileAddress(); + + public abstract TargetAddress toIORAddress(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/ORBComponent.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/ORBComponent.java.svn-base new file mode 100644 index 0000000..b69f580 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/ORBComponent.java.svn-base @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.ConfORB; +import org.omg.IOP.TAG_ORB_TYPE; + +/** + * ORBComponent data struct defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ORBComponent extends TaggedComponent +{ + + public int m_orb_type; + + public ORBComponent() + { + super(TAG_ORB_TYPE.value); + m_orb_type = 0; + } + + public ORBComponent(int type) + { + super(TAG_ORB_TYPE.value); + m_orb_type = type; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + out.write_ulong(m_orb_type); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_orb_type = input.read_ulong(); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + if (m_orb_type == ConfORB.ORB_TYPE.m_orb_type) { + print_buffer.print("ORB type ID: "); + print_buffer.print(m_orb_type); + print_buffer.print(" (TIDORB - Telefonica I+D)"); + } else { + print_buffer.print("ORB: "); + print_buffer.print(m_orb_type); + } + + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/ProfileMultipleComponents.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/ProfileMultipleComponents.java.svn-base new file mode 100644 index 0000000..e72ea4a --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/ProfileMultipleComponents.java.svn-base @@ -0,0 +1,156 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.IOP.TAG_MULTIPLE_COMPONENTS; + +/** + * ProfileMultipleComponents sequence defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ProfileMultipleComponents extends TaggedProfile +{ + + private TaggedComponent[] m_components; + + es.tid.TIDorbj.core.cdr.CDRInputStream m_profile_data; + + protected ProfileMultipleComponents() + { + super(TAG_MULTIPLE_COMPONENTS.value); + m_components = null; + m_profile_data = null; + } + + public ProfileMultipleComponents(TaggedComponent[] tagged_components) + { + super(TAG_MULTIPLE_COMPONENTS.value); + m_components = tagged_components; + } + + public TaggedComponent[] getTaggedComponents() + { + if (m_profile_data != null) + extract_members(); + return m_components; + } + + synchronized protected void extract_members() + { + if (m_profile_data == null) + throw new org.omg.CORBA.INTERNAL("Empty Profile"); + + m_profile_data.enterEncapsulation(); + + int size = m_profile_data.read_ulong(); + if (size < 0) + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + if (size > 0) { + m_components = new TaggedComponent[size]; + for (int i = 0; i < size; i++) { + m_components[i] = TaggedComponentReader.read(m_profile_data); + } + } + + m_profile_data = null; + } + + public boolean equal( Object o ){ + ProfileMultipleComponents pfc; + if ( o instanceof ProfileMultipleComponents ){ + pfc = ( ProfileMultipleComponents )o; + } else { + pfc = null; + } + + if ( pfc == null ){ + return false; + } else { + throw new NO_IMPLEMENT(); + } + } + + synchronized public void + write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_profile_data != null) { + extract_members(); + } + + // write tag + output.write_ulong(tag); + + // write profile data + + output.enterEncapsulation(); + + if (m_components == null) + output.write_ulong(0); + else { + output.write_ulong(m_components.length); + for (int i = 0; i < m_components.length; i++) + m_components[i].write(output); + } + + output.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_profile_data = input.copy(); + input.skipEncapsulation(); + + /* + * profile_data = input.copy(); + * + * profile_data.fix_starting(); + * + * int length = input.read_ulong(); + * + * for(int i = 0; i 0) { + print_buffer.print("\n \t \t \t NoProtection"); + } + if ( (mask & org.omg.Security.Integrity.value) > 0) { + print_buffer.print("\n \t \t \t Integrity"); + } + if ( (mask & org.omg.Security.Confidentiality.value) > 0) { + print_buffer.print("\n \t \t \t Confidentiality"); + } + if ( (mask & org.omg.Security.DetectReplay.value) > 0) { + print_buffer.print("\n \t \t \t DetectReplay"); + } + if ( (mask & org.omg.Security.DetectMisordering.value) > 0) { + print_buffer.print("\n \t \t \t DetectMisordering"); + } + if ( (mask & org.omg.Security.EstablishTrustInTarget.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInTarget"); + } + if ( (mask & org.omg.Security.EstablishTrustInClient.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInClient"); + } + if ( (mask & org.omg.Security.NoDelegation.value) > 0) { + print_buffer.print("\n \t \t \t NoDelegation"); + } + if ( (mask & org.omg.Security.SimpleDelegation.value) > 0) { + print_buffer.print("\n \t \t \t SimpleDelegation"); + } + if ( (mask & org.omg.Security.CompositeDelegation.value) > 0) { + print_buffer.print("\n \t \t \t CompositeDelegation"); + } + if ( (mask & org.omg.CSIIOP.IdentityAssertion.value) > 0) { + print_buffer.print("\n \t \t \t IdentityAssertion"); + } + if ( (mask & org.omg.CSIIOP.DelegationByClient.value) > 0) { + print_buffer.print("\n \t \t \t DelegationByClient"); + } + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponent.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponent.java.svn-base new file mode 100644 index 0000000..12489fe --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponent.java.svn-base @@ -0,0 +1,88 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +/** + * TaggedComponent structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class TaggedComponent +{ + + public int m_tag; + + public es.tid.TIDorbj.core.cdr.Encapsulation m_component_data; + + public TaggedComponent(int tag) + { + m_tag = tag; + m_component_data = null; + } + + public TaggedComponent(int tag, + es.tid.TIDorbj.core.cdr.Encapsulation component_data) + { + m_tag = tag; + m_component_data = component_data; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_tag); + output.writeEncapsulation(m_component_data); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_component_data = input.readEncapsulation(); + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUlong(); //tag + input.skipEncapsulation(); // component_data + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponentReader.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponentReader.java.svn-base new file mode 100644 index 0000000..afb1698 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedComponentReader.java.svn-base @@ -0,0 +1,92 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.IOP.TAG_ORB_TYPE; +import org.omg.IOP.TAG_POLICIES; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; + +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.security.CSIComponent; + +/** + * Helper class for read TaggedComponent structures. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class TaggedComponentReader +{ + + public static TaggedComponent + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int profile_id = input.read_ulong(); + + switch (profile_id) + { + case TAG_ORB_TYPE.value: + ORBComponent orb_component = new ORBComponent(); + orb_component.partialRead(input); + return orb_component; + case TAG_POLICIES.value: + PoliciesComponent policies = new PoliciesComponent(); + policies.partialRead(input); + return policies; + case TAG_SSL_SEC_TRANS.value: + SSLComponent ssl_component = new SSLComponent(); + ssl_component.partialRead(input); + return ssl_component; + case TAG_CSI_SEC_MECH_LIST.value: + CSIComponent csi_component = new CSIComponent(); + csi_component.partialRead(input); + return csi_component; + default: + TaggedComponent comp = new TaggedComponent(profile_id); + comp.partialRead(input); + return comp; + } + } +} diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfile.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfile.java.svn-base new file mode 100644 index 0000000..8526d3f --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfile.java.svn-base @@ -0,0 +1,89 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.portable.IDLEntity; + +/** + * TaggedProfile structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class TaggedProfile implements IDLEntity {/*extends org.omg.IOP.TaggedProfile {*/ + + + public int tag; + public byte[] profile_data; + + public TaggedProfile() {} + + public TaggedProfile(int tag, byte[] profile_data) { + this.tag = tag; + this.profile_data = profile_data; + } + + public TaggedProfile(int tag) { + this( tag, null ); + } + + public abstract boolean equal( Object profile ); + + public abstract void write( + es.tid.TIDorbj.core.cdr.CDROutputStream output + ); + + public abstract void partialRead( + es.tid.TIDorbj.core.cdr.CDRInputStream input + ); + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) { + // skip tag + input.skipUlong(); + // skip encapsulation + int encapsulation_size = input.read_ulong(); + input.skipOctetArray(encapsulation_size); + } + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfileReader.java.svn-base b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfileReader.java.svn-base new file mode 100644 index 0000000..2c84aed --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/.svn/text-base/TaggedProfileReader.java.svn-base @@ -0,0 +1,87 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.IOP.TAG_INTERNET_IOP; +import org.omg.IOP.TAG_MULTIPLE_COMPONENTS; + +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; + +/** + * Helper class for reading GIOP TaggedProfile. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: maybe a TaggedProfile factory could help in generalizing profiles management +//generating profiles depending on the ID, each profile could read itself from the CDR input +public abstract class TaggedProfileReader +{ + + public static TaggedProfile + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int profile_id = input.read_ulong(); + + switch (profile_id) + { + case TAG_INTERNET_IOP.value: + IIOPProfile profile_iiop = new IIOPProfile(); + profile_iiop.partialRead(input); + return profile_iiop; + case TAG_MULTIPLE_COMPONENTS.value: + ProfileMultipleComponents multi_comp = + new ProfileMultipleComponents(); + multi_comp.partialRead(input); + return multi_comp; + default: + throw new MARSHAL("Invalid Profile TAG.", + 0, + CompletionStatus.COMPLETED_NO); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/CSIComponent.java b/source/es/tid/TIDorbj/core/iop/CSIComponent.java new file mode 100644 index 0000000..95f61a1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/CSIComponent.java @@ -0,0 +1,330 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2009 Telefonica Investigacion y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import java.io.StringWriter; +import java.io.PrintWriter; +import java.lang.Byte; + +import es.tid.TIDorbj.core.ConfORB; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; +import org.omg.CSIIOP.CompoundSecMechList; +import org.omg.CSIIOP.CompoundSecMechListHelper; +import org.omg.CSIIOP.ServiceConfiguration; +import org.omg.CSI.ITTAbsent; +import org.omg.CSI.ITTAnonymous; +import org.omg.CSI.ITTPrincipalName; +import org.omg.CSI.ITTX509CertChain; +import org.omg.CSI.ITTDistinguishedName; + + + +/** + * CSIComponent data struct defined in the GIOP Module. + * + * @autor + * @version 1.0 + */ +public class CSIComponent extends TaggedComponent +{ + + private CompoundSecMechList m_mec_list; + + public CSIComponent() + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = new CompoundSecMechList(); + } + + public CSIComponent(CompoundSecMechList mec_list) + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = mec_list; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + CompoundSecMechListHelper.write(out, m_mec_list); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_mec_list = CompoundSecMechListHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("stateful: "); + print_buffer.print(m_mec_list.stateful); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + for (int i = 0; i < m_mec_list.mechanism_list.length; i++) { + print_buffer.print("mechanism: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" transport_mech: " + + CSIComponent.print_TransportMechTag( + m_mec_list.mechanism_list[i].transport_mech.tag)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" as_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" client_authentication_mech: " + + print_OID(m_mec_list.mechanism_list[i].as_context_mech.client_authentication_mech)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_name: " + + print_GSS_NT_ExportedName( + m_mec_list.mechanism_list[i].as_context_mech.target_name)); + + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" sas_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" privilege_authorities: " + + CSIComponent.print_PrivilegeAuthorities( + m_mec_list.mechanism_list[i].sas_context_mech.privilege_authorities)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_naming_mechanims: " + + print_OIDList( + m_mec_list.mechanism_list[i].sas_context_mech.supported_naming_mechanisms)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_identity_types: " + + print_IdentityTokenTypes( + m_mec_list.mechanism_list[i].sas_context_mech.supported_identity_types)); + } + return buffer.toString(); + } + + + + public static String print_PrivilegeAuthorities(ServiceConfiguration[] privilege_authorities) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < privilege_authorities.length; i++) { + print_buffer.print("\n \t \t \t sintax: " + privilege_authorities[i].syntax); + print_buffer.print("\n \t \t \t name: " + privilege_authorities[i].name); + } + + return buffer.toString(); + } + + public static String print_OID(byte[] oid) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t OID: "); + + for (int i = 0; i < oid.length; i++) { + String hex = Integer.toHexString(oid[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + } + + return buffer.toString(); + } + + + public static String print_OIDList(byte[][] oid_list) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < oid_list.length; i++) { + print_buffer.print(print_OID(oid_list[i])); + } + + return buffer.toString(); + } + + public static String print_IdentityTokenTypes(int type) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(type) { + case org.omg.CSI.ITTAbsent.value: + print_buffer.print("\n \t \t \t Absent"); + break; + case org.omg.CSI.ITTAnonymous.value: + print_buffer.print("\n \t \t \t Anonymous"); + break; + case org.omg.CSI.ITTPrincipalName.value: + print_buffer.print("\n \t \t \t PrincipalName"); + break; + case org.omg.CSI.ITTX509CertChain.value: + print_buffer.print("\n \t \t \t ITTX509CertChain"); + break; + case org.omg.CSI.ITTDistinguishedName.value: + print_buffer.print("\n \t \t \t ITTDistinguishedName"); + break; + } + return buffer.toString(); + } + + + public static String print_TransportMechTag(int tag) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(tag) { + case org.omg.IOP.TAG_SSL_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_SSL_SEC_TRANS"); + break; + case org.omg.IOP.TAG_TLS_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_TLS_SEC_TRANS"); + break; + case org.omg.IOP.TAG_NULL_TAG.value: + print_buffer.print("\n \t \t \t TAG_NULL_TAG"); + break; + } + return buffer.toString(); + } + + + public static String print_GSS_NT_ExportedName(byte[] name) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t "); + + for (int i = 0; i < name.length; i++) { + String hex = Integer.toHexString(name[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + + } + + return buffer.toString(); + + } + + +} diff --git a/source/es/tid/TIDorbj/core/iop/DefaultIOR.java b/source/es/tid/TIDorbj/core/iop/DefaultIOR.java new file mode 100644 index 0000000..9f0be19 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/DefaultIOR.java @@ -0,0 +1,136 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.NO_IMPLEMENT; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class DefaultIOR extends IOR { + + /** + * + */ + public DefaultIOR() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @param type_id + * @param profiles + */ + public DefaultIOR( String type_id, TaggedProfile[] profiles ) { + super( type_id, profiles ); + } + + public static IOR fromString(TIDORB orb, String ior_str) { + + int length = ior_str.length(); + if (((length % 2) != 0) || (length < 14)) + throw new INV_OBJREF("IOR format error: invalid ior length.", 0, + CompletionStatus.COMPLETED_NO); + if (!ior_str.startsWith("IOR:")) + throw new INV_OBJREF("Invalid IOR format id: \"IOR:\".", 0, + CompletionStatus.COMPLETED_NO); + + byte[] buffer = new byte[(length - 4) / 2]; + char[] ior_chars = ior_str.toCharArray(); + int j = 4; + try { + for (int i = 0; i < buffer.length; i++) + buffer[i] = + (byte) (16 * (Base16Codec.getValue(ior_chars[j++])) + + Base16Codec.getValue(ior_chars[j++])); + } + catch (Exception e) { + throw new INV_OBJREF(e.getMessage(), 0, + CompletionStatus.COMPLETED_NO); + } + // create the the ior with the new buffer + IOR ior = new DefaultIOR(); + + CDRInputStream internet_cdr = new CDRInputStream(orb, buffer); + + internet_cdr.setByteOrder(internet_cdr.read_boolean()); + + ior.read(internet_cdr); + + ior.toString = ior_str; + + return ior; + } + + public String toURL(){ + return toString(); + } + + public ObjectKey getObjectKey() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toObjectKeyAddress() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toProfileAddress() { + throw new NO_IMPLEMENT(); + } + + public TargetAddress toIORAddress() { + throw new NO_IMPLEMENT(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/IOR.java b/source/es/tid/TIDorbj/core/iop/IOR.java new file mode 100644 index 0000000..34f7901 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/IOR.java @@ -0,0 +1,311 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.portable.IDLEntity; +import org.omg.IOP.TAG_INTERNET_IOP; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.BufferCDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.ChunkCDR; +import es.tid.TIDorbj.core.comm.iiop.TargetAddress; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * Representation of an Internet Object Reference (IOR). An IOR is compounded + * by; + *
    + *
  • at least one TaggedProfile + *
  • the repositoryId of the reference + *
+ * In addition, the ior has its stringified representation and its marshaled + * value. + * + * @autor Juan A. Cáceres + * @version 2.0 + */ + +public abstract class IOR implements IDLEntity { /*extends org.omg.IOP.IOR*/ + + + private static IOR nullIOR; + + String toString; + + + public java.lang.String type_id; + public TaggedProfile[] profiles; + + + int hash_code = -1; + + public IOR() { + toString = null; + } + + public IOR(String type_id, TaggedProfile[] profiles) { + this.type_id = type_id; + this.profiles = profiles; + toString = null; + } + + public static IOR nullIOR() { + if ( nullIOR == null ) { + nullIOR = new DefaultIOR("", new TaggedProfile[0]){ + + }; + } + return nullIOR; + } + + public synchronized void addProfile(TaggedProfile profile) + { + if(this.profiles == null) { + this.profiles = new TaggedProfile[1]; + this.profiles[0] = profile; + } else { + TaggedProfile[] tmp = new TaggedProfile[this.profiles.length + 1]; + System.arraycopy(this.profiles, 0, tmp, 0, this.profiles.length); + tmp[this.profiles.length] = profile; + this.profiles = tmp; + } + this.toString = null; + } + + public synchronized void assign(IOR ior) { + if ( ior != null ) { + this.profiles = ior.profiles; + this.type_id = ior.type_id; + this.toString = ior.toString; + } else { + this.profiles = null; + this.type_id = null; + this.toString = null; + } + } + + public String getTypeId() { + return this.type_id; + } + + public int memberCount() { + return ( this.profiles == null )?0:this.profiles.length; + } + + public TaggedProfile getProfile(int index) { + return (index < 0) || (index >= profiles.length)? + null:profiles[index]; + } + + public boolean equivalent(IOR ior) { + if ((profiles == null) || (ior.profiles == null)) + return false; + + if (!type_id.equals(ior.type_id)) + return false; + + IOR ior_max, ior_min; + + if (memberCount() > ior.memberCount()) { + ior_max = this; + ior_min = ior; + } else { + ior_max = ior; + ior_min = this; + } + + int size_min = ior_min.memberCount(); + int size_max = ior_max.memberCount(); + + for (int i = 0; i < size_min; i++) { + if (ior_min.profiles[i].tag == TAG_INTERNET_IOP.value) { + for (int j = 0; j < size_max; j++) { + if (ior_max.profiles[j].tag == TAG_INTERNET_IOP.value) { + if ( ior_min.profiles[i].equal( ior_max.profiles[j] ) ){ + return true; + } + } + } + } + } + return false; + } + + public String toString() { + return toString(null); + } + + public int hashCode() { + if (hash_code == -1) { + hash_code = toString().hashCode(); + } + return hash_code; + } + + public synchronized String toString(TIDORB orb) { + if (toString == null) { + CDROutputStream ior_output = null; + + if (orb == null) { + ior_output = new CDROutputStream( + orb, + ConfORB.DEFAULT_BLOCK_SIZE + ); + } else { + ior_output = new CDROutputStream(orb, orb.m_conf.block_size); + } + + ior_output.write_boolean(ior_output.getByteOrder()); + + write(ior_output); + + // compound the buffer string + + BufferCDR cdr_buffer = ior_output.getBuffer(); + + int available = cdr_buffer.getAvailable(); + + char[] buffer = new char[(2 * available) + 4]; + + int i = 0; + buffer[i++] = 'I'; + buffer[i++] = 'O'; + buffer[i++] = 'R'; + buffer[i++] = ':'; + + int num_chunks = cdr_buffer.getNumAvailableChunks(); + + ChunkCDR cdr_chunk = null; + + int octet = 0; + int chunk_available; + byte[] ior_data; + + int chunk_no = 0; + + while (i < buffer.length) { + cdr_chunk = cdr_buffer.getChunk(chunk_no++); + chunk_available = cdr_chunk.getAvailable(); + ior_data = cdr_chunk.getBuffer(); + + for (int j = 0; j < chunk_available; j++) { + octet = ior_data[j]; + buffer[i++] = Base16Codec.toBase16[(octet & 0xf0) >> 4]; + buffer[i++] = Base16Codec.toBase16[octet & 0xf]; + } + } + + toString = new String(buffer); + } + + return toString; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) { + // write type_id + out.write_string(type_id); + + // write profiles sequence + + out.write_ulong(profiles.length); + + for (int i = 0; i < profiles.length; i++) { + ((TaggedProfile)profiles[i]).write(out); + } + } + + + public void read(CDRInputStream input) { + type_id = input.read_string(); + + int size = input.read_ulong(); + + if (size < 0) { + throw new INV_OBJREF("Invalid Profile sequence length.", 0, + CompletionStatus.COMPLETED_NO); + } + + profiles = new TaggedProfile[size]; + + int tag; + + for (int i = 0; i < profiles.length; i++) { + profiles[i] = TaggedProfileReader.read(input); + } + } + + + + public static void skip(CDRInputStream input) { + input.skipString(); + + int size = input.read_ulong(); + + if (size < 0) + throw new INV_OBJREF("Invalid Profile sequence length.", 0, + CompletionStatus.COMPLETED_NO); + + for (int i = 0; i < size; i++) { + TaggedProfile.skip(input); + } + + } + + public abstract String toURL(); + + + public abstract ObjectKey getObjectKey(); + + public abstract TargetAddress toObjectKeyAddress(); + + public abstract TargetAddress toProfileAddress(); + + public abstract TargetAddress toIORAddress(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/ORBComponent.java b/source/es/tid/TIDorbj/core/iop/ORBComponent.java new file mode 100644 index 0000000..60e886d --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/ORBComponent.java @@ -0,0 +1,113 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.ConfORB; +import org.omg.IOP.TAG_ORB_TYPE; + +/** + * ORBComponent data struct defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ORBComponent extends TaggedComponent +{ + + public int m_orb_type; + + public ORBComponent() + { + super(TAG_ORB_TYPE.value); + m_orb_type = 0; + } + + public ORBComponent(int type) + { + super(TAG_ORB_TYPE.value); + m_orb_type = type; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + out.write_ulong(m_orb_type); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_orb_type = input.read_ulong(); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + if (m_orb_type == ConfORB.ORB_TYPE.m_orb_type) { + print_buffer.print("ORB type ID: "); + print_buffer.print(m_orb_type); + print_buffer.print(" (TIDORB - Telefonica I+D)"); + } else { + print_buffer.print("ORB: "); + print_buffer.print(m_orb_type); + } + + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.java b/source/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.java new file mode 100644 index 0000000..11f6da3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/ProfileMultipleComponents.java @@ -0,0 +1,156 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.IOP.TAG_MULTIPLE_COMPONENTS; + +/** + * ProfileMultipleComponents sequence defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class ProfileMultipleComponents extends TaggedProfile +{ + + private TaggedComponent[] m_components; + + es.tid.TIDorbj.core.cdr.CDRInputStream m_profile_data; + + protected ProfileMultipleComponents() + { + super(TAG_MULTIPLE_COMPONENTS.value); + m_components = null; + m_profile_data = null; + } + + public ProfileMultipleComponents(TaggedComponent[] tagged_components) + { + super(TAG_MULTIPLE_COMPONENTS.value); + m_components = tagged_components; + } + + public TaggedComponent[] getTaggedComponents() + { + if (m_profile_data != null) + extract_members(); + return m_components; + } + + synchronized protected void extract_members() + { + if (m_profile_data == null) + throw new org.omg.CORBA.INTERNAL("Empty Profile"); + + m_profile_data.enterEncapsulation(); + + int size = m_profile_data.read_ulong(); + if (size < 0) + throw new org.omg.CORBA.MARSHAL("Invalid component size"); + if (size > 0) { + m_components = new TaggedComponent[size]; + for (int i = 0; i < size; i++) { + m_components[i] = TaggedComponentReader.read(m_profile_data); + } + } + + m_profile_data = null; + } + + public boolean equal( Object o ){ + ProfileMultipleComponents pfc; + if ( o instanceof ProfileMultipleComponents ){ + pfc = ( ProfileMultipleComponents )o; + } else { + pfc = null; + } + + if ( pfc == null ){ + return false; + } else { + throw new NO_IMPLEMENT(); + } + } + + synchronized public void + write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if (m_profile_data != null) { + extract_members(); + } + + // write tag + output.write_ulong(tag); + + // write profile data + + output.enterEncapsulation(); + + if (m_components == null) + output.write_ulong(0); + else { + output.write_ulong(m_components.length); + for (int i = 0; i < m_components.length; i++) + m_components[i].write(output); + } + + output.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_profile_data = input.copy(); + input.skipEncapsulation(); + + /* + * profile_data = input.copy(); + * + * profile_data.fix_starting(); + * + * int length = input.read_ulong(); + * + * for(int i = 0; i 0) { + print_buffer.print("\n \t \t \t NoProtection"); + } + if ( (mask & org.omg.Security.Integrity.value) > 0) { + print_buffer.print("\n \t \t \t Integrity"); + } + if ( (mask & org.omg.Security.Confidentiality.value) > 0) { + print_buffer.print("\n \t \t \t Confidentiality"); + } + if ( (mask & org.omg.Security.DetectReplay.value) > 0) { + print_buffer.print("\n \t \t \t DetectReplay"); + } + if ( (mask & org.omg.Security.DetectMisordering.value) > 0) { + print_buffer.print("\n \t \t \t DetectMisordering"); + } + if ( (mask & org.omg.Security.EstablishTrustInTarget.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInTarget"); + } + if ( (mask & org.omg.Security.EstablishTrustInClient.value) > 0) { + print_buffer.print("\n \t \t \t EstablishTrustInClient"); + } + if ( (mask & org.omg.Security.NoDelegation.value) > 0) { + print_buffer.print("\n \t \t \t NoDelegation"); + } + if ( (mask & org.omg.Security.SimpleDelegation.value) > 0) { + print_buffer.print("\n \t \t \t SimpleDelegation"); + } + if ( (mask & org.omg.Security.CompositeDelegation.value) > 0) { + print_buffer.print("\n \t \t \t CompositeDelegation"); + } + if ( (mask & org.omg.CSIIOP.IdentityAssertion.value) > 0) { + print_buffer.print("\n \t \t \t IdentityAssertion"); + } + if ( (mask & org.omg.CSIIOP.DelegationByClient.value) > 0) { + print_buffer.print("\n \t \t \t DelegationByClient"); + } + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/iop/TaggedComponent.java b/source/es/tid/TIDorbj/core/iop/TaggedComponent.java new file mode 100644 index 0000000..3a7261c --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/TaggedComponent.java @@ -0,0 +1,88 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +/** + * TaggedComponent structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public class TaggedComponent +{ + + public int m_tag; + + public es.tid.TIDorbj.core.cdr.Encapsulation m_component_data; + + public TaggedComponent(int tag) + { + m_tag = tag; + m_component_data = null; + } + + public TaggedComponent(int tag, + es.tid.TIDorbj.core.cdr.Encapsulation component_data) + { + m_tag = tag; + m_component_data = component_data; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + output.write_ulong(m_tag); + output.writeEncapsulation(m_component_data); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_component_data = input.readEncapsulation(); + } + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUlong(); //tag + input.skipEncapsulation(); // component_data + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/TaggedComponentReader.java b/source/es/tid/TIDorbj/core/iop/TaggedComponentReader.java new file mode 100644 index 0000000..1c38ff5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/TaggedComponentReader.java @@ -0,0 +1,92 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.IOP.TAG_ORB_TYPE; +import org.omg.IOP.TAG_POLICIES; +import org.omg.IOP.TAG_SSL_SEC_TRANS; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; + +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import es.tid.TIDorbj.core.security.CSIComponent; + +/** + * Helper class for read TaggedComponent structures. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class TaggedComponentReader +{ + + public static TaggedComponent + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int profile_id = input.read_ulong(); + + switch (profile_id) + { + case TAG_ORB_TYPE.value: + ORBComponent orb_component = new ORBComponent(); + orb_component.partialRead(input); + return orb_component; + case TAG_POLICIES.value: + PoliciesComponent policies = new PoliciesComponent(); + policies.partialRead(input); + return policies; + case TAG_SSL_SEC_TRANS.value: + SSLComponent ssl_component = new SSLComponent(); + ssl_component.partialRead(input); + return ssl_component; + case TAG_CSI_SEC_MECH_LIST.value: + CSIComponent csi_component = new CSIComponent(); + csi_component.partialRead(input); + return csi_component; + default: + TaggedComponent comp = new TaggedComponent(profile_id); + comp.partialRead(input); + return comp; + } + } +} diff --git a/source/es/tid/TIDorbj/core/iop/TaggedProfile.java b/source/es/tid/TIDorbj/core/iop/TaggedProfile.java new file mode 100644 index 0000000..bd83a32 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/TaggedProfile.java @@ -0,0 +1,89 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.portable.IDLEntity; + +/** + * TaggedProfile structure defined in the GIOP Module. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class TaggedProfile implements IDLEntity {/*extends org.omg.IOP.TaggedProfile {*/ + + + public int tag; + public byte[] profile_data; + + public TaggedProfile() {} + + public TaggedProfile(int tag, byte[] profile_data) { + this.tag = tag; + this.profile_data = profile_data; + } + + public TaggedProfile(int tag) { + this( tag, null ); + } + + public abstract boolean equal( Object profile ); + + public abstract void write( + es.tid.TIDorbj.core.cdr.CDROutputStream output + ); + + public abstract void partialRead( + es.tid.TIDorbj.core.cdr.CDRInputStream input + ); + + public static void skip(es.tid.TIDorbj.core.cdr.CDRInputStream input) { + // skip tag + input.skipUlong(); + // skip encapsulation + int encapsulation_size = input.read_ulong(); + input.skipOctetArray(encapsulation_size); + } + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/iop/TaggedProfileReader.java b/source/es/tid/TIDorbj/core/iop/TaggedProfileReader.java new file mode 100644 index 0000000..ebdc936 --- /dev/null +++ b/source/es/tid/TIDorbj/core/iop/TaggedProfileReader.java @@ -0,0 +1,87 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.iop; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.IOP.TAG_INTERNET_IOP; +import org.omg.IOP.TAG_MULTIPLE_COMPONENTS; + +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; + +/** + * Helper class for reading GIOP TaggedProfile. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +//TODO: maybe a TaggedProfile factory could help in generalizing profiles management +//generating profiles depending on the ID, each profile could read itself from the CDR input +public abstract class TaggedProfileReader +{ + + public static TaggedProfile + read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int profile_id = input.read_ulong(); + + switch (profile_id) + { + case TAG_INTERNET_IOP.value: + IIOPProfile profile_iiop = new IIOPProfile(); + profile_iiop.partialRead(input); + return profile_iiop; + case TAG_MULTIPLE_COMPONENTS.value: + ProfileMultipleComponents multi_comp = + new ProfileMultipleComponents(); + multi_comp.partialRead(input); + return multi_comp; + default: + throw new MARSHAL("Invalid Profile TAG.", + 0, + CompletionStatus.COMPLETED_NO); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/all-wcprops b/source/es/tid/TIDorbj/core/messaging/.svn/all-wcprops new file mode 100644 index 0000000..ac1327b --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/all-wcprops @@ -0,0 +1,119 @@ +K 25 +svn:wc:ra_dav:version-url +V 84 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging +END +RequestEndTimePolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.java +END +AMIManager.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMIManager.java +END +QoS.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/QoS.java +END +RebindPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.java +END +AMIManagerConf.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMIManagerConf.java +END +AMILockList.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMILockList.java +END +_ExceptionHolderImpl.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.java +END +AMIManagerConfListener.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.java +END +ThreadStateListener.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/ThreadStateListener.java +END +AMILock.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMILock.java +END +QueueOrderPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.java +END +AMILockEnumeration.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMILockEnumeration.java +END +RequestStartTimePolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.java +END +AMIThreadPool.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMIThreadPool.java +END +PoliciesComponent.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/PoliciesComponent.java +END +RelativeRoundtripTimeoutPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 124 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.java +END +RequestPriorityPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.java +END +RelativeRequestTimeoutPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 122 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.java +END +AMIThread.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging/AMIThread.java +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/entries b/source/es/tid/TIDorbj/core/messaging/.svn/entries new file mode 100644 index 0000000..3f0de54 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/entries @@ -0,0 +1,683 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/messaging +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + + + + + + + + +() + +RequestEndTimePolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +f93766e7e3f10151513977d626c0bffb +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3683 + +AMIManager.java +file + + + + +2010-04-28T11:50:13.000000Z +b48a105f3874db6cec8f771e6734ca88 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +4991 + +QoS.java +file + + + + +2009-05-27T14:10:34.000000Z +80d31d546da7f21e9bff0eb553704f74 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +8326 + +RebindPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +9410561d27ececfe6999c3802eadc06b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2833 + +AMIManagerConf.java +file + + + + +2009-05-27T14:10:34.000000Z +b3e6c98f04fd5f8b54ef0227d13bb8f3 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3987 + +AMILockList.java +file + + + + +2009-05-27T14:10:34.000000Z +0fbd8aa5de8a165c97f0fac0b9407229 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3894 + +AMIManagerConfListener.java +file + + + + +2009-05-27T12:24:00.000000Z +bd79a3fc5a48deb4303616d094ee15b1 +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1660 + +_ExceptionHolderImpl.java +file + + + + +2010-04-28T11:50:13.000000Z +ce5ec654c41a2508d18d9082805b073a +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +5111 + +ThreadStateListener.java +file + + + + +2009-05-27T12:24:00.000000Z +8e0e4e26409358fd3534c371627438c7 +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1846 + +AMILock.java +file + + + + +2010-04-28T11:50:13.000000Z +e3579a8f6dcee9bdbe5bd53e4ae63ec4 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +13843 + +QueueOrderPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +a4a149bd5febe522213846e46c710c1f +2009-01-07T08:56:41.327974Z +349 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3970 + +AMILockEnumeration.java +file + + + + +2009-05-27T12:24:00.000000Z +283c93d4125a25b9458e75bd7b4192ae +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1946 + +RequestStartTimePolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +f6fe2798f7d124020c383524193b12d0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3655 + +AMIThreadPool.java +file + + + + +2009-05-27T14:10:34.000000Z +b40c7a4c60cfc38e551f2dae7c1f81ea +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +5280 + +PoliciesComponent.java +file + + + + +2009-05-27T12:24:00.000000Z +aca1be7eef51ce444d2f49218aae7fe3 +2009-01-07T08:56:41.327974Z +349 +avega +has-props + + + + + + + + + + + + + + + + + + + + +3305 + +RelativeRoundtripTimeoutPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +9031dfff4cd31df769f5b920e0213dc5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3105 + +RequestPriorityPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +df4ef85fe5df5017e55a1b579d0584b4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2070 + +RelativeRequestTimeoutPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +f97577eed8a40114f330cfd417eb8557 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3299 + +AMIThread.java +file + + + + +2009-05-27T14:10:34.000000Z +b34c1ea189b6696adc09842746baf565 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +7160 + diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILock.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILock.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILock.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockEnumeration.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockEnumeration.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockEnumeration.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockList.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMILockList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManager.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConf.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConf.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConf.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConfListener.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConfListener.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIManagerConfListener.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThread.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThread.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThread.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThreadPool.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThreadPool.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/AMIThreadPool.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/PoliciesComponent.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/PoliciesComponent.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/PoliciesComponent.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QoS.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QoS.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QoS.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QueueOrderPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QueueOrderPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/QueueOrderPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RebindPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RebindPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RebindPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRequestTimeoutPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRequestTimeoutPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRequestTimeoutPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestEndTimePolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestEndTimePolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestEndTimePolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestPriorityPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestPriorityPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestPriorityPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestStartTimePolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestStartTimePolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/RequestStartTimePolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/ThreadStateListener.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/ThreadStateListener.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/ThreadStateListener.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/_ExceptionHolderImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/_ExceptionHolderImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/prop-base/_ExceptionHolderImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILock.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILock.java.svn-base new file mode 100644 index 0000000..d201ec4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMILock.java.svn-base @@ -0,0 +1,393 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import java.io.File; +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.portable.Streamable; +import org.omg.CORBA.portable.ValueFactory; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ExceptionHolder; +import org.omg.Messaging._ExceptionHolderHelper; + +import es.tid.CORBA.Any; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.OperationCompletion; + +/** + * Lock where the asynchronous requests stay until the complete response has been + * sent to ReplyHandler or the asynchronous response timeout has expired. + * + * + * + * @autor Irenka Redondo Granados + * @version 1.0 + */ + +public class AMILock +{ + + /** + * The Operation Completion Status. + */ + OperationCompletion m_state; + + /** + * Request identifier. This identifier will be the key for the connection + * thread to + */ + RequestId m_request_id; + + /** + * Asynchronous request + */ + RequestImpl m_request; + + GIOPFragmentedMessage message; + + /** + * Reference to ReplyHandler object which the response will be sent + */ + Object m_ami_handler; + + /** + * Asynchronous request's processing time + */ + long time; + + IIOPIOR m_ior; // ?????????? no se descripcion + + IIOPConnection m_conn; + + public AMILock() + { + m_request_id = null; + m_request = null; + message = null; + m_state = new OperationCompletion(); + m_ami_handler = null; + time = 0; + m_ior = null; + m_conn = null; + } + + public RequestId requestId() + { + return m_request_id; + } + + public void requestId(RequestId id) + { + m_request_id = id; + } + + public RequestImpl getRequest() + { + return m_request; + } + + public void setRequest(RequestImpl request) + { + m_request = request; + } + + public boolean getCompleted() + { + return m_state.isCompleted(); + } + + public void setCompleted() + { + m_state.setCompleted(); + } + + public void setMessage(GIOPFragmentedMessage msg) + { + message = msg; + } + + public GIOPFragmentedMessage getMessage() + { + return message; + } + + public void setHandler(Object handler) + { + m_ami_handler = handler; + } + + public Object getHandler() + { + return m_ami_handler; + } + + public void incrementTime (long inc) + { + time = +inc; + } + + public long getTime() + { + return time; + } + + public void setIor(IIOPIOR ior) + { + m_ior = ior; + } + + public IIOPIOR getIor() + { + return m_ior; + } + + public void putReply() { + + if (message == null) { + throw new INTERNAL("No Reply message"); + } + if (message.getHeader().getMsgType().m_value != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = (GIOPReplyMessage) message; + + m_request.setCompletedYes(); + + RequestImpl replyHandlerRequest; + org.omg.CORBA.Any $excep_holder; + _ExceptionHolder excepHolder; + + //Take the exception holder implementation class name + String idExcepHolder = idExcepHolder(m_ami_handler); + _ExceptionHolderImpl excepHolderFactory = + (_ExceptionHolderImpl) m_request.orb().lookup_value_factory(idExcepHolder); + + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + //funciona + /* + reply_message.extractArguments(m_request); + RequestImpl replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()); + if (m_request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_in_arg(); + $ami_return_val.read_value(m_request.return_value().create_input_stream(), m_request.return_value().type()); + } + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + }*/ + + replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()); + if (m_request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_named_in_arg("ami_return_val"); + $ami_return_val.type(m_request.return_value().type()); + } + NVListImpl.setOutParamsAsIn(m_request.arguments(), replyHandlerRequest); + reply_message.extractArgumentsForReplyHandler(replyHandlerRequest); + try { + replyHandlerRequest.invoke(); /// invoke or ther kind of invoke?? + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + break; + case ReplyStatusType._USER_EXCEPTION: + replyHandlerRequest = + (RequestImpl) m_ami_handler._request(m_request.operation() + "_excep"); + $excep_holder = replyHandlerRequest.add_named_in_arg("excep_holder"); + + _ExceptionHolderImpl excepHolder_impl = new _ExceptionHolderImpl(); + $excep_holder.type(excepHolder_impl._type()); + reply_message.extractUserException(excepHolder_impl); + + NVListImpl.setOutParamsAsIn(m_request.arguments(), replyHandlerRequest); + + _ExceptionHolderHelper.insert($excep_holder, + (org.omg.Messaging._ExceptionHolder)excepHolder_impl); + + + + + + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + e.printStackTrace(); + } + break; + case ReplyStatusType._SYSTEM_EXCEPTION: + replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()+"_excep"); + $excep_holder = replyHandlerRequest.add_named_in_arg("excep_holder"); + excepHolder = new _ExceptionHolderImpl(); + $excep_holder.type(excepHolder._type()); + //reply_message.extractSystemException(excepHolder); + $excep_holder.insert_Streamable(excepHolder); + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + //m_request.setSystemException(reply_message.extractSystemException()); + break; + /* + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + m_conn.sendRequest(m_request, m_ior, reply_message.extractAddressingDisposition()); + */ + } + + + } + + private String idExcepHolder (Object ami_handler) { + + if (ami_handler == null) + throw new INTERNAL("AMILock.idExcepHolder ami_handler is NULL"); + + String name = m_ami_handler.getClass().getName(); + String [] replyHandlerClassNameParts = name.split("\\."); + String nameClass = replyHandlerClassNameParts[replyHandlerClassNameParts.length-1]; + replyHandlerClassNameParts[replyHandlerClassNameParts.length-1] = + nameClass.substring(1, nameClass.length()-4); + String replyHandlerClassName = replyHandlerClassNameParts[0]; + + for (int i=1; i< replyHandlerClassNameParts.length; i++) + replyHandlerClassName = replyHandlerClassName + "." + replyHandlerClassNameParts[i]; + + Class replyHandlerClassHelper = null; + String idReplyHandler = null; + try { + replyHandlerClassHelper = Class.forName(replyHandlerClassName.concat("Helper"), + true, m_ami_handler.getClass().getClassLoader()); + Method methodId = replyHandlerClassHelper.getMethod("id",new Class[]{}); + idReplyHandler = (String) methodId.invoke(null,new java.lang.Object[]{}); + + //ReplyHandlerHelper rh = (ReplyHandlerHelper) replyHandlerClassHelper.getClass(); + } catch (ClassNotFoundException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchMethodException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + String [] idReplyHandlerParts = idReplyHandler.split(":"); + String [] handlerPath = idReplyHandlerParts[1].split("/"); + String excepHolderName = handlerPath[handlerPath.length - 1]; + excepHolderName = "_" + excepHolderName.substring(0, excepHolderName.length()-7) + + "ExceptionHolder"; + String excepHolderPath = ""; + for (int i=0; i this.m_max_threads) { + throw new + BAD_PARAM("min_threads can not be greater than max_threads."); + } + this.m_min_threads = min_threads; + if (m_listener != null) { + m_listener.minThreadsHasChanged(); + } + } + + synchronized public void setMaxThreads(int max_threads) + { + if (max_threads < this.m_min_threads) { + throw new + BAD_PARAM("max_threads can not be less than min_threads."); + } + this.m_max_threads = max_threads; + } + + synchronized public void setMaxQueuedRequests(int max_queued_requests) + { + if (max_queued_requests < this.m_max_queued_requests) { + throw new + BAD_PARAM("max_queued_requests can not be decreased."); + } + this.m_max_queued_requests = max_queued_requests; + } + + synchronized public void setStarvingTime(int millisecs) + { + if (millisecs < 0) { + throw new BAD_PARAM("starving_time can not be negative."); + } + this.m_starving_time = millisecs; + } + + synchronized public int getMaxQueuedRequests() + { + return m_max_queued_requests; + } + + synchronized public int getMaxThreads() + { + return m_max_threads; + } + + synchronized public int getMinThreads() + { + return m_min_threads; + } + + synchronized public int getStarvingTime() + { + return m_starving_time; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManagerConfListener.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManagerConfListener.java.svn-base new file mode 100644 index 0000000..a815fc7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIManagerConfListener.java.svn-base @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +public interface AMIManagerConfListener +{ + + void minThreadsHasChanged(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThread.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThread.java.svn-base new file mode 100644 index 0000000..8d3d71b --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThread.java.svn-base @@ -0,0 +1,214 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.Trace; + +/** + * Execution thread. Gets request from the request queue and executes them. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class AMIThread extends Thread +{ + + private AMIManager m_ami_manager = null; + + private AMILockList m_ami_lock_list = null; + + private boolean m_deactivated = false; + + private ThreadStateListener m_thread_state_listener = null; + + private String m_thread_name; + + private TIDORB m_orb; + + private Trace m_trace; + + + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this ExecThread belongs. + * @param number + * Id number of this ExecThread. + */ + protected AMIThread(AMIManager amiManager) + { + m_ami_manager = amiManager; + m_ami_lock_list = m_ami_manager.getAMILockList(); + m_orb = m_ami_manager.m_orb; + m_trace = m_orb.m_trace; + } + + /** + * Set the ThreadStateListener. Any AMIThread should have a listener + * (eventually the AMIThreadPool) before it is started. + * + * @param l + * The listener. + */ + protected void setThreadStateListener(ThreadStateListener l) + { + m_thread_state_listener = l; + } + + /** + * Checks the state of the POAManager. If the state is ACTIVE, then finish + * returning true. If the state is HOLDING, then wait until state is + * diferent from HOLDING. If the state is DISCARDING, then discard the + * request and return false. If the state is INACTIVE, then reject the + * request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + /*private boolean checkState( QueuedRequest request ) { + + boolean executeRequest = false; + + if (m_trace != null) { + String[] msg = { toString(), " checking state of ", + m_ami_manager.toString() }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + synchronized (m_ami_manager.m_state_mutex) { + boolean exit = false; + while (!exit) { + State state = m_poa_manager.get_state(); + if ((state == State.ACTIVE) && !request.getMustDiscard()) { + exit = true; + executeRequest = true; + } else if (state == State.HOLDING) { + try { + // wait until state changes + m_poa_manager.m_state_mutex.wait(); + } catch (InterruptedException ie) {} + exit = false; + } else if (state == State.INACTIVE) { + // MISSING: define strategy for deactivated POAManagers + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } else if ( state == State.DISCARDING || + request.getMustDiscard() ){ + //TODO: trace removed, restore it at each implementation + //TODO: change method signature to return possible errors + //in state check + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } + } + } + return executeRequest; + }*/ + + /** + * Execution loop. + */ + public void run() + { + + while (!m_deactivated) { + + try { + + if (m_trace != null) { + String[] msg = { toString(), ": sending AMI reply..." }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + AMILock ami_lock = m_ami_lock_list.getFirstReady(); + + if (ami_lock != null) { + // If there is a response ready, then go!! + m_thread_state_listener.setActive(this); + ami_lock.putReply(); + m_thread_state_listener.setInactive(this); + + } else if (m_thread_state_listener.threadCanDie(this)) { + // If restarted and no request, then commit suicide + m_deactivated = true; + } + + } + catch (Throwable unhandledException) { + // Unhandled exception. Should never happen!! + if (m_trace != null) { + m_trace.printStackTrace(Trace.DEBUG, + toString() + "Unhanled Exception ", + unhandledException); + m_trace.print(Trace.DEBUG, toString() + " dies..."); + } + m_deactivated = true; + } + } + m_thread_state_listener.threadHasDied(this); + } + + /** + * @return Returns the string representation of this Thread. + */ + public synchronized String toString() + { + if (m_thread_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append(super.toString()); + buffer.append(" in "); + buffer.append(m_ami_manager.toString()); + m_thread_name = buffer.toString(); + buffer = null; + } + return m_thread_name; + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThreadPool.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThreadPool.java.svn-base new file mode 100644 index 0000000..13c3be7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/AMIThreadPool.java.svn-base @@ -0,0 +1,191 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import java.util.Vector; + +import es.tid.TIDorbj.core.poa.QueueReaderManager; +import es.tid.TIDorbj.util.Trace; + +/** + * Pool of threads for asynchronous responses. + * + * @autor Irenka Redondo + * @version 1.0 + */ +public class AMIThreadPool + implements QueueReaderManager, ThreadStateListener, AMIManagerConfListener +{ + + private Vector m_pool = null; + + private AMIManager m_ami_manager = null; + + private int m_used = 0; + + private int m_active = 0; + + private boolean m_deactivated = false; + + /** + * Constructor. + * + * @param amiManager + * The AMIManager which this thread pool belongs to. + */ + public AMIThreadPool(AMIManager amiManager) + { + m_pool = new Vector(); + m_ami_manager = amiManager; + } + + /** + * Test if another thread should be created. + * + * @return Returns true if another thread has been started, false otherwise. + */ + synchronized public boolean createNewReader() + { + if ((m_used == m_active) + &&(m_used < m_ami_manager.m_conf.getMaxThreads())) { + createThread(); + return true; + } + return false; + } + + synchronized private void createThread() + { + AMIThread t = new AMIThread(m_ami_manager); + m_pool.addElement(t); + t.setThreadStateListener(this); + t.setDaemon(false); + t.start(); + m_used++; + + if (m_ami_manager.m_orb.m_trace != null) { + String[] msg = + { "New thread created, ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_ami_manager.m_conf.getMaxThreads()), + " , min ", + Integer.toString(m_ami_manager.m_conf.getMinThreads()), + ")" + }; + m_ami_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + /** + * Counts the number of active threads (increment). + * + * @param t + * Thread that becomes active. + */ + synchronized public void setActive(Thread t) + { + m_active++; + } + + /** + * Counts the number of active threads (decrement). + * + * @param t + * Thread that becomes inactive. + */ + synchronized public void setInactive(Thread t) + { + m_active--; + } + + /** + * Clean up when a thread dies. + * + * @param t + * Thread that has died. + */ + synchronized public void threadHasDied(Thread t) + { + m_pool.removeElement(t); + m_used--; + if (m_ami_manager.m_orb.m_trace != null) { + String[] msg = + { + "Finalization of thread ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_ami_manager.m_conf.getMaxThreads()), + ", min ", + Integer.toString(m_ami_manager.m_conf.getMinThreads()), + ")" + }; + m_ami_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + synchronized public void deactivation() + { + m_deactivated = true; + } + + synchronized public boolean threadCanDie(Thread t) + { + if (m_deactivated) + return true; + else + return (m_used > m_ami_manager.m_conf.getMinThreads()); + } + + synchronized public void minThreadsHasChanged() + { + while (m_used < m_ami_manager.m_conf.getMinThreads()) { + createThread(); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/PoliciesComponent.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/PoliciesComponent.java.svn-base new file mode 100644 index 0000000..d56f980 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/PoliciesComponent.java.svn-base @@ -0,0 +1,121 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + + +import org.omg.IOP.TAG_POLICIES; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +import java.io.StringWriter; +import java.io.PrintWriter; + +/** + * Supported Qos Policines defined in CORBA Messaging module + * @author caceres + * + */ +public class PoliciesComponent extends TaggedComponent +{ + private PolicyContext policies; + + + public PoliciesComponent() { + super(TAG_POLICIES.value); + this.policies = null; + } + + public PoliciesComponent(PolicyContext policies) { + super(TAG_POLICIES.value); + this.policies = policies; + } + + public void partialRead(CDRInputStream input) + { + policies = new PolicyContext(null); + + input.enterEncapsulation(); + + policies.partialRead(input); + + input.exitEncapsulation(); + + } + + + public void write(CDROutputStream output) + { + output.write_ulong(TAG_POLICIES.value); + + // enter ecapsulation + + output.enterEncapsulation(); + + if(policies == null) { + output.write_ulong(0); + } else { + policies.write(output); + } + + output.exitEncapsulation(); + + + } + + public PolicyContext getPolicies() + { + return policies; + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + policies.dump(print_buffer); + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QoS.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QoS.java.svn-base new file mode 100644 index 0000000..3ff06af --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QoS.java.svn-base @@ -0,0 +1,260 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.Messaging.*; +import org.omg.TimeBase.UtcT; + + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.util.UTC; + +/** + * Supported Qos Policines defined in CORBA Messaging module + * @author caceres + * + */ +public class QoS +{ + /** + * Get the RequestEnd time from the RequestEndTimePolicy and + * the RelativeRoundtripPolicy + * @param context + * @return + */ + public static RequestEndTimePolicy + getEffectiveRequestEndTimePolicy(PolicyContext context) + { + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + RelativeRoundtripTimeoutPolicy relativeRountripTimeoutPolicy = + context.getRelativeRoundtripTimeoutPolicy(); + + if(relativeRountripTimeoutPolicy == null) { + return requestEndTimePolicy; + } else { + + long endTime = UTC.toTimeT(UTC.currentUtcTimeMillis()) + + relativeRountripTimeoutPolicy.relative_expiry(); + + if((requestEndTimePolicy != null) + && (endTime > requestEndTimePolicy.end_time().time) ) { + return requestEndTimePolicy; + } else { + return new RequestEndTimePolicyImpl(endTime); + } + + } + } + + + + + /** + * Checks if the request can be sent and the time while the sender can be + * waiting for the response. + * This operation sleeps the time until the RequestStartTimePolicy + * allows the invocation. + * @param orb The ORB + * @return the time to wait the response + * @throws org.omg.CORBA.TIMEOUT if the request time has expired + */ + public static long checkRequestTime(TIDORB orb, + PolicyContext context) + { + RequestStartTimePolicy requestStartTimePolicy= + context.getRequestStartTimePolicy(); + + long currentTime = 0; + + if(requestStartTimePolicy != null) { + currentTime = UTC.currentUtcTimeMillis(); + checkStart(orb, context, currentTime); + } + + long requestTimeout = + getEffectiveRequestTimeoutInMillis(context, currentTime); + + + if(requestTimeout < 0) { + String msg = + "QoS RequestEndTimePolicy/RelativeRountripTimeoutPolicy exceeded"; + msg += " " + requestTimeout; + throw new org.omg.CORBA.TIMEOUT(msg); + } else { + return requestTimeout; + } + + + + } + + + /** + * @param orb + * @param currentTime in ns. + * @return the time to wait the request in ms. (greather or equal than 0) + */ + private static long getEffectiveRequestTimeoutInMillis(PolicyContext context, + long currentTime) + { + RelativeRoundtripTimeoutPolicy relativeRountripTimeoutPolicy = + context.getRelativeRoundtripTimeoutPolicy(); + + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + + if(requestEndTimePolicy == null) { + if(relativeRountripTimeoutPolicy != null) { + return UTC.toTimeInMillis( + relativeRountripTimeoutPolicy.relative_expiry()); + } else { + return 0; + } + } else { + if(currentTime == 0) { + currentTime = UTC.currentUtcTimeMillis(); + } + + long endTimeout = + UTC.toTimeInMillis(requestEndTimePolicy.end_time().time) + - currentTime; + + if(relativeRountripTimeoutPolicy != null) { + long relativeTimeout = + UTC.toTimeInMillis(relativeRountripTimeoutPolicy.relative_expiry()); + return (endTimeout < relativeTimeout)? endTimeout : relativeTimeout; + } else { + return endTimeout; + } + } + } + + /** + * @param orb + * @param currentTime + * @param startTimePolicy + * @return + */ + private static boolean checkStart(TIDORB orb, + PolicyContext context, + long currentTime) + { + RequestStartTimePolicy requestStartTimePolicy = + context.getRequestStartTimePolicy(); + + // UtcT.time is in order of 100 ns. (1 ns = 10^6 ms.) 100 ns = 10^4 + + long startTime = + UTC.toTimeInMillis(requestStartTimePolicy.start_time().time); + + long sleepMillis = startTime - currentTime; + + if(sleepMillis > 0) { + + try { + Thread.sleep(sleepMillis); + } + catch (InterruptedException e) { + if(orb.m_trace != null ) { + String msg = + "QoS: Request has received an InterruptedException "; + + orb.printTrace( Trace.ERROR, msg); + } + } + + if(orb.m_trace != null ) { + String[] msg = + {"QoS: Request has slept ", + Long.toString(sleepMillis), + " ms. util Messaging::RequestStartTimePolicy value" + }; + + orb.printTrace( Trace.DEEP_DEBUG, msg); + } + + return true; + } + + return false; + } + + + /** + * Validates QoS RequestEndTimePolicy in the ServerSide + * @param policySupplier + * @param trace + * @return + */ + public static boolean validateServerRequestEndTimePolicy(PolicyContext context) + { + if(context == null) { + return true; + } + + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + + if(requestEndTimePolicy == null) { + return true; + } else { + long current_time = UTC.currentUtcTimeMillis(); + UtcT utc_time = requestEndTimePolicy.end_time(); + // Request TIMEOUT? + if(current_time > UTC.toTimeInMillis(utc_time.time)) { + + return false; + } + + return true; + } + + } + + + + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QueueOrderPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QueueOrderPolicyImpl.java.svn-base new file mode 100644 index 0000000..c380911 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/QueueOrderPolicyImpl.java.svn-base @@ -0,0 +1,141 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.OrderingHelper; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.Messaging.QueueOrderPolicyHelper; +import org.omg.Messaging.QueueOrderPolicyLocalBase; +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_DEADLINE; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + * + */ +public class QueueOrderPolicyImpl extends QueueOrderPolicyLocalBase +{ + + short allowedOrders; + + + + /** + * @param allowedOrders + */ + public QueueOrderPolicyImpl(short allowedOrders) + { + super(); + this.allowedOrders = allowedOrders; + } + public short allowed_orders() + { + return allowedOrders; + } + + public int policy_type() + { + return QUEUE_ORDER_POLICY_TYPE.value; + } + + public Policy copy() + { + return new QueueOrderPolicyImpl(this.allowedOrders); + } + + + public void destroy() { + + } + + public static QueueOrderPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + short policy_value = OrderingHelper.extract(val); + + return new QueueOrderPolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static QueueOrderPolicyImpl read(CDRInputStream input) + { + short policy_value = input.read_short(); + + if( (policy_value != ORDER_ANY.value) && + (policy_value != ORDER_TEMPORAL.value) && + (policy_value != ORDER_PRIORITY.value) && + (policy_value != ORDER_DEADLINE.value) ) { + throw new MARSHAL(); + } + + return new QueueOrderPolicyImpl(policy_value); + } + + /** + * @param output + * @param queueOrderPolicy + */ + public static void write(CDROutputStream output, + QueueOrderPolicy queueOrderPolicy) + { + output.write_ushort(queueOrderPolicy.allowed_orders()); + + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RebindPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RebindPolicyImpl.java.svn-base new file mode 100644 index 0000000..1e0936e --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RebindPolicyImpl.java.svn-base @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RebindModeHelper; +import org.omg.Messaging.RebindPolicy; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RebindPolicyImpl extends org.omg.Messaging.RebindPolicyLocalBase +{ + + short m_value; + + public RebindPolicyImpl(short val) + { + m_value = val; + } + + public short rebind_mode() + { + return m_value; + } + + public int policy_type() + { + return org.omg.Messaging.REBIND_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RebindPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RebindPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + short policy_value = RebindModeHelper.extract(val); + + return new RebindPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static void write(CDROutputStream output, RebindPolicy policy) { + RebindModeHelper.write(output, policy.rebind_mode()); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRequestTimeoutPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRequestTimeoutPolicyImpl.java.svn-base new file mode 100644 index 0000000..aff7b1a --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRequestTimeoutPolicyImpl.java.svn-base @@ -0,0 +1,112 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RelativeRequestTimeoutPolicy; +import org.omg.TimeBase.TimeTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RelativeRequestTimeoutPolicyImpl + extends org.omg.Messaging.RelativeRequestTimeoutPolicyLocalBase +{ + + long m_value; + + public RelativeRequestTimeoutPolicyImpl(long val) + { + m_value = val; + } + + public long relative_expiry() + { + return m_value; + } + + public int policy_type() + { + return org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RelativeRequestTimeoutPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static void write(CDROutputStream output, + RelativeRequestTimeoutPolicy policy) + { + TimeTHelper.write(output, policy.relative_expiry()); + } + + public static RelativeRequestTimeoutPolicyImpl read(CDRInputStream input) + { + long policy_value = input.read_ulong(); + return new RelativeRequestTimeoutPolicyImpl(policy_value); + } + + public static RelativeRequestTimeoutPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + long policy_value = org.omg.TimeBase.TimeTHelper.extract(val); + + return new RelativeRequestTimeoutPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base new file mode 100644 index 0000000..760b47e --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RelativeRoundtripTimeoutPolicyImpl.java.svn-base @@ -0,0 +1,109 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicy; +import org.omg.TimeBase.TimeTHelper; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RelativeRoundtripTimeoutPolicyImpl + extends org.omg.Messaging.RelativeRoundtripTimeoutPolicyLocalBase +{ + + long m_value; + + public RelativeRoundtripTimeoutPolicyImpl(long val) + { + m_value = val; + } + + public long relative_expiry() + { + return m_value; + } + + public int policy_type() + { + return RELATIVE_RT_TIMEOUT_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RelativeRoundtripTimeoutPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RelativeRoundtripTimeoutPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + long policy_value = org.omg.TimeBase.TimeTHelper.extract(val); + + return new RelativeRoundtripTimeoutPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static void write(CDROutputStream output, + RelativeRoundtripTimeoutPolicy policy) + { + + TimeTHelper.write(output, policy.relative_expiry()); + } + + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestEndTimePolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestEndTimePolicyImpl.java.svn-base new file mode 100644 index 0000000..1b6ec33 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestEndTimePolicyImpl.java.svn-base @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2005 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.RequestEndTimePolicy; +import org.omg.Messaging.RequestEndTimePolicyLocalBase; +import org.omg.TimeBase.UtcT; +import org.omg.TimeBase.UtcTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + * + */ +public class RequestEndTimePolicyImpl extends RequestEndTimePolicyLocalBase +{ + UtcT endTime; + + /** + * @param time + */ + public RequestEndTimePolicyImpl(UtcT time) + { + endTime = time; + } + + + + /** + * @param endTime + */ + public RequestEndTimePolicyImpl(long endTime) + { + this.endTime = new UtcT(); + this.endTime.time = endTime; + } + + + + public UtcT end_time() + { + return endTime; + } + + + public int policy_type() + { + return REQUEST_END_TIME_POLICY_TYPE.value; + } + + + public void destroy() + { + + } + + public Policy copy() + { + return new RequestEndTimePolicyImpl(endTime); + } + + + + /** + * @param input + * @return + */ + public static Policy read(CDRInputStream input) + { + UtcT end_time = UtcTHelper.read(input); + return new RequestEndTimePolicyImpl(end_time); + } + + /** + * @param output + * @param policy + */ + public static void write(CDROutputStream output, + RequestEndTimePolicy policy) + { + UtcTHelper.write(output, policy.end_time()); + } + + public static RequestEndTimePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + UtcT policy_value = org.omg.TimeBase.UtcTHelper.extract(val); + + return new RequestEndTimePolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestPriorityPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestPriorityPolicyImpl.java.svn-base new file mode 100644 index 0000000..5e72f6a --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestPriorityPolicyImpl.java.svn-base @@ -0,0 +1,87 @@ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.PriorityRange; +import org.omg.Messaging.PriorityRangeHelper; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.RequestPriorityPolicy; +import org.omg.Messaging.RequestPriorityPolicyLocalBase; + + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + */ +public class RequestPriorityPolicyImpl extends RequestPriorityPolicyLocalBase +{ + PriorityRange range; + + + /** + * @param range + */ + public RequestPriorityPolicyImpl(PriorityRange range) + { + this.range = range; + } + public PriorityRange priority_range() + { + return range; + } + + public int policy_type() + { + + return REQUEST_PRIORITY_POLICY_TYPE.value; + } + + public Policy copy() + { + return this; + } + + + public void destroy() + { + + } + + public static void write(CDROutputStream output, + RequestPriorityPolicy policy) + { + PriorityRangeHelper.write(output, policy.priority_range()); + } + + public static RequestPriorityPolicyImpl read(CDRInputStream input) + { + PriorityRange policy_value = PriorityRangeHelper.read(input); + + if(policy_value.min > policy_value.max) { + throw new MARSHAL(); + } + + return new RequestPriorityPolicyImpl(policy_value); + } + + public static RequestPriorityPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + PriorityRange policy_value = PriorityRangeHelper.extract(val); + + return new RequestPriorityPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestStartTimePolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestStartTimePolicyImpl.java.svn-base new file mode 100644 index 0000000..2d0b675 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/RequestStartTimePolicyImpl.java.svn-base @@ -0,0 +1,132 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2005 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.Messaging.RequestStartTimePolicy; +import org.omg.Messaging.RequestStartTimePolicyHelper; +import org.omg.Messaging.RequestStartTimePolicyLocalBase; +import org.omg.TimeBase.UtcT; +import org.omg.TimeBase.UtcTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + */ + +public class RequestStartTimePolicyImpl extends RequestStartTimePolicyLocalBase +{ + UtcT startTime; + + /** + * @param time + */ + public RequestStartTimePolicyImpl(UtcT time) + { + startTime = time; + + + } + + public UtcT start_time() + { + return startTime; + } + + + public int policy_type() + { + return REQUEST_START_TIME_POLICY_TYPE.value; + } + + + + public void destroy() + { + + } + + public Policy copy() + { + return new RequestStartTimePolicyImpl(startTime); + } + + public static void write(CDROutputStream output, Policy policy) + { + RequestStartTimePolicy start_policy = + RequestStartTimePolicyHelper.narrow(policy); + + UtcTHelper.write(output, start_policy.start_time()); + } + + /** + * @param input + * @return + */ + public static RequestStartTimePolicyImpl read(CDRInputStream input) + { + UtcT end_time = UtcTHelper.read(input); + return new RequestStartTimePolicyImpl(end_time); + } + + public static RequestStartTimePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + UtcT policy_value = org.omg.TimeBase.UtcTHelper.extract(val); + + return new RequestStartTimePolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/ThreadStateListener.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/ThreadStateListener.java.svn-base new file mode 100644 index 0000000..cb80a19 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/ThreadStateListener.java.svn-base @@ -0,0 +1,62 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +/** + * Listener of thread state changes. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +interface ThreadStateListener +{ + + boolean threadCanDie(Thread t); + + void threadHasDied(Thread t); + + void setActive(Thread t); + + void setInactive(Thread t); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/.svn/text-base/_ExceptionHolderImpl.java.svn-base b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/_ExceptionHolderImpl.java.svn-base new file mode 100644 index 0000000..a07b4b6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/.svn/text-base/_ExceptionHolderImpl.java.svn-base @@ -0,0 +1,159 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.messaging; + +import java.io.Serializable; +import java.util.Properties; + +import org.omg.CORBA.portable.ValueFactory; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.Messaging._ExceptionHolder; +import org.omg.IOP.CodecPackage.InvalidTypeForEncoding; +import org.omg.IOP.CodecPackage.FormatMismatch; +import org.omg.IOP.*; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA.UserException; + + +public class _ExceptionHolderImpl extends _ExceptionHolder + +{ + + public _ExceptionHolderImpl() { + is_system_exception = false; + byte_order = false; + marshaled_exception = new byte[0]; + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream is) { + + is.fixStarting(); + + // parsear el nombre de la excepcion + String name = is.read_string(); + is.rewind(); + + // TODO: Leer el typecode + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[0]; + org.omg.CORBA.TypeCode _type = + is.orb().create_exception_tc(name, "UserException", members); + + org.omg.CORBA.Any any = is.orb().create_any(); + any.read_value(is, _type); + + byte_order = is.getByteOrder(); + + + try { + // Obtiene codec factory + String[] args = { "", "" }; + Properties props = new Properties(); + props.put("org.omg.CORBA.ORBClass","es.tid.TIDorbj.core.TIDORB"); + + org.omg.CORBA.Object obj = + org.omg.CORBA.ORB.init(args, props).resolve_initial_references("CodecFactory"); + CodecFactory codec_factory = CodecFactoryHelper.narrow(obj); + + // Crea codec + Encoding encoding = new Encoding(); + encoding.format = ENCODING_CDR_ENCAPS.value; + encoding.major_version = 1; + encoding.minor_version = 2; + Codec codec = codec_factory.create_codec(encoding); + + marshaled_exception = codec.encode(any); + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public void raise_exception() + throws org.omg.CORBA.UserException + { + org.omg.CORBA.Any any = null; + try { + + // Obtiene codec factory + String[] args = { "", "" }; + Properties props = new Properties(); + props.put("org.omg.CORBA.ORBClass","es.tid.TIDorbj.core.TIDORB"); + + org.omg.CORBA.Object obj = + org.omg.CORBA.ORB.init(args,props).resolve_initial_references("CodecFactory"); + CodecFactory codec_factory = CodecFactoryHelper.narrow(obj); + + // Crea codec + Encoding encoding = new Encoding(); + encoding.format = ENCODING_CDR_ENCAPS.value; + encoding.major_version = 1; + encoding.minor_version = 2; + Codec codec = codec_factory.create_codec(encoding); + + any = codec.decode(marshaled_exception); + + } catch (FormatMismatch e) { + e.printStackTrace(); + throw new MARSHAL(); + } catch (Exception e) { + throw new MARSHAL(); + } + + + // TODO: how throw UserException contained in Any?? + throw new UnknownUserException(any); + } + + + public void raise_exception_with_list(org.omg.CORBA.TypeCode[] exc_list) + throws org.omg.CORBA.UserException + { + throw new NO_IMPLEMENT(); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/messaging/AMILock.java b/source/es/tid/TIDorbj/core/messaging/AMILock.java new file mode 100644 index 0000000..ee3ae86 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/AMILock.java @@ -0,0 +1,393 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import java.io.File; +import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.Object; +import org.omg.CORBA.Request; +import org.omg.CORBA.SystemException; +import org.omg.CORBA.portable.Streamable; +import org.omg.CORBA.portable.ValueFactory; +import org.omg.Messaging.ReplyHandler; +import org.omg.Messaging.ReplyHandlerHelper; +import org.omg.Messaging._ExceptionHolder; +import org.omg.Messaging._ExceptionHolderHelper; + +import es.tid.CORBA.Any; +import es.tid.TIDorbj.core.NVListImpl; +import es.tid.TIDorbj.core.RequestImpl; +import es.tid.TIDorbj.core.comm.ForwardRequest; +import es.tid.TIDorbj.core.comm.giop.GIOPFragmentedMessage; +import es.tid.TIDorbj.core.comm.giop.GIOPReplyMessage; +import es.tid.TIDorbj.core.comm.giop.MsgType; +import es.tid.TIDorbj.core.comm.giop.ReplyStatusType; +import es.tid.TIDorbj.core.comm.giop.RequestId; +import es.tid.TIDorbj.core.comm.iiop.IIOPConnection; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.util.OperationCompletion; + +/** + * Lock where the asynchronous requests stay until the complete response has been + * sent to ReplyHandler or the asynchronous response timeout has expired. + * + * + * + * @autor Irenka Redondo Granados + * @version 1.0 + */ + +public class AMILock +{ + + /** + * The Operation Completion Status. + */ + OperationCompletion m_state; + + /** + * Request identifier. This identifier will be the key for the connection + * thread to + */ + RequestId m_request_id; + + /** + * Asynchronous request + */ + RequestImpl m_request; + + GIOPFragmentedMessage message; + + /** + * Reference to ReplyHandler object which the response will be sent + */ + Object m_ami_handler; + + /** + * Asynchronous request's processing time + */ + long time; + + IIOPIOR m_ior; // ?????????? no se descripcion + + IIOPConnection m_conn; + + public AMILock() + { + m_request_id = null; + m_request = null; + message = null; + m_state = new OperationCompletion(); + m_ami_handler = null; + time = 0; + m_ior = null; + m_conn = null; + } + + public RequestId requestId() + { + return m_request_id; + } + + public void requestId(RequestId id) + { + m_request_id = id; + } + + public RequestImpl getRequest() + { + return m_request; + } + + public void setRequest(RequestImpl request) + { + m_request = request; + } + + public boolean getCompleted() + { + return m_state.isCompleted(); + } + + public void setCompleted() + { + m_state.setCompleted(); + } + + public void setMessage(GIOPFragmentedMessage msg) + { + message = msg; + } + + public GIOPFragmentedMessage getMessage() + { + return message; + } + + public void setHandler(Object handler) + { + m_ami_handler = handler; + } + + public Object getHandler() + { + return m_ami_handler; + } + + public void incrementTime (long inc) + { + time = +inc; + } + + public long getTime() + { + return time; + } + + public void setIor(IIOPIOR ior) + { + m_ior = ior; + } + + public IIOPIOR getIor() + { + return m_ior; + } + + public void putReply() { + + if (message == null) { + throw new INTERNAL("No Reply message"); + } + if (message.getHeader().getMsgType().m_value != MsgType._Reply) { + throw new MARSHAL("No Reply message received"); + } + + GIOPReplyMessage reply_message = (GIOPReplyMessage) message; + + m_request.setCompletedYes(); + + RequestImpl replyHandlerRequest; + org.omg.CORBA.Any $excep_holder; + _ExceptionHolder excepHolder; + + //Take the exception holder implementation class name + String idExcepHolder = idExcepHolder(m_ami_handler); + _ExceptionHolderImpl excepHolderFactory = + (_ExceptionHolderImpl) m_request.orb().lookup_value_factory(idExcepHolder); + + + switch (reply_message.replyStatus().value()) + { + case ReplyStatusType._NO_EXCEPTION: + //funciona + /* + reply_message.extractArguments(m_request); + RequestImpl replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()); + if (m_request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_in_arg(); + $ami_return_val.read_value(m_request.return_value().create_input_stream(), m_request.return_value().type()); + } + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + }*/ + + replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()); + if (m_request.result() != null) { + org.omg.CORBA.Any $ami_return_val = replyHandlerRequest.add_named_in_arg("ami_return_val"); + $ami_return_val.type(m_request.return_value().type()); + } + NVListImpl.setOutParamsAsIn(m_request.arguments(), replyHandlerRequest); + reply_message.extractArgumentsForReplyHandler(replyHandlerRequest); + try { + replyHandlerRequest.invoke(); /// invoke or ther kind of invoke?? + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + break; + case ReplyStatusType._USER_EXCEPTION: + replyHandlerRequest = + (RequestImpl) m_ami_handler._request(m_request.operation() + "_excep"); + $excep_holder = replyHandlerRequest.add_named_in_arg("excep_holder"); + + _ExceptionHolderImpl excepHolder_impl = new _ExceptionHolderImpl(); + $excep_holder.type(excepHolder_impl._type()); + reply_message.extractUserException(excepHolder_impl); + + NVListImpl.setOutParamsAsIn(m_request.arguments(), replyHandlerRequest); + + _ExceptionHolderHelper.insert($excep_holder, + (org.omg.Messaging._ExceptionHolder)excepHolder_impl); + + + + + + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + e.printStackTrace(); + } + break; + case ReplyStatusType._SYSTEM_EXCEPTION: + replyHandlerRequest = (RequestImpl) m_ami_handler._request(m_request.operation()+"_excep"); + $excep_holder = replyHandlerRequest.add_named_in_arg("excep_holder"); + excepHolder = new _ExceptionHolderImpl(); + $excep_holder.type(excepHolder._type()); + //reply_message.extractSystemException(excepHolder); + $excep_holder.insert_Streamable(excepHolder); + try { + replyHandlerRequest.invoke(); + } catch (SystemException e) { + String operationName = replyHandlerRequest.operation(); + operationName = operationName.substring(1, operationName.length()); + replyHandlerRequest.setOperationName(operationName); + replyHandlerRequest.invoke(); + } + //m_request.setSystemException(reply_message.extractSystemException()); + break; + /* + case ReplyStatusType._LOCATION_FORWARD: + { + IOR forward_ior = reply_message.extractForward(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._LOCATION_FORWARD_PERM: + { + IOR forward_ior = reply_message.extractForwardPerm(); + throw new ForwardRequest(forward_ior); + } + case ReplyStatusType._NEEDS_ADDRESSING_MODE: + m_conn.sendRequest(m_request, m_ior, reply_message.extractAddressingDisposition()); + */ + } + + + } + + private String idExcepHolder (Object ami_handler) { + + if (ami_handler == null) + throw new INTERNAL("AMILock.idExcepHolder ami_handler is NULL"); + + String name = m_ami_handler.getClass().getName(); + String [] replyHandlerClassNameParts = name.split("\\."); + String nameClass = replyHandlerClassNameParts[replyHandlerClassNameParts.length-1]; + replyHandlerClassNameParts[replyHandlerClassNameParts.length-1] = + nameClass.substring(1, nameClass.length()-4); + String replyHandlerClassName = replyHandlerClassNameParts[0]; + + for (int i=1; i< replyHandlerClassNameParts.length; i++) + replyHandlerClassName = replyHandlerClassName + "." + replyHandlerClassNameParts[i]; + + Class replyHandlerClassHelper = null; + String idReplyHandler = null; + try { + replyHandlerClassHelper = Class.forName(replyHandlerClassName.concat("Helper"), + true, m_ami_handler.getClass().getClassLoader()); + Method methodId = replyHandlerClassHelper.getMethod("id",new Class[]{}); + idReplyHandler = (String) methodId.invoke(null,new java.lang.Object[]{}); + + //ReplyHandlerHelper rh = (ReplyHandlerHelper) replyHandlerClassHelper.getClass(); + } catch (ClassNotFoundException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchMethodException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + String [] idReplyHandlerParts = idReplyHandler.split(":"); + String [] handlerPath = idReplyHandlerParts[1].split("/"); + String excepHolderName = handlerPath[handlerPath.length - 1]; + excepHolderName = "_" + excepHolderName.substring(0, excepHolderName.length()-7) + + "ExceptionHolder"; + String excepHolderPath = ""; + for (int i=0; i this.m_max_threads) { + throw new + BAD_PARAM("min_threads can not be greater than max_threads."); + } + this.m_min_threads = min_threads; + if (m_listener != null) { + m_listener.minThreadsHasChanged(); + } + } + + synchronized public void setMaxThreads(int max_threads) + { + if (max_threads < this.m_min_threads) { + throw new + BAD_PARAM("max_threads can not be less than min_threads."); + } + this.m_max_threads = max_threads; + } + + synchronized public void setMaxQueuedRequests(int max_queued_requests) + { + if (max_queued_requests < this.m_max_queued_requests) { + throw new + BAD_PARAM("max_queued_requests can not be decreased."); + } + this.m_max_queued_requests = max_queued_requests; + } + + synchronized public void setStarvingTime(int millisecs) + { + if (millisecs < 0) { + throw new BAD_PARAM("starving_time can not be negative."); + } + this.m_starving_time = millisecs; + } + + synchronized public int getMaxQueuedRequests() + { + return m_max_queued_requests; + } + + synchronized public int getMaxThreads() + { + return m_max_threads; + } + + synchronized public int getMinThreads() + { + return m_min_threads; + } + + synchronized public int getStarvingTime() + { + return m_starving_time; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.java b/source/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.java new file mode 100644 index 0000000..2c51bb6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/AMIManagerConfListener.java @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 8 $ +* Date: $Date: 2006-01-24 17:36:46 +0100 (Tue, 24 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +public interface AMIManagerConfListener +{ + + void minThreadsHasChanged(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/AMIThread.java b/source/es/tid/TIDorbj/core/messaging/AMIThread.java new file mode 100644 index 0000000..4759163 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/AMIThread.java @@ -0,0 +1,214 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.Trace; + +/** + * Execution thread. Gets request from the request queue and executes them. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class AMIThread extends Thread +{ + + private AMIManager m_ami_manager = null; + + private AMILockList m_ami_lock_list = null; + + private boolean m_deactivated = false; + + private ThreadStateListener m_thread_state_listener = null; + + private String m_thread_name; + + private TIDORB m_orb; + + private Trace m_trace; + + + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this ExecThread belongs. + * @param number + * Id number of this ExecThread. + */ + protected AMIThread(AMIManager amiManager) + { + m_ami_manager = amiManager; + m_ami_lock_list = m_ami_manager.getAMILockList(); + m_orb = m_ami_manager.m_orb; + m_trace = m_orb.m_trace; + } + + /** + * Set the ThreadStateListener. Any AMIThread should have a listener + * (eventually the AMIThreadPool) before it is started. + * + * @param l + * The listener. + */ + protected void setThreadStateListener(ThreadStateListener l) + { + m_thread_state_listener = l; + } + + /** + * Checks the state of the POAManager. If the state is ACTIVE, then finish + * returning true. If the state is HOLDING, then wait until state is + * diferent from HOLDING. If the state is DISCARDING, then discard the + * request and return false. If the state is INACTIVE, then reject the + * request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + /*private boolean checkState( QueuedRequest request ) { + + boolean executeRequest = false; + + if (m_trace != null) { + String[] msg = { toString(), " checking state of ", + m_ami_manager.toString() }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + synchronized (m_ami_manager.m_state_mutex) { + boolean exit = false; + while (!exit) { + State state = m_poa_manager.get_state(); + if ((state == State.ACTIVE) && !request.getMustDiscard()) { + exit = true; + executeRequest = true; + } else if (state == State.HOLDING) { + try { + // wait until state changes + m_poa_manager.m_state_mutex.wait(); + } catch (InterruptedException ie) {} + exit = false; + } else if (state == State.INACTIVE) { + // MISSING: define strategy for deactivated POAManagers + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } else if ( state == State.DISCARDING || + request.getMustDiscard() ){ + //TODO: trace removed, restore it at each implementation + //TODO: change method signature to return possible errors + //in state check + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } + } + } + return executeRequest; + }*/ + + /** + * Execution loop. + */ + public void run() + { + + while (!m_deactivated) { + + try { + + if (m_trace != null) { + String[] msg = { toString(), ": sending AMI reply..." }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + AMILock ami_lock = m_ami_lock_list.getFirstReady(); + + if (ami_lock != null) { + // If there is a response ready, then go!! + m_thread_state_listener.setActive(this); + ami_lock.putReply(); + m_thread_state_listener.setInactive(this); + + } else if (m_thread_state_listener.threadCanDie(this)) { + // If restarted and no request, then commit suicide + m_deactivated = true; + } + + } + catch (Throwable unhandledException) { + // Unhandled exception. Should never happen!! + if (m_trace != null) { + m_trace.printStackTrace(Trace.DEBUG, + toString() + "Unhanled Exception ", + unhandledException); + m_trace.print(Trace.DEBUG, toString() + " dies..."); + } + m_deactivated = true; + } + } + m_thread_state_listener.threadHasDied(this); + } + + /** + * @return Returns the string representation of this Thread. + */ + public synchronized String toString() + { + if (m_thread_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append(super.toString()); + buffer.append(" in "); + buffer.append(m_ami_manager.toString()); + m_thread_name = buffer.toString(); + buffer = null; + } + return m_thread_name; + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/AMIThreadPool.java b/source/es/tid/TIDorbj/core/messaging/AMIThreadPool.java new file mode 100644 index 0000000..d3680b3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/AMIThreadPool.java @@ -0,0 +1,191 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import java.util.Vector; + +import es.tid.TIDorbj.core.poa.QueueReaderManager; +import es.tid.TIDorbj.util.Trace; + +/** + * Pool of threads for asynchronous responses. + * + * @autor Irenka Redondo + * @version 1.0 + */ +public class AMIThreadPool + implements QueueReaderManager, ThreadStateListener, AMIManagerConfListener +{ + + private Vector m_pool = null; + + private AMIManager m_ami_manager = null; + + private int m_used = 0; + + private int m_active = 0; + + private boolean m_deactivated = false; + + /** + * Constructor. + * + * @param amiManager + * The AMIManager which this thread pool belongs to. + */ + public AMIThreadPool(AMIManager amiManager) + { + m_pool = new Vector(); + m_ami_manager = amiManager; + } + + /** + * Test if another thread should be created. + * + * @return Returns true if another thread has been started, false otherwise. + */ + synchronized public boolean createNewReader() + { + if ((m_used == m_active) + &&(m_used < m_ami_manager.m_conf.getMaxThreads())) { + createThread(); + return true; + } + return false; + } + + synchronized private void createThread() + { + AMIThread t = new AMIThread(m_ami_manager); + m_pool.addElement(t); + t.setThreadStateListener(this); + t.setDaemon(false); + t.start(); + m_used++; + + if (m_ami_manager.m_orb.m_trace != null) { + String[] msg = + { "New thread created, ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_ami_manager.m_conf.getMaxThreads()), + " , min ", + Integer.toString(m_ami_manager.m_conf.getMinThreads()), + ")" + }; + m_ami_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + /** + * Counts the number of active threads (increment). + * + * @param t + * Thread that becomes active. + */ + synchronized public void setActive(Thread t) + { + m_active++; + } + + /** + * Counts the number of active threads (decrement). + * + * @param t + * Thread that becomes inactive. + */ + synchronized public void setInactive(Thread t) + { + m_active--; + } + + /** + * Clean up when a thread dies. + * + * @param t + * Thread that has died. + */ + synchronized public void threadHasDied(Thread t) + { + m_pool.removeElement(t); + m_used--; + if (m_ami_manager.m_orb.m_trace != null) { + String[] msg = + { + "Finalization of thread ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_ami_manager.m_conf.getMaxThreads()), + ", min ", + Integer.toString(m_ami_manager.m_conf.getMinThreads()), + ")" + }; + m_ami_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + synchronized public void deactivation() + { + m_deactivated = true; + } + + synchronized public boolean threadCanDie(Thread t) + { + if (m_deactivated) + return true; + else + return (m_used > m_ami_manager.m_conf.getMinThreads()); + } + + synchronized public void minThreadsHasChanged() + { + while (m_used < m_ami_manager.m_conf.getMinThreads()) { + createThread(); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/PoliciesComponent.java b/source/es/tid/TIDorbj/core/messaging/PoliciesComponent.java new file mode 100644 index 0000000..49b5be0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/PoliciesComponent.java @@ -0,0 +1,121 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 349 $ +* Date: $Date: 2009-01-07 09:56:41 +0100 (Wed, 07 Jan 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + + +import org.omg.IOP.TAG_POLICIES; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.policy.PolicyContext; + +import java.io.StringWriter; +import java.io.PrintWriter; + +/** + * Supported Qos Policines defined in CORBA Messaging module + * @author caceres + * + */ +public class PoliciesComponent extends TaggedComponent +{ + private PolicyContext policies; + + + public PoliciesComponent() { + super(TAG_POLICIES.value); + this.policies = null; + } + + public PoliciesComponent(PolicyContext policies) { + super(TAG_POLICIES.value); + this.policies = policies; + } + + public void partialRead(CDRInputStream input) + { + policies = new PolicyContext(null); + + input.enterEncapsulation(); + + policies.partialRead(input); + + input.exitEncapsulation(); + + } + + + public void write(CDROutputStream output) + { + output.write_ulong(TAG_POLICIES.value); + + // enter ecapsulation + + output.enterEncapsulation(); + + if(policies == null) { + output.write_ulong(0); + } else { + policies.write(output); + } + + output.exitEncapsulation(); + + + } + + public PolicyContext getPolicies() + { + return policies; + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + policies.dump(print_buffer); + return buffer.toString(); + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/QoS.java b/source/es/tid/TIDorbj/core/messaging/QoS.java new file mode 100644 index 0000000..111e1cd --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/QoS.java @@ -0,0 +1,260 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.Messaging.*; +import org.omg.TimeBase.UtcT; + + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.util.UTC; + +/** + * Supported Qos Policines defined in CORBA Messaging module + * @author caceres + * + */ +public class QoS +{ + /** + * Get the RequestEnd time from the RequestEndTimePolicy and + * the RelativeRoundtripPolicy + * @param context + * @return + */ + public static RequestEndTimePolicy + getEffectiveRequestEndTimePolicy(PolicyContext context) + { + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + RelativeRoundtripTimeoutPolicy relativeRountripTimeoutPolicy = + context.getRelativeRoundtripTimeoutPolicy(); + + if(relativeRountripTimeoutPolicy == null) { + return requestEndTimePolicy; + } else { + + long endTime = UTC.toTimeT(UTC.currentUtcTimeMillis()) + + relativeRountripTimeoutPolicy.relative_expiry(); + + if((requestEndTimePolicy != null) + && (endTime > requestEndTimePolicy.end_time().time) ) { + return requestEndTimePolicy; + } else { + return new RequestEndTimePolicyImpl(endTime); + } + + } + } + + + + + /** + * Checks if the request can be sent and the time while the sender can be + * waiting for the response. + * This operation sleeps the time until the RequestStartTimePolicy + * allows the invocation. + * @param orb The ORB + * @return the time to wait the response + * @throws org.omg.CORBA.TIMEOUT if the request time has expired + */ + public static long checkRequestTime(TIDORB orb, + PolicyContext context) + { + RequestStartTimePolicy requestStartTimePolicy= + context.getRequestStartTimePolicy(); + + long currentTime = 0; + + if(requestStartTimePolicy != null) { + currentTime = UTC.currentUtcTimeMillis(); + checkStart(orb, context, currentTime); + } + + long requestTimeout = + getEffectiveRequestTimeoutInMillis(context, currentTime); + + + if(requestTimeout < 0) { + String msg = + "QoS RequestEndTimePolicy/RelativeRountripTimeoutPolicy exceeded"; + msg += " " + requestTimeout; + throw new org.omg.CORBA.TIMEOUT(msg); + } else { + return requestTimeout; + } + + + + } + + + /** + * @param orb + * @param currentTime in ns. + * @return the time to wait the request in ms. (greather or equal than 0) + */ + private static long getEffectiveRequestTimeoutInMillis(PolicyContext context, + long currentTime) + { + RelativeRoundtripTimeoutPolicy relativeRountripTimeoutPolicy = + context.getRelativeRoundtripTimeoutPolicy(); + + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + + if(requestEndTimePolicy == null) { + if(relativeRountripTimeoutPolicy != null) { + return UTC.toTimeInMillis( + relativeRountripTimeoutPolicy.relative_expiry()); + } else { + return 0; + } + } else { + if(currentTime == 0) { + currentTime = UTC.currentUtcTimeMillis(); + } + + long endTimeout = + UTC.toTimeInMillis(requestEndTimePolicy.end_time().time) + - currentTime; + + if(relativeRountripTimeoutPolicy != null) { + long relativeTimeout = + UTC.toTimeInMillis(relativeRountripTimeoutPolicy.relative_expiry()); + return (endTimeout < relativeTimeout)? endTimeout : relativeTimeout; + } else { + return endTimeout; + } + } + } + + /** + * @param orb + * @param currentTime + * @param startTimePolicy + * @return + */ + private static boolean checkStart(TIDORB orb, + PolicyContext context, + long currentTime) + { + RequestStartTimePolicy requestStartTimePolicy = + context.getRequestStartTimePolicy(); + + // UtcT.time is in order of 100 ns. (1 ns = 10^6 ms.) 100 ns = 10^4 + + long startTime = + UTC.toTimeInMillis(requestStartTimePolicy.start_time().time); + + long sleepMillis = startTime - currentTime; + + if(sleepMillis > 0) { + + try { + Thread.sleep(sleepMillis); + } + catch (InterruptedException e) { + if(orb.m_trace != null ) { + String msg = + "QoS: Request has received an InterruptedException "; + + orb.printTrace( Trace.ERROR, msg); + } + } + + if(orb.m_trace != null ) { + String[] msg = + {"QoS: Request has slept ", + Long.toString(sleepMillis), + " ms. util Messaging::RequestStartTimePolicy value" + }; + + orb.printTrace( Trace.DEEP_DEBUG, msg); + } + + return true; + } + + return false; + } + + + /** + * Validates QoS RequestEndTimePolicy in the ServerSide + * @param policySupplier + * @param trace + * @return + */ + public static boolean validateServerRequestEndTimePolicy(PolicyContext context) + { + if(context == null) { + return true; + } + + RequestEndTimePolicy requestEndTimePolicy = + context.getRequestEndTimePolicy(); + + if(requestEndTimePolicy == null) { + return true; + } else { + long current_time = UTC.currentUtcTimeMillis(); + UtcT utc_time = requestEndTimePolicy.end_time(); + // Request TIMEOUT? + if(current_time > UTC.toTimeInMillis(utc_time.time)) { + + return false; + } + + return true; + } + + } + + + + +} diff --git a/source/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.java new file mode 100644 index 0000000..23eacf4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/QueueOrderPolicyImpl.java @@ -0,0 +1,141 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 349 $ +* Date: $Date: 2009-01-07 09:56:41 +0100 (Wed, 07 Jan 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.OrderingHelper; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.Messaging.QueueOrderPolicyHelper; +import org.omg.Messaging.QueueOrderPolicyLocalBase; +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_DEADLINE; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + * + */ +public class QueueOrderPolicyImpl extends QueueOrderPolicyLocalBase +{ + + short allowedOrders; + + + + /** + * @param allowedOrders + */ + public QueueOrderPolicyImpl(short allowedOrders) + { + super(); + this.allowedOrders = allowedOrders; + } + public short allowed_orders() + { + return allowedOrders; + } + + public int policy_type() + { + return QUEUE_ORDER_POLICY_TYPE.value; + } + + public Policy copy() + { + return new QueueOrderPolicyImpl(this.allowedOrders); + } + + + public void destroy() { + + } + + public static QueueOrderPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + short policy_value = OrderingHelper.extract(val); + + return new QueueOrderPolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static QueueOrderPolicyImpl read(CDRInputStream input) + { + short policy_value = input.read_short(); + + if( (policy_value != ORDER_ANY.value) && + (policy_value != ORDER_TEMPORAL.value) && + (policy_value != ORDER_PRIORITY.value) && + (policy_value != ORDER_DEADLINE.value) ) { + throw new MARSHAL(); + } + + return new QueueOrderPolicyImpl(policy_value); + } + + /** + * @param output + * @param queueOrderPolicy + */ + public static void write(CDROutputStream output, + QueueOrderPolicy queueOrderPolicy) + { + output.write_ushort(queueOrderPolicy.allowed_orders()); + + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.java new file mode 100644 index 0000000..34b992d --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RebindPolicyImpl.java @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RebindModeHelper; +import org.omg.Messaging.RebindPolicy; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RebindPolicyImpl extends org.omg.Messaging.RebindPolicyLocalBase +{ + + short m_value; + + public RebindPolicyImpl(short val) + { + m_value = val; + } + + public short rebind_mode() + { + return m_value; + } + + public int policy_type() + { + return org.omg.Messaging.REBIND_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RebindPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RebindPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + short policy_value = RebindModeHelper.extract(val); + + return new RebindPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static void write(CDROutputStream output, RebindPolicy policy) { + RebindModeHelper.write(output, policy.rebind_mode()); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.java new file mode 100644 index 0000000..e07554b --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RelativeRequestTimeoutPolicyImpl.java @@ -0,0 +1,112 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RelativeRequestTimeoutPolicy; +import org.omg.TimeBase.TimeTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RelativeRequestTimeoutPolicyImpl + extends org.omg.Messaging.RelativeRequestTimeoutPolicyLocalBase +{ + + long m_value; + + public RelativeRequestTimeoutPolicyImpl(long val) + { + m_value = val; + } + + public long relative_expiry() + { + return m_value; + } + + public int policy_type() + { + return org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RelativeRequestTimeoutPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static void write(CDROutputStream output, + RelativeRequestTimeoutPolicy policy) + { + TimeTHelper.write(output, policy.relative_expiry()); + } + + public static RelativeRequestTimeoutPolicyImpl read(CDRInputStream input) + { + long policy_value = input.read_ulong(); + return new RelativeRequestTimeoutPolicyImpl(policy_value); + } + + public static RelativeRequestTimeoutPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + long policy_value = org.omg.TimeBase.TimeTHelper.extract(val); + + return new RelativeRequestTimeoutPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.java new file mode 100644 index 0000000..c5666ce --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RelativeRoundtripTimeoutPolicyImpl.java @@ -0,0 +1,109 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicy; +import org.omg.TimeBase.TimeTHelper; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +public class RelativeRoundtripTimeoutPolicyImpl + extends org.omg.Messaging.RelativeRoundtripTimeoutPolicyLocalBase +{ + + long m_value; + + public RelativeRoundtripTimeoutPolicyImpl(long val) + { + m_value = val; + } + + public long relative_expiry() + { + return m_value; + } + + public int policy_type() + { + return RELATIVE_RT_TIMEOUT_POLICY_TYPE.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RelativeRoundtripTimeoutPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RelativeRoundtripTimeoutPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + long policy_value = org.omg.TimeBase.TimeTHelper.extract(val); + + return new RelativeRoundtripTimeoutPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + public static void write(CDROutputStream output, + RelativeRoundtripTimeoutPolicy policy) + { + + TimeTHelper.write(output, policy.relative_expiry()); + } + + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.java new file mode 100644 index 0000000..f214abd --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RequestEndTimePolicyImpl.java @@ -0,0 +1,145 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2005 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.RequestEndTimePolicy; +import org.omg.Messaging.RequestEndTimePolicyLocalBase; +import org.omg.TimeBase.UtcT; +import org.omg.TimeBase.UtcTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + * + */ +public class RequestEndTimePolicyImpl extends RequestEndTimePolicyLocalBase +{ + UtcT endTime; + + /** + * @param time + */ + public RequestEndTimePolicyImpl(UtcT time) + { + endTime = time; + } + + + + /** + * @param endTime + */ + public RequestEndTimePolicyImpl(long endTime) + { + this.endTime = new UtcT(); + this.endTime.time = endTime; + } + + + + public UtcT end_time() + { + return endTime; + } + + + public int policy_type() + { + return REQUEST_END_TIME_POLICY_TYPE.value; + } + + + public void destroy() + { + + } + + public Policy copy() + { + return new RequestEndTimePolicyImpl(endTime); + } + + + + /** + * @param input + * @return + */ + public static Policy read(CDRInputStream input) + { + UtcT end_time = UtcTHelper.read(input); + return new RequestEndTimePolicyImpl(end_time); + } + + /** + * @param output + * @param policy + */ + public static void write(CDROutputStream output, + RequestEndTimePolicy policy) + { + UtcTHelper.write(output, policy.end_time()); + } + + public static RequestEndTimePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + UtcT policy_value = org.omg.TimeBase.UtcTHelper.extract(val); + + return new RequestEndTimePolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.java new file mode 100644 index 0000000..5e72f6a --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RequestPriorityPolicyImpl.java @@ -0,0 +1,87 @@ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.PriorityRange; +import org.omg.Messaging.PriorityRangeHelper; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.RequestPriorityPolicy; +import org.omg.Messaging.RequestPriorityPolicyLocalBase; + + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + */ +public class RequestPriorityPolicyImpl extends RequestPriorityPolicyLocalBase +{ + PriorityRange range; + + + /** + * @param range + */ + public RequestPriorityPolicyImpl(PriorityRange range) + { + this.range = range; + } + public PriorityRange priority_range() + { + return range; + } + + public int policy_type() + { + + return REQUEST_PRIORITY_POLICY_TYPE.value; + } + + public Policy copy() + { + return this; + } + + + public void destroy() + { + + } + + public static void write(CDROutputStream output, + RequestPriorityPolicy policy) + { + PriorityRangeHelper.write(output, policy.priority_range()); + } + + public static RequestPriorityPolicyImpl read(CDRInputStream input) + { + PriorityRange policy_value = PriorityRangeHelper.read(input); + + if(policy_value.min > policy_value.max) { + throw new MARSHAL(); + } + + return new RequestPriorityPolicyImpl(policy_value); + } + + public static RequestPriorityPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + PriorityRange policy_value = PriorityRangeHelper.extract(val); + + return new RequestPriorityPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.java b/source/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.java new file mode 100644 index 0000000..4dca4a9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/RequestStartTimePolicyImpl.java @@ -0,0 +1,132 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2005 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.Messaging.RequestStartTimePolicy; +import org.omg.Messaging.RequestStartTimePolicyHelper; +import org.omg.Messaging.RequestStartTimePolicyLocalBase; +import org.omg.TimeBase.UtcT; +import org.omg.TimeBase.UtcTHelper; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * @author caceres + */ + +public class RequestStartTimePolicyImpl extends RequestStartTimePolicyLocalBase +{ + UtcT startTime; + + /** + * @param time + */ + public RequestStartTimePolicyImpl(UtcT time) + { + startTime = time; + + + } + + public UtcT start_time() + { + return startTime; + } + + + public int policy_type() + { + return REQUEST_START_TIME_POLICY_TYPE.value; + } + + + + public void destroy() + { + + } + + public Policy copy() + { + return new RequestStartTimePolicyImpl(startTime); + } + + public static void write(CDROutputStream output, Policy policy) + { + RequestStartTimePolicy start_policy = + RequestStartTimePolicyHelper.narrow(policy); + + UtcTHelper.write(output, start_policy.start_time()); + } + + /** + * @param input + * @return + */ + public static RequestStartTimePolicyImpl read(CDRInputStream input) + { + UtcT end_time = UtcTHelper.read(input); + return new RequestStartTimePolicyImpl(end_time); + } + + public static RequestStartTimePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + UtcT policy_value = org.omg.TimeBase.UtcTHelper.extract(val); + + return new RequestStartTimePolicyImpl(policy_value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/messaging/ThreadStateListener.java b/source/es/tid/TIDorbj/core/messaging/ThreadStateListener.java new file mode 100644 index 0000000..afdb5be --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/ThreadStateListener.java @@ -0,0 +1,62 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 8 $ +* Date: $Date: 2006-01-24 17:36:46 +0100 (Tue, 24 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.messaging; + +/** + * Listener of thread state changes. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +interface ThreadStateListener +{ + + boolean threadCanDie(Thread t); + + void threadHasDied(Thread t); + + void setActive(Thread t); + + void setInactive(Thread t); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.java b/source/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.java new file mode 100644 index 0000000..1603582 --- /dev/null +++ b/source/es/tid/TIDorbj/core/messaging/_ExceptionHolderImpl.java @@ -0,0 +1,159 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.messaging; + +import java.io.Serializable; +import java.util.Properties; + +import org.omg.CORBA.portable.ValueFactory; +import org.omg.CORBA_2_3.portable.InputStream; +import org.omg.Messaging._ExceptionHolder; +import org.omg.IOP.CodecPackage.InvalidTypeForEncoding; +import org.omg.IOP.CodecPackage.FormatMismatch; +import org.omg.IOP.*; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA.UserException; + + +public class _ExceptionHolderImpl extends _ExceptionHolder + +{ + + public _ExceptionHolderImpl() { + is_system_exception = false; + byte_order = false; + marshaled_exception = new byte[0]; + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream is) { + + is.fixStarting(); + + // parsear el nombre de la excepcion + String name = is.read_string(); + is.rewind(); + + // TODO: Leer el typecode + org.omg.CORBA.StructMember[] members = new org.omg.CORBA.StructMember[0]; + org.omg.CORBA.TypeCode _type = + is.orb().create_exception_tc(name, "UserException", members); + + org.omg.CORBA.Any any = is.orb().create_any(); + any.read_value(is, _type); + + byte_order = is.getByteOrder(); + + + try { + // Obtiene codec factory + String[] args = { "", "" }; + Properties props = new Properties(); + props.put("org.omg.CORBA.ORBClass","es.tid.TIDorbj.core.TIDORB"); + + org.omg.CORBA.Object obj = + org.omg.CORBA.ORB.init(args, props).resolve_initial_references("CodecFactory"); + CodecFactory codec_factory = CodecFactoryHelper.narrow(obj); + + // Crea codec + Encoding encoding = new Encoding(); + encoding.format = ENCODING_CDR_ENCAPS.value; + encoding.major_version = 1; + encoding.minor_version = 2; + Codec codec = codec_factory.create_codec(encoding); + + marshaled_exception = codec.encode(any); + + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public void raise_exception() + throws org.omg.CORBA.UserException + { + org.omg.CORBA.Any any = null; + try { + + // Obtiene codec factory + String[] args = { "", "" }; + Properties props = new Properties(); + props.put("org.omg.CORBA.ORBClass","es.tid.TIDorbj.core.TIDORB"); + + org.omg.CORBA.Object obj = + org.omg.CORBA.ORB.init(args,props).resolve_initial_references("CodecFactory"); + CodecFactory codec_factory = CodecFactoryHelper.narrow(obj); + + // Crea codec + Encoding encoding = new Encoding(); + encoding.format = ENCODING_CDR_ENCAPS.value; + encoding.major_version = 1; + encoding.minor_version = 2; + Codec codec = codec_factory.create_codec(encoding); + + any = codec.decode(marshaled_exception); + + } catch (FormatMismatch e) { + e.printStackTrace(); + throw new MARSHAL(); + } catch (Exception e) { + throw new MARSHAL(); + } + + + // TODO: how throw UserException contained in Any?? + throw new UnknownUserException(any); + } + + + public void raise_exception_with_list(org.omg.CORBA.TypeCode[] exc_list) + throws org.omg.CORBA.UserException + { + throw new NO_IMPLEMENT(); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/all-wcprops b/source/es/tid/TIDorbj/core/poa/.svn/all-wcprops new file mode 100644 index 0000000..db00fae --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/all-wcprops @@ -0,0 +1,143 @@ +K 25 +svn:wc:ra_dav:version-url +V 78 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa +END +ActiveObjectMap.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/ActiveObjectMap.java +END +ThreadPool.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/ThreadPool.java +END +POAImpl.java +K 25 +svn:wc:ra_dav:version-url +V 91 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/POAImpl.java +END +QueuedRequest.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/QueuedRequest.java +END +QueueReaderManager.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/QueueReaderManager.java +END +CurrentImpl.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/CurrentImpl.java +END +QueuedResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/QueuedResponseHandler.java +END +DeadlineRequestComparator.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.java +END +OID.java +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/OID.java +END +ExecThread.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/ExecThread.java +END +ServantDelegate.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/ServantDelegate.java +END +ThreadStateListener.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/ThreadStateListener.java +END +SystemOID.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/SystemOID.java +END +POAManagerConf.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/POAManagerConf.java +END +PriorityRequestComparator.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/PriorityRequestComparator.java +END +TemporalRequestComparator.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/TemporalRequestComparator.java +END +CompletionWaiter.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/CompletionWaiter.java +END +POAManagerConfListener.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/POAManagerConfListener.java +END +POAKey.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/POAKey.java +END +POAManagerImpl.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/POAManagerImpl.java +END +RequestQueue.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/RequestQueue.java +END +QueuedLocateResponseHandler.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.java +END +CurrentInfo.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/CurrentInfo.java +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/entries b/source/es/tid/TIDorbj/core/poa/.svn/entries new file mode 100644 index 0000000..f991e7a --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/entries @@ -0,0 +1,813 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +ActiveObjectMap.java +file + + + + +2009-05-27T12:24:01.000000Z +22574b5e507bd127d0f2349134054f60 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8768 + +ThreadPool.java +file + + + + +2009-05-27T12:24:01.000000Z +b67dd05c64e25a265881282d92a3eb08 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5189 + +QueuedRequest.java +file + + + + +2009-05-27T12:24:01.000000Z +e889fc07831fc75f678773249270d3ea +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4502 + +POAImpl.java +file + + + + +2009-05-27T14:10:34.000000Z +6a9536daa36dff37e5b0ea4ce268018f +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +70595 + +QueueReaderManager.java +file + + + + +2009-05-27T12:24:01.000000Z +706bb4db7df100bbfe5fb0b103c4daae +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1783 + +CurrentImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +8d1e3f6bc3d1fb093ffeb6457f2129ce +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5407 + +QueuedResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +26d292e94165a6a8f2cce4f1eff33b6e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2338 + +DeadlineRequestComparator.java +file + + + + +2009-05-27T12:26:05.000000Z +86c76f86205b0efe0fc762664181559b +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2126 + +OID.java +file + + + + +2009-05-27T12:24:01.000000Z +dfb3db7f2584f233f88da24546ad4e4d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4046 + +ExecThread.java +file +478 + + + +2011-04-29T14:42:47.000000Z +56899f4e95e47d6f3cc0d5463e38523b +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +34154 + +ServantDelegate.java +file + + + + +2009-05-27T12:24:01.000000Z +60d34a59bdf273f0f59a7fe4d1a191c0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4786 + +ThreadStateListener.java +file + + + + +2009-05-27T12:24:01.000000Z +95e28b246593009f8d132fd093d225a2 +2006-01-24T16:36:46.000000Z +8 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1840 + +SystemOID.java +file + + + + +2009-05-27T12:24:01.000000Z +86493c2e307ed725529778f1ec4a3c7b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4193 + +POAManagerConf.java +file + + + + +2009-05-27T12:24:01.000000Z +3c5b729aa9e518a31d40ebad714528d4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3997 + +PriorityRequestComparator.java +file + + + + +2009-05-27T12:26:05.000000Z +0138cbb6ee670b4a0e3a8a27f64717dc +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2316 + +TemporalRequestComparator.java +file + + + + +2009-05-27T12:24:01.000000Z +7aa90eded31b9fa3740541a01a103ca5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +842 + +CompletionWaiter.java +file + + + + +2009-05-27T12:24:01.000000Z +9d08e9d1bc99b46988515345f640469d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3552 + +POAManagerConfListener.java +file + + + + +2009-05-27T12:24:01.000000Z +e30bd28882ec4646c99f57308a08e52c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1646 + +policies +dir + +POAKey.java +file + + + + +2009-05-27T12:24:01.000000Z +8b39dfa0417061a1330bc47830dbba5a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8872 + +POAManagerImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +3f20af275e10e1e0ca9d6d5d6e4d04be +2006-02-09T09:58:57.000000Z +13 +avega +has-props + + + + + + + + + + + + + + + + + + + + +13688 + +QueuedLocateResponseHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +f3ae5333a837e4debcf11369a9706ec6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2434 + +RequestQueue.java +file + + + + +2009-05-27T12:24:01.000000Z +761ce7c6d05cc7162450c3280c714451 +2008-10-28T10:06:44.781798Z +307 +avega +has-props + + + + + + + + + + + + + + + + + + + + +5445 + +CurrentInfo.java +file + + + + +2009-05-27T12:24:01.000000Z +0b74965462c860d321b5b6c5b578666b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2224 + diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ActiveObjectMap.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ActiveObjectMap.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ActiveObjectMap.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CompletionWaiter.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CompletionWaiter.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CompletionWaiter.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentInfo.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentInfo.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/CurrentInfo.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/DeadlineRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/DeadlineRequestComparator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/DeadlineRequestComparator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ExecThread.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ExecThread.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ExecThread.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/OID.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/OID.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/OID.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAKey.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAKey.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAKey.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConf.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConf.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConf.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConfListener.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConfListener.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerConfListener.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/POAManagerImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/PriorityRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/PriorityRequestComparator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/PriorityRequestComparator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueueReaderManager.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueueReaderManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueueReaderManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedLocateResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedRequest.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedRequest.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedRequest.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedResponseHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/QueuedResponseHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/RequestQueue.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/RequestQueue.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/RequestQueue.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ServantDelegate.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ServantDelegate.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ServantDelegate.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/SystemOID.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/SystemOID.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/SystemOID.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/TemporalRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/TemporalRequestComparator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/TemporalRequestComparator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadPool.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadPool.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadPool.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadStateListener.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadStateListener.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/prop-base/ThreadStateListener.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/ActiveObjectMap.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ActiveObjectMap.java.svn-base new file mode 100644 index 0000000..0fb5f80 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ActiveObjectMap.java.svn-base @@ -0,0 +1,308 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Enumeration; +import java.util.Hashtable; + +/** + * Active Object Map. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class ActiveObjectMap +{ + + protected Hashtable m_table = new Hashtable(); + + /** + * Adds a new oid to the Active Object Map. + * + * @param oid + * Object Id. + * @param servant + * Servant which corresponds to oid. + * @param uniqueId + * True if UNIQUE_ID policy is present in this POA. + * @exception ServantAlreadyActive + * If servant is already in the AOM. + * @exception ObjectAlreadyActive + * If uniqueId is true and oid is already in the AOM. + */ + public void put(OID oid, org.omg.PortableServer.Servant servant, + boolean uniqueId) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive + { + + if (m_table.containsKey(oid)) { + throw new org.omg.PortableServer.POAPackage.ObjectAlreadyActive(); + } + + AOMElement element = new AOMElement(servant); + if (uniqueId && m_table.contains(element)) { + throw new org.omg.PortableServer.POAPackage.ServantAlreadyActive(); + } + + m_table.put(oid, element); + } + + /** + * Gets the servant associated to oid. + * + * @param oid + * Object Id. + * @return The servant. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public org.omg.PortableServer.Servant get(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + return element.servant; + } + + /** + * Removes the servant associated to oid. + * + * @param oid + * Object Id. + * @return Retuns the servant removed (if any). + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public org.omg.PortableServer.Servant remove(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.remove(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + return element.servant; + } + + /** + * Tests if a servant is in the Active Object Map. + * + * @return Retuns true if the servant is in the Active Object Map. + */ + public boolean contains(org.omg.PortableServer.Servant servant) + { + AOMElement element = new AOMElement(servant); + return m_table.contains(element); + } + + /** + * Tests if an oid is in the Active Object Map. + * + * @return Retuns true if the oid is in the Active Object Map. + */ + public boolean isActive(OID oid) + { + return (oid != null) && (m_table.containsKey(oid)); + } + + /** + * Gets the first oid associated to a servant. + * + * @param The + * servant. + * @return The Object Id. + */ + public OID get(org.omg.PortableServer.Servant servant) + { + Enumeration oids = m_table.keys(); + Enumeration AOMelems = m_table.elements(); + for (; AOMelems.hasMoreElements();) { + OID curr_oid = (OID) oids.nextElement(); + AOMElement curr_AOMelems = (AOMElement) AOMelems.nextElement(); + if (curr_AOMelems.servant == servant) + return curr_oid; + } + return null; + } + + /** + * Adds a new user for this oid. + * + * @param The + * Object Id. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public void addUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.num_users++; + } + + /** + * Removes a user for this oid. + * + * @param The + * Object Id. + * @return Returns false if there are still users, otherwise returns true. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public boolean removeUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.num_users--; + if (element.num_users <= 0) { + return true; // nobody uses oid anymore + } else { + return false; // someone is still using oid + } + } + + /** + * Marks an oid as "destroying". + * + * @param The + * Object Id. + */ + public void destroy(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.destroying = true; + } + + /** + * Tests if an oid is "destroying". + * + * @return The entry in the Active Object Map. It may be used for + * synchronization purposes. + */ + public java.lang.Object isDestroying(OID oid) + { + AOMElement element = (AOMElement) m_table.get(oid); + if ((element != null) && (element.destroying)) { + return element; + } else { + return null; + } + } + + /** + * Returns an enumeration of all oids in the Active Object Map. + * + * @return The enumeration. + */ + public java.util.Enumeration getOIDs() + { + return new AOMEnumeration(m_table); + } + + /** + * Inner class for the Active Object Map entries. + */ + public class AOMElement + { + + int num_users = 1; // the first user is the POA where oid is created + + org.omg.PortableServer.Servant servant = null; + + boolean destroying = false; + + public AOMElement(org.omg.PortableServer.Servant servant) + { + this.servant = servant; + } + + public boolean equals(Object other) + { + if (other instanceof AOMElement) { + return servant == ((AOMElement) other).servant; + } else { + return false; + } + } + + } + + /** + * Inner class for the enumeration that getOIDs() returns. + */ + public class AOMEnumeration + implements java.util.Enumeration + { + + private java.util.Enumeration keys; + + public AOMEnumeration(Hashtable table) + { + this.keys = table.keys(); + } + + public boolean hasMoreElements() + { + return keys.hasMoreElements(); + } + + public Object nextElement() + { + return keys.nextElement(); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/CompletionWaiter.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CompletionWaiter.java.svn-base new file mode 100644 index 0000000..6d3a015 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CompletionWaiter.java.svn-base @@ -0,0 +1,137 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Class to wait until there are no executing requests. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class CompletionWaiter +{ + + private int m_active_requests = 0; + + private boolean m_stop_waiting = false; + + private es.tid.TIDorbj.core.TIDORB m_orb; + + /** + * Constructor. + * + * @param orb + * The ORB. + */ + public CompletionWaiter(es.tid.TIDorbj.core.TIDORB orb) + { + this.m_orb = orb; + } + + /** + * Tests if an operation should wait for completion. + * + * @return Returns true if it must wait. + */ + protected boolean conditionToWait() + { + try { + CurrentImpl current = m_orb.initPOACurrent(); + POAImpl poa = (POAImpl) current.get_POA(); + return poa.m_orb != m_orb; + } + catch (org.omg.PortableServer.CurrentPackage.NoContext e) { + return true; + } + } + + /** + * Begins a new request (increments active request counter). + */ + synchronized protected void beginRequest() + { + m_active_requests++; + } + + /** + * Ends a request (decrements active request counter and notifies). + */ + synchronized protected void endRequest() + { + m_active_requests--; + if (m_active_requests <= 0) { + notify(); + } + } + + /** + * Waits until there are no active requests. + */ + synchronized protected void waitForCompletion() + { + while ((m_active_requests != 0) && !m_stop_waiting) { + try { + wait(); + } + catch (Exception e) {} + } + m_stop_waiting = false; + } + + /** + * Stops waiting for completion. + */ + synchronized protected void stopWaiting() + { + m_stop_waiting = true; + notifyAll(); + } + + /** + * @return Number of active requests. + */ + synchronized protected int getActiveRequests() + { + return m_active_requests; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentImpl.java.svn-base new file mode 100644 index 0000000..d56c054 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentImpl.java.svn-base @@ -0,0 +1,186 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.PortableServer.CurrentLocalBase; +import org.omg.PortableServer.Servant; +import org.omg.PortableServer.CurrentPackage.NoContext; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * TIDORB implementation of the Current CORBA Object. The current object + * accesses to the CurrentInfo stored in the ExecThread, the thread assotiated + * to the servant execution, returning at each moment the current poa and object + * id (if exists). + * + * @see CurrentInfo + * @see ExecThread + * + * @author Juan A. Cáceres + */ + +public class CurrentImpl extends CurrentLocalBase +{ + + private TIDORB m_orb; + + private boolean destroyed; + + public CurrentImpl(TIDORB orb) + { + m_orb = orb; + } + + public synchronized void destroy() + { + m_orb = null; + destroyed = true; + } + + public synchronized org.omg.PortableServer.POA get_POA() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_current_poa; + } + + public synchronized byte[] get_object_id() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_current_oid.toByteArray(); + } + + public org.omg.CORBA.Object getReference() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_servant._this_object(); + } + + public synchronized org.omg.PortableServer.Servant getServant() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_servant; + } + + /** + * Looks in the current thread for the CurrentInfo that + * determines the current poa and object id needed by the + * Current object. + * + * @return the CurrentInfo object if exits. + * + * @exception org.omg.PortableServer.CurrentPackage.NoContext + * if the current thread is not an instance of + * ExecThread (it is the orb main thread) or + * it is and it is executing a local request, and there is + * out of a POA-dispatched operation. + */ + + protected CurrentInfo getCurrentInfo() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + Thread th = Thread.currentThread(); + + if (th instanceof ExecThread) { // the current is in a servant + // execthread + + ExecThread exec = (ExecThread) th; + + CurrentInfo info = exec.getCurrentInfo(); + + if (info != null) + + return info; + } + + // error executing a local request or we are in the orb main thread + + throw new org.omg.PortableServer.CurrentPackage.NoContext(); + } + + public boolean inContext() + { + Thread th = Thread.currentThread(); + + if (th instanceof ExecThread) { // the current is in a servant + // execthread + + ExecThread exec = (ExecThread) th; + + CurrentInfo info = exec.getCurrentInfo(); + + return (info != null); + } + + return false; + } + + /* (non-Javadoc) + * @see org.omg.PortableServer.CurrentOperations#get_reference() + */ + public Object get_reference() throws NoContext { + return this.getReference(); + } + + /* (non-Javadoc) + * @see org.omg.PortableServer.CurrentOperations#get_servant() + */ + public Servant get_servant() throws NoContext { + return this.getCurrentInfo().m_servant; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentInfo.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentInfo.java.svn-base new file mode 100644 index 0000000..8a6a049 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/CurrentInfo.java.svn-base @@ -0,0 +1,78 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +public class CurrentInfo +{ + + POAImpl m_current_poa; + + OID m_current_oid; + + boolean m_request_in_poa; + + org.omg.PortableServer.Servant m_servant = null; + + public CurrentInfo(POAImpl current_poa, OID current_oid) + { + this.m_current_poa = current_poa; + this.m_current_oid = current_oid; + this.m_request_in_poa = false; + } + + public boolean isRequestInPOA() + { + return m_request_in_poa; + } + + public void setRequestInPOA(boolean val) + { + m_request_in_poa = val; + } + + public void setServant(org.omg.PortableServer.Servant servant) + { + this.m_servant = servant; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/DeadlineRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/DeadlineRequestComparator.java.svn-base new file mode 100644 index 0000000..797d6e2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/DeadlineRequestComparator.java.svn-base @@ -0,0 +1,79 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +import org.omg.Messaging.RequestEndTimePolicy; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Comparator that uses the Messaging::RequestEndTimePolicy to decide the order + * in a request queue. In case of there were not any policy to decide, the + * TemporalRequestComparator will be used. + * @author caceres + * + */ +public class DeadlineRequestComparator + implements Comparator +{ + + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + + + TemporalRequestComparator temporalComparator; + + public DeadlineRequestComparator() + { + temporalComparator = new TemporalRequestComparator(); + } + + + + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + PolicyContext context1 = request1.getPolicyContext(); + PolicyContext context2 = request2.getPolicyContext(); + + RequestEndTimePolicy end1 = null; + RequestEndTimePolicy end2 = null; + + if (context1 != null) { + end1 = context1.getRequestEndTimePolicy(); + } + + if (context2 != null) { + end2 = context2.getRequestEndTimePolicy(); + } + + if(end1 == null) { + if(end2 == null) { + return temporalComparator.compare(o1,o2); + } else { + return GREATER_THAN; + } + } else { + if(end2 == null) { + return LESS_THAN; + } else { // both non-null + + long val1 = end1.end_time().time; + long val2 = end2.end_time().time; + + if(val1 > val2) { + return GREATER_THAN; + } else if(val1 == val2) { + return temporalComparator.compare(o1,o2); + } else { + return LESS_THAN; + } + } + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/ExecThread.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ExecThread.java.svn-base new file mode 100644 index 0000000..708ce83 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ExecThread.java.svn-base @@ -0,0 +1,945 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.BooleanHolder; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.TIMEOUT; +import org.omg.CORBA.UNKNOWN; +import org.omg.PortableServer.DynamicImplementation; +import org.omg.PortableServer.POAManager; +import org.omg.PortableServer.Servant; +import org.omg.PortableServer.POAManagerPackage.State; +import org.omg.PortableServer.POAPackage.AdapterNonExistent; +import org.omg.PortableServer.POAPackage.ObjectAlreadyActive; +import org.omg.PortableServer.POAPackage.ObjectNotActive; +import org.omg.PortableServer.ServantLocatorPackage.CookieHolder; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * Execution thread. Gets request from the request queue and executes them. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class ExecThread extends Thread +{ + + private POAManagerImpl m_poa_manager = null; + + private RequestQueue m_queue = null; + + private boolean m_deactivated = false; + + private ThreadStateListener m_thread_state_listener = null; + + private java.util.Stack m_current_info_stack = null; + + private String m_thread_name; + + private TIDORB m_orb; + + private Trace m_trace; + + private long m_max_response_blocked_time; + + private boolean m_qos_enabled; + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this ExecThread belongs. + * @param number + * Id number of this ExecThread. + */ + protected ExecThread(POAManagerImpl poaManager) + { + m_poa_manager = poaManager; + m_queue = m_poa_manager.getRequestQueue(); + m_current_info_stack = new java.util.Stack(); + //TODO: orb referecial by jprojas + m_orb = m_poa_manager.m_orb; + m_trace = m_orb.m_trace; + m_qos_enabled = m_orb.m_conf.qos_enabled; + m_max_response_blocked_time = m_orb.m_conf.max_blocked_time; + } + + /** + * Set the ThreadStateListener. Any ExecThread should have a listener + * (eventually the ThreadPool) before it is started. + * + * @param l + * The listener. + */ + protected void setThreadStateListener(ThreadStateListener l) + { + m_thread_state_listener = l; + } + + /** + * Checks the state of the POAManager. If the state is ACTIVE, then finish + * returning true. If the state is HOLDING, then wait until state is + * diferent from HOLDING. If the state is DISCARDING, then discard the + * request and return false. If the state is INACTIVE, then reject the + * request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + private boolean checkState( QueuedRequest request ) { + + boolean executeRequest = false; + + if (m_trace != null) { + String[] msg = { toString(), " checking state of ", + m_poa_manager.toString() }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + synchronized (m_poa_manager.m_state_mutex) { + boolean exit = false; + while (!exit) { + org.omg.PortableServer.POAManagerPackage.State state = m_poa_manager.get_state(); + if ((state == org.omg.PortableServer.POAManagerPackage.State.ACTIVE) && !request.getMustDiscard()) { + exit = true; + executeRequest = true; + } else if (state == org.omg.PortableServer.POAManagerPackage.State.HOLDING) { + try { + // wait until state changes + m_poa_manager.m_state_mutex.wait(); + } catch (InterruptedException ie) {} + exit = false; + } else if (state == org.omg.PortableServer.POAManagerPackage.State.INACTIVE) { + // MISSING: define strategy for deactivated POAManagers + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to request becase foreing POAManager is INACTIVE" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } else if ( state == org.omg.PortableServer.POAManagerPackage.State.DISCARDING || + request.getMustDiscard() ){ + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to request becase foreing POAManager is DISCARDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + //TODO: change method signature to return possible errors + //in state check + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } + } + } + return executeRequest; + } + + /** + * Execution loop. + */ + public void run() + { + + while (!m_deactivated) { + try { + + if (m_trace != null) { + String[] msg = { toString(), ": getting request..." }; + m_trace.print(Trace.DEEP_DEBUG, msg); + + } + + QueuedRequest thisRequest = m_queue.get(); + + + + if (thisRequest != null) { + // If there is a request, then go!! + m_thread_state_listener.setActive(this); + processRequest(thisRequest); + m_thread_state_listener.setInactive(this); + + } else if (m_thread_state_listener.threadCanDie(this)) { + // If restarted and no request, then commit suicide + m_deactivated = true; + } + + } + catch (Throwable unhandledException) { + // Unhandled exception. Should never happen!! + if (m_trace != null) { + m_trace.printStackTrace(Trace.DEBUG, + toString() + "Unhanled Exception ", + unhandledException); + m_trace.print(Trace.DEBUG, toString() + " dies..."); + } + m_deactivated = true; + } + + + + + } + m_thread_state_listener.threadHasDied(this); + } + + /** + * Process current request. + * + * @return true wherther the request has been queued in + * another POAManager. + */ + private void processRequest(QueuedRequest thisRequest) { + + try { + if (m_trace != null) { + String[] msg = { toString(), " executing request ", thisRequest.toString()}; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + ObjectKey objectKey; + objectKey = thisRequest.getObjectKey(); + + POAKey poaKey; + try { + poaKey = m_orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + } catch ( Throwable th ){ + poaKey = null; + } + + if ( poaKey != null ) { + thisRequest.setPOAKey( poaKey ); + } else { + throw new OBJECT_NOT_EXIST(); + } + + if ( checkState( thisRequest ) ) { + // find poa + POAImpl poa = null; + try { + poa = findPOA( thisRequest ); + } catch ( AdapterNonExistent ane) { + if (m_trace != null) { + m_trace.printStackTrace( + Trace.DEBUG, + new String[]{ + toString(), + "POA ", + thisRequest.getCurrentChildPOAName(), + " not found" + }, + ane + ); + } + throw new org.omg.CORBA.OBJECT_NOT_EXIST(); + } + + if (poa != null) { + execute(thisRequest, poa); + } + } + } catch (org.omg.CORBA.SystemException e) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting a system exception to Request" }; + m_trace.printStackTrace(Trace.DEEP_DEBUG, msg, e); + } + thisRequest.submitResponse( e ); + } catch (java.lang.Throwable th) { + th.printStackTrace( System.err) ; + thisRequest.submitResponse( + new INTERNAL(th.toString(), 0, thisRequest.getStatus() ) + ); + } + } + + /** + * Finds the POA which corresponds to + * + * @param request. + * If the request belongs to another POAManager it is bypassed to + * it, returning null. + * @param request + * The queued request to be executed. + * @returns POAImpl POA where the request must be executed. + * @exception org.omg.PortableServer.POAPackage.AdapterNonExistent + * If it fails finding the POA. + */ + private POAImpl findPOA( QueuedRequest request ) + throws org.omg.PortableServer.POAPackage.AdapterNonExistent + { + + POAImpl current_poa; + + current_poa = request.getCurrentPOA(); + if( current_poa == null ){ + current_poa = this.m_orb.initPOA(); + request.setCurrentPOA( current_poa ); + } + + boolean bypassed = false; + POAManagerImpl nextPOAManager; + while ( !( bypassed || request.isFinalPOA() ) ) { + current_poa = (POAImpl) current_poa.find_POA( + request.getCurrentChildPOAName(),true + ); + + request.nextChildPOA(current_poa); + + nextPOAManager = (POAManagerImpl) current_poa.the_POAManager(); + + if (nextPOAManager != m_poa_manager) { + // bypass request to nextPOAManager + if (m_trace != null) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), " bypassing request ", request.toString(), + " to ", current_poa.toString() + } + ); + } + nextPOAManager.put(request); + bypassed = true; + } + } + return ( bypassed )?null:current_poa; + } + + /** + * Process local Request in the given POAManager. + * + * @param localRequest + * the Local request + * @param current_manager + * the current POA POAManager + */ + public void processLocalRequest( QueuedRequest localRequest ) + { + if (m_trace != null) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " executing local request ", + localRequest.toString() + } + ); + } + + try { + + ObjectKey objectKey; + objectKey = localRequest.getObjectKey(); + + POAKey poaKey; + try { + poaKey = m_orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + } catch ( Throwable th ){ + poaKey = null; + } + + if ( poaKey != null ) { + localRequest.setPOAKey( poaKey ); + } else { + throw new OBJECT_NOT_EXIST(); + } + + POAImpl currentPOA = localRequest.getCurrentPOA(); + if ( currentPOA == null ){ + // Start from rootPOA + currentPOA = this.m_orb.initPOA(); + localRequest.setCurrentPOA( currentPOA ); + } + + POAManager currentPOAManager; + currentPOAManager = currentPOA.the_POAManager(); + + if ( currentPOAManager == this.m_poa_manager ) { + if (!checkState(localRequest)) { + return; + } + } else { + if ( !checkForeingState( localRequest ) ) { + return; + } + } + + // find poa + + POAImpl current_poa = localRequest.getCurrentPOA(); + + try { + while (!localRequest.isFinalPOA()) { + current_poa = (POAImpl) + current_poa.find_POA(localRequest.getCurrentChildPOAName(), + true); + + localRequest.nextChildPOA(current_poa); + + POAManagerImpl nextPOAManager = (POAManagerImpl) + current_poa.the_POAManager(); + + if (nextPOAManager != m_poa_manager) { + // bypass request to nextPOAManager + + if (m_trace != null) { + String[] msg = + { toString(), + " bypassing request ", + localRequest.toString(), + " through ", + current_poa.toString()}; + + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + processLocalRequest( localRequest ); + return; + } + } + } + catch (org.omg.PortableServer.POAPackage.AdapterNonExistent ane) { + if (m_trace != null) { + String[] msg = + { toString(), + "POA ", + localRequest.getCurrentChildPOAName(), + " not found, org.omg.CORBA.OBJECT_NOT_EXIST throwed" }; + + m_trace.printStackTrace(Trace.DEBUG, msg, ane); + } + localRequest.submitResponse(new OBJECT_NOT_EXIST() ); + return; + } + + if (current_poa != null) { + execute(localRequest, current_poa); + } + + } catch (org.omg.CORBA.SystemException se) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting a system exception to localRequest" }; + m_trace.printStackTrace(Trace.DEEP_DEBUG, msg, se); + } + localRequest.submitResponse( se ); + } catch (java.lang.Throwable tw) { + tw.printStackTrace(); + localRequest.submitResponse( + new INTERNAL(tw.toString(), 0, localRequest.getStatus() ) + ); + } + } + + /** + * Checks the state of the given POAManager. If the state is ACTIVE, then + * finish returning true. If the state is HOLDING, then wait until state + * changes or the max_blocked_time timeout is reached. If the state is + * DISCARDING, then discard the request and return false. If the state is + * INACTIVE, then reject the request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + private boolean checkForeingState( QueuedRequest localRequest ) { + if ( m_trace != null ) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Checking foreing POAManager state" + } + ); + } + POAManagerImpl currentPOAManager; + //TODO: add method "getPOAManager" returning a POAManagerImpl to avoid + //castings + currentPOAManager = + ( POAManagerImpl )localRequest.getCurrentPOA().the_POAManager(); + + org.omg.PortableServer.POAManagerPackage.State state = currentPOAManager.get_state(); + + // chech current_manager state + if ( state == org.omg.PortableServer.POAManagerPackage.State.HOLDING ) { + if ( m_trace != null ) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Waiting in a foreing POAManager because it is HOLDING" + } + ); + } + + long timeout = m_max_response_blocked_time; + + if (m_qos_enabled) { + + PolicyContext policyContext; + policyContext = localRequest.getPolicyContext(); + + if(policyContext != null) { + + timeout = QoS.checkRequestTime(m_orb, policyContext); + } + } + + if(timeout > 0) { + synchronized ( currentPOAManager.m_state_mutex ) { + try { + //TODO: check if this could be done outside ExecThread's to + //avoid inclusion of requestPolicy in responsehandlers + currentPOAManager.m_state_mutex.wait(timeout); + } catch ( InterruptedException ie ) { } + } + } + + state = currentPOAManager.get_state(); + + currentPOAManager.put( localRequest ); + if ( state == org.omg.PortableServer.POAManagerPackage.State.HOLDING ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting NO_RESPONSE because foreing POAManager is HOLDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new NO_RESPONSE() ); + return false; + } + } + + if ( state == org.omg.PortableServer.POAManagerPackage.State.INACTIVE ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to localRequest becase foreing POAManager is INACTIVE" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new org.omg.CORBA.TRANSIENT() ); + return false; + } + + if ( ( state == org.omg.PortableServer.POAManagerPackage.State.DISCARDING ) || localRequest.getMustDiscard() ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to localRequest becase foreing POAManager is DISCARDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new org.omg.CORBA.TRANSIENT() ); + return false; + } + + return true; + } + + + + /** + * Executes a queued request depending on its type. + * + * @param request + * The queued request to be executed. + */ + private void execute( QueuedRequest request, POAImpl poa ) { + // TODO:temporary check until refactoring complete + + POAKey poaKey = request.getPOAKey(); + if ( poaKey != null ) { + long poaId; + poaId = poaKey.getPOAId(); + /* + * poaId -> persistent poa. Must check if it's not a persistent poa, + * if it's the same 'instance' that holds the 'servant' right now + */ + if ( poaId != 0 && poaId != poa.getId() ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting OBJECT_NOT_EXIST to request becase poaId isn't int poa" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + request.submitResponse( new org.omg.CORBA.OBJECT_NOT_EXIST() ); + } else { + // execute request + CurrentInfo current; + current = new CurrentInfo( poa, poaKey.getOID() ); + m_current_info_stack.push( current ); + + try { + if ( request instanceof QueuedLocateResponseHandler ) { + execute( ( QueuedLocateResponseHandler ) request, poa ); + } else if ( request instanceof QueuedResponseHandler ){ + execute( ( QueuedResponseHandler )request, poa ); + } + request.setStatus( CompletionStatus.COMPLETED_YES ); + } catch ( org.omg.CORBA.SystemException se ) { + request.submitResponse( se ); + } catch ( java.lang.Throwable tw ) { + request.submitResponse( + new INTERNAL( tw.toString(), 0, request.getStatus() ) + ); + } finally { + m_current_info_stack.pop(); + if ( current.isRequestInPOA() ) { + try { + poa.removeUser( poaKey.getOID() ); + } catch ( Exception e ) { + } + request.destroy(); + } + } + } + } else { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + new String[] { + toString(), + " Invalid target ObjectKey in Request[ ", + request.getObjectKey().toString(), + "]" + } + ); + } + } + } + + private void execute( QueuedLocateResponseHandler handler, POAImpl poa ){ + //TODO: send this to the request... + + BooleanHolder servantLocatorUsed = new org.omg.CORBA.BooleanHolder(); + try { + // Current execution context + CurrentInfo current; + current = (CurrentInfo)m_current_info_stack.peek(); + + // Current servant's OID + OID oid; + oid = current.m_current_oid; + + // Servant location + Servant servant; + servant = poa.find_servant( oid, null, null, servantLocatorUsed ); + if (servant != null) { + handler.submitResponse( true ); + } else { + //This should never happen + throw new INTERNAL( + "find_servant() returning null!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } catch (org.omg.CORBA.SystemException e) { + throw e; + } catch (org.omg.PortableServer.ForwardRequest e) { + handler.submitResponse( e.forward_reference ); + m_poa_manager.m_orb.printTrace(Trace.DEBUG, "Forwarded: ", e); + } catch (Exception e) { + handler.submitResponse( false ); + } + } + + private void execute( QueuedResponseHandler handler, POAImpl poa ){ + try { + + + + /**/ + // get serverRequest (with params for invocation) + ServerRequest serverRequest; + serverRequest = handler.getServerRequest(); + + // QoS validation + if (m_qos_enabled) { + + if(!QoS.validateServerRequestEndTimePolicy(handler.getPolicyContext())) + { + if (m_trace != null) { + + String[] msg = { toString(), + " discarding ", + serverRequest.toString(), + " due to Messaging::RequestEndTimePolicy: TIMEOUT"}; + + m_trace.print(Trace.DEBUG, msg); + } + + throw new TIMEOUT(); + } + + } + /* + * SERVANT LOCATION + **/ + + // Cookie holder to store "reference" to dynamic incarnated servants + // when using servant locator + CookieHolder cookieHolder; + cookieHolder = new CookieHolder(); + + // Boolean holder, to store previous condition + //TODO: verify with juan + BooleanHolder servantLocatorUsed; + servantLocatorUsed = new org.omg.CORBA.BooleanHolder(); + + // Current execution context + CurrentInfo current; + current = (CurrentInfo)m_current_info_stack.peek(); + + // Target servant's OID + OID oid; + oid = current.m_current_oid; + + + org.omg.PortableServer.Servant servant = null; + try { + servant = poa.find_servant( + oid, + serverRequest.operation(), + cookieHolder, + servantLocatorUsed + ); + + poa.addUser( oid ); + + current.setRequestInPOA(true); + + } catch ( ObjectNotActive one ) { + this.m_orb.printTrace( Trace.DEBUG, "", one ); + //TODO: why is status in ServerRequestImpl + throw new org.omg.CORBA.OBJECT_NOT_EXIST( + one.getMessage(), 1, handler.getStatus() + ); + } catch ( ObjectAlreadyActive oae ) { + this.m_orb.printTrace(Trace.DEBUG, "", oae); + throw new org.omg.CORBA.OBJ_ADAPTER( + oae.getMessage(), 0, handler.getStatus() + ); + } catch ( org.omg.PortableServer.ForwardRequest fr ) { + this.m_orb.printTrace( Trace.DEBUG, "Forwarded: ", fr ); + handler.submitResponse( fr.forward_reference ); + return; + } + + // set servant in current object + current.setServant( servant ); + + handler.setStatus( CompletionStatus.COMPLETED_MAYBE ); + + if ( "_is_a".equals( serverRequest.operation() ) ) { + this.invoke_is_a( poa, servant, serverRequest ); + } else { + if (servant instanceof DynamicImplementation) { + // invoke servant using DII + DynamicImplementation dynServant; + dynServant = (DynamicImplementation) servant; + + if ( poa.isSingleThread() ) { + synchronized ( dynServant._get_delegate() ) { + doInvoke(dynServant, serverRequest); + } + } else { + doInvoke(dynServant, serverRequest); + } + } else { + throw new NO_IMPLEMENT( + "Stream based invocation not implemented", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + handler.setStatus(CompletionStatus.COMPLETED_YES); + + // return results (if not oneway) + handler.setPolicyContext(poa.getPolicyContext()); + handler.submitResponse(); + + + // Call postinvoke if necessary + if ( servantLocatorUsed.value ) { + poa.callPostinvoke( + oid.toByteArray(), + serverRequest.operation(), + cookieHolder, + servant + ); + } + /* TODO: why ForwardRequest isn't thrown? + } catch (org.omg.PortableServer.ForwardRequest e) { + handler.submitResponse( e.forward_reference ); + m_poa_manager.m_orb.printTrace(Trace.DEBUG, "Forwarded: ", e); + */ + } catch (org.omg.CORBA.SystemException e) { + throw e; + } catch (Exception e) { + if ( m_trace != null ) { + m_trace.printStackTrace( Trace.DEEP_DEBUG, + " Submitting UNKNOWN exception to handler ", e); + } + + handler.submitResponse( + new UNKNOWN() + ); + } + } + + + + /** + * Executes "_is_a" request on the ServantDelegate. + * + * @param servant + * The target servant of the "_is_a" request. + * @param request + * The queued request to be executed. + */ + private void invoke_is_a(POAImpl poa, + org.omg.PortableServer.Servant servant, + org.omg.CORBA.ServerRequest request) + { + try { + es.tid.TIDorbj.core.poa.ServantDelegate deleg = + (es.tid.TIDorbj.core.poa.ServantDelegate) servant._get_delegate(); + org.omg.CORBA.ORB orb = poa.m_orb; + org.omg.CORBA.NVList params = orb.create_list(1); + org.omg.CORBA.Any $s = orb.create_any(); + $s.type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + params.add_value("s", $s, org.omg.CORBA.ARG_IN.value); + request.arguments(params); + String itf = $s.extract_string(); + boolean result = deleg.is_a(servant, itf); + org.omg.CORBA.Any resultAny = orb.create_any(); + resultAny.insert_boolean(result); + request.set_result(resultAny); + } catch (org.omg.CORBA.SystemException se) { + throw se; + } catch (Throwable th) { + if ( this.m_orb.m_trace != null) { + m_trace.printStackTrace( + Trace.DEBUG, + new String[]{ + toString(), + " Exception in servant invoke \"_is_a\" method, ", + "UNKOWN thrown: " + }, + th + ); + } + throw new org.omg.CORBA.UNKNOWN(); + } + + } + + /** + * @return Returns the string representation of this Thread. + */ + public synchronized String toString() + { + if (m_thread_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append(super.toString()); + buffer.append(" in "); + buffer.append(m_poa_manager.toString()); + m_thread_name = buffer.toString(); + buffer = null; + } + return m_thread_name; + } + + /** + * @return Returns the CurrentInfo in the top of the stack. + */ + public CurrentInfo getCurrentInfo() + { + if (m_current_info_stack.empty()) { + return null; + } + return (CurrentInfo) m_current_info_stack.peek(); + } + + private void doInvoke(DynamicImplementation servant, + org.omg.CORBA.ServerRequest request) + { + try { + servant.invoke(request); + } + catch (org.omg.CORBA.SystemException se) { + throw se; + } + catch (Throwable th) { + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { toString(), + " Exception in servant invoke method, UNKOWN thrown: " + }; + + m_trace.printStackTrace(Trace.DEBUG, msg, th); + } + throw new org.omg.CORBA.UNKNOWN(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/OID.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/OID.java.svn-base new file mode 100644 index 0000000..4379c40 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/OID.java.svn-base @@ -0,0 +1,166 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.util.Base64Codec; + +/** + * General Representation of an Object Indentifier. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class OID +{ + + protected byte[] m_value; + + protected int m_hash_code; + + protected boolean m_hash_created; + + protected String m_str; + + protected OID() + { + m_value = null; + m_hash_code = 0; + m_hash_created = false; + } + + public OID(byte[] val) + { + this(); + m_value = val; + } + + public byte[] toByteArray() + { + return m_value; + } + + public boolean equals(Object obj) + { + OID other = null; + + if (!(obj instanceof OID)) + return false; + + other = (OID) obj; + + if (m_value == null) { + if (other.m_value == null) + return true; + else + return false; + } + + if (m_value.length != other.m_value.length) + return false; + + for (int i = 0; i < m_value.length; i++) { + if (m_value[i] != other.m_value[i]) + return false; + } + + return true; + } + + public int hashCode() + { + if (!m_hash_created) { + + if (m_value == null) + return 0; + + for (int i = 0; i < m_value.length; i++) + m_hash_code = (31 * m_hash_code) + m_value[i]; + m_hash_created = true; + } + + return m_hash_code; + } + + public static OID fromString(String str) + throws Exception + { + return new OID(Base64Codec.decode(str)); + } + + public String toString() + { + if (m_str == null) { + if ((m_value != null) || (m_value.length > 0)) + m_str = Base64Codec.encode(m_value); + else + m_str = ""; + } + + return m_str; + } + + /* + * public static void main (String[] args) { try { + * + * byte[] bytes = {(byte)0,(byte)0,(byte)0,(byte)0,(byte)1,(byte)23}; + * + * OID oid = new OID(bytes); + * + * String str = oid.toString(); + * + * System.out.println(str); + * + * oid = OID.fromString(str); + * + * + * byte[] oid_bytes = oid.toByteArray(); + * + * for(int i = bytes.length -1 ; i >= 0; i--) if(oid_bytes[i] != bytes[i]) + * System.out.println("Error in bytes"); + * + * System.out.println("final"); } catch (Throwable th) + * {th.printStackTrace();} } + * + */ +} + diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAImpl.java.svn-base new file mode 100644 index 0000000..518769d --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAImpl.java.svn-base @@ -0,0 +1,1984 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import org.omg.BiDirPolicy.BOTH; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.NORMAL; +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.PortableServer.*; +import org.omg.PortableServer.POAPackage.*; +import org.omg.PortableServer.ServantLocatorPackage.CookieHolder; + +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.poa.policies.*; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Implementation of RTPortableServer::POA + * + * @autor Javier Fdz. Mejuto + * @autor Juan A. Caceres + * @version 2.0 + */ +public class POAImpl extends org.omg.PortableServer.POALocalBase +{ + + /** + * If true the Object has been destroyed and it will throw a + * org.omg.CORBA.OBJECT_NOT_EXIST exception. + * Many Objects has the destroy method, this method will change this attribute. + */ + + protected boolean m_destroyed; + + // attributes for all POAs + public es.tid.TIDorbj.core.TIDORB m_orb = null; + + private String m_name = null; + + private String m_poa_string_name = null; + + private long m_poa_id = 0; + + private byte[] m_id = null; + + private POAKey m_key_seed = null; + + private Vector m_children = null; + + private org.omg.PortableServer.POA m_parent = null; + + private String[] m_path = null; + + private POAManagerImpl m_poa_manager = null; + + private CompletionWaiter m_completion = null; + + private boolean m_destroying = false; + + private boolean m_etherealize = false; + + // attributes depending on policies + private org.omg.PortableServer.AdapterActivator m_adapter_activator = null; + + private org.omg.PortableServer.ServantManager m_servant_manager = null; + + private org.omg.PortableServer.Servant m_default_servant = null; + + private ActiveObjectMap m_active_object_map = null; + + // OID if SystemPolicy + private SystemOID m_current_OID; + + // policies + private IdAssignmentPolicy m_id_assignment_policy = null; + + private IdUniquenessPolicy m_id_uniqueness_policy = null; + + private ImplicitActivationPolicy m_implicit_activation_policy = null; + + private LifespanPolicy m_lifespan_policy = null; + + private RequestProcessingPolicy m_request_processing_policy = null; + + private ServantRetentionPolicy m_servant_retention_policy = null; + + private ThreadPolicy m_thread_policy = null; + + private PoliciesComponent referencePolicies = null; + + /** + * Constructor. + * + * @param orb + * The ORB. + * @param adapter_name + * The POA name. + * @param a_POAManager + * The POA manager which this POA belongs to. + * @param policies + * The policies to be used in the POA. + * @param parent + * The parent POA of this POA. + * @exception org.omg.PortableServer.POAPackage.InvalidPolicy + * When policies are invalid. + */ + public POAImpl(es.tid.TIDorbj.core.TIDORB orb, + java.lang.String adapter_name, + org.omg.PortableServer.POAManager a_POAManager, + org.omg.CORBA.Policy[] policies, + org.omg.PortableServer.POA parent) + throws org.omg.PortableServer.POAPackage.InvalidPolicy + { + int length; + this.m_orb = orb; + this.m_name = adapter_name; + this.m_poa_id = System.currentTimeMillis(); + this.m_children = new Vector(); + this.m_poa_manager = (POAManagerImpl) a_POAManager; + m_poa_manager.addPOA(this); + this.m_parent = parent; + if (parent == null) + this.m_path = new String[0]; + else { + length = (((POAImpl) parent).getPath()).length; + this.m_path = new String[length + 1]; + System.arraycopy(((POAImpl) parent).getPath(), 0, this.m_path, 0, + length); + this.m_path[length] = adapter_name; + } + this.m_completion = new CompletionWaiter(this.m_orb); + + this.referencePolicies = new PoliciesComponent(new PolicyContext(null)); + + // Set policies + if (policies != null) { + for (int i = 0; i < policies.length; i++) { + if (policies[i] == null) + throw new BAD_PARAM("Null policy reference"); + + switch (policies[i].policy_type()) + { + case ID_ASSIGNMENT_POLICY_ID.value: + if (m_id_assignment_policy != null) { + throw new InvalidPolicy(); + } + m_id_assignment_policy = + (IdAssignmentPolicy) policies[i]; + break; + case ID_UNIQUENESS_POLICY_ID.value: + if (m_id_uniqueness_policy != null) { + throw new InvalidPolicy(); + } + m_id_uniqueness_policy = + (IdUniquenessPolicy) policies[i]; + break; + case IMPLICIT_ACTIVATION_POLICY_ID.value: + if (m_implicit_activation_policy != null) { + throw new InvalidPolicy(); + } + m_implicit_activation_policy = + (ImplicitActivationPolicy) policies[i]; + break; + case org.omg.PortableServer.LIFESPAN_POLICY_ID.value: + if (m_lifespan_policy != null) { + throw new InvalidPolicy(); + } + m_lifespan_policy = (LifespanPolicy) policies[i]; + break; + case REQUEST_PROCESSING_POLICY_ID.value: + if (m_request_processing_policy != null) { + throw new InvalidPolicy(); + } + m_request_processing_policy = + (RequestProcessingPolicy) policies[i]; + break; + case SERVANT_RETENTION_POLICY_ID.value: + if (m_servant_retention_policy != null) { + throw new InvalidPolicy(); + } + m_servant_retention_policy = + (ServantRetentionPolicy) policies[i]; + break; + case THREAD_POLICY_ID.value: + if (m_thread_policy != null) { + throw new InvalidPolicy(); + } + m_thread_policy = (ThreadPolicy) policies[i]; + break; + + default: + try { + referencePolicies.getPolicies().setPolicy(policies[i]); + } + catch (PolicyError e) { + throw new InvalidPolicy(); + } + } + } + } + // Set default policies + if (m_id_assignment_policy == null) { + m_id_assignment_policy = + create_id_assignment_policy(IdAssignmentPolicyValue.SYSTEM_ID); + } + + if (m_id_uniqueness_policy == null) { + m_id_uniqueness_policy = + create_id_uniqueness_policy(IdUniquenessPolicyValue.UNIQUE_ID); + } + + if (m_implicit_activation_policy == null) { + m_implicit_activation_policy = + create_implicit_activation_policy( + ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION); + } + + if (m_lifespan_policy == null) { + m_lifespan_policy = + create_lifespan_policy(LifespanPolicyValue.TRANSIENT); + } + + if (m_request_processing_policy == null) { + m_request_processing_policy = + create_request_processing_policy( + RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY); + } + + if (m_servant_retention_policy == null) { + m_servant_retention_policy = + create_servant_retention_policy( + ServantRetentionPolicyValue.RETAIN); + } + if (m_thread_policy == null) { + m_thread_policy = + create_thread_policy(ThreadPolicyValue.ORB_CTRL_MODEL); + } + + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + + m_active_object_map = new ActiveObjectMap(); + } + + if (m_id_assignment_policy.value() == IdAssignmentPolicyValue.SYSTEM_ID) + m_current_OID = new SystemOID(m_poa_id, 0); + + // Wrong Policies + if ((m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION) + && ((m_id_assignment_policy.value() + == IdAssignmentPolicyValue.USER_ID) + || (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN))) { + throw new InvalidPolicy(); + } + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) + && (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY)) { + throw new InvalidPolicy(); + } + + // Generate id + m_id = createKey(null).toString().getBytes(); + } + + /** + * Create a POA as a children of this POA. + * + * @param adapter_name + * The POA name of the new POA. + * @param a_POAManager + * The POA manager which the new POA belongs to. + * @param policies + * The policies to be used in the new POA. + * @exception org.omg.PortableServer.POAPackage.AdapterAlreadyExists + * When this POA has alreay a children named adapter_name. + * @exception org.omg.PortableServer.POAPackage.InvalidPolicy + * When policies are invalid. + */ + synchronized public org.omg.PortableServer.POA + create_POA(java.lang.String adapter_name, + org.omg.PortableServer.POAManager a_POAManager, + org.omg.CORBA.Policy[] policies) + throws org.omg.PortableServer.POAPackage.AdapterAlreadyExists, + org.omg.PortableServer.POAPackage.InvalidPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((adapter_name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (findChildren(adapter_name) != null) { + throw new org.omg.PortableServer.POAPackage.AdapterAlreadyExists(); + } + POAManagerImpl POAmgr = null; + if (a_POAManager == null) { + POAmgr = new POAManagerImpl(m_orb); + } else { + if(! (a_POAManager instanceof POAManagerImpl)) { + throw new BAD_PARAM("Invalid POAManager: it is not from TIDORB"); + } + + POAmgr = (POAManagerImpl) a_POAManager; + + if(POAmgr.m_orb != m_orb) { + throw new BAD_PARAM("Invalid POAManager: it is not from the same instance of TIDORB"); + } + + } + POAImpl newPOA = + new POAImpl(m_orb, adapter_name, POAmgr, policies, this); + + if (m_destroying) { + newPOA.destroy(false, false); + } else { + m_children.addElement(newPOA); + } + + if(a_POAManager == null) { // recently created + PolicyContext context = newPOA.getPolicyContext(); + + QueueOrderPolicy queuePolicy = context.getQueueOrderPolicy(); + + if(queuePolicy != null) { + POAmgr.setQueueOrderPolicy(queuePolicy); + } + } + + return newPOA; + } + + /** + * @return + */ + public PolicyContext getPolicyContext() + { + return this.referencePolicies.getPolicies(); + } + + /** + * Find a POA among this POA's children. + * + * @param adapter_name + * The POA name. + * @param activate_it + * If it is true find_POA() will try to activate the POA in case + * it can't find it. + * @exception org.omg.PortableServer.POAPackage.AdapterNonExistent + * When this POA has not a children named adapter_name. + */ + public org.omg.PortableServer.POA find_POA(java.lang.String adapter_name, + boolean activate_it) + throws org.omg.PortableServer.POAPackage.AdapterNonExistent + { + synchronized (this) { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + } + + if (adapter_name == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + org.omg.PortableServer.POA poa = findChildren(adapter_name); + + if (poa == null) { + if ((activate_it) && (m_adapter_activator != null)) { + try { + m_adapter_activator.unknown_adapter(this, adapter_name); + } + catch (Exception e) { + throw new org.omg.CORBA.OBJ_ADAPTER(e.getMessage()); + } + poa = findChildren(adapter_name); + // see if _activator has created the POA + if (poa == null) { + // AdapterActivator failed! + throw new AdapterNonExistent(); + } + + if (m_destroying) + poa.destroy(false, false); + + return poa; + + } else { + // AdapterActivator does not exist! + throw new AdapterNonExistent(); + } + } else + return poa; + } + + /** + * Destroy the POA. + * + * @param etherealize_objects + * If true, it must etherealize all objects. + * @param wait_for_completion + * Wait-for-completion flag. + */ + public void destroy(boolean etherealize_objects, + boolean wait_for_completion) + { + synchronized (this) { + if (!m_destroying) { + for (int i = 0; i < m_children.size(); i++) { + org.omg.PortableServer.POA poa=(org.omg.PortableServer.POA) + m_children.elementAt(i); + poa.destroy(etherealize_objects, wait_for_completion); + } + m_etherealize = etherealize_objects; + } + m_destroying = true; + } + + if (wait_for_completion) { + // Wait until there are no executing requests + if (m_completion.conditionToWait()) { + m_completion.waitForCompletion(); + } else { + throw new BAD_INV_ORDER("Can't waitForCompletion!"); + } + + synchronized (this) { + + if (!m_destroyed) { + // POA has not been destroyed yet -> destroy it now + trueDestroy(); + } + } + } else { + synchronized (this) { + boolean PoaNotInUse = m_completion.getActiveRequests() <= 0; + if (PoaNotInUse) { + trueDestroy(); + } + } + + } + } + + /* ************ Policy creation ************* */ + + public org.omg.PortableServer.ThreadPolicy + create_thread_policy(org.omg.PortableServer.ThreadPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.poa.policies.ThreadPolicyImpl(value); + } + + public org.omg.PortableServer.LifespanPolicy + create_lifespan_policy(org.omg.PortableServer.LifespanPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.poa.policies.LifespanPolicyImpl(value); + } + + public org.omg.PortableServer.IdUniquenessPolicy + create_id_uniqueness_policy + (org.omg.PortableServer.IdUniquenessPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.IdUniquenessPolicyImpl(value); + } + + public org.omg.PortableServer.IdAssignmentPolicy + create_id_assignment_policy( + org.omg.PortableServer.IdAssignmentPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.IdAssignmentPolicyImpl(value); + } + + public org.omg.PortableServer.ImplicitActivationPolicy + create_implicit_activation_policy( + org.omg.PortableServer.ImplicitActivationPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.ImplicitActivationPolicyImpl(value); + } + + public org.omg.PortableServer.ServantRetentionPolicy + create_servant_retention_policy( + org.omg.PortableServer.ServantRetentionPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.ServantRetentionPolicyImpl(value); + } + + public org.omg.PortableServer.RequestProcessingPolicy + create_request_processing_policy( + org.omg.PortableServer.RequestProcessingPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.RequestProcessingPolicyImpl(value); + } + + /* ************ Accessors ************* */ + + public long getId() + { + return m_poa_id; + } + + public byte[] id() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_id; + } + + public java.lang.String the_name() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_name; + } + + public org.omg.PortableServer.POA the_parent() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_parent; + } + + public String[] getPath() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_path; + } + + synchronized public org.omg.PortableServer.POA[] the_children() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + org.omg.PortableServer.POA[] childrenArray = + new org.omg.PortableServer.POA[m_children.size()]; + m_children.copyInto(childrenArray); + return childrenArray; + } + + public org.omg.PortableServer.POAManager the_POAManager() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_poa_manager; + } + + synchronized public org.omg.PortableServer.AdapterActivator the_activator() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_adapter_activator; + } + + synchronized public void + the_activator(org.omg.PortableServer.AdapterActivator the_activator) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (the_activator == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + m_adapter_activator = the_activator; + } + + synchronized public org.omg.PortableServer.ServantManager + get_servant_manager() + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + return m_servant_manager; + } + + synchronized public void + set_servant_manager(org.omg.PortableServer.ServantManager imgr) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (imgr == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + if (!(imgr instanceof org.omg.PortableServer.ServantActivator)) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) { + if (!(imgr instanceof org.omg.PortableServer.ServantLocator)) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + if (m_servant_manager != null) { + throw new org.omg.CORBA.BAD_INV_ORDER(); + } + m_servant_manager = imgr; + } + + synchronized public org.omg.PortableServer.Servant get_servant() + throws org.omg.PortableServer.POAPackage.NoServant, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (m_default_servant == null) { + throw new org.omg.PortableServer.POAPackage.NoServant(); + } + return m_default_servant; + } + + synchronized public void + set_servant(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + m_default_servant = p_servant; + // Servant delegate creation (oid == null ?) + ServantDelegate delegate = new ServantDelegate(this, null); + m_default_servant._set_delegate(delegate); + } + + /* ************ Activation ************* */ + + /** + * Activate an object in this POA. + * + * @param p_servant + * Servant. + * @return Returns an ORB generated object Id. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] + activate_object(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + != IdAssignmentPolicyValue.SYSTEM_ID) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + OID id = nextOID(); + try { + activate_object_with_id(id, p_servant); + } + catch (org.omg.PortableServer.POAPackage.ObjectAlreadyActive e) { + // this should never happen + throw new + INTERNAL("ObjectAlreadyActive thrown with SYSTEM_ID policy!!"); + } + return id.toByteArray(); + } + + /** + * Activate an object in this POA. + * + * @param id + * User created object Id. + * @param p_servant + * Servant. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If id is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public void + activate_object_with_id(byte[] id, + org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (p_servant == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (id.length == 0) + throw new BAD_PARAM("Invalid id length: 0", 0, + CompletionStatus.COMPLETED_NO); + + activate_object_with_id(new OID(id), p_servant); + + } + + /** + * Activate an object in this POA. + * + * @param id + * User created object Id. + * @param p_servant + * Servant. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If id is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + + protected void + activate_object_with_id(OID oid, + org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + boolean uniqueId = + m_id_uniqueness_policy.value() == IdUniquenessPolicyValue.UNIQUE_ID; + // See if there a destruction process running + + synchronized (m_active_object_map) { + java.lang.Object semaphore = m_active_object_map.isDestroying(oid); + if (semaphore != null) { + synchronized (semaphore) { + try { + semaphore.wait(); + } + catch (Exception e) {} + } + } + } + synchronized (this) { + m_active_object_map.put(oid, p_servant, uniqueId); + // Servant delegate creation + ServantDelegate delegate = new ServantDelegate(this, + oid.toByteArray()); + p_servant._set_delegate(delegate); + } + } + + /** + * Deactivate an object in this POA. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If id is not active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public void deactivate_object(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + OID tid_oid = new OID(oid); + + synchronized (m_active_object_map) { + if (m_active_object_map.isDestroying(tid_oid) == null) { + m_active_object_map.destroy(tid_oid); + tryToRemoveObject(tid_oid); + } + } + } + + /* ************ Id conversion ************* */ + + /** + * Create an object reference for a repository Id (using a new object Id). + * + * @param intf + * The repository Id + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object + create_reference(java.lang.String intf) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (intf == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (intf.length() == 0) + throw new BAD_PARAM("Invalid id length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + != IdAssignmentPolicyValue.SYSTEM_ID) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + OID newOid = nextOID(); + return createReferenceWithIdAux(newOid, intf); + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + */ + public org.omg.CORBA.Object create_reference_with_id(byte[] oid, + java.lang.String intf) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((oid == null) || (intf == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (intf.length() == 0) + throw new BAD_PARAM("Invalid intf length: 0", 0, + CompletionStatus.COMPLETED_NO); + + return create_reference_with_id(new OID(oid), intf); + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + + synchronized protected org.omg.CORBA.Object + create_reference_with_id(OID oid, + java.lang.String intf) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + == IdAssignmentPolicyValue.SYSTEM_ID) { + + SystemOID s_oid = SystemOID.fromOID(oid); + + if (s_oid == null) + throw new BAD_PARAM("Invalid System OID", 0, + CompletionStatus.COMPLETED_NO); + + if (m_lifespan_policy.value() == LifespanPolicyValue.TRANSIENT) { + if ((s_oid.getPOAId() != m_poa_id) + || (currentOID().getSerial() < s_oid.getSerial())) { + throw new org.omg.CORBA.BAD_PARAM(); + } + } else { // PERSISTENT + if ((s_oid.getPOAId() == m_poa_id) + && (currentOID().getSerial() < s_oid.getSerial())) { + throw new org.omg.CORBA.BAD_PARAM(); + } + } + + return createReferenceWithIdAux(s_oid, intf); + } + + return createReferenceWithIdAux(oid, intf); + } + + /** + * Creates a new ObjectKey with the given oid. + *

+ * If the Lifespan policy is TRANSIENT, the poa_id is set to remember that + * the key is only valid in the current poa context. + */ + + protected POAKey createKey(OID oid) + { + if (m_key_seed == null) { + if (m_lifespan_policy.value() == LifespanPolicyValue.TRANSIENT) + m_key_seed = new POAKey(this, m_poa_id, null); + else + m_key_seed = new POAKey(this, 0, null); + } + + POAKey key = null; + + try { + key = (POAKey) m_key_seed.clone(); + } + catch (CloneNotSupportedException cnse) { + throw new org.omg.CORBA.INTERNAL(); + } + + key.setOID(oid); + return key; + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + */ + protected org.omg.CORBA.Object createReferenceWithIdAux( OID oid, java.lang.String intf) + { + POAKey poakey = createKey(oid); + IOR ior; + + TaggedComponent[] poaComponents = null; + + if(referencePolicies.getPolicies().getSize() > 0) { + poaComponents = new TaggedComponent[1]; + poaComponents[0] = referencePolicies; + } + + try { + + ior = m_orb.getCommunicationManager() + .getLayerById( IIOPCommunicationLayer.ID ) + .createIOR(intf, poakey, poaComponents); + + } catch ( CommunicationException ce ) { + throw new INTERNAL( + "Unable to create ior:" + ce.getMessage(), + 0, + CompletionStatus.COMPLETED_NO + ); + } + + return es.tid.TIDorbj.core.ObjectImpl.fromIOR(m_orb, ior); + } + + /** + * Get the object Id of a given servant. + * + * @param p_servant + * The servant. + * @exception org.omg.PortableServer.POAPackage.ServantNotActive + * If p_servant is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] + servant_to_id(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + boolean hasRetain = (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN); + + boolean hasUniqueId = (m_id_uniqueness_policy.value() + == IdUniquenessPolicyValue.UNIQUE_ID); + + boolean hasImplicitActivation =(m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + + boolean hasDefaultServant = (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT); + + if (!(hasDefaultServant + || (hasRetain && (hasUniqueId || hasImplicitActivation)))) + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + + if (hasRetain) { + // 1st behaviour + if (hasUniqueId) { + OID oid = m_active_object_map.get(p_servant); + if (oid != null) { + return oid.toByteArray(); + } + } + // 2nd behaviour + if (hasImplicitActivation) { + OID oid = m_active_object_map.get(p_servant); + if ((oid == null) || (!hasUniqueId)) { + OID newOid = nextOID(); + try { + activate_object_with_id(newOid, p_servant); + return newOid.toByteArray(); + } + catch (ObjectAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + catch (ServantAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + } + } + } + // 3rd behaviour + if (hasDefaultServant && (m_default_servant == p_servant)) { + try { + org.omg.PortableServer.Servant servant = + m_orb.initPOACurrent().getServant(); + if (servant == m_default_servant) { + // operation invoked on the default servant + return m_orb.initPOACurrent().get_object_id(); + } + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + } + + // 4th behaviour + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + /** + * Get the object reference of a given servant. + * + * @param p_servant + * The servant. + * @exception org.omg.PortableServer.POAPackage.ServantNotActive + * If p_servant is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object + servant_to_reference(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + boolean hasRetain = (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN); + boolean hasUniqueId = (m_id_uniqueness_policy.value() + == IdUniquenessPolicyValue.UNIQUE_ID); + boolean hasImplicitActivation = (m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + + if (!(hasRetain && (hasUniqueId || hasImplicitActivation))) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + // 1st behaviour + if (hasUniqueId) { + OID oid = m_active_object_map.get(p_servant); + if (oid != null) { + return create_reference_with_id(oid.toByteArray(), + getRepositoryId(p_servant)); + } + } + + // 2nd behaviour + if (hasImplicitActivation) { + OID oid = m_active_object_map.get(p_servant); + if ((oid == null) || (!hasUniqueId)) { + OID newOid = nextOID(); + try { + activate_object_with_id(newOid, p_servant); + return create_reference_with_id(newOid, + getRepositoryId(p_servant)); + } + catch (ObjectAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + catch (ServantAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + } + } + // 3rd behaviour + try { + org.omg.PortableServer.Servant servant = m_orb.initPOACurrent() + .getServant(); + + if (servant == m_default_servant) { + // operation invoked on the default servant + byte[] currentOID = m_orb.initPOACurrent().get_object_id(); + return create_reference_with_id(currentOID, + getRepositoryId(servant)); + } + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + // 4th behaviour + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + /** + * Get the servant of a given object reference. + * + * @param reference + * The object reference. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongAdapter + * If the object reference does not belong to this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.PortableServer.Servant + reference_to_servant(org.omg.CORBA.Object reference) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongAdapter, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (reference == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + byte[] oid = reference_to_id(reference); + return id_to_servant(oid); + } + + /** + * Get the object Id of a given object reference. + * + * @param reference + * The object reference. + * @exception org.omg.PortableServer.POAPackage.WrongAdapter + * If the object reference does not belong to this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] reference_to_id(org.omg.CORBA.Object reference) + throws org.omg.PortableServer.POAPackage.WrongAdapter, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (reference == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + try { + org.omg.CORBA.portable.ObjectImpl obj = + (org.omg.CORBA.portable.ObjectImpl) reference; + CommunicationDelegate delegate = + (CommunicationDelegate) obj + ._get_delegate(); + IOR ior = delegate.getReference(); + + POAKey poaKey = POAKey.createKey( ior.getObjectKey().getMarshaledKey() ); + POAKey poaKey2 = createKey(null); + if (!poaKey2.samePOA(poaKey)) { + throw new org.omg.PortableServer.POAPackage.WrongAdapter(); + } + return poaKey.getOID().toByteArray(); + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.WrongAdapter(); + } + } + + /** + * Get the servant of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + public org.omg.PortableServer.Servant id_to_servant(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + return id_to_servant(new OID(oid)); + } + + /** + * Get the servant of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized protected org.omg.PortableServer.Servant id_to_servant(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (( m_servant_retention_policy.value() != ServantRetentionPolicyValue.RETAIN) && + ( m_request_processing_policy.value() != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT)) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) + && (m_active_object_map.isActive(oid))) { + return m_active_object_map.get(oid); + } + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) + && (m_default_servant != null)) { + // Default servant invocation (oid == current request oid ??) + ServantDelegate srv_delegate = + (ServantDelegate) m_default_servant._get_delegate(); + srv_delegate.setObjectId(oid.toByteArray()); + return m_default_servant; + } + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + + /** + * Get the object reference of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object id_to_reference(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + OID tid_oid = new OID(oid); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (!m_active_object_map.isActive(tid_oid)) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + org.omg.PortableServer.Servant servant = + m_active_object_map.get(tid_oid); + return create_reference_with_id(tid_oid, getRepositoryId(servant)); + } + + + + + /* ************ TIDorb methods ************* */ + + /** + * Finds the servant for an object Id. Executes all needed activations, + * according to the policies of this POA. + * + * @param oid + * The object Id. + * @param operation + * The name of the operation invoked (if any). + * @param cookieHolder + * The CookieHolder (only if ServantLocator is needed). + * @param servantLocatorUsed + * Returns true if ServantLocator has been used. + * @return The servant. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If it tries to use a inactive object. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If it tries to activate an active object. + * @exception org.omg.PortableServer.ForwardRequest + * It can be thrown by incarnate(). + */ + synchronized protected org.omg.PortableServer.Servant + find_servant(OID oid, + String operation, + CookieHolder cookieHolder, + org.omg.CORBA.BooleanHolder servantLocatorUsed) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.ForwardRequest + { + + servantLocatorUsed.value = false; + org.omg.PortableServer.Servant servant = null; + + try { + + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN)) { + // RETAIN && USE_ACTIVE_OBJECT_MAP_ONLY + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY){ + servant = id_to_servant(oid); + return servant; + } + + // RETAIN && USE_DEFAULT_SERVANT + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + servant = id_to_servant(oid); + return servant; + } + + // RETAIN && USE_SERVANT_MANAGER + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + + try { + // try to get id from the Active Object Map + servant = id_to_servant(oid); + } + catch (ObjectNotActive e){ + // try to use Servant Activator (incarnate) + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) + m_servant_manager; + servant = activator.incarnate(oid.toByteArray(), this); + if (servant == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + try { + // try to activate servant created by Servant + // Activator + activate_object_with_id(oid, servant); + } + catch (ServantAlreadyActive e2) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + + return servant; + } + } else { // NON_REATAIN + + // NON_RETAIN && USE_DEFAULT_SERVANT + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + if (m_default_servant == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + // return Default Servant + servant = m_default_servant; + // Default servant invocation (oid == current request oid + // ??) + ServantDelegate srv_delegate = + (ServantDelegate) servant._get_delegate(); + + srv_delegate.setObjectId(oid.toByteArray()); + + return servant; + } + // NON_RETAIN && USE_SERVANT_MANAGER + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + // try to use Servant Locator (preinvoke) + org.omg.PortableServer.ServantLocator locator = + (org.omg.PortableServer.ServantLocator) + m_servant_manager; + + servant = locator.preinvoke(oid.toByteArray(), this, + operation, cookieHolder); + + servantLocatorUsed.value = true; + // Servant delegate creation (oid == current request oid ??) + + ServantDelegate delegate = + new ServantDelegate(this,oid.toByteArray()); + + servant._set_delegate(delegate); + + return servant; + } + } + + } + catch (org.omg.PortableServer.POAPackage.WrongPolicy dummy) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEEP_DEBUG, + "Unexpected WrongPolicy exception", dummy); + } + + throw new INTERNAL("Unexpected WrongPolicy exception"); + } + + return servant; + } + + /** + * Call postinvoke. This method is only used if there was a preinvoke before + * servant invocation. + * + * @param oid + * The object Id. + * @param operation + * The name of the operation invoked. + * @param cookieHolder + * The CookieHolder + * @param servant + * The servant. + * @return The servant. + */ + synchronized protected void + callPostinvoke(byte[] oid, + String operation, + CookieHolder cookieHolder, + org.omg.PortableServer.Servant servant) + { + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) + && (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER)) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + org.omg.PortableServer.ServantLocator locator = + (org.omg.PortableServer.ServantLocator) m_servant_manager; + if (isSingleThread()) { + synchronized (locator) { + locator.postinvoke(oid, this, operation, + cookieHolder.value, servant); + } + } else { + locator.postinvoke(oid, + this, + operation, + cookieHolder.value, + servant); + } + } + } + + /** + * @return True if POA's ThreadPolicy is SINGLE_THREAD. + */ + synchronized protected boolean isSingleThread() + { + return (m_thread_policy.value() + == ThreadPolicyValue.SINGLE_THREAD_MODEL); + } + + /** + * @return True if POA's BidirectionalPolicy is BOTH. + */ + synchronized public boolean isBidirectional() + { + BidirectionalPolicy bidirectional_policy = + referencePolicies.getPolicies().getBidirectionalPolicy(); + + if(bidirectional_policy == null) { + return false; + } else { + return (bidirectional_policy.value() == BOTH.value); + } + } + + /** + * @return True if this POA has an AdapterActivator. + */ + synchronized protected boolean hasAdapterActivator() + { + return m_adapter_activator != null; + } + + /** + * Adds a new user for this oid. This means that there is one more active + * request executing some request with this object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + */ + synchronized protected void addUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + + if (m_active_object_map.isActive(oid)) { + m_active_object_map.addUser(oid); + } + } + + m_completion.beginRequest(); + m_poa_manager.beginRequest(); + } + + /** + * Removes a user for this oid. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @see addUser. + */ + protected void removeUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + // Decrease # of users of OID + m_completion.endRequest(); + synchronized (this) { + m_poa_manager.endRequest(); + if (m_destroying) { + boolean PoaNotInUse = m_completion.getActiveRequests() <= 0; + if (PoaNotInUse) { + trueDestroy(); + } + } else { + tryToRemoveObject(oid); + } + } + } + + /** + * Etherealizes all objects in this POA manager. + */ + synchronized protected void etherealizeAllObjects() + { + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + java.util.Enumeration oids = m_active_object_map.getOIDs(); + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) + && (m_servant_manager != null)) { + // call etherealize + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) m_servant_manager; + while (oids.hasMoreElements()) { + OID oid = (OID) oids.nextElement(); + try { + org.omg.PortableServer.Servant servant = + m_active_object_map.remove(oid); + if (isSingleThread()) { + synchronized (activator) { + activator.etherealize( + oid.toByteArray(), + this, + servant, + false, + m_active_object_map.contains(servant)); + } + } else { + activator.etherealize( + oid.toByteArray(), + this, + servant, + false, + m_active_object_map.contains(servant)); + } + } + catch (Exception e) { + // should never happen + e.printStackTrace(); + } + } + } + } else { + //nothing to do + } + } + + /** + * Creates the root POA. This method should only be called by + * es.tid.TIDorbj.core.TIDorb.resolve_initial_references() + * + * @param orb + * The ORB. + * @see es.tid.TIDorbj.core.TIDORB#resolve_initial_references + */ + static public POAImpl createRootPOA(es.tid.TIDorbj.core.TIDORB orb) + { + POAImpl rootPOA = null; + org.omg.CORBA.Policy[] policies = new org.omg.CORBA.Policy[8]; + policies[0] = + new IdAssignmentPolicyImpl(IdAssignmentPolicyValue.SYSTEM_ID); + policies[1] = + new IdUniquenessPolicyImpl(IdUniquenessPolicyValue.UNIQUE_ID); + policies[2] = + new ImplicitActivationPolicyImpl( + ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + policies[3] = + new LifespanPolicyImpl(LifespanPolicyValue.TRANSIENT); + policies[4] = + new RequestProcessingPolicyImpl( + RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY); + policies[5] = + new ServantRetentionPolicyImpl(ServantRetentionPolicyValue.RETAIN); + policies[6] = new ThreadPolicyImpl(ThreadPolicyValue.ORB_CTRL_MODEL); + policies[7] = + new es.tid.TIDorbj.core.BidirectionalPolicyImpl(NORMAL.value); + try { + POAManagerImpl mgr = new POAManagerImpl(orb); + rootPOA = new POAImpl(orb, "rootPOA", mgr, policies, null); + } + catch (org.omg.PortableServer.POAPackage.InvalidPolicy e) { + // this can never happen + } + return rootPOA; + } + + /* ************ Private methods ************* */ + + /** + * Removes an object if there are no executing request using it. + * + * @param oid + * The object Id. + */ + private void tryToRemoveObject(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + if (m_active_object_map.isActive(oid)) { + boolean OidNotInUse = m_active_object_map.removeUser(oid); + if (OidNotInUse) { + trueRemoveObject(oid); + } + } + } + } + + /** + * Removes an object. + * + * @param oid + * The object Id. + */ + private void trueRemoveObject(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + // Remove OID from ActiveObjectMap + // ///////////////////////////////////////////////////////////// + org.omg.PortableServer.Servant servant = + m_active_object_map.remove(oid); + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEEP_DEBUG, "Removing object: " + + oid.toString()); + } + + // Try to etherealize, if necessary + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) + && (m_servant_manager != null)) { + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) m_servant_manager; + if (isSingleThread()) { + synchronized (activator) { + activator.etherealize(oid.toByteArray(), + this, + servant, + true, + m_active_object_map.contains(servant)); + } + } else { + activator.etherealize(oid.toByteArray(), + this, servant, + true, + m_active_object_map.contains(servant)); + } + } + // Continue with waiting activations of oid (if any) + synchronized (servant) { + servant.notifyAll(); + } + } + + public void destroy() + { + throw new BAD_OPERATION(); + } + + /** + * Destroys the POA manager. + */ + synchronized public void trueDestroy() + { + m_destroyed = true; + + if (m_etherealize) { + // Etherealize all objects + etherealizeAllObjects(); + } else { + // init activeObjectMap (perhaps this is not necessary) + m_active_object_map = new ActiveObjectMap(); + } + // remove POA from parent + if (m_parent != null) { + ((POAImpl) m_parent).m_children.removeElement(this); + } + m_poa_manager.removePOA(this); + m_poa_manager = null; + } + + /** + * Find a POA among the POA's children. + * + * @param poa_name + * The POA name. + */ + private org.omg.PortableServer.POA findChildren(String poa_name) + { + org.omg.PortableServer.POA poa = null; + for (int i = 0; i < m_children.size(); i++) { + poa = (org.omg.PortableServer.POA) m_children.elementAt(i); + if (poa_name.equals(poa.the_name())) { + return poa; + } + } + return null; + } + + /** + * Returns the repository Id of a servant. + * + * @param servant + * The servant. + * @return The repository Id. + */ + private String getRepositoryId(org.omg.PortableServer.Servant servant) + { + return servant._all_interfaces(this, servant._object_id())[0]; + } + + /** + * @return The current System Object Id. + */ + public SystemOID currentOID() + { + return m_current_OID; + } + + /** + * Generates the next oid. + * + * @return The next Object Id. + */ + public OID nextOID() + { + SystemOID aux = m_current_OID; + m_current_OID = m_current_OID.next(); + return aux; + } + + + + /* ************ ObjectImpl ************* */ + + public String toString() + { + if (m_poa_string_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("POA "); + POAKey key = createKey(null); + buffer.append(key.getPOAPath()); + m_poa_string_name = buffer.toString(); + } + + return m_name; + } + + + + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAKey.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAKey.java.svn-base new file mode 100644 index 0000000..addbf89 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAKey.java.svn-base @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +public class POAKey extends ObjectKey + implements Cloneable +{ + + /** + * Magic number: start of an POAKey + */ + + public final static byte MAGIC_START = 0x0; + + /** + * Start encapsulated key size to verify if it is an POAKey + */ + + public final static int START_BUFFER_SIZE = + CDR.ULONG_SIZE /* encapsulation size */ + + CDR.BOOLEAN_SIZE /* byte order */ + + (2 * CDR.OCTET_SIZE); /* and 2 magic number */ + + /** + * Sequence of poa names from the rootPOA to the final POA. + */ + private String[] m_poas = null; + + /** + * Rereference durability. If 0 the reference is persistent, otherwise the + * reference is transient, and it lifespan is joined to its POA lifespan. + */ + private long m_poa_id = 0L; + + /** + * Object Id. + */ + private OID m_oid = null; + + private String m_key_name = null; + + private POAKey(){ + + } + + + public POAKey(org.omg.PortableServer.POA poa, long poa_id, OID oid) { + m_poas = ((POAImpl) (poa)).getPath(); + m_poa_id = poa_id; + m_oid = oid; + } + + public POAKey(String[] poas, long poa_id, OID oid) + { + m_poas = poas; + m_poa_id = poa_id; + m_oid = oid; + } + + + public String getPOA(int poa_level) + { + return m_poas[poa_level]; + } + + public int numberOfPOAs() + { + return m_poas.length; + } + + public OID getOID() + { + return m_oid; + } + + public long getPOAId() + { + return m_poa_id; + } + + protected void setOID(OID oid) + { + m_oid = oid; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if ( super.getMarshaledKey() == null ){ + + // create input stream for save the encapsualation + CDRInputStream encapsulation_input; + encapsulation_input = output.inputStreamAtThisPosition(); + + if (m_poas == null) { + throw new INTERNAL("Uncompleted POAKey"); + } + + // begin marshalling + output.enterEncapsulation(); + + // KEY is alwais 1.2 + + GIOPVersion output_version = output.getVersion(); + output.setVersion(GIOPVersion.VERSION_1_2); + + // write magic start 2 bytes with 0 value + output.write_octet(MAGIC_START); + output.write_octet(MAGIC_START); + + // write string[] with poas path + // - number of poas in path + output.write_ulong(m_poas.length); + // - each poa path entry + for (int i = 0; i < m_poas.length; i++) { + output.write_string(m_poas[i]); + } + + // lifespan time + output.write_longlong(m_poa_id); + + // oid + byte[] oid_value = m_oid.toByteArray(); + if (oid_value == null) { + throw new INTERNAL("Uncompleted POAKey"); + } + output.write_ulong(oid_value.length); + output.write_octet_array(oid_value, 0, oid_value.length); + + output.setVersion(output_version); + + // end marshalling + output.exitEncapsulation(); + + super.setMarshaledKey( encapsulation_input.readEncapsulation() ); + + encapsulation_input = null; + + } else { + super.write( output ); + } + + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + // KEY is alwais 1.2 + + GIOPVersion input_version = input.getVersion(); + + input.setVersion(GIOPVersion.VERSION_1_2); + + // check magic bytes + + byte magic_0 = input.read_octet(); + byte magic_1 = input.read_octet(); + + if ((magic_0 != MAGIC_START) || (magic_1 != MAGIC_START)) + throw new MARSHAL("Not a TIDorb key"); + + // read string[] with poas path + + int length = input.read_ulong(); + + if (length < 0) + throw new INV_OBJREF("Malformed POAKey(bad number of poas)"); + + m_poas = new String[length]; + for (int i = 0; i < m_poas.length; i++) + m_poas[i] = input.read_string(); + + m_poa_id = input.read_longlong(); + + // read byte[] with oid + + length = input.read_ulong(); + + if (length == 0) + throw new org.omg.CORBA.INV_OBJREF("Malformed POAKey"); + + byte[] oid_value = new byte[length]; + input.read_octet_array(oid_value, 0, length); + + m_oid = new OID(oid_value); + + input.setVersion(input_version); + } + + public boolean samePOA(POAKey other) + { + if (m_poa_id != other.m_poa_id) + return false; + if (m_poas.length != other.m_poas.length) + return false; + for (int i = 0; i < m_poas.length; i++) { + if (!m_poas[i].equals(other.m_poas[i])) + return false; + } + return true; + } + + public boolean equals(POAKey other) + { + return m_oid.equals(other.m_oid) && samePOA(other); + } + + public Object clone() + throws CloneNotSupportedException + { + return super.clone(); + } + + public String getPOAPath() + { + StringBuffer str = new StringBuffer("/"); + if (m_poas != null) { + for (int i = 0; i < m_poas.length; i++) { + str.append(m_poas[i]).append("/"); + } + } + + return str.toString(); + } + + public static POAKey createKey(Encapsulation key) + { + if(maybePOAKey(key)) { + POAKey poaKey = new POAKey(); + poaKey.setMarshaledKey( key ); + poaKey.read( key.createInputStream() ); + return poaKey; + } else { + return null; + } + + } + + public static boolean + maybePOAKey(es.tid.TIDorbj.core.cdr.Encapsulation encap) + { + int start = encap.getOffset(); + + if (encap.getLength() < START_BUFFER_SIZE) + return false; + + byte[] start_key_buffer = encap.getOctetSequence(); + + return (start_key_buffer[start + START_BUFFER_SIZE - 1] == MAGIC_START) + && (start_key_buffer[start + START_BUFFER_SIZE - 2] == MAGIC_START); + } + + public synchronized String toString() + { + if (m_key_name == null) { + + StringBuffer str = new StringBuffer("ObjectKey[POA: /"); + + if (m_poas != null) { + for (int i = 0; i < m_poas.length; i++) { + str.append(m_poas[i]).append("/"); + } + } + + if (m_poa_id == 0L) + str.append("; Type: PERSISTENT "); + else { + str.append("; Type: TRANSIENT(POA Id: "); + str.append(m_poa_id); + str.append("); "); + } + + if (m_oid != null) + str.append(m_oid.toString()); + + str.append(']'); + + m_key_name = str.toString(); + } + return m_key_name; + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConf.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConf.java.svn-base new file mode 100644 index 0000000..8664cf4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConf.java.svn-base @@ -0,0 +1,141 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.BAD_PARAM; + +/** + * Configuration set for POAManager. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class POAManagerConf +{ + + private int m_min_threads; + + private int m_max_threads; + + private int m_max_queued_requests; + + private int m_starving_time; + + private POAManagerConfListener m_listener = null; + + protected POAManagerConf(int min_threads, int max_threads, + int max_queued_requests, int starving_time) + { + this.m_min_threads = min_threads; + this.m_max_threads = max_threads; + this.m_max_queued_requests = max_queued_requests; + this.m_starving_time = starving_time; + } + + public void setListener(POAManagerConfListener l) + { + m_listener = l; + } + + synchronized public void setMinThreads(int min_threads) + { + if (min_threads < 0) { + throw new BAD_PARAM("min_threads can not be negative."); + } + if (min_threads > this.m_max_threads) { + throw new + BAD_PARAM("min_threads can not be greater than max_threads."); + } + this.m_min_threads = min_threads; + if (m_listener != null) { + m_listener.minThreadsHasChanged(); + } + } + + synchronized public void setMaxThreads(int max_threads) + { + if (max_threads < this.m_min_threads) { + throw new + BAD_PARAM("max_threads can not be less than min_threads."); + } + this.m_max_threads = max_threads; + } + + synchronized public void setMaxQueuedRequests(int max_queued_requests) + { + if (max_queued_requests < this.m_max_queued_requests) { + throw new + BAD_PARAM("max_queued_requests can not be decreased."); + } + this.m_max_queued_requests = max_queued_requests; + } + + synchronized public void setStarvingTime(int millisecs) + { + if (millisecs < 0) { + throw new BAD_PARAM("starving_time can not be negative."); + } + this.m_starving_time = millisecs; + } + + synchronized public int getMaxQueuedRequests() + { + return m_max_queued_requests; + } + + synchronized public int getMaxThreads() + { + return m_max_threads; + } + + synchronized public int getMinThreads() + { + return m_min_threads; + } + + synchronized public int getStarvingTime() + { + return m_starving_time; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConfListener.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConfListener.java.svn-base new file mode 100644 index 0000000..7745229 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerConfListener.java.svn-base @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +interface POAManagerConfListener +{ + + void minThreadsHasChanged(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerImpl.java.svn-base new file mode 100644 index 0000000..79bcafb --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/POAManagerImpl.java.svn-base @@ -0,0 +1,487 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_DEADLINE; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.PortableServer.POAManagerPackage.AdapterInactive; +import org.omg.PortableServer.POAManagerPackage.State; + +/** + * Implementation of POAManager. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class POAManagerImpl extends org.omg.PortableServer.POAManagerLocalBase + implements es.tid.PortableServer.POAManager +{ + + private boolean destroyed; + + // Relationships + protected es.tid.TIDorbj.core.TIDORB m_orb = null; + + protected POAManagerConf m_conf; + + private Vector m_poas; + + private RequestQueue m_request_queue; + + private ThreadPool m_pool; + + + // Members + private State m_state; + + protected java.lang.Object m_state_mutex; + + protected String m_manager_name; + + static es.tid.TIDorbj.core.util.Counter st_serial = + new es.tid.TIDorbj.core.util.Counter(); + + protected short m_queue_order; + + // waitForCompletion + private CompletionWaiter m_completion; + + /** + * Constructor. + * + * @param orb + * The ORB. + */ + public POAManagerImpl(es.tid.TIDorbj.core.TIDORB orb) + { + m_orb = orb; + synchronized (orb.m_POAManagers) { + orb.m_POAManagers.addElement(this); + } + m_manager_name = "POAManager " + st_serial.inc(); + m_state = State.HOLDING; + m_state_mutex = new Boolean(true); + m_conf = new POAManagerConf(orb.m_conf.poa_min_threads, + orb.m_conf.poa_max_threads, + orb.m_conf.poa_max_queued_requests, + orb.m_conf.poa_starving_time); + m_completion = new CompletionWaiter(orb); + m_poas = new Vector(); + m_pool = new ThreadPool(this); + m_conf.setListener(m_pool); + m_request_queue = new RequestQueue(this, m_pool, new TemporalRequestComparator()); + m_pool.minThreadsHasChanged(); + m_queue_order = ORDER_TEMPORAL.value; + + } + + /** + * Sets the mininum number of execution threads + */ + public void set_min_threads(int min_threads) + { + m_conf.setMinThreads(min_threads); + } + + /** + * Sets the maximun number of execution threads + */ + public void set_max_threads(int max_threads) + { + m_conf.setMaxThreads(max_threads); + } + + /** + * Sets the maximun number of request queued in the POAManager + */ + public void set_max_queued_requests(int max_queued_requests) + { + m_conf.setMaxQueuedRequests(max_queued_requests); + } + + /** + * Sets the maximun time an execution thread is inactive. + */ + public void set_starving_time(int millisecs) + { + m_conf.setStarvingTime(millisecs); + } + + /** + * @return maximun number of request queued in the POAManager + */ + public int get_max_queued_requests() + { + return m_conf.getMaxQueuedRequests(); + } + + /** + * @return the maximun number of execution threads + */ + public int get_max_threads() + { + return m_conf.getMaxThreads(); + } + + /** + * @return the mininum number of execution threads + */ + public int get_min_threads() + { + return m_conf.getMinThreads(); + } + + /** + * @return the maximun time an execution thread is inactive. + */ + public int get_starving_time() + { + return m_conf.getStarvingTime(); + } + + /** + * @return The associated POAManagerConf object. + */ + protected POAManagerConf getConf() + { + return m_conf; + } + + /** + * Adds a POA to this POAManager. + * + * @param poa + * The POA. + */ + protected void addPOA(org.omg.PortableServer.POA poa) + { + m_poas.addElement(poa); + } + + /** + * @return The request queue of this POAManager. + */ + protected RequestQueue getRequestQueue() + { + return m_request_queue; + } + + /** + * @return The thread pool of this POAManager. + */ + protected ThreadPool getThreadPool() + { + return m_pool; + } + + protected void setQueueOrderPolicy(QueueOrderPolicy policy) { + + short order = policy.allowed_orders(); + + set_queue_order(order); + + + } + + public void set_queue_order(short order) { + if(((order ^ ORDER_PRIORITY.value) != 0) + && (m_queue_order != ORDER_PRIORITY.value)){ + m_request_queue.setComparator(new PriorityRequestComparator()); + m_queue_order = ORDER_PRIORITY.value; + } else if (((order ^ ORDER_DEADLINE.value) != 0) + && (m_queue_order != ORDER_DEADLINE.value)){ + m_request_queue.setComparator(new DeadlineRequestComparator()); + m_queue_order = ORDER_DEADLINE.value; + } else if ((m_queue_order != ORDER_TEMPORAL.value) + || (m_queue_order != ORDER_ANY.value)) { + // default comparator will be used + m_request_queue.setComparator(new TemporalRequestComparator()); + } + } + + public short get_queue_order() + { + return m_queue_order; + + } + + + /* ************ State changes ************* */ + + /** + * This operation changes the POA manager to ACTIVE. + * + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void activate() + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> ACTIVE + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.ACTIVE) { + m_completion.stopWaiting(); + m_state = State.ACTIVE; + m_state_mutex.notifyAll(); + } + } + } + + /** + * This operation changes the POA manager to HOLDING. + * + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void hold_requests(boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> HOLDING + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.HOLDING) { + m_completion.stopWaiting(); + m_state = State.HOLDING; + m_state_mutex.notifyAll(); + } + } + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); // synchronized + } + } + + /** + * This operation changes the POA manager to DISCARDING. + * + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void discard_requests(boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> DISCARDING + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.DISCARDING) { + m_completion.stopWaiting(); + m_state = State.DISCARDING; + m_state_mutex.notifyAll(); + } + } + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); // synchronized + } + } + + /** + * This operation changes the POA manager to DEACTIVATE. + * + * @param etherealize_object + * If it is true, then all objects must be etherealized. + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void deactivate(boolean etherealize_objects, + boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + + // State change -> INACTIVE + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + + // reset the last completion waiters + m_completion.stopWaiting(); + + m_pool.deactivation(); + + m_request_queue.deactivation(); + + m_state = State.INACTIVE; + synchronized (m_orb.m_POAManagers) { + for (int i = 0; i < m_orb.m_POAManagers.size(); i++) { + if (m_orb.m_POAManagers.elementAt(i) == this) + m_orb.m_POAManagers.removeElementAt(i); + } + } + } + + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); //synchronized + if (etherealize_objects) { + // Etherealize objects (blocking) + etherealizeAllPOAs(); + } + } else if (etherealize_objects) { + // Etherealize in background + EtherealizerThread t = new EtherealizerThread(this); + t.start(); + } + } + + /** + * @return Return the state of the POA manager. + */ + public org.omg.PortableServer.POAManagerPackage.State get_state() + { + return m_state; + } + + /* ************ TIDorb methods - POA Location ************* */ + + /** + * Puts a new request in this POA manager. + * + * @param request + * The request. + */ + public void put(QueuedRequest request) + { + m_request_queue.add(request); + } + + /** + * Removes a POA from this POA manager. + * + * @param poa + * The POA being removed. + */ + protected void removePOA(org.omg.PortableServer.POA poa) + { + m_poas.removeElement(poa); + } + + /** + * Finds a POA in this POA manager. + * + * @param poaName + * The POA name. + */ + protected org.omg.PortableServer.POA findPOA(String poaName) + { + for (int i = 0; i < m_poas.size(); i++) { + org.omg.PortableServer.POA poa = (org.omg.PortableServer.POA) + m_poas.elementAt(i); + if (poa.the_name().equals(poaName)) { + return poa; + } + } + return null; + } + + /** + * Begins the execution of a request. + */ + protected void beginRequest() + { + m_completion.beginRequest(); + } + + /** + * Ends the execution of a request. + */ + protected void endRequest() + { + m_completion.endRequest(); + } + + /** + * Etherealizes all POAs (due to POA manager deactivation). + */ + protected void etherealizeAllPOAs() + { + for (int i = 0; i < m_poas.size(); i++) { + POAImpl poa = (POAImpl) m_poas.elementAt(i); + poa.etherealizeAllObjects(); + } + } + + /** + * Class to etherealize all POAs in background. + */ + public class EtherealizerThread extends Thread + { + + POAManagerImpl poaManager; + + public EtherealizerThread(POAManagerImpl poaManager) + { + this.poaManager = poaManager; + } + + public void run() + { + poaManager.etherealizeAllPOAs(); + } + } + + /* ************ ObjectImpl ************* */ + + public String toString() + { + return m_manager_name; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/PriorityRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/PriorityRequestComparator.java.svn-base new file mode 100644 index 0000000..e1757f6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/PriorityRequestComparator.java.svn-base @@ -0,0 +1,84 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +import org.omg.Messaging.PriorityRange; +import org.omg.Messaging.RequestPriorityPolicy; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Comparator that uses the request priority to decide the order + * in a request queue. In case of simillar priorities, the + * TemporalRequestComparator will be used. + * @author caceres + * + */ +public class PriorityRequestComparator + implements Comparator +{ + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + public final static int DEFAULT_PRIORITY = 0; + + TemporalRequestComparator temporalComparator; + + + /** + * @param policy + */ + public PriorityRequestComparator() + { + temporalComparator = new TemporalRequestComparator(); + } + + protected short getPriority(RequestPriorityPolicy policy) + { + short priority = DEFAULT_PRIORITY; + + + if(policy != null) { + PriorityRange range = policy.priority_range(); + priority = (short) + Math.round((float) (range.max + range.min) / 2.0); + } + + return priority; + } + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + PolicyContext context1 = request1.getPolicyContext(); + PolicyContext context2 = request2.getPolicyContext(); + + RequestPriorityPolicy reqPriority1 = null; + RequestPriorityPolicy reqPriority2 = null; + + if (context1 != null) { + reqPriority1 = context1.getRequestPriorityPolicy(); + } + + if (context2 != null) { + reqPriority2 = context2.getRequestPriorityPolicy(); + } + + short priority1 = getPriority(reqPriority1); + short priority2 = getPriority(reqPriority2); + + + if(priority1 > priority2) { + return LESS_THAN; + } else if(priority1 == priority2) { + + return temporalComparator.compare(o1, o2); + + } else { + return GREATER_THAN; + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueueReaderManager.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueueReaderManager.java.svn-base new file mode 100644 index 0000000..246478f --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueueReaderManager.java.svn-base @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Interface for queue readers that want to be notified of item availability. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public interface QueueReaderManager +{ + + boolean createNewReader(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedLocateResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedLocateResponseHandler.java.svn-base new file mode 100644 index 0000000..0fedc99 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedLocateResponseHandler.java.svn-base @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.core.comm.LocateResponseHandler; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public abstract class QueuedLocateResponseHandler + extends QueuedResponseHandler + implements LocateResponseHandler { + + private String str; + + public synchronized String toString() { + + if(str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("LocateRequest "); + buffer.append(" to "); + buffer.append(getObjectKey().toString()); + buffer.append(" with order "); + buffer.append(Long.toString(getSerial())); + str = buffer.toString(); + buffer = null; + } + return str; + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedRequest.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedRequest.java.svn-base new file mode 100644 index 0000000..1656ae5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedRequest.java.svn-base @@ -0,0 +1,179 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef?nica Investigaci?n y Desarrollo +* S.A.Unipersonal (Telef?nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + + +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Super class for request that are enqueued for later execution. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public abstract class QueuedRequest implements ResponseHandler +{ + //TODO: Should be removed after refactoring + private POAKey m_poakey; + + private int m_current_child_poa_name_level; + + private boolean m_must_discard = false; + + private org.omg.CORBA.CompletionStatus m_status; + + private POAImpl m_current_poa; + + private PolicyContext m_policy_context; + + private long m_serial; + private short m_priority; + + + //TODO: added by jprojas... + private ResponseHandler responseHandler; + + public QueuedRequest(){ + m_current_child_poa_name_level = 0; + m_poakey = null; + m_status = org.omg.CORBA.CompletionStatus.COMPLETED_NO; + m_current_poa = null; + m_policy_context = null; + m_serial = 0L; + } + + public void setPolicyContext(PolicyContext context) + { + m_policy_context = context; + } + + public PolicyContext getPolicyContext() + { + return m_policy_context; + } + + public void setPriority(short priority) { + m_priority = priority; + } + + public short getPriority () { + return m_priority; + } + + /** + * @param serial the ORB request serial number + */ + public void setSerial(long serial) + { + m_serial = serial; + } + + /** + * @return serial the ORB request serial number + */ + public long getSerial() + { + return m_serial; + } + + + public org.omg.CORBA.CompletionStatus getStatus() { + return m_status; + } + + public void setStatus(org.omg.CORBA.CompletionStatus value) { + if (value != null) { + m_status = value; + } + } + + public void setCurrentPOA( POAImpl currentPOA ){ + this.m_current_poa = currentPOA; + } + + public POAImpl getCurrentPOA() { + return m_current_poa; + } + + //TODO: this method name... igh! + public void nextChildPOA(POAImpl poa) { + m_current_poa = poa; + m_current_child_poa_name_level++; + } + + public String getCurrentChildPOAName() { + return m_poakey.getPOA(m_current_child_poa_name_level); + } + + public void setPOAKey( POAKey key ){ + this.m_poakey = key; + } + + public POAKey getPOAKey() { + return m_poakey; + } + + public OID getOID() { + return m_poakey.getOID(); + } + + public boolean isFinalPOA() { + return m_current_child_poa_name_level >= m_poakey.numberOfPOAs(); + } + + public void setMustDiscard( boolean value ) { + m_must_discard = value; + } + + public boolean getMustDiscard() { + return m_must_discard; + } + + public void destroy() { + //Empty implementation + } + + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedResponseHandler.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedResponseHandler.java.svn-base new file mode 100644 index 0000000..e82d7a6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/QueuedResponseHandler.java.svn-base @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.core.comm.ResponseHandler; + + +/** + * @author jprojas + * + */ +public abstract class QueuedResponseHandler extends QueuedRequest implements + ResponseHandler { + + private String str; + + public synchronized String toString() { + + if(str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("ServerRequest "); + buffer.append(this.getServerRequest().operation()); + buffer.append(" to "); + buffer.append(getObjectKey().toString()); + buffer.append(" with order "); + buffer.append(Long.toString(getSerial())); + str = buffer.toString(); + buffer = null; + } + return str; + } + + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/RequestQueue.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/RequestQueue.java.svn-base new file mode 100644 index 0000000..3c29d1a --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/RequestQueue.java.svn-base @@ -0,0 +1,181 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; +import java.util.Iterator; +import java.util.TreeSet; + + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TRANSIENT; + +import es.tid.TIDorbj.util.Trace; + +/** + * Queue of requests to be read by the execution thread. Implements QoS Messaging + * QueueOrderPolicy. + * + * @autor Javier Fdz. Mejuto + * @autor Juan A. Caceres + * @version 2.0 + */ +class RequestQueue { + + // Naive implementation + private TreeSet m_values = null; + + private QueueReaderManager m_queue_read_manager = null; + + private POAManagerImpl m_poa_manager; + + private boolean m_deactivation; + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this RequestQueue belongs. + * @param reader + * Object that manages the creation of new readers for this + * queue. + */ + public RequestQueue(POAManagerImpl poaManager, + QueueReaderManager reader, + Comparator comparator) { + m_values = new TreeSet(comparator); + m_queue_read_manager = reader; + m_poa_manager = poaManager; + m_deactivation = false; + } + + public synchronized void setComparator(Comparator comparator) + { + TreeSet aux = m_values; + m_values = new TreeSet(comparator); + m_values.addAll(aux); + } + + /** + * Adds an new request to the queue. + * + * @param request The request to be added. + */ + synchronized public void add(QueuedRequest request) { + if ( m_deactivation || + m_values.size() >= m_poa_manager.m_conf.getMaxQueuedRequests()) { + TRANSIENT e = new TRANSIENT(null, 1, CompletionStatus.COMPLETED_NO); + if ( m_poa_manager.m_orb.m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT in request because", + " MaxQueuedRequests ", + Integer.toString(m_poa_manager.m_conf.getMaxQueuedRequests()), + " has been reached" }; + m_poa_manager.m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + request.submitResponse( e ); + } else { + m_values.add(request); + if (!m_queue_read_manager.createNewReader()) { + notify(); + } + } + } + + /** + * Gets (and removes) the first element of the queue. + * + * @return The first element of the queue. + */ + public synchronized QueuedRequest get() { + if ( m_values.isEmpty() ) { + if (m_deactivation) { + return null; + } else { + try { + wait(m_poa_manager.m_conf.getStarvingTime()); + } catch (InterruptedException ie) {} + if ( m_values.isEmpty() ) { + return null; + } + } + } + //first element out + QueuedRequest req = (QueuedRequest) m_values.first(); + + m_values.remove(req); + + return req; + } + + /** + * @return Number of enqueued elements. + */ + synchronized public int size() { + return m_values.size(); + } + + /** + * Set all request to "discarding". + */ + synchronized public void discardAll() { + + Iterator it = m_values.iterator(); + while (it.hasNext()){ + QueuedRequest req = (QueuedRequest) it.next(); + req.setMustDiscard(true); + } + } + + /** + * The POAManager is being deactivating, notify it to all blocked threads. + */ + + synchronized void deactivation() { + if (!m_deactivation) { + m_deactivation = true; + notifyAll(); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/ServantDelegate.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ServantDelegate.java.svn-base new file mode 100644 index 0000000..5a5d794 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ServantDelegate.java.svn-base @@ -0,0 +1,181 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Delegate class for servants. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class ServantDelegate + implements org.omg.PortableServer.portable.Delegate +{ + + private org.omg.CORBA.ORB m_orb = null; + + private org.omg.PortableServer.POA m_poa = null; + + private byte[] m_oid = null; + + /** + * Constructor. + * + * @param poa + * The POA. + * @param oid + * The Object Id. + */ + public ServantDelegate(org.omg.PortableServer.POA poa, byte[] oid) + { + this.m_poa = poa; + this.m_orb = ((es.tid.TIDorbj.core.poa.POAImpl) poa).m_orb; + this.m_oid = oid; + } + + /** + * @param self + * The servant. + * @return The ORB. + */ + public org.omg.CORBA.ORB orb(org.omg.PortableServer.Servant self) + { + return this.m_orb; + } + + /** + * @param self + * The servant. + * @return Return an object reference for this servant. + */ + public org.omg.CORBA.Object this_object(org.omg.PortableServer.Servant self) + { + try { + return m_poa.servant_to_reference(self); + } + catch (org.omg.PortableServer.POAPackage.WrongPolicy e) { + return null; + } + catch (org.omg.PortableServer.POAPackage.ServantNotActive e) { + return null; + } + } + + /** + * @param self + * The servant. + * @return This POA. + */ + public org.omg.PortableServer.POA poa(org.omg.PortableServer.Servant self) + { + return this.m_poa; + } + + /** + * @param self + * The servant. + * @return Return the Object Id. + */ + public byte[] object_id(org.omg.PortableServer.Servant self) + { + return m_oid; + } + + /** + * @param self + * The servant. + * @return Return the default POA. + */ + public org.omg.PortableServer.POA + default_POA(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @param self + * The servant. + * @param repository_id + * The Repository Id. + * @return Return true if the servant is an object with this Repository Id. + */ + public boolean is_a(org.omg.PortableServer.Servant self, + java.lang.String repository_id) + { + String[] reps = self._all_interfaces(m_poa, m_oid); + for (int i = 0; i < reps.length; i++) { + if (repository_id.equals(reps[i])) + return true; + } + return false; + } + + public boolean non_existent(org.omg.PortableServer.Servant self) + { + return false; + } + + public org.omg.CORBA.InterfaceDef + get_interface(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object + get_interface_def(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Sets object Id (useful for default servants). + * + * @param oid + * The Object Id. + */ + protected void setObjectId(byte[] oid) + { + this.m_oid = oid; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/SystemOID.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/SystemOID.java.svn-base new file mode 100644 index 0000000..59f437e --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/SystemOID.java.svn-base @@ -0,0 +1,146 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * System Generated OID. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public class SystemOID extends OID +{ + + private final static int LONG_SIZE = 8; + + private long m_poa_id; + + private long m_serial; + + public SystemOID(long poa_id, long serial) + { + m_poa_id = poa_id; + m_serial = serial; + m_value = new byte[2 * LONG_SIZE]; + write_long(poa_id, m_value, 0); + write_long(serial, m_value, LONG_SIZE); + } + + public SystemOID(long poa_id, long serial, byte[] val) + { + super(val); + this.m_poa_id = poa_id; + this.m_serial = serial; + } + + public SystemOID next() + { + return new SystemOID(m_poa_id, m_serial + 1); + } + + public long getPOAId() + { + return m_poa_id; + } + + public long getSerial() + { + return m_serial; + } + + public static SystemOID fromOID(OID oid) + { + SystemOID other = null; + + try { + other = (SystemOID) oid; + } + catch (ClassCastException cce) { + return fromByteArray(oid.toByteArray()); + } + + return new SystemOID(other.m_poa_id, other.m_serial, other.m_value); + } + + public static SystemOID fromByteArray(byte[] buffer) + { + if ((buffer == null) || (buffer.length != 2 * LONG_SIZE)) + return null; + + long poa_id = read_long(buffer, 0); + + long serial = read_long(buffer, LONG_SIZE); + + return new SystemOID(poa_id, serial, buffer); + } + + public static void write_long(long value, byte[] buffer, int offset) + { + int position = offset; + buffer[position++] = (byte) (value >>> 56); + buffer[position++] = (byte) (value >>> 48); + buffer[position++] = (byte) (value >>> 40); + buffer[position++] = (byte) (value >>> 32); + buffer[position++] = (byte) (value >>> 24); + buffer[position++] = (byte) (value >>> 16); + buffer[position++] = (byte) (value >>> 8); + buffer[position++] = (byte) (value >>> 0); + } + + public static long read_long(byte[] buffer, int offset) + { + + int position = offset; + + return (((long) buffer[position++] & 0xffL) << 56) + | (((long) buffer[position++] & 0xffL) << 48) + | (((long) buffer[position++] & 0xffL) << 40) + | (((long) buffer[position++] & 0xffL) << 32) + | (((long) buffer[position++] & 0xffL) << 24) + | (((long) buffer[position++] & 0xffL) << 16) + | (((long) buffer[position++] & 0xffL) << 8) + | ((long) buffer[position++] & 0xffL); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/TemporalRequestComparator.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/TemporalRequestComparator.java.svn-base new file mode 100644 index 0000000..62cf552 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/TemporalRequestComparator.java.svn-base @@ -0,0 +1,40 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +/** + * @author caceres + * + */ +public class TemporalRequestComparator + implements Comparator +{ + + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + + + public TemporalRequestComparator() + { + + } + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + long serial1 = request1.getSerial(); + long serial2 = request2.getSerial(); + + if(serial1 > serial2) { + return GREATER_THAN; + } else if(serial1 == serial2) { + return EQUALS; + } else { + return LESS_THAN; + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadPool.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadPool.java.svn-base new file mode 100644 index 0000000..f769190 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadPool.java.svn-base @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import es.tid.TIDorbj.util.Trace; + +/** + * Pool of threads. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class ThreadPool + implements QueueReaderManager, ThreadStateListener, POAManagerConfListener +{ + + private Vector m_pool = null; + + private POAManagerImpl m_poa_manager = null; + + private int m_used = 0; + + private int m_active = 0; + + private boolean m_deactivated = false; + + /** + * Constructor. + * + * @param poaManager + * The POAManager which this thread pool belongs to. + */ + public ThreadPool(POAManagerImpl poaManager) + { + m_pool = new Vector(); + m_poa_manager = poaManager; + } + + /** + * Test if another thread should be created. + * + * @return Returns true if another thread has been started, false otherwise. + */ + synchronized public boolean createNewReader() + { + if ((m_used == m_active) + &&(m_used < m_poa_manager.m_conf.getMaxThreads())) { + createThread(); + return true; + } + return false; + } + + synchronized private void createThread() + { + ExecThread t = new ExecThread(m_poa_manager); + m_pool.addElement(t); + t.setThreadStateListener(this); + t.setDaemon(false); + t.start(); + m_used++; + + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { "New thread created, ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_poa_manager.m_conf.getMaxThreads()), + " , min ", + Integer.toString(m_poa_manager.m_conf.getMinThreads()), + ")" + }; + m_poa_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + /** + * Counts the number of active threads (increment). + * + * @param t + * Thread that becomes active. + */ + synchronized public void setActive(Thread t) + { + m_active++; + } + + /** + * Counts the number of active threads (decrement). + * + * @param t + * Thread that becomes inactive. + */ + synchronized public void setInactive(Thread t) + { + m_active--; + } + + /** + * Clean up when a thread dies. + * + * @param t + * Thread that has died. + */ + synchronized public void threadHasDied(Thread t) + { + m_pool.removeElement(t); + m_used--; + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { + "Finalization of thread ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_poa_manager.m_conf.getMaxThreads()), + ", min ", + Integer.toString(m_poa_manager.m_conf.getMinThreads()), + ")" + }; + m_poa_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + synchronized public void deactivation() + { + m_deactivated = true; + } + + synchronized public boolean threadCanDie(Thread t) + { + if (m_deactivated) + return true; + else + return (m_used > m_poa_manager.m_conf.getMinThreads()); + } + + synchronized public void minThreadsHasChanged() + { + while (m_used < m_poa_manager.m_conf.getMinThreads()) { + createThread(); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadStateListener.java.svn-base b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadStateListener.java.svn-base new file mode 100644 index 0000000..8c0cf51 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/.svn/text-base/ThreadStateListener.java.svn-base @@ -0,0 +1,62 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Listener of thread state changes. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +interface ThreadStateListener +{ + + boolean threadCanDie(Thread t); + + void threadHasDied(Thread t); + + void setActive(Thread t); + + void setInactive(Thread t); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/ActiveObjectMap.java b/source/es/tid/TIDorbj/core/poa/ActiveObjectMap.java new file mode 100644 index 0000000..c31b96a --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/ActiveObjectMap.java @@ -0,0 +1,308 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Enumeration; +import java.util.Hashtable; + +/** + * Active Object Map. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class ActiveObjectMap +{ + + protected Hashtable m_table = new Hashtable(); + + /** + * Adds a new oid to the Active Object Map. + * + * @param oid + * Object Id. + * @param servant + * Servant which corresponds to oid. + * @param uniqueId + * True if UNIQUE_ID policy is present in this POA. + * @exception ServantAlreadyActive + * If servant is already in the AOM. + * @exception ObjectAlreadyActive + * If uniqueId is true and oid is already in the AOM. + */ + public void put(OID oid, org.omg.PortableServer.Servant servant, + boolean uniqueId) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive + { + + if (m_table.containsKey(oid)) { + throw new org.omg.PortableServer.POAPackage.ObjectAlreadyActive(); + } + + AOMElement element = new AOMElement(servant); + if (uniqueId && m_table.contains(element)) { + throw new org.omg.PortableServer.POAPackage.ServantAlreadyActive(); + } + + m_table.put(oid, element); + } + + /** + * Gets the servant associated to oid. + * + * @param oid + * Object Id. + * @return The servant. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public org.omg.PortableServer.Servant get(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + return element.servant; + } + + /** + * Removes the servant associated to oid. + * + * @param oid + * Object Id. + * @return Retuns the servant removed (if any). + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public org.omg.PortableServer.Servant remove(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.remove(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + return element.servant; + } + + /** + * Tests if a servant is in the Active Object Map. + * + * @return Retuns true if the servant is in the Active Object Map. + */ + public boolean contains(org.omg.PortableServer.Servant servant) + { + AOMElement element = new AOMElement(servant); + return m_table.contains(element); + } + + /** + * Tests if an oid is in the Active Object Map. + * + * @return Retuns true if the oid is in the Active Object Map. + */ + public boolean isActive(OID oid) + { + return (oid != null) && (m_table.containsKey(oid)); + } + + /** + * Gets the first oid associated to a servant. + * + * @param The + * servant. + * @return The Object Id. + */ + public OID get(org.omg.PortableServer.Servant servant) + { + Enumeration oids = m_table.keys(); + Enumeration AOMelems = m_table.elements(); + for (; AOMelems.hasMoreElements();) { + OID curr_oid = (OID) oids.nextElement(); + AOMElement curr_AOMelems = (AOMElement) AOMelems.nextElement(); + if (curr_AOMelems.servant == servant) + return curr_oid; + } + return null; + } + + /** + * Adds a new user for this oid. + * + * @param The + * Object Id. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public void addUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.num_users++; + } + + /** + * Removes a user for this oid. + * + * @param The + * Object Id. + * @return Returns false if there are still users, otherwise returns true. + * @exception ObjectNotActive + * If oid is not in the AOM. + */ + public boolean removeUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.num_users--; + if (element.num_users <= 0) { + return true; // nobody uses oid anymore + } else { + return false; // someone is still using oid + } + } + + /** + * Marks an oid as "destroying". + * + * @param The + * Object Id. + */ + public void destroy(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + AOMElement element = (AOMElement) m_table.get(oid); + if (element == null) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + element.destroying = true; + } + + /** + * Tests if an oid is "destroying". + * + * @return The entry in the Active Object Map. It may be used for + * synchronization purposes. + */ + public java.lang.Object isDestroying(OID oid) + { + AOMElement element = (AOMElement) m_table.get(oid); + if ((element != null) && (element.destroying)) { + return element; + } else { + return null; + } + } + + /** + * Returns an enumeration of all oids in the Active Object Map. + * + * @return The enumeration. + */ + public java.util.Enumeration getOIDs() + { + return new AOMEnumeration(m_table); + } + + /** + * Inner class for the Active Object Map entries. + */ + public class AOMElement + { + + int num_users = 1; // the first user is the POA where oid is created + + org.omg.PortableServer.Servant servant = null; + + boolean destroying = false; + + public AOMElement(org.omg.PortableServer.Servant servant) + { + this.servant = servant; + } + + public boolean equals(Object other) + { + if (other instanceof AOMElement) { + return servant == ((AOMElement) other).servant; + } else { + return false; + } + } + + } + + /** + * Inner class for the enumeration that getOIDs() returns. + */ + public class AOMEnumeration + implements java.util.Enumeration + { + + private java.util.Enumeration keys; + + public AOMEnumeration(Hashtable table) + { + this.keys = table.keys(); + } + + public boolean hasMoreElements() + { + return keys.hasMoreElements(); + } + + public Object nextElement() + { + return keys.nextElement(); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/CompletionWaiter.java b/source/es/tid/TIDorbj/core/poa/CompletionWaiter.java new file mode 100644 index 0000000..175252c --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/CompletionWaiter.java @@ -0,0 +1,137 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Class to wait until there are no executing requests. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class CompletionWaiter +{ + + private int m_active_requests = 0; + + private boolean m_stop_waiting = false; + + private es.tid.TIDorbj.core.TIDORB m_orb; + + /** + * Constructor. + * + * @param orb + * The ORB. + */ + public CompletionWaiter(es.tid.TIDorbj.core.TIDORB orb) + { + this.m_orb = orb; + } + + /** + * Tests if an operation should wait for completion. + * + * @return Returns true if it must wait. + */ + protected boolean conditionToWait() + { + try { + CurrentImpl current = m_orb.initPOACurrent(); + POAImpl poa = (POAImpl) current.get_POA(); + return poa.m_orb != m_orb; + } + catch (org.omg.PortableServer.CurrentPackage.NoContext e) { + return true; + } + } + + /** + * Begins a new request (increments active request counter). + */ + synchronized protected void beginRequest() + { + m_active_requests++; + } + + /** + * Ends a request (decrements active request counter and notifies). + */ + synchronized protected void endRequest() + { + m_active_requests--; + if (m_active_requests <= 0) { + notify(); + } + } + + /** + * Waits until there are no active requests. + */ + synchronized protected void waitForCompletion() + { + while ((m_active_requests != 0) && !m_stop_waiting) { + try { + wait(); + } + catch (Exception e) {} + } + m_stop_waiting = false; + } + + /** + * Stops waiting for completion. + */ + synchronized protected void stopWaiting() + { + m_stop_waiting = true; + notifyAll(); + } + + /** + * @return Number of active requests. + */ + synchronized protected int getActiveRequests() + { + return m_active_requests; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/CurrentImpl.java b/source/es/tid/TIDorbj/core/poa/CurrentImpl.java new file mode 100644 index 0000000..745a7ff --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/CurrentImpl.java @@ -0,0 +1,186 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.Object; +import org.omg.PortableServer.CurrentLocalBase; +import org.omg.PortableServer.Servant; +import org.omg.PortableServer.CurrentPackage.NoContext; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * TIDORB implementation of the Current CORBA Object. The current object + * accesses to the CurrentInfo stored in the ExecThread, the thread assotiated + * to the servant execution, returning at each moment the current poa and object + * id (if exists). + * + * @see CurrentInfo + * @see ExecThread + * + * @author Juan A. Cáceres + */ + +public class CurrentImpl extends CurrentLocalBase +{ + + private TIDORB m_orb; + + private boolean destroyed; + + public CurrentImpl(TIDORB orb) + { + m_orb = orb; + } + + public synchronized void destroy() + { + m_orb = null; + destroyed = true; + } + + public synchronized org.omg.PortableServer.POA get_POA() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_current_poa; + } + + public synchronized byte[] get_object_id() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_current_oid.toByteArray(); + } + + public org.omg.CORBA.Object getReference() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_servant._this_object(); + } + + public synchronized org.omg.PortableServer.Servant getServant() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + if (destroyed) + throw new OBJECT_NOT_EXIST(); + + return getCurrentInfo().m_servant; + } + + /** + * Looks in the current thread for the CurrentInfo that + * determines the current poa and object id needed by the + * Current object. + * + * @return the CurrentInfo object if exits. + * + * @exception org.omg.PortableServer.CurrentPackage.NoContext + * if the current thread is not an instance of + * ExecThread (it is the orb main thread) or + * it is and it is executing a local request, and there is + * out of a POA-dispatched operation. + */ + + protected CurrentInfo getCurrentInfo() + throws org.omg.PortableServer.CurrentPackage.NoContext + { + Thread th = Thread.currentThread(); + + if (th instanceof ExecThread) { // the current is in a servant + // execthread + + ExecThread exec = (ExecThread) th; + + CurrentInfo info = exec.getCurrentInfo(); + + if (info != null) + + return info; + } + + // error executing a local request or we are in the orb main thread + + throw new org.omg.PortableServer.CurrentPackage.NoContext(); + } + + public boolean inContext() + { + Thread th = Thread.currentThread(); + + if (th instanceof ExecThread) { // the current is in a servant + // execthread + + ExecThread exec = (ExecThread) th; + + CurrentInfo info = exec.getCurrentInfo(); + + return (info != null); + } + + return false; + } + + /* (non-Javadoc) + * @see org.omg.PortableServer.CurrentOperations#get_reference() + */ + public Object get_reference() throws NoContext { + return this.getReference(); + } + + /* (non-Javadoc) + * @see org.omg.PortableServer.CurrentOperations#get_servant() + */ + public Servant get_servant() throws NoContext { + return this.getCurrentInfo().m_servant; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/CurrentInfo.java b/source/es/tid/TIDorbj/core/poa/CurrentInfo.java new file mode 100644 index 0000000..8b03e28 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/CurrentInfo.java @@ -0,0 +1,78 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +public class CurrentInfo +{ + + POAImpl m_current_poa; + + OID m_current_oid; + + boolean m_request_in_poa; + + org.omg.PortableServer.Servant m_servant = null; + + public CurrentInfo(POAImpl current_poa, OID current_oid) + { + this.m_current_poa = current_poa; + this.m_current_oid = current_oid; + this.m_request_in_poa = false; + } + + public boolean isRequestInPOA() + { + return m_request_in_poa; + } + + public void setRequestInPOA(boolean val) + { + m_request_in_poa = val; + } + + public void setServant(org.omg.PortableServer.Servant servant) + { + this.m_servant = servant; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.java b/source/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.java new file mode 100644 index 0000000..797d6e2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/DeadlineRequestComparator.java @@ -0,0 +1,79 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +import org.omg.Messaging.RequestEndTimePolicy; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Comparator that uses the Messaging::RequestEndTimePolicy to decide the order + * in a request queue. In case of there were not any policy to decide, the + * TemporalRequestComparator will be used. + * @author caceres + * + */ +public class DeadlineRequestComparator + implements Comparator +{ + + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + + + TemporalRequestComparator temporalComparator; + + public DeadlineRequestComparator() + { + temporalComparator = new TemporalRequestComparator(); + } + + + + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + PolicyContext context1 = request1.getPolicyContext(); + PolicyContext context2 = request2.getPolicyContext(); + + RequestEndTimePolicy end1 = null; + RequestEndTimePolicy end2 = null; + + if (context1 != null) { + end1 = context1.getRequestEndTimePolicy(); + } + + if (context2 != null) { + end2 = context2.getRequestEndTimePolicy(); + } + + if(end1 == null) { + if(end2 == null) { + return temporalComparator.compare(o1,o2); + } else { + return GREATER_THAN; + } + } else { + if(end2 == null) { + return LESS_THAN; + } else { // both non-null + + long val1 = end1.end_time().time; + long val2 = end2.end_time().time; + + if(val1 > val2) { + return GREATER_THAN; + } else if(val1 == val2) { + return temporalComparator.compare(o1,o2); + } else { + return LESS_THAN; + } + } + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/ExecThread.java b/source/es/tid/TIDorbj/core/poa/ExecThread.java new file mode 100644 index 0000000..0acabc9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/ExecThread.java @@ -0,0 +1,945 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.BooleanHolder; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.NO_IMPLEMENT; +import org.omg.CORBA.NO_RESPONSE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.ServerRequest; +import org.omg.CORBA.TIMEOUT; +import org.omg.CORBA.UNKNOWN; +import org.omg.PortableServer.DynamicImplementation; +import org.omg.PortableServer.POAManager; +import org.omg.PortableServer.Servant; +import org.omg.PortableServer.POAManagerPackage.State; +import org.omg.PortableServer.POAPackage.AdapterNonExistent; +import org.omg.PortableServer.POAPackage.ObjectAlreadyActive; +import org.omg.PortableServer.POAPackage.ObjectNotActive; +import org.omg.PortableServer.ServantLocatorPackage.CookieHolder; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +/** + * Execution thread. Gets request from the request queue and executes them. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class ExecThread extends Thread +{ + + private POAManagerImpl m_poa_manager = null; + + private RequestQueue m_queue = null; + + private boolean m_deactivated = false; + + private ThreadStateListener m_thread_state_listener = null; + + private java.util.Stack m_current_info_stack = null; + + private String m_thread_name; + + private TIDORB m_orb; + + private Trace m_trace; + + private long m_max_response_blocked_time; + + private boolean m_qos_enabled; + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this ExecThread belongs. + * @param number + * Id number of this ExecThread. + */ + protected ExecThread(POAManagerImpl poaManager) + { + m_poa_manager = poaManager; + m_queue = m_poa_manager.getRequestQueue(); + m_current_info_stack = new java.util.Stack(); + //TODO: orb referecial by jprojas + m_orb = m_poa_manager.m_orb; + m_trace = m_orb.m_trace; + m_qos_enabled = m_orb.m_conf.qos_enabled; + m_max_response_blocked_time = m_orb.m_conf.max_blocked_time; + } + + /** + * Set the ThreadStateListener. Any ExecThread should have a listener + * (eventually the ThreadPool) before it is started. + * + * @param l + * The listener. + */ + protected void setThreadStateListener(ThreadStateListener l) + { + m_thread_state_listener = l; + } + + /** + * Checks the state of the POAManager. If the state is ACTIVE, then finish + * returning true. If the state is HOLDING, then wait until state is + * diferent from HOLDING. If the state is DISCARDING, then discard the + * request and return false. If the state is INACTIVE, then reject the + * request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + private boolean checkState( QueuedRequest request ) { + + boolean executeRequest = false; + + if (m_trace != null) { + String[] msg = { toString(), " checking state of ", + m_poa_manager.toString() }; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + synchronized (m_poa_manager.m_state_mutex) { + boolean exit = false; + while (!exit) { + org.omg.PortableServer.POAManagerPackage.State state = m_poa_manager.get_state(); + if ((state == org.omg.PortableServer.POAManagerPackage.State.ACTIVE) && !request.getMustDiscard()) { + exit = true; + executeRequest = true; + } else if (state == org.omg.PortableServer.POAManagerPackage.State.HOLDING) { + try { + // wait until state changes + m_poa_manager.m_state_mutex.wait(); + } catch (InterruptedException ie) {} + exit = false; + } else if (state == org.omg.PortableServer.POAManagerPackage.State.INACTIVE) { + // MISSING: define strategy for deactivated POAManagers + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to request becase foreing POAManager is INACTIVE" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } else if ( state == org.omg.PortableServer.POAManagerPackage.State.DISCARDING || + request.getMustDiscard() ){ + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to request becase foreing POAManager is DISCARDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + //TODO: change method signature to return possible errors + //in state check + request.submitResponse( new org.omg.CORBA.TRANSIENT() ); + exit = true; + executeRequest = false; + } + } + } + return executeRequest; + } + + /** + * Execution loop. + */ + public void run() + { + + while (!m_deactivated) { + try { + + if (m_trace != null) { + String[] msg = { toString(), ": getting request..." }; + m_trace.print(Trace.DEEP_DEBUG, msg); + + } + + QueuedRequest thisRequest = m_queue.get(); + + + + if (thisRequest != null) { + // If there is a request, then go!! + m_thread_state_listener.setActive(this); + processRequest(thisRequest); + m_thread_state_listener.setInactive(this); + + } else if (m_thread_state_listener.threadCanDie(this)) { + // If restarted and no request, then commit suicide + m_deactivated = true; + } + + } + catch (Throwable unhandledException) { + // Unhandled exception. Should never happen!! + if (m_trace != null) { + m_trace.printStackTrace(Trace.DEBUG, + toString() + "Unhanled Exception ", + unhandledException); + m_trace.print(Trace.DEBUG, toString() + " dies..."); + } + m_deactivated = true; + } + + + + + } + m_thread_state_listener.threadHasDied(this); + } + + /** + * Process current request. + * + * @return true wherther the request has been queued in + * another POAManager. + */ + private void processRequest(QueuedRequest thisRequest) { + + try { + if (m_trace != null) { + String[] msg = { toString(), " executing request ", thisRequest.toString()}; + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + ObjectKey objectKey; + objectKey = thisRequest.getObjectKey(); + + POAKey poaKey; + try { + poaKey = m_orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + } catch ( Throwable th ){ + poaKey = null; + } + + if ( poaKey != null ) { + thisRequest.setPOAKey( poaKey ); + } else { + throw new OBJECT_NOT_EXIST(); + } + + if ( checkState( thisRequest ) ) { + // find poa + POAImpl poa = null; + try { + poa = findPOA( thisRequest ); + } catch ( AdapterNonExistent ane) { + if (m_trace != null) { + m_trace.printStackTrace( + Trace.DEBUG, + new String[]{ + toString(), + "POA ", + thisRequest.getCurrentChildPOAName(), + " not found" + }, + ane + ); + } + throw new org.omg.CORBA.OBJECT_NOT_EXIST(); + } + + if (poa != null) { + execute(thisRequest, poa); + } + } + } catch (org.omg.CORBA.SystemException e) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting a system exception to Request" }; + m_trace.printStackTrace(Trace.DEEP_DEBUG, msg, e); + } + thisRequest.submitResponse( e ); + } catch (java.lang.Throwable th) { + th.printStackTrace( System.err) ; + thisRequest.submitResponse( + new INTERNAL(th.toString(), 0, thisRequest.getStatus() ) + ); + } + } + + /** + * Finds the POA which corresponds to + * + * @param request. + * If the request belongs to another POAManager it is bypassed to + * it, returning null. + * @param request + * The queued request to be executed. + * @returns POAImpl POA where the request must be executed. + * @exception org.omg.PortableServer.POAPackage.AdapterNonExistent + * If it fails finding the POA. + */ + private POAImpl findPOA( QueuedRequest request ) + throws org.omg.PortableServer.POAPackage.AdapterNonExistent + { + + POAImpl current_poa; + + current_poa = request.getCurrentPOA(); + if( current_poa == null ){ + current_poa = this.m_orb.initPOA(); + request.setCurrentPOA( current_poa ); + } + + boolean bypassed = false; + POAManagerImpl nextPOAManager; + while ( !( bypassed || request.isFinalPOA() ) ) { + current_poa = (POAImpl) current_poa.find_POA( + request.getCurrentChildPOAName(),true + ); + + request.nextChildPOA(current_poa); + + nextPOAManager = (POAManagerImpl) current_poa.the_POAManager(); + + if (nextPOAManager != m_poa_manager) { + // bypass request to nextPOAManager + if (m_trace != null) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), " bypassing request ", request.toString(), + " to ", current_poa.toString() + } + ); + } + nextPOAManager.put(request); + bypassed = true; + } + } + return ( bypassed )?null:current_poa; + } + + /** + * Process local Request in the given POAManager. + * + * @param localRequest + * the Local request + * @param current_manager + * the current POA POAManager + */ + public void processLocalRequest( QueuedRequest localRequest ) + { + if (m_trace != null) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " executing local request ", + localRequest.toString() + } + ); + } + + try { + + ObjectKey objectKey; + objectKey = localRequest.getObjectKey(); + + POAKey poaKey; + try { + poaKey = m_orb.resolvePOAKey( objectKey ); + //TODO: review 'poa's request hierarchy' at this moment, POAKey + // and objectkey ar stored + } catch ( Throwable th ){ + poaKey = null; + } + + if ( poaKey != null ) { + localRequest.setPOAKey( poaKey ); + } else { + throw new OBJECT_NOT_EXIST(); + } + + POAImpl currentPOA = localRequest.getCurrentPOA(); + if ( currentPOA == null ){ + // Start from rootPOA + currentPOA = this.m_orb.initPOA(); + localRequest.setCurrentPOA( currentPOA ); + } + + POAManager currentPOAManager; + currentPOAManager = currentPOA.the_POAManager(); + + if ( currentPOAManager == this.m_poa_manager ) { + if (!checkState(localRequest)) { + return; + } + } else { + if ( !checkForeingState( localRequest ) ) { + return; + } + } + + // find poa + + POAImpl current_poa = localRequest.getCurrentPOA(); + + try { + while (!localRequest.isFinalPOA()) { + current_poa = (POAImpl) + current_poa.find_POA(localRequest.getCurrentChildPOAName(), + true); + + localRequest.nextChildPOA(current_poa); + + POAManagerImpl nextPOAManager = (POAManagerImpl) + current_poa.the_POAManager(); + + if (nextPOAManager != m_poa_manager) { + // bypass request to nextPOAManager + + if (m_trace != null) { + String[] msg = + { toString(), + " bypassing request ", + localRequest.toString(), + " through ", + current_poa.toString()}; + + m_trace.print(Trace.DEEP_DEBUG, msg); + } + + processLocalRequest( localRequest ); + return; + } + } + } + catch (org.omg.PortableServer.POAPackage.AdapterNonExistent ane) { + if (m_trace != null) { + String[] msg = + { toString(), + "POA ", + localRequest.getCurrentChildPOAName(), + " not found, org.omg.CORBA.OBJECT_NOT_EXIST throwed" }; + + m_trace.printStackTrace(Trace.DEBUG, msg, ane); + } + localRequest.submitResponse(new OBJECT_NOT_EXIST() ); + return; + } + + if (current_poa != null) { + execute(localRequest, current_poa); + } + + } catch (org.omg.CORBA.SystemException se) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting a system exception to localRequest" }; + m_trace.printStackTrace(Trace.DEEP_DEBUG, msg, se); + } + localRequest.submitResponse( se ); + } catch (java.lang.Throwable tw) { + tw.printStackTrace(); + localRequest.submitResponse( + new INTERNAL(tw.toString(), 0, localRequest.getStatus() ) + ); + } + } + + /** + * Checks the state of the given POAManager. If the state is ACTIVE, then + * finish returning true. If the state is HOLDING, then wait until state + * changes or the max_blocked_time timeout is reached. If the state is + * DISCARDING, then discard the request and return false. If the state is + * INACTIVE, then reject the request and return false. + * + * @param request + * The request which is being processed. + * @return Returns true if the request must be executed, otherwise returns + * false. + */ + private boolean checkForeingState( QueuedRequest localRequest ) { + if ( m_trace != null ) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Checking foreing POAManager state" + } + ); + } + POAManagerImpl currentPOAManager; + //TODO: add method "getPOAManager" returning a POAManagerImpl to avoid + //castings + currentPOAManager = + ( POAManagerImpl )localRequest.getCurrentPOA().the_POAManager(); + + org.omg.PortableServer.POAManagerPackage.State state = currentPOAManager.get_state(); + + // chech current_manager state + if ( state == org.omg.PortableServer.POAManagerPackage.State.HOLDING ) { + if ( m_trace != null ) { + m_trace.print( + Trace.DEEP_DEBUG, + new String[]{ + toString(), + " Waiting in a foreing POAManager because it is HOLDING" + } + ); + } + + long timeout = m_max_response_blocked_time; + + if (m_qos_enabled) { + + PolicyContext policyContext; + policyContext = localRequest.getPolicyContext(); + + if(policyContext != null) { + + timeout = QoS.checkRequestTime(m_orb, policyContext); + } + } + + if(timeout > 0) { + synchronized ( currentPOAManager.m_state_mutex ) { + try { + //TODO: check if this could be done outside ExecThread's to + //avoid inclusion of requestPolicy in responsehandlers + currentPOAManager.m_state_mutex.wait(timeout); + } catch ( InterruptedException ie ) { } + } + } + + state = currentPOAManager.get_state(); + + currentPOAManager.put( localRequest ); + if ( state == org.omg.PortableServer.POAManagerPackage.State.HOLDING ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting NO_RESPONSE because foreing POAManager is HOLDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new NO_RESPONSE() ); + return false; + } + } + + if ( state == org.omg.PortableServer.POAManagerPackage.State.INACTIVE ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to localRequest becase foreing POAManager is INACTIVE" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new org.omg.CORBA.TRANSIENT() ); + return false; + } + + if ( ( state == org.omg.PortableServer.POAManagerPackage.State.DISCARDING ) || localRequest.getMustDiscard() ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT to localRequest becase foreing POAManager is DISCARDING" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + localRequest.submitResponse( new org.omg.CORBA.TRANSIENT() ); + return false; + } + + return true; + } + + + + /** + * Executes a queued request depending on its type. + * + * @param request + * The queued request to be executed. + */ + private void execute( QueuedRequest request, POAImpl poa ) { + // TODO:temporary check until refactoring complete + + POAKey poaKey = request.getPOAKey(); + if ( poaKey != null ) { + long poaId; + poaId = poaKey.getPOAId(); + /* + * poaId -> persistent poa. Must check if it's not a persistent poa, + * if it's the same 'instance' that holds the 'servant' right now + */ + if ( poaId != 0 && poaId != poa.getId() ) { + if ( m_trace != null ) { + String[] msg = { toString(), + " Submitting OBJECT_NOT_EXIST to request becase poaId isn't int poa" }; + m_trace.print( Trace.DEEP_DEBUG, msg ); + } + request.submitResponse( new org.omg.CORBA.OBJECT_NOT_EXIST() ); + } else { + // execute request + CurrentInfo current; + current = new CurrentInfo( poa, poaKey.getOID() ); + m_current_info_stack.push( current ); + + try { + if ( request instanceof QueuedLocateResponseHandler ) { + execute( ( QueuedLocateResponseHandler ) request, poa ); + } else if ( request instanceof QueuedResponseHandler ){ + execute( ( QueuedResponseHandler )request, poa ); + } + request.setStatus( CompletionStatus.COMPLETED_YES ); + } catch ( org.omg.CORBA.SystemException se ) { + request.submitResponse( se ); + } catch ( java.lang.Throwable tw ) { + request.submitResponse( + new INTERNAL( tw.toString(), 0, request.getStatus() ) + ); + } finally { + m_current_info_stack.pop(); + if ( current.isRequestInPOA() ) { + try { + poa.removeUser( poaKey.getOID() ); + } catch ( Exception e ) { + } + request.destroy(); + } + } + } + } else { + if ( m_orb.m_trace != null ) { + m_orb.printTrace( + Trace.DEEP_DEBUG, + new String[] { + toString(), + " Invalid target ObjectKey in Request[ ", + request.getObjectKey().toString(), + "]" + } + ); + } + } + } + + private void execute( QueuedLocateResponseHandler handler, POAImpl poa ){ + //TODO: send this to the request... + + BooleanHolder servantLocatorUsed = new org.omg.CORBA.BooleanHolder(); + try { + // Current execution context + CurrentInfo current; + current = (CurrentInfo)m_current_info_stack.peek(); + + // Current servant's OID + OID oid; + oid = current.m_current_oid; + + // Servant location + Servant servant; + servant = poa.find_servant( oid, null, null, servantLocatorUsed ); + if (servant != null) { + handler.submitResponse( true ); + } else { + //This should never happen + throw new INTERNAL( + "find_servant() returning null!!", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } catch (org.omg.CORBA.SystemException e) { + throw e; + } catch (org.omg.PortableServer.ForwardRequest e) { + handler.submitResponse( e.forward_reference ); + m_poa_manager.m_orb.printTrace(Trace.DEBUG, "Forwarded: ", e); + } catch (Exception e) { + handler.submitResponse( false ); + } + } + + private void execute( QueuedResponseHandler handler, POAImpl poa ){ + try { + + + + /**/ + // get serverRequest (with params for invocation) + ServerRequest serverRequest; + serverRequest = handler.getServerRequest(); + + // QoS validation + if (m_qos_enabled) { + + if(!QoS.validateServerRequestEndTimePolicy(handler.getPolicyContext())) + { + if (m_trace != null) { + + String[] msg = { toString(), + " discarding ", + serverRequest.toString(), + " due to Messaging::RequestEndTimePolicy: TIMEOUT"}; + + m_trace.print(Trace.DEBUG, msg); + } + + throw new TIMEOUT(); + } + + } + /* + * SERVANT LOCATION + **/ + + // Cookie holder to store "reference" to dynamic incarnated servants + // when using servant locator + CookieHolder cookieHolder; + cookieHolder = new CookieHolder(); + + // Boolean holder, to store previous condition + //TODO: verify with juan + BooleanHolder servantLocatorUsed; + servantLocatorUsed = new org.omg.CORBA.BooleanHolder(); + + // Current execution context + CurrentInfo current; + current = (CurrentInfo)m_current_info_stack.peek(); + + // Target servant's OID + OID oid; + oid = current.m_current_oid; + + + org.omg.PortableServer.Servant servant = null; + try { + servant = poa.find_servant( + oid, + serverRequest.operation(), + cookieHolder, + servantLocatorUsed + ); + + poa.addUser( oid ); + + current.setRequestInPOA(true); + + } catch ( ObjectNotActive one ) { + this.m_orb.printTrace( Trace.DEBUG, "", one ); + //TODO: why is status in ServerRequestImpl + throw new org.omg.CORBA.OBJECT_NOT_EXIST( + one.getMessage(), 1, handler.getStatus() + ); + } catch ( ObjectAlreadyActive oae ) { + this.m_orb.printTrace(Trace.DEBUG, "", oae); + throw new org.omg.CORBA.OBJ_ADAPTER( + oae.getMessage(), 0, handler.getStatus() + ); + } catch ( org.omg.PortableServer.ForwardRequest fr ) { + this.m_orb.printTrace( Trace.DEBUG, "Forwarded: ", fr ); + handler.submitResponse( fr.forward_reference ); + return; + } + + // set servant in current object + current.setServant( servant ); + + handler.setStatus( CompletionStatus.COMPLETED_MAYBE ); + + if ( "_is_a".equals( serverRequest.operation() ) ) { + this.invoke_is_a( poa, servant, serverRequest ); + } else { + if (servant instanceof DynamicImplementation) { + // invoke servant using DII + DynamicImplementation dynServant; + dynServant = (DynamicImplementation) servant; + + if ( poa.isSingleThread() ) { + synchronized ( dynServant._get_delegate() ) { + doInvoke(dynServant, serverRequest); + } + } else { + doInvoke(dynServant, serverRequest); + } + } else { + throw new NO_IMPLEMENT( + "Stream based invocation not implemented", + 0, + CompletionStatus.COMPLETED_NO + ); + } + } + + handler.setStatus(CompletionStatus.COMPLETED_YES); + + // return results (if not oneway) + handler.setPolicyContext(poa.getPolicyContext()); + handler.submitResponse(); + + + // Call postinvoke if necessary + if ( servantLocatorUsed.value ) { + poa.callPostinvoke( + oid.toByteArray(), + serverRequest.operation(), + cookieHolder, + servant + ); + } + /* TODO: why ForwardRequest isn't thrown? + } catch (org.omg.PortableServer.ForwardRequest e) { + handler.submitResponse( e.forward_reference ); + m_poa_manager.m_orb.printTrace(Trace.DEBUG, "Forwarded: ", e); + */ + } catch (org.omg.CORBA.SystemException e) { + throw e; + } catch (Exception e) { + if ( m_trace != null ) { + m_trace.printStackTrace( Trace.DEEP_DEBUG, + " Submitting UNKNOWN exception to handler ", e); + } + + handler.submitResponse( + new UNKNOWN() + ); + } + } + + + + /** + * Executes "_is_a" request on the ServantDelegate. + * + * @param servant + * The target servant of the "_is_a" request. + * @param request + * The queued request to be executed. + */ + private void invoke_is_a(POAImpl poa, + org.omg.PortableServer.Servant servant, + org.omg.CORBA.ServerRequest request) + { + try { + es.tid.TIDorbj.core.poa.ServantDelegate deleg = + (es.tid.TIDorbj.core.poa.ServantDelegate) servant._get_delegate(); + org.omg.CORBA.ORB orb = poa.m_orb; + org.omg.CORBA.NVList params = orb.create_list(1); + org.omg.CORBA.Any $s = orb.create_any(); + $s.type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string)); + params.add_value("s", $s, org.omg.CORBA.ARG_IN.value); + request.arguments(params); + String itf = $s.extract_string(); + boolean result = deleg.is_a(servant, itf); + org.omg.CORBA.Any resultAny = orb.create_any(); + resultAny.insert_boolean(result); + request.set_result(resultAny); + } catch (org.omg.CORBA.SystemException se) { + throw se; + } catch (Throwable th) { + if ( this.m_orb.m_trace != null) { + m_trace.printStackTrace( + Trace.DEBUG, + new String[]{ + toString(), + " Exception in servant invoke \"_is_a\" method, ", + "UNKOWN thrown: " + }, + th + ); + } + throw new org.omg.CORBA.UNKNOWN(); + } + + } + + /** + * @return Returns the string representation of this Thread. + */ + public synchronized String toString() + { + if (m_thread_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append(super.toString()); + buffer.append(" in "); + buffer.append(m_poa_manager.toString()); + m_thread_name = buffer.toString(); + buffer = null; + } + return m_thread_name; + } + + /** + * @return Returns the CurrentInfo in the top of the stack. + */ + public CurrentInfo getCurrentInfo() + { + if (m_current_info_stack.empty()) { + return null; + } + return (CurrentInfo) m_current_info_stack.peek(); + } + + private void doInvoke(DynamicImplementation servant, + org.omg.CORBA.ServerRequest request) + { + try { + servant.invoke(request); + } + catch (org.omg.CORBA.SystemException se) { + throw se; + } + catch (Throwable th) { + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { toString(), + " Exception in servant invoke method, UNKOWN thrown: " + }; + + m_trace.printStackTrace(Trace.DEBUG, msg, th); + } + throw new org.omg.CORBA.UNKNOWN(); + } + } +} diff --git a/source/es/tid/TIDorbj/core/poa/OID.java b/source/es/tid/TIDorbj/core/poa/OID.java new file mode 100644 index 0000000..f102237 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/OID.java @@ -0,0 +1,166 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.util.Base64Codec; + +/** + * General Representation of an Object Indentifier. + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class OID +{ + + protected byte[] m_value; + + protected int m_hash_code; + + protected boolean m_hash_created; + + protected String m_str; + + protected OID() + { + m_value = null; + m_hash_code = 0; + m_hash_created = false; + } + + public OID(byte[] val) + { + this(); + m_value = val; + } + + public byte[] toByteArray() + { + return m_value; + } + + public boolean equals(Object obj) + { + OID other = null; + + if (!(obj instanceof OID)) + return false; + + other = (OID) obj; + + if (m_value == null) { + if (other.m_value == null) + return true; + else + return false; + } + + if (m_value.length != other.m_value.length) + return false; + + for (int i = 0; i < m_value.length; i++) { + if (m_value[i] != other.m_value[i]) + return false; + } + + return true; + } + + public int hashCode() + { + if (!m_hash_created) { + + if (m_value == null) + return 0; + + for (int i = 0; i < m_value.length; i++) + m_hash_code = (31 * m_hash_code) + m_value[i]; + m_hash_created = true; + } + + return m_hash_code; + } + + public static OID fromString(String str) + throws Exception + { + return new OID(Base64Codec.decode(str)); + } + + public String toString() + { + if (m_str == null) { + if ((m_value != null) || (m_value.length > 0)) + m_str = Base64Codec.encode(m_value); + else + m_str = ""; + } + + return m_str; + } + + /* + * public static void main (String[] args) { try { + * + * byte[] bytes = {(byte)0,(byte)0,(byte)0,(byte)0,(byte)1,(byte)23}; + * + * OID oid = new OID(bytes); + * + * String str = oid.toString(); + * + * System.out.println(str); + * + * oid = OID.fromString(str); + * + * + * byte[] oid_bytes = oid.toByteArray(); + * + * for(int i = bytes.length -1 ; i >= 0; i--) if(oid_bytes[i] != bytes[i]) + * System.out.println("Error in bytes"); + * + * System.out.println("final"); } catch (Throwable th) + * {th.printStackTrace();} } + * + */ +} + diff --git a/source/es/tid/TIDorbj/core/poa/POAImpl.java b/source/es/tid/TIDorbj/core/poa/POAImpl.java new file mode 100644 index 0000000..a90aaf6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/POAImpl.java @@ -0,0 +1,1984 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import org.omg.BiDirPolicy.BOTH; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.NORMAL; +import org.omg.CORBA.BAD_INV_ORDER; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.PortableServer.*; +import org.omg.PortableServer.POAPackage.*; +import org.omg.PortableServer.ServantLocatorPackage.CookieHolder; + +import es.tid.TIDorbj.core.comm.CommunicationDelegate; +import es.tid.TIDorbj.core.comm.CommunicationException; +import es.tid.TIDorbj.core.comm.iiop.IIOPCommunicationLayer; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.util.Trace; +import es.tid.TIDorbj.core.messaging.PoliciesComponent; +import es.tid.TIDorbj.core.poa.policies.*; +import es.tid.TIDorbj.core.policy.PolicyContext; + + +/** + * Implementation of RTPortableServer::POA + * + * @autor Javier Fdz. Mejuto + * @autor Juan A. Caceres + * @version 2.0 + */ +public class POAImpl extends org.omg.PortableServer.POALocalBase +{ + + /** + * If true the Object has been destroyed and it will throw a + * org.omg.CORBA.OBJECT_NOT_EXIST exception. + * Many Objects has the destroy method, this method will change this attribute. + */ + + protected boolean m_destroyed; + + // attributes for all POAs + public es.tid.TIDorbj.core.TIDORB m_orb = null; + + private String m_name = null; + + private String m_poa_string_name = null; + + private long m_poa_id = 0; + + private byte[] m_id = null; + + private POAKey m_key_seed = null; + + private Vector m_children = null; + + private org.omg.PortableServer.POA m_parent = null; + + private String[] m_path = null; + + private POAManagerImpl m_poa_manager = null; + + private CompletionWaiter m_completion = null; + + private boolean m_destroying = false; + + private boolean m_etherealize = false; + + // attributes depending on policies + private org.omg.PortableServer.AdapterActivator m_adapter_activator = null; + + private org.omg.PortableServer.ServantManager m_servant_manager = null; + + private org.omg.PortableServer.Servant m_default_servant = null; + + private ActiveObjectMap m_active_object_map = null; + + // OID if SystemPolicy + private SystemOID m_current_OID; + + // policies + private IdAssignmentPolicy m_id_assignment_policy = null; + + private IdUniquenessPolicy m_id_uniqueness_policy = null; + + private ImplicitActivationPolicy m_implicit_activation_policy = null; + + private LifespanPolicy m_lifespan_policy = null; + + private RequestProcessingPolicy m_request_processing_policy = null; + + private ServantRetentionPolicy m_servant_retention_policy = null; + + private ThreadPolicy m_thread_policy = null; + + private PoliciesComponent referencePolicies = null; + + /** + * Constructor. + * + * @param orb + * The ORB. + * @param adapter_name + * The POA name. + * @param a_POAManager + * The POA manager which this POA belongs to. + * @param policies + * The policies to be used in the POA. + * @param parent + * The parent POA of this POA. + * @exception org.omg.PortableServer.POAPackage.InvalidPolicy + * When policies are invalid. + */ + public POAImpl(es.tid.TIDorbj.core.TIDORB orb, + java.lang.String adapter_name, + org.omg.PortableServer.POAManager a_POAManager, + org.omg.CORBA.Policy[] policies, + org.omg.PortableServer.POA parent) + throws org.omg.PortableServer.POAPackage.InvalidPolicy + { + int length; + this.m_orb = orb; + this.m_name = adapter_name; + this.m_poa_id = System.currentTimeMillis(); + this.m_children = new Vector(); + this.m_poa_manager = (POAManagerImpl) a_POAManager; + m_poa_manager.addPOA(this); + this.m_parent = parent; + if (parent == null) + this.m_path = new String[0]; + else { + length = (((POAImpl) parent).getPath()).length; + this.m_path = new String[length + 1]; + System.arraycopy(((POAImpl) parent).getPath(), 0, this.m_path, 0, + length); + this.m_path[length] = adapter_name; + } + this.m_completion = new CompletionWaiter(this.m_orb); + + this.referencePolicies = new PoliciesComponent(new PolicyContext(null)); + + // Set policies + if (policies != null) { + for (int i = 0; i < policies.length; i++) { + if (policies[i] == null) + throw new BAD_PARAM("Null policy reference"); + + switch (policies[i].policy_type()) + { + case ID_ASSIGNMENT_POLICY_ID.value: + if (m_id_assignment_policy != null) { + throw new InvalidPolicy(); + } + m_id_assignment_policy = + (IdAssignmentPolicy) policies[i]; + break; + case ID_UNIQUENESS_POLICY_ID.value: + if (m_id_uniqueness_policy != null) { + throw new InvalidPolicy(); + } + m_id_uniqueness_policy = + (IdUniquenessPolicy) policies[i]; + break; + case IMPLICIT_ACTIVATION_POLICY_ID.value: + if (m_implicit_activation_policy != null) { + throw new InvalidPolicy(); + } + m_implicit_activation_policy = + (ImplicitActivationPolicy) policies[i]; + break; + case org.omg.PortableServer.LIFESPAN_POLICY_ID.value: + if (m_lifespan_policy != null) { + throw new InvalidPolicy(); + } + m_lifespan_policy = (LifespanPolicy) policies[i]; + break; + case REQUEST_PROCESSING_POLICY_ID.value: + if (m_request_processing_policy != null) { + throw new InvalidPolicy(); + } + m_request_processing_policy = + (RequestProcessingPolicy) policies[i]; + break; + case SERVANT_RETENTION_POLICY_ID.value: + if (m_servant_retention_policy != null) { + throw new InvalidPolicy(); + } + m_servant_retention_policy = + (ServantRetentionPolicy) policies[i]; + break; + case THREAD_POLICY_ID.value: + if (m_thread_policy != null) { + throw new InvalidPolicy(); + } + m_thread_policy = (ThreadPolicy) policies[i]; + break; + + default: + try { + referencePolicies.getPolicies().setPolicy(policies[i]); + } + catch (PolicyError e) { + throw new InvalidPolicy(); + } + } + } + } + // Set default policies + if (m_id_assignment_policy == null) { + m_id_assignment_policy = + create_id_assignment_policy(IdAssignmentPolicyValue.SYSTEM_ID); + } + + if (m_id_uniqueness_policy == null) { + m_id_uniqueness_policy = + create_id_uniqueness_policy(IdUniquenessPolicyValue.UNIQUE_ID); + } + + if (m_implicit_activation_policy == null) { + m_implicit_activation_policy = + create_implicit_activation_policy( + ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION); + } + + if (m_lifespan_policy == null) { + m_lifespan_policy = + create_lifespan_policy(LifespanPolicyValue.TRANSIENT); + } + + if (m_request_processing_policy == null) { + m_request_processing_policy = + create_request_processing_policy( + RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY); + } + + if (m_servant_retention_policy == null) { + m_servant_retention_policy = + create_servant_retention_policy( + ServantRetentionPolicyValue.RETAIN); + } + if (m_thread_policy == null) { + m_thread_policy = + create_thread_policy(ThreadPolicyValue.ORB_CTRL_MODEL); + } + + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + + m_active_object_map = new ActiveObjectMap(); + } + + if (m_id_assignment_policy.value() == IdAssignmentPolicyValue.SYSTEM_ID) + m_current_OID = new SystemOID(m_poa_id, 0); + + // Wrong Policies + if ((m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION) + && ((m_id_assignment_policy.value() + == IdAssignmentPolicyValue.USER_ID) + || (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN))) { + throw new InvalidPolicy(); + } + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) + && (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY)) { + throw new InvalidPolicy(); + } + + // Generate id + m_id = createKey(null).toString().getBytes(); + } + + /** + * Create a POA as a children of this POA. + * + * @param adapter_name + * The POA name of the new POA. + * @param a_POAManager + * The POA manager which the new POA belongs to. + * @param policies + * The policies to be used in the new POA. + * @exception org.omg.PortableServer.POAPackage.AdapterAlreadyExists + * When this POA has alreay a children named adapter_name. + * @exception org.omg.PortableServer.POAPackage.InvalidPolicy + * When policies are invalid. + */ + synchronized public org.omg.PortableServer.POA + create_POA(java.lang.String adapter_name, + org.omg.PortableServer.POAManager a_POAManager, + org.omg.CORBA.Policy[] policies) + throws org.omg.PortableServer.POAPackage.AdapterAlreadyExists, + org.omg.PortableServer.POAPackage.InvalidPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((adapter_name == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (findChildren(adapter_name) != null) { + throw new org.omg.PortableServer.POAPackage.AdapterAlreadyExists(); + } + POAManagerImpl POAmgr = null; + if (a_POAManager == null) { + POAmgr = new POAManagerImpl(m_orb); + } else { + if(! (a_POAManager instanceof POAManagerImpl)) { + throw new BAD_PARAM("Invalid POAManager: it is not from TIDORB"); + } + + POAmgr = (POAManagerImpl) a_POAManager; + + if(POAmgr.m_orb != m_orb) { + throw new BAD_PARAM("Invalid POAManager: it is not from the same instance of TIDORB"); + } + + } + POAImpl newPOA = + new POAImpl(m_orb, adapter_name, POAmgr, policies, this); + + if (m_destroying) { + newPOA.destroy(false, false); + } else { + m_children.addElement(newPOA); + } + + if(a_POAManager == null) { // recently created + PolicyContext context = newPOA.getPolicyContext(); + + QueueOrderPolicy queuePolicy = context.getQueueOrderPolicy(); + + if(queuePolicy != null) { + POAmgr.setQueueOrderPolicy(queuePolicy); + } + } + + return newPOA; + } + + /** + * @return + */ + public PolicyContext getPolicyContext() + { + return this.referencePolicies.getPolicies(); + } + + /** + * Find a POA among this POA's children. + * + * @param adapter_name + * The POA name. + * @param activate_it + * If it is true find_POA() will try to activate the POA in case + * it can't find it. + * @exception org.omg.PortableServer.POAPackage.AdapterNonExistent + * When this POA has not a children named adapter_name. + */ + public org.omg.PortableServer.POA find_POA(java.lang.String adapter_name, + boolean activate_it) + throws org.omg.PortableServer.POAPackage.AdapterNonExistent + { + synchronized (this) { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + } + + if (adapter_name == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + org.omg.PortableServer.POA poa = findChildren(adapter_name); + + if (poa == null) { + if ((activate_it) && (m_adapter_activator != null)) { + try { + m_adapter_activator.unknown_adapter(this, adapter_name); + } + catch (Exception e) { + throw new org.omg.CORBA.OBJ_ADAPTER(e.getMessage()); + } + poa = findChildren(adapter_name); + // see if _activator has created the POA + if (poa == null) { + // AdapterActivator failed! + throw new AdapterNonExistent(); + } + + if (m_destroying) + poa.destroy(false, false); + + return poa; + + } else { + // AdapterActivator does not exist! + throw new AdapterNonExistent(); + } + } else + return poa; + } + + /** + * Destroy the POA. + * + * @param etherealize_objects + * If true, it must etherealize all objects. + * @param wait_for_completion + * Wait-for-completion flag. + */ + public void destroy(boolean etherealize_objects, + boolean wait_for_completion) + { + synchronized (this) { + if (!m_destroying) { + for (int i = 0; i < m_children.size(); i++) { + org.omg.PortableServer.POA poa=(org.omg.PortableServer.POA) + m_children.elementAt(i); + poa.destroy(etherealize_objects, wait_for_completion); + } + m_etherealize = etherealize_objects; + } + m_destroying = true; + } + + if (wait_for_completion) { + // Wait until there are no executing requests + if (m_completion.conditionToWait()) { + m_completion.waitForCompletion(); + } else { + throw new BAD_INV_ORDER("Can't waitForCompletion!"); + } + + synchronized (this) { + + if (!m_destroyed) { + // POA has not been destroyed yet -> destroy it now + trueDestroy(); + } + } + } else { + synchronized (this) { + boolean PoaNotInUse = m_completion.getActiveRequests() <= 0; + if (PoaNotInUse) { + trueDestroy(); + } + } + + } + } + + /* ************ Policy creation ************* */ + + public org.omg.PortableServer.ThreadPolicy + create_thread_policy(org.omg.PortableServer.ThreadPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.poa.policies.ThreadPolicyImpl(value); + } + + public org.omg.PortableServer.LifespanPolicy + create_lifespan_policy(org.omg.PortableServer.LifespanPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new es.tid.TIDorbj.core.poa.policies.LifespanPolicyImpl(value); + } + + public org.omg.PortableServer.IdUniquenessPolicy + create_id_uniqueness_policy + (org.omg.PortableServer.IdUniquenessPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.IdUniquenessPolicyImpl(value); + } + + public org.omg.PortableServer.IdAssignmentPolicy + create_id_assignment_policy( + org.omg.PortableServer.IdAssignmentPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.IdAssignmentPolicyImpl(value); + } + + public org.omg.PortableServer.ImplicitActivationPolicy + create_implicit_activation_policy( + org.omg.PortableServer.ImplicitActivationPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.ImplicitActivationPolicyImpl(value); + } + + public org.omg.PortableServer.ServantRetentionPolicy + create_servant_retention_policy( + org.omg.PortableServer.ServantRetentionPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.ServantRetentionPolicyImpl(value); + } + + public org.omg.PortableServer.RequestProcessingPolicy + create_request_processing_policy( + org.omg.PortableServer.RequestProcessingPolicyValue value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (value == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + return new + es.tid.TIDorbj.core.poa.policies.RequestProcessingPolicyImpl(value); + } + + /* ************ Accessors ************* */ + + public long getId() + { + return m_poa_id; + } + + public byte[] id() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_id; + } + + public java.lang.String the_name() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_name; + } + + public org.omg.PortableServer.POA the_parent() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_parent; + } + + public String[] getPath() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_path; + } + + synchronized public org.omg.PortableServer.POA[] the_children() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + org.omg.PortableServer.POA[] childrenArray = + new org.omg.PortableServer.POA[m_children.size()]; + m_children.copyInto(childrenArray); + return childrenArray; + } + + public org.omg.PortableServer.POAManager the_POAManager() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_poa_manager; + } + + synchronized public org.omg.PortableServer.AdapterActivator the_activator() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + return m_adapter_activator; + } + + synchronized public void + the_activator(org.omg.PortableServer.AdapterActivator the_activator) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (the_activator == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + m_adapter_activator = the_activator; + } + + synchronized public org.omg.PortableServer.ServantManager + get_servant_manager() + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + return m_servant_manager; + } + + synchronized public void + set_servant_manager(org.omg.PortableServer.ServantManager imgr) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (imgr == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + if (!(imgr instanceof org.omg.PortableServer.ServantActivator)) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) { + if (!(imgr instanceof org.omg.PortableServer.ServantLocator)) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + if (m_servant_manager != null) { + throw new org.omg.CORBA.BAD_INV_ORDER(); + } + m_servant_manager = imgr; + } + + synchronized public org.omg.PortableServer.Servant get_servant() + throws org.omg.PortableServer.POAPackage.NoServant, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (m_default_servant == null) { + throw new org.omg.PortableServer.POAPackage.NoServant(); + } + return m_default_servant; + } + + synchronized public void + set_servant(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_request_processing_policy.value() + != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + m_default_servant = p_servant; + // Servant delegate creation (oid == null ?) + ServantDelegate delegate = new ServantDelegate(this, null); + m_default_servant._set_delegate(delegate); + } + + /* ************ Activation ************* */ + + /** + * Activate an object in this POA. + * + * @param p_servant + * Servant. + * @return Returns an ORB generated object Id. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] + activate_object(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + != IdAssignmentPolicyValue.SYSTEM_ID) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + OID id = nextOID(); + try { + activate_object_with_id(id, p_servant); + } + catch (org.omg.PortableServer.POAPackage.ObjectAlreadyActive e) { + // this should never happen + throw new + INTERNAL("ObjectAlreadyActive thrown with SYSTEM_ID policy!!"); + } + return id.toByteArray(); + } + + /** + * Activate an object in this POA. + * + * @param id + * User created object Id. + * @param p_servant + * Servant. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If id is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public void + activate_object_with_id(byte[] id, + org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((id == null) || (p_servant == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (id.length == 0) + throw new BAD_PARAM("Invalid id length: 0", 0, + CompletionStatus.COMPLETED_NO); + + activate_object_with_id(new OID(id), p_servant); + + } + + /** + * Activate an object in this POA. + * + * @param id + * User created object Id. + * @param p_servant + * Servant. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If id is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.ServantAlreadyActive + * If p_servant is already active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + + protected void + activate_object_with_id(OID oid, + org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantAlreadyActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + boolean uniqueId = + m_id_uniqueness_policy.value() == IdUniquenessPolicyValue.UNIQUE_ID; + // See if there a destruction process running + + synchronized (m_active_object_map) { + java.lang.Object semaphore = m_active_object_map.isDestroying(oid); + if (semaphore != null) { + synchronized (semaphore) { + try { + semaphore.wait(); + } + catch (Exception e) {} + } + } + } + synchronized (this) { + m_active_object_map.put(oid, p_servant, uniqueId); + // Servant delegate creation + ServantDelegate delegate = new ServantDelegate(this, + oid.toByteArray()); + p_servant._set_delegate(delegate); + } + } + + /** + * Deactivate an object in this POA. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If id is not active in this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public void deactivate_object(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + OID tid_oid = new OID(oid); + + synchronized (m_active_object_map) { + if (m_active_object_map.isDestroying(tid_oid) == null) { + m_active_object_map.destroy(tid_oid); + tryToRemoveObject(tid_oid); + } + } + } + + /* ************ Id conversion ************* */ + + /** + * Create an object reference for a repository Id (using a new object Id). + * + * @param intf + * The repository Id + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object + create_reference(java.lang.String intf) + throws org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (intf == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (intf.length() == 0) + throw new BAD_PARAM("Invalid id length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + != IdAssignmentPolicyValue.SYSTEM_ID) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + OID newOid = nextOID(); + return createReferenceWithIdAux(newOid, intf); + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + */ + public org.omg.CORBA.Object create_reference_with_id(byte[] oid, + java.lang.String intf) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if ((oid == null) || (intf == null)) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + if (intf.length() == 0) + throw new BAD_PARAM("Invalid intf length: 0", 0, + CompletionStatus.COMPLETED_NO); + + return create_reference_with_id(new OID(oid), intf); + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + + synchronized protected org.omg.CORBA.Object + create_reference_with_id(OID oid, + java.lang.String intf) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (m_id_assignment_policy.value() + == IdAssignmentPolicyValue.SYSTEM_ID) { + + SystemOID s_oid = SystemOID.fromOID(oid); + + if (s_oid == null) + throw new BAD_PARAM("Invalid System OID", 0, + CompletionStatus.COMPLETED_NO); + + if (m_lifespan_policy.value() == LifespanPolicyValue.TRANSIENT) { + if ((s_oid.getPOAId() != m_poa_id) + || (currentOID().getSerial() < s_oid.getSerial())) { + throw new org.omg.CORBA.BAD_PARAM(); + } + } else { // PERSISTENT + if ((s_oid.getPOAId() == m_poa_id) + && (currentOID().getSerial() < s_oid.getSerial())) { + throw new org.omg.CORBA.BAD_PARAM(); + } + } + + return createReferenceWithIdAux(s_oid, intf); + } + + return createReferenceWithIdAux(oid, intf); + } + + /** + * Creates a new ObjectKey with the given oid. + *

+ * If the Lifespan policy is TRANSIENT, the poa_id is set to remember that + * the key is only valid in the current poa context. + */ + + protected POAKey createKey(OID oid) + { + if (m_key_seed == null) { + if (m_lifespan_policy.value() == LifespanPolicyValue.TRANSIENT) + m_key_seed = new POAKey(this, m_poa_id, null); + else + m_key_seed = new POAKey(this, 0, null); + } + + POAKey key = null; + + try { + key = (POAKey) m_key_seed.clone(); + } + catch (CloneNotSupportedException cnse) { + throw new org.omg.CORBA.INTERNAL(); + } + + key.setOID(oid); + return key; + } + + /** + * Create an object reference for a repository Id using a user defined + * object Id. + * + * @param oid + * The object Id + * @param intf + * The repository Id + */ + protected org.omg.CORBA.Object createReferenceWithIdAux( OID oid, java.lang.String intf) + { + POAKey poakey = createKey(oid); + IOR ior; + + TaggedComponent[] poaComponents = null; + + if(referencePolicies.getPolicies().getSize() > 0) { + poaComponents = new TaggedComponent[1]; + poaComponents[0] = referencePolicies; + } + + try { + + ior = m_orb.getCommunicationManager() + .getLayerById( IIOPCommunicationLayer.ID ) + .createIOR(intf, poakey, poaComponents); + + } catch ( CommunicationException ce ) { + throw new INTERNAL( + "Unable to create ior:" + ce.getMessage(), + 0, + CompletionStatus.COMPLETED_NO + ); + } + + return es.tid.TIDorbj.core.ObjectImpl.fromIOR(m_orb, ior); + } + + /** + * Get the object Id of a given servant. + * + * @param p_servant + * The servant. + * @exception org.omg.PortableServer.POAPackage.ServantNotActive + * If p_servant is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] + servant_to_id(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + boolean hasRetain = (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN); + + boolean hasUniqueId = (m_id_uniqueness_policy.value() + == IdUniquenessPolicyValue.UNIQUE_ID); + + boolean hasImplicitActivation =(m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + + boolean hasDefaultServant = (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT); + + if (!(hasDefaultServant + || (hasRetain && (hasUniqueId || hasImplicitActivation)))) + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + + if (hasRetain) { + // 1st behaviour + if (hasUniqueId) { + OID oid = m_active_object_map.get(p_servant); + if (oid != null) { + return oid.toByteArray(); + } + } + // 2nd behaviour + if (hasImplicitActivation) { + OID oid = m_active_object_map.get(p_servant); + if ((oid == null) || (!hasUniqueId)) { + OID newOid = nextOID(); + try { + activate_object_with_id(newOid, p_servant); + return newOid.toByteArray(); + } + catch (ObjectAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + catch (ServantAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + } + } + } + // 3rd behaviour + if (hasDefaultServant && (m_default_servant == p_servant)) { + try { + org.omg.PortableServer.Servant servant = + m_orb.initPOACurrent().getServant(); + if (servant == m_default_servant) { + // operation invoked on the default servant + return m_orb.initPOACurrent().get_object_id(); + } + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + } + + // 4th behaviour + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + /** + * Get the object reference of a given servant. + * + * @param p_servant + * The servant. + * @exception org.omg.PortableServer.POAPackage.ServantNotActive + * If p_servant is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object + servant_to_reference(org.omg.PortableServer.Servant p_servant) + throws org.omg.PortableServer.POAPackage.ServantNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (p_servant == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + boolean hasRetain = (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN); + boolean hasUniqueId = (m_id_uniqueness_policy.value() + == IdUniquenessPolicyValue.UNIQUE_ID); + boolean hasImplicitActivation = (m_implicit_activation_policy.value() + == ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + + if (!(hasRetain && (hasUniqueId || hasImplicitActivation))) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + + // 1st behaviour + if (hasUniqueId) { + OID oid = m_active_object_map.get(p_servant); + if (oid != null) { + return create_reference_with_id(oid.toByteArray(), + getRepositoryId(p_servant)); + } + } + + // 2nd behaviour + if (hasImplicitActivation) { + OID oid = m_active_object_map.get(p_servant); + if ((oid == null) || (!hasUniqueId)) { + OID newOid = nextOID(); + try { + activate_object_with_id(newOid, p_servant); + return create_reference_with_id(newOid, + getRepositoryId(p_servant)); + } + catch (ObjectAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + catch (ServantAlreadyActive e) { + throw new org.omg.CORBA.INTERNAL(); + // this should never happen + } + } + } + // 3rd behaviour + try { + org.omg.PortableServer.Servant servant = m_orb.initPOACurrent() + .getServant(); + + if (servant == m_default_servant) { + // operation invoked on the default servant + byte[] currentOID = m_orb.initPOACurrent().get_object_id(); + return create_reference_with_id(currentOID, + getRepositoryId(servant)); + } + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + // 4th behaviour + throw new org.omg.PortableServer.POAPackage.ServantNotActive(); + } + + /** + * Get the servant of a given object reference. + * + * @param reference + * The object reference. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongAdapter + * If the object reference does not belong to this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.PortableServer.Servant + reference_to_servant(org.omg.CORBA.Object reference) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongAdapter, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (reference == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + byte[] oid = reference_to_id(reference); + return id_to_servant(oid); + } + + /** + * Get the object Id of a given object reference. + * + * @param reference + * The object reference. + * @exception org.omg.PortableServer.POAPackage.WrongAdapter + * If the object reference does not belong to this POA. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public byte[] reference_to_id(org.omg.CORBA.Object reference) + throws org.omg.PortableServer.POAPackage.WrongAdapter, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (reference == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + try { + org.omg.CORBA.portable.ObjectImpl obj = + (org.omg.CORBA.portable.ObjectImpl) reference; + CommunicationDelegate delegate = + (CommunicationDelegate) obj + ._get_delegate(); + IOR ior = delegate.getReference(); + + POAKey poaKey = POAKey.createKey( ior.getObjectKey().getMarshaledKey() ); + POAKey poaKey2 = createKey(null); + if (!poaKey2.samePOA(poaKey)) { + throw new org.omg.PortableServer.POAPackage.WrongAdapter(); + } + return poaKey.getOID().toByteArray(); + } + catch (Exception e) { + throw new org.omg.PortableServer.POAPackage.WrongAdapter(); + } + } + + /** + * Get the servant of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + public org.omg.PortableServer.Servant id_to_servant(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + return id_to_servant(new OID(oid)); + } + + /** + * Get the servant of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized protected org.omg.PortableServer.Servant id_to_servant(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (( m_servant_retention_policy.value() != ServantRetentionPolicyValue.RETAIN) && + ( m_request_processing_policy.value() != RequestProcessingPolicyValue.USE_DEFAULT_SERVANT)) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) + && (m_active_object_map.isActive(oid))) { + return m_active_object_map.get(oid); + } + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) + && (m_default_servant != null)) { + // Default servant invocation (oid == current request oid ??) + ServantDelegate srv_delegate = + (ServantDelegate) m_default_servant._get_delegate(); + srv_delegate.setObjectId(oid.toByteArray()); + return m_default_servant; + } + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + + /** + * Get the object reference of a given object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @exception org.omg.PortableServer.POAPackage.WrongPolicy + * If POA policies do not allow this operation. + */ + synchronized public org.omg.CORBA.Object id_to_reference(byte[] oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.WrongPolicy + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (oid == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + if (oid.length == 0) + throw new BAD_PARAM("Invalid oid length: 0", 0, + CompletionStatus.COMPLETED_NO); + + OID tid_oid = new OID(oid); + + if (m_servant_retention_policy.value() + != ServantRetentionPolicyValue.RETAIN) { + throw new org.omg.PortableServer.POAPackage.WrongPolicy(); + } + if (!m_active_object_map.isActive(tid_oid)) { + throw new org.omg.PortableServer.POAPackage.ObjectNotActive(); + } + org.omg.PortableServer.Servant servant = + m_active_object_map.get(tid_oid); + return create_reference_with_id(tid_oid, getRepositoryId(servant)); + } + + + + + /* ************ TIDorb methods ************* */ + + /** + * Finds the servant for an object Id. Executes all needed activations, + * according to the policies of this POA. + * + * @param oid + * The object Id. + * @param operation + * The name of the operation invoked (if any). + * @param cookieHolder + * The CookieHolder (only if ServantLocator is needed). + * @param servantLocatorUsed + * Returns true if ServantLocator has been used. + * @return The servant. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If it tries to use a inactive object. + * @exception org.omg.PortableServer.POAPackage.ObjectAlreadyActive + * If it tries to activate an active object. + * @exception org.omg.PortableServer.ForwardRequest + * It can be thrown by incarnate(). + */ + synchronized protected org.omg.PortableServer.Servant + find_servant(OID oid, + String operation, + CookieHolder cookieHolder, + org.omg.CORBA.BooleanHolder servantLocatorUsed) + throws org.omg.PortableServer.POAPackage.ObjectNotActive, + org.omg.PortableServer.POAPackage.ObjectAlreadyActive, + org.omg.PortableServer.ForwardRequest + { + + servantLocatorUsed.value = false; + org.omg.PortableServer.Servant servant = null; + + try { + + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN)) { + // RETAIN && USE_ACTIVE_OBJECT_MAP_ONLY + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY){ + servant = id_to_servant(oid); + return servant; + } + + // RETAIN && USE_DEFAULT_SERVANT + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + servant = id_to_servant(oid); + return servant; + } + + // RETAIN && USE_SERVANT_MANAGER + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + + try { + // try to get id from the Active Object Map + servant = id_to_servant(oid); + } + catch (ObjectNotActive e){ + // try to use Servant Activator (incarnate) + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) + m_servant_manager; + servant = activator.incarnate(oid.toByteArray(), this); + if (servant == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + try { + // try to activate servant created by Servant + // Activator + activate_object_with_id(oid, servant); + } + catch (ServantAlreadyActive e2) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + } + + return servant; + } + } else { // NON_REATAIN + + // NON_RETAIN && USE_DEFAULT_SERVANT + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_DEFAULT_SERVANT) { + if (m_default_servant == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + // return Default Servant + servant = m_default_servant; + // Default servant invocation (oid == current request oid + // ??) + ServantDelegate srv_delegate = + (ServantDelegate) servant._get_delegate(); + + srv_delegate.setObjectId(oid.toByteArray()); + + return servant; + } + // NON_RETAIN && USE_SERVANT_MANAGER + if (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + // try to use Servant Locator (preinvoke) + org.omg.PortableServer.ServantLocator locator = + (org.omg.PortableServer.ServantLocator) + m_servant_manager; + + servant = locator.preinvoke(oid.toByteArray(), this, + operation, cookieHolder); + + servantLocatorUsed.value = true; + // Servant delegate creation (oid == current request oid ??) + + ServantDelegate delegate = + new ServantDelegate(this,oid.toByteArray()); + + servant._set_delegate(delegate); + + return servant; + } + } + + } + catch (org.omg.PortableServer.POAPackage.WrongPolicy dummy) { + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEEP_DEBUG, + "Unexpected WrongPolicy exception", dummy); + } + + throw new INTERNAL("Unexpected WrongPolicy exception"); + } + + return servant; + } + + /** + * Call postinvoke. This method is only used if there was a preinvoke before + * servant invocation. + * + * @param oid + * The object Id. + * @param operation + * The name of the operation invoked. + * @param cookieHolder + * The CookieHolder + * @param servant + * The servant. + * @return The servant. + */ + synchronized protected void + callPostinvoke(byte[] oid, + String operation, + CookieHolder cookieHolder, + org.omg.PortableServer.Servant servant) + { + if ((m_servant_retention_policy.value() + == ServantRetentionPolicyValue.NON_RETAIN) + && (m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER)) { + if (m_servant_manager == null) { + throw new org.omg.CORBA.OBJ_ADAPTER(); + } + org.omg.PortableServer.ServantLocator locator = + (org.omg.PortableServer.ServantLocator) m_servant_manager; + if (isSingleThread()) { + synchronized (locator) { + locator.postinvoke(oid, this, operation, + cookieHolder.value, servant); + } + } else { + locator.postinvoke(oid, + this, + operation, + cookieHolder.value, + servant); + } + } + } + + /** + * @return True if POA's ThreadPolicy is SINGLE_THREAD. + */ + synchronized protected boolean isSingleThread() + { + return (m_thread_policy.value() + == ThreadPolicyValue.SINGLE_THREAD_MODEL); + } + + /** + * @return True if POA's BidirectionalPolicy is BOTH. + */ + synchronized public boolean isBidirectional() + { + BidirectionalPolicy bidirectional_policy = + referencePolicies.getPolicies().getBidirectionalPolicy(); + + if(bidirectional_policy == null) { + return false; + } else { + return (bidirectional_policy.value() == BOTH.value); + } + } + + /** + * @return True if this POA has an AdapterActivator. + */ + synchronized protected boolean hasAdapterActivator() + { + return m_adapter_activator != null; + } + + /** + * Adds a new user for this oid. This means that there is one more active + * request executing some request with this object Id. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + */ + synchronized protected void addUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + + if (m_active_object_map.isActive(oid)) { + m_active_object_map.addUser(oid); + } + } + + m_completion.beginRequest(); + m_poa_manager.beginRequest(); + } + + /** + * Removes a user for this oid. + * + * @param oid + * The object Id. + * @exception org.omg.PortableServer.POAPackage.ObjectNotActive + * If object is not active yet. + * @see addUser. + */ + protected void removeUser(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + // Decrease # of users of OID + m_completion.endRequest(); + synchronized (this) { + m_poa_manager.endRequest(); + if (m_destroying) { + boolean PoaNotInUse = m_completion.getActiveRequests() <= 0; + if (PoaNotInUse) { + trueDestroy(); + } + } else { + tryToRemoveObject(oid); + } + } + } + + /** + * Etherealizes all objects in this POA manager. + */ + synchronized protected void etherealizeAllObjects() + { + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + java.util.Enumeration oids = m_active_object_map.getOIDs(); + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) + && (m_servant_manager != null)) { + // call etherealize + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) m_servant_manager; + while (oids.hasMoreElements()) { + OID oid = (OID) oids.nextElement(); + try { + org.omg.PortableServer.Servant servant = + m_active_object_map.remove(oid); + if (isSingleThread()) { + synchronized (activator) { + activator.etherealize( + oid.toByteArray(), + this, + servant, + false, + m_active_object_map.contains(servant)); + } + } else { + activator.etherealize( + oid.toByteArray(), + this, + servant, + false, + m_active_object_map.contains(servant)); + } + } + catch (Exception e) { + // should never happen + e.printStackTrace(); + } + } + } + } else { + //nothing to do + } + } + + /** + * Creates the root POA. This method should only be called by + * es.tid.TIDorbj.core.TIDorb.resolve_initial_references() + * + * @param orb + * The ORB. + * @see es.tid.TIDorbj.core.TIDORB#resolve_initial_references + */ + static public POAImpl createRootPOA(es.tid.TIDorbj.core.TIDORB orb) + { + POAImpl rootPOA = null; + org.omg.CORBA.Policy[] policies = new org.omg.CORBA.Policy[8]; + policies[0] = + new IdAssignmentPolicyImpl(IdAssignmentPolicyValue.SYSTEM_ID); + policies[1] = + new IdUniquenessPolicyImpl(IdUniquenessPolicyValue.UNIQUE_ID); + policies[2] = + new ImplicitActivationPolicyImpl( + ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION); + policies[3] = + new LifespanPolicyImpl(LifespanPolicyValue.TRANSIENT); + policies[4] = + new RequestProcessingPolicyImpl( + RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY); + policies[5] = + new ServantRetentionPolicyImpl(ServantRetentionPolicyValue.RETAIN); + policies[6] = new ThreadPolicyImpl(ThreadPolicyValue.ORB_CTRL_MODEL); + policies[7] = + new es.tid.TIDorbj.core.BidirectionalPolicyImpl(NORMAL.value); + try { + POAManagerImpl mgr = new POAManagerImpl(orb); + rootPOA = new POAImpl(orb, "rootPOA", mgr, policies, null); + } + catch (org.omg.PortableServer.POAPackage.InvalidPolicy e) { + // this can never happen + } + return rootPOA; + } + + /* ************ Private methods ************* */ + + /** + * Removes an object if there are no executing request using it. + * + * @param oid + * The object Id. + */ + private void tryToRemoveObject(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + if (m_servant_retention_policy.value() + == ServantRetentionPolicyValue.RETAIN) { + if (m_active_object_map.isActive(oid)) { + boolean OidNotInUse = m_active_object_map.removeUser(oid); + if (OidNotInUse) { + trueRemoveObject(oid); + } + } + } + } + + /** + * Removes an object. + * + * @param oid + * The object Id. + */ + private void trueRemoveObject(OID oid) + throws org.omg.PortableServer.POAPackage.ObjectNotActive + { + // Remove OID from ActiveObjectMap + // ///////////////////////////////////////////////////////////// + org.omg.PortableServer.Servant servant = + m_active_object_map.remove(oid); + if (m_orb.m_trace != null) { + m_orb.printTrace(Trace.DEEP_DEBUG, "Removing object: " + + oid.toString()); + } + + // Try to etherealize, if necessary + if ((m_request_processing_policy.value() + == RequestProcessingPolicyValue.USE_SERVANT_MANAGER) + && (m_servant_manager != null)) { + org.omg.PortableServer.ServantActivator activator = + (org.omg.PortableServer.ServantActivator) m_servant_manager; + if (isSingleThread()) { + synchronized (activator) { + activator.etherealize(oid.toByteArray(), + this, + servant, + true, + m_active_object_map.contains(servant)); + } + } else { + activator.etherealize(oid.toByteArray(), + this, servant, + true, + m_active_object_map.contains(servant)); + } + } + // Continue with waiting activations of oid (if any) + synchronized (servant) { + servant.notifyAll(); + } + } + + public void destroy() + { + throw new BAD_OPERATION(); + } + + /** + * Destroys the POA manager. + */ + synchronized public void trueDestroy() + { + m_destroyed = true; + + if (m_etherealize) { + // Etherealize all objects + etherealizeAllObjects(); + } else { + // init activeObjectMap (perhaps this is not necessary) + m_active_object_map = new ActiveObjectMap(); + } + // remove POA from parent + if (m_parent != null) { + ((POAImpl) m_parent).m_children.removeElement(this); + } + m_poa_manager.removePOA(this); + m_poa_manager = null; + } + + /** + * Find a POA among the POA's children. + * + * @param poa_name + * The POA name. + */ + private org.omg.PortableServer.POA findChildren(String poa_name) + { + org.omg.PortableServer.POA poa = null; + for (int i = 0; i < m_children.size(); i++) { + poa = (org.omg.PortableServer.POA) m_children.elementAt(i); + if (poa_name.equals(poa.the_name())) { + return poa; + } + } + return null; + } + + /** + * Returns the repository Id of a servant. + * + * @param servant + * The servant. + * @return The repository Id. + */ + private String getRepositoryId(org.omg.PortableServer.Servant servant) + { + return servant._all_interfaces(this, servant._object_id())[0]; + } + + /** + * @return The current System Object Id. + */ + public SystemOID currentOID() + { + return m_current_OID; + } + + /** + * Generates the next oid. + * + * @return The next Object Id. + */ + public OID nextOID() + { + SystemOID aux = m_current_OID; + m_current_OID = m_current_OID.next(); + return aux; + } + + + + /* ************ ObjectImpl ************* */ + + public String toString() + { + if (m_poa_string_name == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("POA "); + POAKey key = createKey(null); + buffer.append(key.getPOAPath()); + m_poa_string_name = buffer.toString(); + } + + return m_name; + } + + + + +} diff --git a/source/es/tid/TIDorbj/core/poa/POAKey.java b/source/es/tid/TIDorbj/core/poa/POAKey.java new file mode 100644 index 0000000..fc52c10 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/POAKey.java @@ -0,0 +1,332 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.INV_OBJREF; +import org.omg.CORBA.MARSHAL; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; + +public class POAKey extends ObjectKey + implements Cloneable +{ + + /** + * Magic number: start of an POAKey + */ + + public final static byte MAGIC_START = 0x0; + + /** + * Start encapsulated key size to verify if it is an POAKey + */ + + public final static int START_BUFFER_SIZE = + CDR.ULONG_SIZE /* encapsulation size */ + + CDR.BOOLEAN_SIZE /* byte order */ + + (2 * CDR.OCTET_SIZE); /* and 2 magic number */ + + /** + * Sequence of poa names from the rootPOA to the final POA. + */ + private String[] m_poas = null; + + /** + * Rereference durability. If 0 the reference is persistent, otherwise the + * reference is transient, and it lifespan is joined to its POA lifespan. + */ + private long m_poa_id = 0L; + + /** + * Object Id. + */ + private OID m_oid = null; + + private String m_key_name = null; + + private POAKey(){ + + } + + + public POAKey(org.omg.PortableServer.POA poa, long poa_id, OID oid) { + m_poas = ((POAImpl) (poa)).getPath(); + m_poa_id = poa_id; + m_oid = oid; + } + + public POAKey(String[] poas, long poa_id, OID oid) + { + m_poas = poas; + m_poa_id = poa_id; + m_oid = oid; + } + + + public String getPOA(int poa_level) + { + return m_poas[poa_level]; + } + + public int numberOfPOAs() + { + return m_poas.length; + } + + public OID getOID() + { + return m_oid; + } + + public long getPOAId() + { + return m_poa_id; + } + + protected void setOID(OID oid) + { + m_oid = oid; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream output) + { + if ( super.getMarshaledKey() == null ){ + + // create input stream for save the encapsualation + CDRInputStream encapsulation_input; + encapsulation_input = output.inputStreamAtThisPosition(); + + if (m_poas == null) { + throw new INTERNAL("Uncompleted POAKey"); + } + + // begin marshalling + output.enterEncapsulation(); + + // KEY is alwais 1.2 + + GIOPVersion output_version = output.getVersion(); + output.setVersion(GIOPVersion.VERSION_1_2); + + // write magic start 2 bytes with 0 value + output.write_octet(MAGIC_START); + output.write_octet(MAGIC_START); + + // write string[] with poas path + // - number of poas in path + output.write_ulong(m_poas.length); + // - each poa path entry + for (int i = 0; i < m_poas.length; i++) { + output.write_string(m_poas[i]); + } + + // lifespan time + output.write_longlong(m_poa_id); + + // oid + byte[] oid_value = m_oid.toByteArray(); + if (oid_value == null) { + throw new INTERNAL("Uncompleted POAKey"); + } + output.write_ulong(oid_value.length); + output.write_octet_array(oid_value, 0, oid_value.length); + + output.setVersion(output_version); + + // end marshalling + output.exitEncapsulation(); + + super.setMarshaledKey( encapsulation_input.readEncapsulation() ); + + encapsulation_input = null; + + } else { + super.write( output ); + } + + } + + public void read(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + // KEY is alwais 1.2 + + GIOPVersion input_version = input.getVersion(); + + input.setVersion(GIOPVersion.VERSION_1_2); + + // check magic bytes + + byte magic_0 = input.read_octet(); + byte magic_1 = input.read_octet(); + + if ((magic_0 != MAGIC_START) || (magic_1 != MAGIC_START)) + throw new MARSHAL("Not a TIDorb key"); + + // read string[] with poas path + + int length = input.read_ulong(); + + if (length < 0) + throw new INV_OBJREF("Malformed POAKey(bad number of poas)"); + + m_poas = new String[length]; + for (int i = 0; i < m_poas.length; i++) + m_poas[i] = input.read_string(); + + m_poa_id = input.read_longlong(); + + // read byte[] with oid + + length = input.read_ulong(); + + if (length == 0) + throw new org.omg.CORBA.INV_OBJREF("Malformed POAKey"); + + byte[] oid_value = new byte[length]; + input.read_octet_array(oid_value, 0, length); + + m_oid = new OID(oid_value); + + input.setVersion(input_version); + } + + public boolean samePOA(POAKey other) + { + if (m_poa_id != other.m_poa_id) + return false; + if (m_poas.length != other.m_poas.length) + return false; + for (int i = 0; i < m_poas.length; i++) { + if (!m_poas[i].equals(other.m_poas[i])) + return false; + } + return true; + } + + public boolean equals(POAKey other) + { + return m_oid.equals(other.m_oid) && samePOA(other); + } + + public Object clone() + throws CloneNotSupportedException + { + return super.clone(); + } + + public String getPOAPath() + { + StringBuffer str = new StringBuffer("/"); + if (m_poas != null) { + for (int i = 0; i < m_poas.length; i++) { + str.append(m_poas[i]).append("/"); + } + } + + return str.toString(); + } + + public static POAKey createKey(Encapsulation key) + { + if(maybePOAKey(key)) { + POAKey poaKey = new POAKey(); + poaKey.setMarshaledKey( key ); + poaKey.read( key.createInputStream() ); + return poaKey; + } else { + return null; + } + + } + + public static boolean + maybePOAKey(es.tid.TIDorbj.core.cdr.Encapsulation encap) + { + int start = encap.getOffset(); + + if (encap.getLength() < START_BUFFER_SIZE) + return false; + + byte[] start_key_buffer = encap.getOctetSequence(); + + return (start_key_buffer[start + START_BUFFER_SIZE - 1] == MAGIC_START) + && (start_key_buffer[start + START_BUFFER_SIZE - 2] == MAGIC_START); + } + + public synchronized String toString() + { + if (m_key_name == null) { + + StringBuffer str = new StringBuffer("ObjectKey[POA: /"); + + if (m_poas != null) { + for (int i = 0; i < m_poas.length; i++) { + str.append(m_poas[i]).append("/"); + } + } + + if (m_poa_id == 0L) + str.append("; Type: PERSISTENT "); + else { + str.append("; Type: TRANSIENT(POA Id: "); + str.append(m_poa_id); + str.append("); "); + } + + if (m_oid != null) + str.append(m_oid.toString()); + + str.append(']'); + + m_key_name = str.toString(); + } + return m_key_name; + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/POAManagerConf.java b/source/es/tid/TIDorbj/core/poa/POAManagerConf.java new file mode 100644 index 0000000..945d58b --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/POAManagerConf.java @@ -0,0 +1,141 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import org.omg.CORBA.BAD_PARAM; + +/** + * Configuration set for POAManager. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class POAManagerConf +{ + + private int m_min_threads; + + private int m_max_threads; + + private int m_max_queued_requests; + + private int m_starving_time; + + private POAManagerConfListener m_listener = null; + + protected POAManagerConf(int min_threads, int max_threads, + int max_queued_requests, int starving_time) + { + this.m_min_threads = min_threads; + this.m_max_threads = max_threads; + this.m_max_queued_requests = max_queued_requests; + this.m_starving_time = starving_time; + } + + public void setListener(POAManagerConfListener l) + { + m_listener = l; + } + + synchronized public void setMinThreads(int min_threads) + { + if (min_threads < 0) { + throw new BAD_PARAM("min_threads can not be negative."); + } + if (min_threads > this.m_max_threads) { + throw new + BAD_PARAM("min_threads can not be greater than max_threads."); + } + this.m_min_threads = min_threads; + if (m_listener != null) { + m_listener.minThreadsHasChanged(); + } + } + + synchronized public void setMaxThreads(int max_threads) + { + if (max_threads < this.m_min_threads) { + throw new + BAD_PARAM("max_threads can not be less than min_threads."); + } + this.m_max_threads = max_threads; + } + + synchronized public void setMaxQueuedRequests(int max_queued_requests) + { + if (max_queued_requests < this.m_max_queued_requests) { + throw new + BAD_PARAM("max_queued_requests can not be decreased."); + } + this.m_max_queued_requests = max_queued_requests; + } + + synchronized public void setStarvingTime(int millisecs) + { + if (millisecs < 0) { + throw new BAD_PARAM("starving_time can not be negative."); + } + this.m_starving_time = millisecs; + } + + synchronized public int getMaxQueuedRequests() + { + return m_max_queued_requests; + } + + synchronized public int getMaxThreads() + { + return m_max_threads; + } + + synchronized public int getMinThreads() + { + return m_min_threads; + } + + synchronized public int getStarvingTime() + { + return m_starving_time; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/POAManagerConfListener.java b/source/es/tid/TIDorbj/core/poa/POAManagerConfListener.java new file mode 100644 index 0000000..a634d84 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/POAManagerConfListener.java @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +interface POAManagerConfListener +{ + + void minThreadsHasChanged(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/POAManagerImpl.java b/source/es/tid/TIDorbj/core/poa/POAManagerImpl.java new file mode 100644 index 0000000..a586099 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/POAManagerImpl.java @@ -0,0 +1,487 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 13 $ +* Date: $Date: 2006-02-09 10:58:57 +0100 (Thu, 09 Feb 2006) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_DEADLINE; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.PortableServer.POAManagerPackage.AdapterInactive; +import org.omg.PortableServer.POAManagerPackage.State; + +/** + * Implementation of POAManager. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class POAManagerImpl extends org.omg.PortableServer.POAManagerLocalBase + implements es.tid.PortableServer.POAManager +{ + + private boolean destroyed; + + // Relationships + protected es.tid.TIDorbj.core.TIDORB m_orb = null; + + protected POAManagerConf m_conf; + + private Vector m_poas; + + private RequestQueue m_request_queue; + + private ThreadPool m_pool; + + + // Members + private State m_state; + + protected java.lang.Object m_state_mutex; + + protected String m_manager_name; + + static es.tid.TIDorbj.core.util.Counter st_serial = + new es.tid.TIDorbj.core.util.Counter(); + + protected short m_queue_order; + + // waitForCompletion + private CompletionWaiter m_completion; + + /** + * Constructor. + * + * @param orb + * The ORB. + */ + public POAManagerImpl(es.tid.TIDorbj.core.TIDORB orb) + { + m_orb = orb; + synchronized (orb.m_POAManagers) { + orb.m_POAManagers.addElement(this); + } + m_manager_name = "POAManager " + st_serial.inc(); + m_state = State.HOLDING; + m_state_mutex = new Boolean(true); + m_conf = new POAManagerConf(orb.m_conf.poa_min_threads, + orb.m_conf.poa_max_threads, + orb.m_conf.poa_max_queued_requests, + orb.m_conf.poa_starving_time); + m_completion = new CompletionWaiter(orb); + m_poas = new Vector(); + m_pool = new ThreadPool(this); + m_conf.setListener(m_pool); + m_request_queue = new RequestQueue(this, m_pool, new TemporalRequestComparator()); + m_pool.minThreadsHasChanged(); + m_queue_order = ORDER_TEMPORAL.value; + + } + + /** + * Sets the mininum number of execution threads + */ + public void set_min_threads(int min_threads) + { + m_conf.setMinThreads(min_threads); + } + + /** + * Sets the maximun number of execution threads + */ + public void set_max_threads(int max_threads) + { + m_conf.setMaxThreads(max_threads); + } + + /** + * Sets the maximun number of request queued in the POAManager + */ + public void set_max_queued_requests(int max_queued_requests) + { + m_conf.setMaxQueuedRequests(max_queued_requests); + } + + /** + * Sets the maximun time an execution thread is inactive. + */ + public void set_starving_time(int millisecs) + { + m_conf.setStarvingTime(millisecs); + } + + /** + * @return maximun number of request queued in the POAManager + */ + public int get_max_queued_requests() + { + return m_conf.getMaxQueuedRequests(); + } + + /** + * @return the maximun number of execution threads + */ + public int get_max_threads() + { + return m_conf.getMaxThreads(); + } + + /** + * @return the mininum number of execution threads + */ + public int get_min_threads() + { + return m_conf.getMinThreads(); + } + + /** + * @return the maximun time an execution thread is inactive. + */ + public int get_starving_time() + { + return m_conf.getStarvingTime(); + } + + /** + * @return The associated POAManagerConf object. + */ + protected POAManagerConf getConf() + { + return m_conf; + } + + /** + * Adds a POA to this POAManager. + * + * @param poa + * The POA. + */ + protected void addPOA(org.omg.PortableServer.POA poa) + { + m_poas.addElement(poa); + } + + /** + * @return The request queue of this POAManager. + */ + protected RequestQueue getRequestQueue() + { + return m_request_queue; + } + + /** + * @return The thread pool of this POAManager. + */ + protected ThreadPool getThreadPool() + { + return m_pool; + } + + protected void setQueueOrderPolicy(QueueOrderPolicy policy) { + + short order = policy.allowed_orders(); + + set_queue_order(order); + + + } + + public void set_queue_order(short order) { + if(((order ^ ORDER_PRIORITY.value) != 0) + && (m_queue_order != ORDER_PRIORITY.value)){ + m_request_queue.setComparator(new PriorityRequestComparator()); + m_queue_order = ORDER_PRIORITY.value; + } else if (((order ^ ORDER_DEADLINE.value) != 0) + && (m_queue_order != ORDER_DEADLINE.value)){ + m_request_queue.setComparator(new DeadlineRequestComparator()); + m_queue_order = ORDER_DEADLINE.value; + } else if ((m_queue_order != ORDER_TEMPORAL.value) + || (m_queue_order != ORDER_ANY.value)) { + // default comparator will be used + m_request_queue.setComparator(new TemporalRequestComparator()); + } + } + + public short get_queue_order() + { + return m_queue_order; + + } + + + /* ************ State changes ************* */ + + /** + * This operation changes the POA manager to ACTIVE. + * + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void activate() + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> ACTIVE + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.ACTIVE) { + m_completion.stopWaiting(); + m_state = State.ACTIVE; + m_state_mutex.notifyAll(); + } + } + } + + /** + * This operation changes the POA manager to HOLDING. + * + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void hold_requests(boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> HOLDING + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.HOLDING) { + m_completion.stopWaiting(); + m_state = State.HOLDING; + m_state_mutex.notifyAll(); + } + } + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); // synchronized + } + } + + /** + * This operation changes the POA manager to DISCARDING. + * + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void discard_requests(boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + // State change -> DISCARDING + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + if (m_state != State.DISCARDING) { + m_completion.stopWaiting(); + m_state = State.DISCARDING; + m_state_mutex.notifyAll(); + } + } + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); // synchronized + } + } + + /** + * This operation changes the POA manager to DEACTIVATE. + * + * @param etherealize_object + * If it is true, then all objects must be etherealized. + * @param wait_for_completion + * Wait-for-completion flag. + * @exception org.omg.PortableServer.POAManagerPackage.AdapterInactive + * If POA manager state is INACTIVE. + */ + public void deactivate(boolean etherealize_objects, + boolean wait_for_completion) + throws org.omg.PortableServer.POAManagerPackage.AdapterInactive + { + + // State change -> INACTIVE + synchronized (m_state_mutex) { + if (m_state == State.INACTIVE) { + throw new AdapterInactive(); + } + + // reset the last completion waiters + m_completion.stopWaiting(); + + m_pool.deactivation(); + + m_request_queue.deactivation(); + + m_state = State.INACTIVE; + synchronized (m_orb.m_POAManagers) { + for (int i = 0; i < m_orb.m_POAManagers.size(); i++) { + if (m_orb.m_POAManagers.elementAt(i) == this) + m_orb.m_POAManagers.removeElementAt(i); + } + } + } + + // Wait for completion, if necessary + if (wait_for_completion && m_completion.conditionToWait()) { + m_completion.waitForCompletion(); //synchronized + if (etherealize_objects) { + // Etherealize objects (blocking) + etherealizeAllPOAs(); + } + } else if (etherealize_objects) { + // Etherealize in background + EtherealizerThread t = new EtherealizerThread(this); + t.start(); + } + } + + /** + * @return Return the state of the POA manager. + */ + public org.omg.PortableServer.POAManagerPackage.State get_state() + { + return m_state; + } + + /* ************ TIDorb methods - POA Location ************* */ + + /** + * Puts a new request in this POA manager. + * + * @param request + * The request. + */ + public void put(QueuedRequest request) + { + m_request_queue.add(request); + } + + /** + * Removes a POA from this POA manager. + * + * @param poa + * The POA being removed. + */ + protected void removePOA(org.omg.PortableServer.POA poa) + { + m_poas.removeElement(poa); + } + + /** + * Finds a POA in this POA manager. + * + * @param poaName + * The POA name. + */ + protected org.omg.PortableServer.POA findPOA(String poaName) + { + for (int i = 0; i < m_poas.size(); i++) { + org.omg.PortableServer.POA poa = (org.omg.PortableServer.POA) + m_poas.elementAt(i); + if (poa.the_name().equals(poaName)) { + return poa; + } + } + return null; + } + + /** + * Begins the execution of a request. + */ + protected void beginRequest() + { + m_completion.beginRequest(); + } + + /** + * Ends the execution of a request. + */ + protected void endRequest() + { + m_completion.endRequest(); + } + + /** + * Etherealizes all POAs (due to POA manager deactivation). + */ + protected void etherealizeAllPOAs() + { + for (int i = 0; i < m_poas.size(); i++) { + POAImpl poa = (POAImpl) m_poas.elementAt(i); + poa.etherealizeAllObjects(); + } + } + + /** + * Class to etherealize all POAs in background. + */ + public class EtherealizerThread extends Thread + { + + POAManagerImpl poaManager; + + public EtherealizerThread(POAManagerImpl poaManager) + { + this.poaManager = poaManager; + } + + public void run() + { + poaManager.etherealizeAllPOAs(); + } + } + + /* ************ ObjectImpl ************* */ + + public String toString() + { + return m_manager_name; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/PriorityRequestComparator.java b/source/es/tid/TIDorbj/core/poa/PriorityRequestComparator.java new file mode 100644 index 0000000..e1757f6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/PriorityRequestComparator.java @@ -0,0 +1,84 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +import org.omg.Messaging.PriorityRange; +import org.omg.Messaging.RequestPriorityPolicy; + +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Comparator that uses the request priority to decide the order + * in a request queue. In case of simillar priorities, the + * TemporalRequestComparator will be used. + * @author caceres + * + */ +public class PriorityRequestComparator + implements Comparator +{ + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + public final static int DEFAULT_PRIORITY = 0; + + TemporalRequestComparator temporalComparator; + + + /** + * @param policy + */ + public PriorityRequestComparator() + { + temporalComparator = new TemporalRequestComparator(); + } + + protected short getPriority(RequestPriorityPolicy policy) + { + short priority = DEFAULT_PRIORITY; + + + if(policy != null) { + PriorityRange range = policy.priority_range(); + priority = (short) + Math.round((float) (range.max + range.min) / 2.0); + } + + return priority; + } + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + PolicyContext context1 = request1.getPolicyContext(); + PolicyContext context2 = request2.getPolicyContext(); + + RequestPriorityPolicy reqPriority1 = null; + RequestPriorityPolicy reqPriority2 = null; + + if (context1 != null) { + reqPriority1 = context1.getRequestPriorityPolicy(); + } + + if (context2 != null) { + reqPriority2 = context2.getRequestPriorityPolicy(); + } + + short priority1 = getPriority(reqPriority1); + short priority2 = getPriority(reqPriority2); + + + if(priority1 > priority2) { + return LESS_THAN; + } else if(priority1 == priority2) { + + return temporalComparator.compare(o1, o2); + + } else { + return GREATER_THAN; + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/QueueReaderManager.java b/source/es/tid/TIDorbj/core/poa/QueueReaderManager.java new file mode 100644 index 0000000..f3f26ec --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/QueueReaderManager.java @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 8 $ +* Date: $Date: 2006-01-24 17:36:46 +0100 (Tue, 24 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Interface for queue readers that want to be notified of item availability. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public interface QueueReaderManager +{ + + boolean createNewReader(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.java b/source/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.java new file mode 100644 index 0000000..d0321ab --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/QueuedLocateResponseHandler.java @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.core.comm.LocateResponseHandler; + +/** + * @author jprojas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public abstract class QueuedLocateResponseHandler + extends QueuedResponseHandler + implements LocateResponseHandler { + + private String str; + + public synchronized String toString() { + + if(str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("LocateRequest "); + buffer.append(" to "); + buffer.append(getObjectKey().toString()); + buffer.append(" with order "); + buffer.append(Long.toString(getSerial())); + str = buffer.toString(); + buffer = null; + } + return str; + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/QueuedRequest.java b/source/es/tid/TIDorbj/core/poa/QueuedRequest.java new file mode 100644 index 0000000..f3b4647 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/QueuedRequest.java @@ -0,0 +1,179 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telef?nica Investigaci?n y Desarrollo +* S.A.Unipersonal (Telef?nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + + +import es.tid.TIDorbj.core.comm.ResponseHandler; +import es.tid.TIDorbj.core.policy.PolicyContext; + +/** + * Super class for request that are enqueued for later execution. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public abstract class QueuedRequest implements ResponseHandler +{ + //TODO: Should be removed after refactoring + private POAKey m_poakey; + + private int m_current_child_poa_name_level; + + private boolean m_must_discard = false; + + private org.omg.CORBA.CompletionStatus m_status; + + private POAImpl m_current_poa; + + private PolicyContext m_policy_context; + + private long m_serial; + private short m_priority; + + + //TODO: added by jprojas... + private ResponseHandler responseHandler; + + public QueuedRequest(){ + m_current_child_poa_name_level = 0; + m_poakey = null; + m_status = org.omg.CORBA.CompletionStatus.COMPLETED_NO; + m_current_poa = null; + m_policy_context = null; + m_serial = 0L; + } + + public void setPolicyContext(PolicyContext context) + { + m_policy_context = context; + } + + public PolicyContext getPolicyContext() + { + return m_policy_context; + } + + public void setPriority(short priority) { + m_priority = priority; + } + + public short getPriority () { + return m_priority; + } + + /** + * @param serial the ORB request serial number + */ + public void setSerial(long serial) + { + m_serial = serial; + } + + /** + * @return serial the ORB request serial number + */ + public long getSerial() + { + return m_serial; + } + + + public org.omg.CORBA.CompletionStatus getStatus() { + return m_status; + } + + public void setStatus(org.omg.CORBA.CompletionStatus value) { + if (value != null) { + m_status = value; + } + } + + public void setCurrentPOA( POAImpl currentPOA ){ + this.m_current_poa = currentPOA; + } + + public POAImpl getCurrentPOA() { + return m_current_poa; + } + + //TODO: this method name... igh! + public void nextChildPOA(POAImpl poa) { + m_current_poa = poa; + m_current_child_poa_name_level++; + } + + public String getCurrentChildPOAName() { + return m_poakey.getPOA(m_current_child_poa_name_level); + } + + public void setPOAKey( POAKey key ){ + this.m_poakey = key; + } + + public POAKey getPOAKey() { + return m_poakey; + } + + public OID getOID() { + return m_poakey.getOID(); + } + + public boolean isFinalPOA() { + return m_current_child_poa_name_level >= m_poakey.numberOfPOAs(); + } + + public void setMustDiscard( boolean value ) { + m_must_discard = value; + } + + public boolean getMustDiscard() { + return m_must_discard; + } + + public void destroy() { + //Empty implementation + } + + + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/QueuedResponseHandler.java b/source/es/tid/TIDorbj/core/poa/QueuedResponseHandler.java new file mode 100644 index 0000000..5fa2bbd --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/QueuedResponseHandler.java @@ -0,0 +1,74 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import es.tid.TIDorbj.core.comm.ResponseHandler; + + +/** + * @author jprojas + * + */ +public abstract class QueuedResponseHandler extends QueuedRequest implements + ResponseHandler { + + private String str; + + public synchronized String toString() { + + if(str == null) { + StringBuffer buffer = new StringBuffer(); + buffer.append("ServerRequest "); + buffer.append(this.getServerRequest().operation()); + buffer.append(" to "); + buffer.append(getObjectKey().toString()); + buffer.append(" with order "); + buffer.append(Long.toString(getSerial())); + str = buffer.toString(); + buffer = null; + } + return str; + } + + +} diff --git a/source/es/tid/TIDorbj/core/poa/RequestQueue.java b/source/es/tid/TIDorbj/core/poa/RequestQueue.java new file mode 100644 index 0000000..5888226 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/RequestQueue.java @@ -0,0 +1,181 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 307 $ +* Date: $Date: 2008-10-28 11:06:44 +0100 (Tue, 28 Oct 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; +import java.util.Iterator; +import java.util.TreeSet; + + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.TRANSIENT; + +import es.tid.TIDorbj.util.Trace; + +/** + * Queue of requests to be read by the execution thread. Implements QoS Messaging + * QueueOrderPolicy. + * + * @autor Javier Fdz. Mejuto + * @autor Juan A. Caceres + * @version 2.0 + */ +class RequestQueue { + + // Naive implementation + private TreeSet m_values = null; + + private QueueReaderManager m_queue_read_manager = null; + + private POAManagerImpl m_poa_manager; + + private boolean m_deactivation; + + /** + * Constructor. + * + * @param poaManager + * POAManager to which this RequestQueue belongs. + * @param reader + * Object that manages the creation of new readers for this + * queue. + */ + public RequestQueue(POAManagerImpl poaManager, + QueueReaderManager reader, + Comparator comparator) { + m_values = new TreeSet(comparator); + m_queue_read_manager = reader; + m_poa_manager = poaManager; + m_deactivation = false; + } + + public synchronized void setComparator(Comparator comparator) + { + TreeSet aux = m_values; + m_values = new TreeSet(comparator); + m_values.addAll(aux); + } + + /** + * Adds an new request to the queue. + * + * @param request The request to be added. + */ + synchronized public void add(QueuedRequest request) { + if ( m_deactivation || + m_values.size() >= m_poa_manager.m_conf.getMaxQueuedRequests()) { + TRANSIENT e = new TRANSIENT(null, 1, CompletionStatus.COMPLETED_NO); + if ( m_poa_manager.m_orb.m_trace != null ) { + String[] msg = { toString(), + " Submitting TRANSIENT in request because", + " MaxQueuedRequests ", + Integer.toString(m_poa_manager.m_conf.getMaxQueuedRequests()), + " has been reached" }; + m_poa_manager.m_orb.printTrace(Trace.DEEP_DEBUG, msg); + } + request.submitResponse( e ); + } else { + m_values.add(request); + if (!m_queue_read_manager.createNewReader()) { + notify(); + } + } + } + + /** + * Gets (and removes) the first element of the queue. + * + * @return The first element of the queue. + */ + public synchronized QueuedRequest get() { + if ( m_values.isEmpty() ) { + if (m_deactivation) { + return null; + } else { + try { + wait(m_poa_manager.m_conf.getStarvingTime()); + } catch (InterruptedException ie) {} + if ( m_values.isEmpty() ) { + return null; + } + } + } + //first element out + QueuedRequest req = (QueuedRequest) m_values.first(); + + m_values.remove(req); + + return req; + } + + /** + * @return Number of enqueued elements. + */ + synchronized public int size() { + return m_values.size(); + } + + /** + * Set all request to "discarding". + */ + synchronized public void discardAll() { + + Iterator it = m_values.iterator(); + while (it.hasNext()){ + QueuedRequest req = (QueuedRequest) it.next(); + req.setMustDiscard(true); + } + } + + /** + * The POAManager is being deactivating, notify it to all blocked threads. + */ + + synchronized void deactivation() { + if (!m_deactivation) { + m_deactivation = true; + notifyAll(); + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/ServantDelegate.java b/source/es/tid/TIDorbj/core/poa/ServantDelegate.java new file mode 100644 index 0000000..385d936 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/ServantDelegate.java @@ -0,0 +1,181 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Delegate class for servants. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +public class ServantDelegate + implements org.omg.PortableServer.portable.Delegate +{ + + private org.omg.CORBA.ORB m_orb = null; + + private org.omg.PortableServer.POA m_poa = null; + + private byte[] m_oid = null; + + /** + * Constructor. + * + * @param poa + * The POA. + * @param oid + * The Object Id. + */ + public ServantDelegate(org.omg.PortableServer.POA poa, byte[] oid) + { + this.m_poa = poa; + this.m_orb = ((es.tid.TIDorbj.core.poa.POAImpl) poa).m_orb; + this.m_oid = oid; + } + + /** + * @param self + * The servant. + * @return The ORB. + */ + public org.omg.CORBA.ORB orb(org.omg.PortableServer.Servant self) + { + return this.m_orb; + } + + /** + * @param self + * The servant. + * @return Return an object reference for this servant. + */ + public org.omg.CORBA.Object this_object(org.omg.PortableServer.Servant self) + { + try { + return m_poa.servant_to_reference(self); + } + catch (org.omg.PortableServer.POAPackage.WrongPolicy e) { + return null; + } + catch (org.omg.PortableServer.POAPackage.ServantNotActive e) { + return null; + } + } + + /** + * @param self + * The servant. + * @return This POA. + */ + public org.omg.PortableServer.POA poa(org.omg.PortableServer.Servant self) + { + return this.m_poa; + } + + /** + * @param self + * The servant. + * @return Return the Object Id. + */ + public byte[] object_id(org.omg.PortableServer.Servant self) + { + return m_oid; + } + + /** + * @param self + * The servant. + * @return Return the default POA. + */ + public org.omg.PortableServer.POA + default_POA(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * @param self + * The servant. + * @param repository_id + * The Repository Id. + * @return Return true if the servant is an object with this Repository Id. + */ + public boolean is_a(org.omg.PortableServer.Servant self, + java.lang.String repository_id) + { + String[] reps = self._all_interfaces(m_poa, m_oid); + for (int i = 0; i < reps.length; i++) { + if (repository_id.equals(reps[i])) + return true; + } + return false; + } + + public boolean non_existent(org.omg.PortableServer.Servant self) + { + return false; + } + + public org.omg.CORBA.InterfaceDef + get_interface(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public org.omg.CORBA.Object + get_interface_def(org.omg.PortableServer.Servant self) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Sets object Id (useful for default servants). + * + * @param oid + * The Object Id. + */ + protected void setObjectId(byte[] oid) + { + this.m_oid = oid; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/SystemOID.java b/source/es/tid/TIDorbj/core/poa/SystemOID.java new file mode 100644 index 0000000..b5c95b4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/SystemOID.java @@ -0,0 +1,146 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * System Generated OID. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public class SystemOID extends OID +{ + + private final static int LONG_SIZE = 8; + + private long m_poa_id; + + private long m_serial; + + public SystemOID(long poa_id, long serial) + { + m_poa_id = poa_id; + m_serial = serial; + m_value = new byte[2 * LONG_SIZE]; + write_long(poa_id, m_value, 0); + write_long(serial, m_value, LONG_SIZE); + } + + public SystemOID(long poa_id, long serial, byte[] val) + { + super(val); + this.m_poa_id = poa_id; + this.m_serial = serial; + } + + public SystemOID next() + { + return new SystemOID(m_poa_id, m_serial + 1); + } + + public long getPOAId() + { + return m_poa_id; + } + + public long getSerial() + { + return m_serial; + } + + public static SystemOID fromOID(OID oid) + { + SystemOID other = null; + + try { + other = (SystemOID) oid; + } + catch (ClassCastException cce) { + return fromByteArray(oid.toByteArray()); + } + + return new SystemOID(other.m_poa_id, other.m_serial, other.m_value); + } + + public static SystemOID fromByteArray(byte[] buffer) + { + if ((buffer == null) || (buffer.length != 2 * LONG_SIZE)) + return null; + + long poa_id = read_long(buffer, 0); + + long serial = read_long(buffer, LONG_SIZE); + + return new SystemOID(poa_id, serial, buffer); + } + + public static void write_long(long value, byte[] buffer, int offset) + { + int position = offset; + buffer[position++] = (byte) (value >>> 56); + buffer[position++] = (byte) (value >>> 48); + buffer[position++] = (byte) (value >>> 40); + buffer[position++] = (byte) (value >>> 32); + buffer[position++] = (byte) (value >>> 24); + buffer[position++] = (byte) (value >>> 16); + buffer[position++] = (byte) (value >>> 8); + buffer[position++] = (byte) (value >>> 0); + } + + public static long read_long(byte[] buffer, int offset) + { + + int position = offset; + + return (((long) buffer[position++] & 0xffL) << 56) + | (((long) buffer[position++] & 0xffL) << 48) + | (((long) buffer[position++] & 0xffL) << 40) + | (((long) buffer[position++] & 0xffL) << 32) + | (((long) buffer[position++] & 0xffL) << 24) + | (((long) buffer[position++] & 0xffL) << 16) + | (((long) buffer[position++] & 0xffL) << 8) + | ((long) buffer[position++] & 0xffL); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/TemporalRequestComparator.java b/source/es/tid/TIDorbj/core/poa/TemporalRequestComparator.java new file mode 100644 index 0000000..62cf552 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/TemporalRequestComparator.java @@ -0,0 +1,40 @@ +package es.tid.TIDorbj.core.poa; + +import java.util.Comparator; + +/** + * @author caceres + * + */ +public class TemporalRequestComparator + implements Comparator +{ + + public final static int LESS_THAN = -1; + public final static int EQUALS = 0; + public final static int GREATER_THAN = 1; + + + public TemporalRequestComparator() + { + + } + + public int compare(Object o1, Object o2) + { + QueuedRequest request1 = (QueuedRequest) o1; + QueuedRequest request2 = (QueuedRequest) o2; + + long serial1 = request1.getSerial(); + long serial2 = request2.getSerial(); + + if(serial1 > serial2) { + return GREATER_THAN; + } else if(serial1 == serial2) { + return EQUALS; + } else { + return LESS_THAN; + } + } + +} diff --git a/source/es/tid/TIDorbj/core/poa/ThreadPool.java b/source/es/tid/TIDorbj/core/poa/ThreadPool.java new file mode 100644 index 0000000..3b87bef --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/ThreadPool.java @@ -0,0 +1,190 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +import java.util.Vector; + +import es.tid.TIDorbj.util.Trace; + +/** + * Pool of threads. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +class ThreadPool + implements QueueReaderManager, ThreadStateListener, POAManagerConfListener +{ + + private Vector m_pool = null; + + private POAManagerImpl m_poa_manager = null; + + private int m_used = 0; + + private int m_active = 0; + + private boolean m_deactivated = false; + + /** + * Constructor. + * + * @param poaManager + * The POAManager which this thread pool belongs to. + */ + public ThreadPool(POAManagerImpl poaManager) + { + m_pool = new Vector(); + m_poa_manager = poaManager; + } + + /** + * Test if another thread should be created. + * + * @return Returns true if another thread has been started, false otherwise. + */ + synchronized public boolean createNewReader() + { + if ((m_used == m_active) + &&(m_used < m_poa_manager.m_conf.getMaxThreads())) { + createThread(); + return true; + } + return false; + } + + synchronized private void createThread() + { + ExecThread t = new ExecThread(m_poa_manager); + m_pool.addElement(t); + t.setThreadStateListener(this); + t.setDaemon(false); + t.start(); + m_used++; + + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { "New thread created, ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_poa_manager.m_conf.getMaxThreads()), + " , min ", + Integer.toString(m_poa_manager.m_conf.getMinThreads()), + ")" + }; + m_poa_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + /** + * Counts the number of active threads (increment). + * + * @param t + * Thread that becomes active. + */ + synchronized public void setActive(Thread t) + { + m_active++; + } + + /** + * Counts the number of active threads (decrement). + * + * @param t + * Thread that becomes inactive. + */ + synchronized public void setInactive(Thread t) + { + m_active--; + } + + /** + * Clean up when a thread dies. + * + * @param t + * Thread that has died. + */ + synchronized public void threadHasDied(Thread t) + { + m_pool.removeElement(t); + m_used--; + if (m_poa_manager.m_orb.m_trace != null) { + String[] msg = + { + "Finalization of thread ", + t.toString(), + ": ", + Integer.toString(m_used), + " threads are now actived (max ", + Integer.toString(m_poa_manager.m_conf.getMaxThreads()), + ", min ", + Integer.toString(m_poa_manager.m_conf.getMinThreads()), + ")" + }; + m_poa_manager.m_orb.printTrace(Trace.DEBUG, msg); + } + } + + synchronized public void deactivation() + { + m_deactivated = true; + } + + synchronized public boolean threadCanDie(Thread t) + { + if (m_deactivated) + return true; + else + return (m_used > m_poa_manager.m_conf.getMinThreads()); + } + + synchronized public void minThreadsHasChanged() + { + while (m_used < m_poa_manager.m_conf.getMinThreads()) { + createThread(); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/ThreadStateListener.java b/source/es/tid/TIDorbj/core/poa/ThreadStateListener.java new file mode 100644 index 0000000..f778c7b --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/ThreadStateListener.java @@ -0,0 +1,62 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 8 $ +* Date: $Date: 2006-01-24 17:36:46 +0100 (Tue, 24 Jan 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa; + +/** + * Listener of thread state changes. + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ +interface ThreadStateListener +{ + + boolean threadCanDie(Thread t); + + void threadHasDied(Thread t); + + void setActive(Thread t); + + void setInactive(Thread t); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/all-wcprops b/source/es/tid/TIDorbj/core/poa/policies/.svn/all-wcprops new file mode 100644 index 0000000..75ef143 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/all-wcprops @@ -0,0 +1,47 @@ +K 25 +svn:wc:ra_dav:version-url +V 87 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies +END +ServantRetentionPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 119 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.java +END +ImplicitActivationPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 121 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.java +END +ThreadPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 109 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.java +END +IdAssignmentPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.java +END +LifespanPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.java +END +IdUniquenessPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.java +END +RequestProcessingPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 120 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.java +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/entries b/source/es/tid/TIDorbj/core/poa/policies/.svn/entries new file mode 100644 index 0000000..a256434 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/poa/policies +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +LifespanPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +106e55459e08c26ca1c0c1a8a500c397 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2867 + +IdAssignmentPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +0c0fac65bba91480870ba2673946193b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2899 + +RequestProcessingPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +12883c699f49d60430df4e16aae9f089 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2990 + +ThreadPolicyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +71ff661c858d34017fb05f4f7fbf154b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2859 + +ServantRetentionPolicyImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +5d4653973acaa92eb25cfda46fa5b799 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2986 + +IdUniquenessPolicyImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +c21b0927ef6e537e76793774a482e726 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2899 + +ImplicitActivationPolicyImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +bb6a5e2c60b302589de69dfe97e7c152 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3003 + diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdAssignmentPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdAssignmentPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdAssignmentPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdUniquenessPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdUniquenessPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/IdUniquenessPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ImplicitActivationPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ImplicitActivationPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ImplicitActivationPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/LifespanPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/LifespanPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/LifespanPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/RequestProcessingPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/RequestProcessingPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/RequestProcessingPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ServantRetentionPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ServantRetentionPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ServantRetentionPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ThreadPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ThreadPolicyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/prop-base/ThreadPolicyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdAssignmentPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdAssignmentPolicyImpl.java.svn-base new file mode 100644 index 0000000..d60d1ad --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdAssignmentPolicyImpl.java.svn-base @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.IdAssignmentPolicyValue; +import org.omg.PortableServer.IdAssignmentPolicyValueHelper; + +/** + * Implementation of IdAssignmentPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class IdAssignmentPolicyImpl +extends org.omg.PortableServer.IdAssignmentPolicyLocalBase +{ + private IdAssignmentPolicyValue m_value; + + public IdAssignmentPolicyImpl(IdAssignmentPolicyValue value) + { + m_value = value; + } + + public IdAssignmentPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new IdAssignmentPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static IdAssignmentPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + IdAssignmentPolicyValue value = + IdAssignmentPolicyValueHelper.extract(val); + return new IdAssignmentPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdUniquenessPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdUniquenessPolicyImpl.java.svn-base new file mode 100644 index 0000000..b73e2bb --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/IdUniquenessPolicyImpl.java.svn-base @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.IdUniquenessPolicyValue; +import org.omg.PortableServer.IdUniquenessPolicyValueHelper; + +/** + * Implementation of IdUniquenessPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class IdUniquenessPolicyImpl +extends org.omg.PortableServer.IdUniquenessPolicyLocalBase +{ + + private IdUniquenessPolicyValue m_value; + + public IdUniquenessPolicyImpl(IdUniquenessPolicyValue value) + { + m_value = value; + } + + public IdUniquenessPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new IdUniquenessPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static IdUniquenessPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + IdUniquenessPolicyValue value = + IdUniquenessPolicyValueHelper.extract(val); + return new IdUniquenessPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ImplicitActivationPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ImplicitActivationPolicyImpl.java.svn-base new file mode 100644 index 0000000..b26bef7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ImplicitActivationPolicyImpl.java.svn-base @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ImplicitActivationPolicyValue; +import org.omg.PortableServer.ImplicitActivationPolicyValueHelper; + +/** + * Implementation of ImplicitActivationPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ImplicitActivationPolicyImpl + extends org.omg.PortableServer.ImplicitActivationPolicyLocalBase +{ + + private ImplicitActivationPolicyValue m_value; + + public ImplicitActivationPolicyImpl(ImplicitActivationPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ImplicitActivationPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.IMPLICIT_ACTIVATION_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ImplicitActivationPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static ImplicitActivationPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + ImplicitActivationPolicyValue value = + ImplicitActivationPolicyValueHelper.extract(val); + return new ImplicitActivationPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/LifespanPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/LifespanPolicyImpl.java.svn-base new file mode 100644 index 0000000..0f3af6d --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/LifespanPolicyImpl.java.svn-base @@ -0,0 +1,99 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.LifespanPolicyValue; +import org.omg.PortableServer.LifespanPolicyValueHelper; + +/** + * Implementation of LifespanPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class LifespanPolicyImpl +extends org.omg.PortableServer.LifespanPolicyLocalBase +{ + + private org.omg.PortableServer.LifespanPolicyValue m_value; + + public LifespanPolicyImpl(org.omg.PortableServer.LifespanPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.LifespanPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.LIFESPAN_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new LifespanPolicyImpl(m_value); + } + + public void destroy() + {} + + public static LifespanPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + LifespanPolicyValue value = LifespanPolicyValueHelper.extract(val); + return new LifespanPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/RequestProcessingPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/RequestProcessingPolicyImpl.java.svn-base new file mode 100644 index 0000000..fff4dfd --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/RequestProcessingPolicyImpl.java.svn-base @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.RequestProcessingPolicyValue; +import org.omg.PortableServer.RequestProcessingPolicyValueHelper; + +/** + * Implementation of RequestProcessingPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class RequestProcessingPolicyImpl +extends org.omg.PortableServer.RequestProcessingPolicyLocalBase +{ + + private RequestProcessingPolicyValue m_value; + + public RequestProcessingPolicyImpl(RequestProcessingPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.RequestProcessingPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RequestProcessingPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RequestProcessingPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + RequestProcessingPolicyValue value = + RequestProcessingPolicyValueHelper.extract(val); + return new RequestProcessingPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ServantRetentionPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ServantRetentionPolicyImpl.java.svn-base new file mode 100644 index 0000000..573564d --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ServantRetentionPolicyImpl.java.svn-base @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ServantRetentionPolicyValue; +import org.omg.PortableServer.ServantRetentionPolicyValueHelper; + +/** + * Implementation of ServantRetentionPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ServantRetentionPolicyImpl +extends org.omg.PortableServer.ServantRetentionPolicyLocalBase +{ + + private ServantRetentionPolicyValue m_value; + + public ServantRetentionPolicyImpl(ServantRetentionPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ServantRetentionPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ServantRetentionPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static ServantRetentionPolicyImpl createPolicy (Any val) + throws org.omg.CORBA.PolicyError + { + try { + ServantRetentionPolicyValue value = + ServantRetentionPolicyValueHelper.extract(val); + return new ServantRetentionPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ThreadPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ThreadPolicyImpl.java.svn-base new file mode 100644 index 0000000..fa0733e --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/.svn/text-base/ThreadPolicyImpl.java.svn-base @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ThreadPolicyValue; +import org.omg.PortableServer.ThreadPolicyValueHelper; + +/** + * Implementation of ThreadPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ThreadPolicyImpl +extends org.omg.PortableServer.ThreadPolicyLocalBase +{ + + private org.omg.PortableServer.ThreadPolicyValue m_value; + + public ThreadPolicyImpl(org.omg.PortableServer.ThreadPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ThreadPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.THREAD_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ThreadPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static ThreadPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + ThreadPolicyValue value = ThreadPolicyValueHelper.extract(val); + return new ThreadPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.java new file mode 100644 index 0000000..80d9cc2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/IdAssignmentPolicyImpl.java @@ -0,0 +1,102 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.IdAssignmentPolicyValue; +import org.omg.PortableServer.IdAssignmentPolicyValueHelper; + +/** + * Implementation of IdAssignmentPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class IdAssignmentPolicyImpl +extends org.omg.PortableServer.IdAssignmentPolicyLocalBase +{ + private IdAssignmentPolicyValue m_value; + + public IdAssignmentPolicyImpl(IdAssignmentPolicyValue value) + { + m_value = value; + } + + public IdAssignmentPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new IdAssignmentPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static IdAssignmentPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + IdAssignmentPolicyValue value = + IdAssignmentPolicyValueHelper.extract(val); + return new IdAssignmentPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.java new file mode 100644 index 0000000..a6e8c70 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/IdUniquenessPolicyImpl.java @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.IdUniquenessPolicyValue; +import org.omg.PortableServer.IdUniquenessPolicyValueHelper; + +/** + * Implementation of IdUniquenessPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class IdUniquenessPolicyImpl +extends org.omg.PortableServer.IdUniquenessPolicyLocalBase +{ + + private IdUniquenessPolicyValue m_value; + + public IdUniquenessPolicyImpl(IdUniquenessPolicyValue value) + { + m_value = value; + } + + public IdUniquenessPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new IdUniquenessPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static IdUniquenessPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + IdUniquenessPolicyValue value = + IdUniquenessPolicyValueHelper.extract(val); + return new IdUniquenessPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.java new file mode 100644 index 0000000..e47204f --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/ImplicitActivationPolicyImpl.java @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ImplicitActivationPolicyValue; +import org.omg.PortableServer.ImplicitActivationPolicyValueHelper; + +/** + * Implementation of ImplicitActivationPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ImplicitActivationPolicyImpl + extends org.omg.PortableServer.ImplicitActivationPolicyLocalBase +{ + + private ImplicitActivationPolicyValue m_value; + + public ImplicitActivationPolicyImpl(ImplicitActivationPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ImplicitActivationPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.IMPLICIT_ACTIVATION_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ImplicitActivationPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static ImplicitActivationPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + ImplicitActivationPolicyValue value = + ImplicitActivationPolicyValueHelper.extract(val); + return new ImplicitActivationPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.java new file mode 100644 index 0000000..b0c6a2a --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/LifespanPolicyImpl.java @@ -0,0 +1,99 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.LifespanPolicyValue; +import org.omg.PortableServer.LifespanPolicyValueHelper; + +/** + * Implementation of LifespanPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class LifespanPolicyImpl +extends org.omg.PortableServer.LifespanPolicyLocalBase +{ + + private org.omg.PortableServer.LifespanPolicyValue m_value; + + public LifespanPolicyImpl(org.omg.PortableServer.LifespanPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.LifespanPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.LIFESPAN_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new LifespanPolicyImpl(m_value); + } + + public void destroy() + {} + + public static LifespanPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + LifespanPolicyValue value = LifespanPolicyValueHelper.extract(val); + return new LifespanPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.java new file mode 100644 index 0000000..74deb77 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/RequestProcessingPolicyImpl.java @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.RequestProcessingPolicyValue; +import org.omg.PortableServer.RequestProcessingPolicyValueHelper; + +/** + * Implementation of RequestProcessingPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class RequestProcessingPolicyImpl +extends org.omg.PortableServer.RequestProcessingPolicyLocalBase +{ + + private RequestProcessingPolicyValue m_value; + + public RequestProcessingPolicyImpl(RequestProcessingPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.RequestProcessingPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new RequestProcessingPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static RequestProcessingPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError +{ + try { + RequestProcessingPolicyValue value = + RequestProcessingPolicyValueHelper.extract(val); + return new RequestProcessingPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } +} + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.java new file mode 100644 index 0000000..2c6ec4d --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/ServantRetentionPolicyImpl.java @@ -0,0 +1,103 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ServantRetentionPolicyValue; +import org.omg.PortableServer.ServantRetentionPolicyValueHelper; + +/** + * Implementation of ServantRetentionPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ServantRetentionPolicyImpl +extends org.omg.PortableServer.ServantRetentionPolicyLocalBase +{ + + private ServantRetentionPolicyValue m_value; + + public ServantRetentionPolicyImpl(ServantRetentionPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ServantRetentionPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ServantRetentionPolicyImpl(m_value); + } + + public void destroy() + { + // do nothing! + } + + public static ServantRetentionPolicyImpl createPolicy (Any val) + throws org.omg.CORBA.PolicyError + { + try { + ServantRetentionPolicyValue value = + ServantRetentionPolicyValueHelper.extract(val); + return new ServantRetentionPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.java b/source/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.java new file mode 100644 index 0000000..cb96de7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/poa/policies/ThreadPolicyImpl.java @@ -0,0 +1,101 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.poa.policies; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.PortableServer.ThreadPolicyValue; +import org.omg.PortableServer.ThreadPolicyValueHelper; + +/** + * Implementation of ThreadPolicy + * + * @autor Javier Fdz. Mejuto + * @version 1.0 + */ + +public class ThreadPolicyImpl +extends org.omg.PortableServer.ThreadPolicyLocalBase +{ + + private org.omg.PortableServer.ThreadPolicyValue m_value; + + public ThreadPolicyImpl(org.omg.PortableServer.ThreadPolicyValue value) + { + m_value = value; + } + + public org.omg.PortableServer.ThreadPolicyValue value() + { + return m_value; + } + + public int policy_type() + { + return org.omg.PortableServer.THREAD_POLICY_ID.value; + } + + public org.omg.CORBA.Policy copy() + { + return new ThreadPolicyImpl(m_value); + } + + public void destroy() + { + //do nothing + } + + public static ThreadPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + ThreadPolicyValue value = ThreadPolicyValueHelper.extract(val); + return new ThreadPolicyImpl(value); + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/.svn/all-wcprops b/source/es/tid/TIDorbj/core/policy/.svn/all-wcprops new file mode 100644 index 0000000..a411bf4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/all-wcprops @@ -0,0 +1,41 @@ +K 25 +svn:wc:ra_dav:version-url +V 81 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy +END +PolicyContextManager.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/PolicyContextManager.java +END +PolicyContext.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/PolicyContext.java +END +PolicyCurrentImpl.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.java +END +PolicyFactory.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/PolicyFactory.java +END +UnsuportedPolicy.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/UnsuportedPolicy.java +END +PolicyManagerImpl.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy/PolicyManagerImpl.java +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/entries b/source/es/tid/TIDorbj/core/policy/.svn/entries new file mode 100644 index 0000000..4c40ee2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/entries @@ -0,0 +1,232 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/policy +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +PolicyContextManager.java +file + + + + +2009-05-27T12:24:01.000000Z +cec21e85a94061109b0010e455a57845 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3091 + +PolicyContext.java +file + + + + +2010-04-28T10:50:08.000000Z +21355fc316a921087d74808653b484b9 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +35786 + +PolicyCurrentImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +9f7234a8118abedaf0c06d27ee5b7af5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2667 + +PolicyFactory.java +file + + + + +2010-04-28T11:34:26.000000Z +a1145b06c532d277c640d95dcf41db85 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +9193 + +UnsuportedPolicy.java +file + + + + +2009-05-27T12:24:01.000000Z +b6ad40f637f1f1cebb899829d4dcf274 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +908 + +PolicyManagerImpl.java +file + + + + +2009-05-27T12:24:01.000000Z +b9fcb575f5d1a231a4a23b260e07ff86 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2348 + diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContext.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContext.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContext.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContextManager.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContextManager.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyContextManager.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyCurrentImpl.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyCurrentImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyCurrentImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyFactory.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyFactory.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyFactory.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyManagerImpl.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyManagerImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/PolicyManagerImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/prop-base/UnsuportedPolicy.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/UnsuportedPolicy.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/prop-base/UnsuportedPolicy.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContext.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContext.java.svn-base new file mode 100644 index 0000000..545e962 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContext.java.svn-base @@ -0,0 +1,1054 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.BidirectionalPolicyHelper; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_POLICY; +import org.omg.CORBA.InvalidPolicies; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.CORBA.SetOverrideType; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.Messaging.QueueOrderPolicyHelper; +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_DEADLINE; +import org.omg.Messaging.REBIND_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.Messaging.RebindModeHelper; +import org.omg.Messaging.RebindPolicy; +import org.omg.Messaging.RebindPolicyHelper; +import org.omg.Messaging.TRANSPARENT; +import org.omg.Messaging.NO_REBIND; +import org.omg.Messaging.NO_RECONNECT; +import org.omg.Messaging.RelativeRequestTimeoutPolicy; +import org.omg.Messaging.RelativeRequestTimeoutPolicyHelper; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicy; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicyHelper; +import org.omg.Messaging.RequestEndTimePolicy; +import org.omg.Messaging.RequestEndTimePolicyHelper; +import org.omg.Messaging.RequestPriorityPolicy; +import org.omg.Messaging.RequestPriorityPolicyHelper; +import org.omg.Messaging.RequestStartTimePolicy; +import org.omg.Messaging.RequestStartTimePolicyHelper; +import org.omg.ZIOP.COMPRESSION_ENABLING_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_LOW_VALUE_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_MIN_RATIO_POLICY_ID; +import org.omg.ZIOP.COMPRESSOR_ID_LEVEL_LIST_POLICY_ID; +import org.omg.ZIOP.CompressionEnablingPolicy; +import org.omg.ZIOP.CompressionLowValuePolicy; +import org.omg.ZIOP.CompressionMinRatioPolicy; +import org.omg.ZIOP.CompressorIdLevelListPolicy; +import org.omg.ZIOP.CompressionEnablingPolicyHelper; +import org.omg.ZIOP.CompressionLowValuePolicyHelper; +import org.omg.ZIOP.CompressionMinRatioPolicyHelper; +import org.omg.ZIOP.CompressorIdLevelListPolicyHelper; +import org.omg.ZIOP.CompressionEnablingPolicyValueHelper; +import org.omg.ZIOP.CompressionLowValuePolicyValueHelper; +import org.omg.ZIOP.CompressionMinRatioPolicyValueHelper; +import org.omg.Compression.CompressorIdLevelListHelper; +import org.omg.Compression.CompressorIdLevel; +import es.tid.TIDorbj.core.BidirectionalPolicyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.messaging.QueueOrderPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRequestTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestEndTimePolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestPriorityPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestStartTimePolicyImpl; +import es.tid.TIDorbj.util.UTC; +import es.tid.TIDorbj.core.ziop.CompressionEnablingPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionLowValuePolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionMinRatioPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressorIdLevelListPolicyImpl; + + +public class PolicyContext + +{ + /** + * QoS Policy + */ + BidirectionalPolicy bidirectionalPolicy = null; + RebindPolicy rebindPolicy = null; + RelativeRequestTimeoutPolicy relativeRequestTimeoutPolicy = null; + RelativeRoundtripTimeoutPolicy relativeRoundtripTimeoutPolicy = null; + RequestPriorityPolicy requestPriorityPolicy = null; + RequestStartTimePolicy requestStartTimePolicy = null; + RequestEndTimePolicy requestEndTimePolicy = null; + QueueOrderPolicy queueOrderPolicy = null; + CompressionEnablingPolicy compressionEnablingPolicy = null; + CompressionLowValuePolicy compressionLowValuePolicy = null; + CompressionMinRatioPolicy compressionMinRatioPolicy = null; + CompressorIdLevelListPolicy compressorIdLevelListPolicy = null; + + private PolicyContext m_father_context; + + private int numPolicies; + + + /** + * Constructor. Context may be structured in an hierachy for + * the ORB, reference, request or thread + * + * @param father_context father context (it may be null) + */ + public PolicyContext(PolicyContext father_context) + { + m_father_context = father_context; + bidirectionalPolicy = null; + numPolicies = 0; + + } + + public void setFatherContext(PolicyContext father_context) + { + m_father_context = father_context; + } + + private void clear() + { + bidirectionalPolicy = null; + rebindPolicy = null; + relativeRequestTimeoutPolicy = null; + relativeRoundtripTimeoutPolicy = null; + requestPriorityPolicy = null; + requestStartTimePolicy = null; + requestEndTimePolicy = null; + queueOrderPolicy = null; + compressionEnablingPolicy = null; + compressionLowValuePolicy = null; + compressionMinRatioPolicy = null; + compressorIdLevelListPolicy = null; + } + + + public synchronized void setPolicies(Policy[] policies, + SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + + if (set_add == SetOverrideType.SET_OVERRIDE) { + clear(); + } + + java.util.Vector errors = null; + + for (short i = 0; i < policies.length; i++) { + try { + setPolicy(policies[i]); + } + catch (PolicyError pe) { + if (errors == null) + errors = new java.util.Vector(); + errors.add(new Short(i)); + } + } + + if (errors != null) { + InvalidPolicies ex = new InvalidPolicies(); + + int size = errors.size(); + + ex.indices = new short[size]; + + for (int i = 0; i < size; i++) + ex.indices[i] = ((Short) errors.elementAt(i)).shortValue(); + + throw ex; + } + + } + + public Policy getPolicy(int type) + { + Policy policy = null; + + switch(type) { + + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + policy = getRelativeRequestTimeoutPolicy(); + break; + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + policy = getRelativeRoundtripTimeoutPolicy(); + break; + case REBIND_POLICY_TYPE.value: + policy = getRebindPolicy(); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + policy = getRequestPriorityPolicy(); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + policy = getRequestStartTimePolicy(); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + policy = getRequestEndTimePolicy(); + break; + case QUEUE_ORDER_POLICY_TYPE.value: + policy = getQueueOrderPolicy(); + break; + case BIDIRECTIONAL_POLICY_TYPE.value: + policy = getBidirectionalPolicy(); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + policy = getCompressionEnablingPolicy(); + break; + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + policy = getCompressionLowValuePolicy(); + break; + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + policy = getCompressionMinRatioPolicy(); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + policy = getCompressorIdLevelListPolicy(); + break; + } + + if (policy == null) { + throw new INV_POLICY(); + } else { + return policy; + } + + + + + } + + public Policy[] getPolicies(int[] ts) + { + java.util.Vector list = new java.util.Vector(); + + Policy policy = null; + + for (int i = 0; i < ts.length; i++) { + policy = getPolicy(ts[i]); + if (policy != null) + list.add(policy); + } + + Policy[] result = new Policy[list.size()]; + + list.copyInto(result); + + return result; + + } + + public void setPolicy(Policy policy) + throws PolicyError + { + + if (policy == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + int type = policy.policy_type(); + + switch (type) { + case BIDIRECTIONAL_POLICY_TYPE.value: + bidirectionalPolicy = BidirectionalPolicyHelper.narrow(policy); + break; + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + this.setRelativeRequestTimeoutPolicy(RelativeRequestTimeoutPolicyHelper.narrow(policy)); + break; + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + this.setRelativeRoundtripTimeoutPolicy(RelativeRoundtripTimeoutPolicyHelper.narrow(policy)); + break; + case REBIND_POLICY_TYPE.value: + this.setRebindPolicy(RebindPolicyHelper.narrow(policy)); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + this.setRequestPriorityPolicy(RequestPriorityPolicyHelper.narrow(policy)); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + this.setRequestStartTimePolicy(RequestStartTimePolicyHelper.narrow(policy)); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + this.setRequestEndTimePolicy(RequestEndTimePolicyHelper.narrow(policy)); + break; + case QUEUE_ORDER_POLICY_TYPE.value: + this.setQueueOrderPolicy(QueueOrderPolicyHelper.narrow(policy)); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + this.setCompressionEnablingPolicy(CompressionEnablingPolicyHelper.narrow(policy)); + break; + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + this.setCompressionLowValuePolicy(CompressionLowValuePolicyHelper.narrow(policy)); + break; + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + this.setCompressionMinRatioPolicy(CompressionMinRatioPolicyHelper.narrow(policy)); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + this.setCompressorIdLevelListPolicy(CompressorIdLevelListPolicyHelper.narrow(policy)); + break; + default: + throw new PolicyError(org.omg.CORBA.UNSUPPORTED_POLICY.value); + } + + } + + + /** + * Duplicates completely the PolicyContext. It will be used by Reference + * duplication. + * @return a new PolicyContext + */ + public synchronized PolicyContext duplicate() + { + PolicyContext copy = new PolicyContext(m_father_context); + + copy.bidirectionalPolicy = bidirectionalPolicy; + copy.rebindPolicy = rebindPolicy; + copy.relativeRequestTimeoutPolicy = relativeRequestTimeoutPolicy; + copy.relativeRoundtripTimeoutPolicy = relativeRoundtripTimeoutPolicy; + copy.requestPriorityPolicy = requestPriorityPolicy; + copy.requestStartTimePolicy = requestStartTimePolicy; + copy.requestEndTimePolicy = requestEndTimePolicy; + copy.queueOrderPolicy = queueOrderPolicy; + copy.compressionEnablingPolicy = compressionEnablingPolicy; + copy.compressionLowValuePolicy = compressionLowValuePolicy; + copy.compressionMinRatioPolicy = compressionMinRatioPolicy; + copy.compressorIdLevelListPolicy = compressorIdLevelListPolicy; + + copy.numPolicies = numPolicies; + + return copy; + } + + + /** + * @return Returns the rebindPolicy. + */ + public RebindPolicy getRebindPolicy() + { + if(rebindPolicy != null) { + return rebindPolicy; + } else if(m_father_context != null) { + return m_father_context.getRebindPolicy(); + } else { + return null; + } + } + + + /** + * @param rebindPolicy The rebindPolicy to set. + */ + public void setRebindPolicy(RebindPolicy rebindPolicy) + { + if(this.rebindPolicy == null) { + numPolicies++; + } + if(rebindPolicy == null) { + numPolicies--; + } + + this.rebindPolicy = rebindPolicy; + } + + /** + * @return Returns the relativeRequestTimeoutPolicy. + */ + public RelativeRequestTimeoutPolicy getRelativeRequestTimeoutPolicy() + { + if(relativeRequestTimeoutPolicy != null) { + return relativeRequestTimeoutPolicy; + } else if(m_father_context != null) { + return m_father_context.getRelativeRequestTimeoutPolicy(); + } else { + return null; + } + } + + /** + * @param relativeRequestTimeoutPolicy The relativeRequestTimeoutPolicy to set. + */ + public void + setRelativeRequestTimeoutPolicy(RelativeRequestTimeoutPolicy relativeRequestTimeoutPolicy) + { + if(this.relativeRequestTimeoutPolicy == null) { + numPolicies++; + } + if(relativeRequestTimeoutPolicy == null) { + numPolicies--; + } + + this.relativeRequestTimeoutPolicy = relativeRequestTimeoutPolicy; + } + + /** + * @return Returns the relativeRountripTimeoutPolicy. + */ + public RelativeRoundtripTimeoutPolicy getRelativeRoundtripTimeoutPolicy() + { + if(relativeRoundtripTimeoutPolicy != null) { + return relativeRoundtripTimeoutPolicy; + } else if(m_father_context != null) { + return m_father_context.getRelativeRoundtripTimeoutPolicy(); + } else { + return null; + } + } + + /** + * @param relativeRequestTimeoutPolicy The relativeRequestTimeoutPolicy to set. + */ + public void + setRelativeRoundtripTimeoutPolicy(RelativeRoundtripTimeoutPolicy relativeRoundtripTimeoutPolicy) + { + if(this.relativeRoundtripTimeoutPolicy == null) { + numPolicies++; + } + if(relativeRoundtripTimeoutPolicy == null) { + numPolicies--; + } + + this.relativeRoundtripTimeoutPolicy = relativeRoundtripTimeoutPolicy; + } + + + /** + * @param requestEndTimePolicy The requestEndTimePolicy to set. + */ + public void setRequestEndTimePolicy(RequestEndTimePolicy requestEndTimePolicy) + { + if(this.requestEndTimePolicy == null) { + numPolicies++; + } + if(requestEndTimePolicy == null) { + numPolicies--; + } + + this.requestEndTimePolicy = requestEndTimePolicy; + } + + /** + * @return Returns the requestEndTimePolicy. + */ + public RequestEndTimePolicy getRequestEndTimePolicy() + { + if(requestEndTimePolicy != null) { + return requestEndTimePolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestEndTimePolicy(); + } else { + return null; + } + } + + /** + * @param requestPriorityPolicy The RequestPriorityPolicy to set. + */ + public void setRequestPriorityPolicy(RequestPriorityPolicy requestPriorityPolicy) + { + if(this.requestPriorityPolicy == null) { + numPolicies++; + } + if(requestPriorityPolicy == null) { + numPolicies--; + } + + this.requestPriorityPolicy = requestPriorityPolicy; + } + + /** + * @return Returns the requestPriorityPolicy. + */ + public RequestPriorityPolicy getRequestPriorityPolicy() + { + if(requestPriorityPolicy != null) { + return requestPriorityPolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestPriorityPolicy(); + } else { + return null; + } + } + + /** + * @param requestStartTimePolicy The requestStartTimePolicy to set. + */ + public void setRequestStartTimePolicy( + RequestStartTimePolicy requestStartTimePolicy) + { + if(this.requestStartTimePolicy == null) { + numPolicies++; + } + if(requestStartTimePolicy == null) { + numPolicies--; + } + this.requestStartTimePolicy = requestStartTimePolicy; + } + + /** + * @return Returns the requestStartTimePolicy. + */ + public RequestStartTimePolicy getRequestStartTimePolicy() + { + if(requestStartTimePolicy != null) { + return requestStartTimePolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestStartTimePolicy(); + } else { + return null; + } + } + + + + + + /** + * @return Returns the queueOrderPolicy. + */ + public QueueOrderPolicy getQueueOrderPolicy() + { + if(queueOrderPolicy != null) { + return queueOrderPolicy; + } else if(m_father_context != null) { + return m_father_context.getQueueOrderPolicy(); + } else { + return null; + } + } + + /** + * @param rebindPolicy The queueOrderPolicy to set. + */ + public void setQueueOrderPolicy(QueueOrderPolicy queueOrderPolicy) + { + if(this.queueOrderPolicy == null) { + numPolicies++; + } + if(queueOrderPolicy == null) { + numPolicies--; + } + + this.queueOrderPolicy = queueOrderPolicy; + } + + + + + + /** + * @param priorityModelPolicy The queueOrderPolicy to set. + */ + public void setBidirectionalPolicy(BidirectionalPolicy bidirectionalPolicy) + { + if(this.bidirectionalPolicy == null) { + numPolicies++; + } + if(bidirectionalPolicy == null) { + numPolicies--; + } + + this.bidirectionalPolicy = bidirectionalPolicy; + } + + /** + * @return Returns the queueOrderPolicy. + */ + public BidirectionalPolicy getBidirectionalPolicy() + { + if(bidirectionalPolicy != null) { + return bidirectionalPolicy; + } else if(m_father_context != null) { + return m_father_context.getBidirectionalPolicy(); + } else { + return null; + } + } + + /** + * @param compressionEnablingPolicy The compressionEnablingPolicy to set. + */ + public void setCompressionEnablingPolicy(CompressionEnablingPolicy compressionEnablingPolicy) + { + if(this.compressionEnablingPolicy == null) { + numPolicies++; + } + if(compressionEnablingPolicy == null) { + numPolicies--; + } + + this.compressionEnablingPolicy = compressionEnablingPolicy; + } + + /** + * @return Returns the compressionEnablingPolicy. + */ + public CompressionEnablingPolicy getCompressionEnablingPolicy() + { + if(compressionEnablingPolicy != null) { + return compressionEnablingPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionEnablingPolicy(); + } else { + return null; + } + } + + /** + * @param compressionLowValuePolicy The compressionLowValuePolicy to set. + */ + public void setCompressionLowValuePolicy(CompressionLowValuePolicy compressionLowValuePolicy) + { + if(this.compressionLowValuePolicy == null) { + numPolicies++; + } + if(compressionLowValuePolicy == null) { + numPolicies--; + } + + this.compressionLowValuePolicy = compressionLowValuePolicy; + } + + /** + * @return Returns the compressionLowValuePolicy. + */ + public CompressionLowValuePolicy getCompressionLowValuePolicy() + { + if(compressionLowValuePolicy != null) { + return compressionLowValuePolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionLowValuePolicy(); + } else { + return null; + } + } + + /** + * @param compressionMinRatioPolicy The compressionMinRatioPolicy to set. + */ + public void setCompressionMinRatioPolicy(CompressionMinRatioPolicy compressionMinRatioPolicy) + { + if(this.compressionMinRatioPolicy == null) { + numPolicies++; + } + if(compressionMinRatioPolicy == null) { + numPolicies--; + } + + this.compressionMinRatioPolicy = compressionMinRatioPolicy; + } + + /** + * @return Returns the compressionMinRatioPolicy. + */ + public CompressionMinRatioPolicy getCompressionMinRatioPolicy() + { + if(compressionMinRatioPolicy != null) { + return compressionMinRatioPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionMinRatioPolicy(); + } else { + return null; + } + } + + /** + * @param compressorIdLevelListPolicy The compressorIdLevelListPolicy to set. + */ + public void setCompressorIdLevelListPolicy(CompressorIdLevelListPolicy compressorIdLevelListPolicy) + { + if(this.compressorIdLevelListPolicy == null) { + numPolicies++; + } + if(compressorIdLevelListPolicy == null) { + numPolicies--; + } + + this.compressorIdLevelListPolicy = compressorIdLevelListPolicy; + } + + /** + * @return Returns the compressorIdLevelListPolicy. + */ + public CompressorIdLevelListPolicy getCompressorIdLevelListPolicy() + { + if(compressorIdLevelListPolicy != null) { + return compressorIdLevelListPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressorIdLevelListPolicy(); + } else { + return null; + } + } + + + + public InvocationPoliciesContext getInvocationPolicyServiceContext() + { + RequestEndTimePolicy endPolicy = + QoS.getEffectiveRequestEndTimePolicy(this); + + RequestPriorityPolicy priorityPolicy = getRequestPriorityPolicy(); + + if((endPolicy != null) || (priorityPolicy != null)){ + PolicyContext invocationPolicies = new PolicyContext(null); + if(endPolicy != null) { + invocationPolicies.setRequestEndTimePolicy(endPolicy); + } + if(priorityPolicy != null) { + invocationPolicies.setRequestPriorityPolicy(priorityPolicy); + } + return new InvocationPoliciesContext(invocationPolicies); + } else { + return null; + } + } + + + + + public synchronized void dump(java.io.PrintWriter writer) + { + if(bidirectionalPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(BidirectionalPolicyHelper.id()); + writer.print('='); + short bidir_value = bidirectionalPolicy.value(); + if (bidir_value == org.omg.BiDirPolicy.NORMAL.value) { + writer.print("NORMAL"); + } else { + writer.print("BOTH"); + } + } + + if(relativeRoundtripTimeoutPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RelativeRequestTimeoutPolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + relativeRoundtripTimeoutPolicy.relative_expiry())); + writer.print(" ms."); + } + + if (rebindPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RebindPolicyHelper.id()); + writer.print('='); + short rebind_value = rebindPolicy.rebind_mode(); + switch (rebind_value){ + case org.omg.Messaging.TRANSPARENT.value: + writer.print("TRANSPARENT"); + break; + case org.omg.Messaging.NO_REBIND.value: + writer.print("NO_REBIND"); + break; + case org.omg.Messaging.NO_RECONNECT.value: + writer.print("NO_RECONNECT"); + break; + } + } + + if (relativeRequestTimeoutPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RelativeRequestTimeoutPolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + relativeRequestTimeoutPolicy.relative_expiry())); + writer.print(" ms."); + } + + if (requestPriorityPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestPriorityPolicyHelper.id()); + writer.print('='); + writer.print("[" + requestPriorityPolicy.priority_range().min + "," + + requestPriorityPolicy.priority_range().max + "]"); + } + + if (requestStartTimePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestStartTimePolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + requestStartTimePolicy.start_time().time)); + writer.print(" ms."); + } + + if (requestEndTimePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestEndTimePolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + requestEndTimePolicy.end_time().time)); + writer.print(" ms."); + } + + if (queueOrderPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(QueueOrderPolicyHelper.id()); + writer.print('='); + short value = queueOrderPolicy.allowed_orders(); + switch (value) { + case org.omg.Messaging.ORDER_ANY.value: + writer.print("ORDER_ANY"); + break; + case org.omg.Messaging.ORDER_TEMPORAL.value: + writer.print("ORDER_TEMPORAL"); + break; + case org.omg.Messaging.ORDER_PRIORITY.value: + writer.print("ORDER_PRIORITY"); + break; + case org.omg.Messaging.ORDER_DEADLINE.value: + writer.print("ORDER_DEADLINE"); + break; + } + } + + + if (compressionEnablingPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionEnablingPolicyHelper.id()); + writer.print('='); + writer.print(compressionEnablingPolicy.compression_enabled()); + } + + if (compressionLowValuePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionLowValuePolicyHelper.id()); + writer.print('='); + writer.print(compressionLowValuePolicy.low_value()); + } + + if (compressionMinRatioPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionMinRatioPolicyHelper.id()); + writer.print('='); + writer.print(compressionMinRatioPolicy.ratio()); + } + + if (compressorIdLevelListPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressorIdLevelListPolicyHelper.id()); + writer.print('='); + CompressorIdLevel[] compressors = + compressorIdLevelListPolicy.compressor_ids(); + for (int i=0; i < compressors.length; i++) { + writer.print("(" + compressors[i].compressor_id + "," + + compressors[i].compression_level + ")" ); + } + } + } + + + /** + * Reads the policies as a pair PolicyType/encapsuled policy data + * @param input + */ + public void partialRead(CDRInputStream input) + { + int size = input.read_ulong(); + + Policy policy = null; + for (int i = 0; i< size; i++) { + policy = PolicyFactory.readPolicy(input); + if(policy != null) { + try { + setPolicy(policy); + } + catch (PolicyError e) {//unreachable + } + } + } + } + + /** + * Writes the policies as a pair PolicyType/encalsuled policy data + * @param output the outputstream + */ + public void write(CDROutputStream output) + { + output.write_ulong(numPolicies); + + if(rebindPolicy != null) { + // write PolicyType + output.write_ulong(rebindPolicy.policy_type()); + output.enterEncapsulation(); + RebindModeHelper.write(output, rebindPolicy.rebind_mode()); + output.exitEncapsulation(); + } + + + if(relativeRequestTimeoutPolicy != null) { + // write PolicyType + output.write_ulong(relativeRequestTimeoutPolicy.policy_type()); + output.enterEncapsulation(); + RelativeRequestTimeoutPolicyImpl.write(output,relativeRequestTimeoutPolicy); + output.exitEncapsulation(); + } + + if(relativeRoundtripTimeoutPolicy != null) { + // write PolicyType + output.write_ulong(relativeRoundtripTimeoutPolicy.policy_type()); + output.enterEncapsulation(); + RelativeRoundtripTimeoutPolicyImpl.write(output, + relativeRoundtripTimeoutPolicy); + output.exitEncapsulation(); + } + + if(requestStartTimePolicy != null) { + // write PolicyType + output.write_ulong(requestStartTimePolicy.policy_type()); + output.enterEncapsulation(); + RequestStartTimePolicyImpl.write(output, requestStartTimePolicy); + output.exitEncapsulation(); + } + + if(requestPriorityPolicy != null) { + // write PolicyType + output.write_ulong(requestPriorityPolicy.policy_type()); + output.enterEncapsulation(); + RequestPriorityPolicyImpl.write(output, requestPriorityPolicy); + output.exitEncapsulation(); + } + + if(requestEndTimePolicy != null) { + // write PolicyType + output.write_ulong(requestEndTimePolicy.policy_type()); + // write Encapsulation + output.enterEncapsulation(); + RequestEndTimePolicyImpl.write(output, requestEndTimePolicy); + output.exitEncapsulation(); + } + + if(queueOrderPolicy != null) { + // write PolicyType + output.write_ulong(queueOrderPolicy.policy_type()); + output.enterEncapsulation(); + QueueOrderPolicyImpl.write(output,queueOrderPolicy ); + output.exitEncapsulation(); + } + + if(compressionEnablingPolicy != null) { + // write PolicyType + output.write_ulong(compressionEnablingPolicy.policy_type()); + output.enterEncapsulation(); + CompressionEnablingPolicyImpl.write(output, compressionEnablingPolicy); + output.exitEncapsulation(); + } + + if(compressionLowValuePolicy != null) { + // write PolicyType + output.write_ulong(compressionLowValuePolicy.policy_type()); + output.enterEncapsulation(); + CompressionLowValuePolicyImpl.write(output, compressionLowValuePolicy); + output.exitEncapsulation(); + } + + if(compressionMinRatioPolicy != null) { + // write PolicyType + output.write_ulong(compressionMinRatioPolicy.policy_type()); + output.enterEncapsulation(); + CompressionMinRatioPolicyImpl.write(output, compressionMinRatioPolicy); + output.exitEncapsulation(); + } + + if(compressorIdLevelListPolicy != null) { + // write PolicyType + output.write_ulong(compressorIdLevelListPolicy.policy_type()); + output.enterEncapsulation(); + CompressorIdLevelListPolicyImpl.write(output, compressorIdLevelListPolicy); + output.exitEncapsulation(); + } + + if(this.bidirectionalPolicy != null) { + // write PolicyType + output.write_ulong(bidirectionalPolicy.policy_type()); + output.enterEncapsulation(); + BidirectionalPolicyImpl.write(output,bidirectionalPolicy ); + output.exitEncapsulation(); + } + } + + /** + * @return + */ + public int getSize() + { + return this.numPolicies; + } + + +} diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContextManager.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContextManager.java.svn-base new file mode 100644 index 0000000..9b43a70 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyContextManager.java.svn-base @@ -0,0 +1,107 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import java.util.Hashtable; + +import es.tid.TIDorbj.core.TIDORB; + +public class PolicyContextManager +{ + + public final static int CLEANUP_ROUND = 100; + + TIDORB m_orb; + + Hashtable m_thread_contexts; + + int m_cleanup_round; + + public PolicyContextManager(TIDORB orb) + { + this.m_orb = orb; + m_thread_contexts = new Hashtable(); + + m_cleanup_round = 0; + } + + public synchronized PolicyContext getThreadContext(Thread th) + { + PolicyContext context = (PolicyContext) m_thread_contexts.get(th); + + if (context == null) { + // Thread PolicyContext overrides ORB policies (that is has + // the ORB PolicyContext as father + context = new PolicyContext(m_orb.m_conf.getPolicyContext()); + m_thread_contexts.put(th, context); + + // Start cleaner thread + if ((++m_cleanup_round) > CLEANUP_ROUND) { + m_cleanup_round = 0; + clear_contexts(); + } + } + + return context; + } + + public synchronized PolicyContext tryToGetThreadContext(Thread th) + { + return (PolicyContext) m_thread_contexts.get(th); + } + + private void clear_contexts() + { + Object[] keys = m_thread_contexts.keySet().toArray(); + + Thread th = null; + + for (int i = 0; i < keys.length; i++) { + th = (Thread) keys[i]; + if (!th.isAlive()) + m_thread_contexts.remove(th); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyCurrentImpl.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyCurrentImpl.java.svn-base new file mode 100644 index 0000000..e73b945 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyCurrentImpl.java.svn-base @@ -0,0 +1,86 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyCurrentLocalBase; + +public class PolicyCurrentImpl extends PolicyCurrentLocalBase +{ + + PolicyContextManager m_manager; + + final static Policy[] st_empty_list = {}; + + public PolicyCurrentImpl(PolicyContextManager manager) + { + m_manager = manager; + } + + public org.omg.CORBA.Policy[] get_policy_overrides(int[] ts) + { + PolicyContext context = + m_manager.tryToGetThreadContext(Thread.currentThread()); + + if (context == null) + return st_empty_list; + + return context.getPolicies(ts); + } + + public void set_policy_overrides(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + PolicyContext context = + m_manager.getThreadContext(Thread.currentThread()); + + context.setPolicies(policies, set_add); + } + + public PolicyContext getPolicyContext() + { + return m_manager.tryToGetThreadContext(Thread.currentThread()); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyFactory.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyFactory.java.svn-base new file mode 100644 index 0000000..3418a25 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyFactory.java.svn-base @@ -0,0 +1,220 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.REBIND_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID; +import org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID; +import org.omg.PortableServer.LIFESPAN_POLICY_ID; +import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID; +import org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID; +import org.omg.PortableServer.THREAD_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_ENABLING_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_LOW_VALUE_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_MIN_RATIO_POLICY_ID; +import org.omg.ZIOP.COMPRESSOR_ID_LEVEL_LIST_POLICY_ID; + +import es.tid.TIDorbj.core.BidirectionalPolicyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.messaging.QueueOrderPolicyImpl; +import es.tid.TIDorbj.core.messaging.RebindPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRequestTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestEndTimePolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestStartTimePolicyImpl; +import es.tid.TIDorbj.core.poa.policies.IdAssignmentPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.IdUniquenessPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.LifespanPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.RequestProcessingPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.ServantRetentionPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.ThreadPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestPriorityPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionEnablingPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionLowValuePolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionMinRatioPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressorIdLevelListPolicyImpl; + +/** + * Methods used to instantiate ORB policies. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public class PolicyFactory +{ + + + /** + * Attempts to instanciate a CORBA policy. + * + * @param type + * the CORBA policy identifier + * @param val + * the policy value inserted in a Any + * @throws org.omg.CORBA.PolicyError + */ + + public static org.omg.CORBA.Policy createPolicy(int type, Any val) + throws org.omg.CORBA.PolicyError + { + + if (val == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + switch (type) { + case ID_UNIQUENESS_POLICY_ID.value: + return IdUniquenessPolicyImpl.createPolicy(val); + case ID_ASSIGNMENT_POLICY_ID.value: + return IdAssignmentPolicyImpl.createPolicy(val); + case LIFESPAN_POLICY_ID.value: + return LifespanPolicyImpl.createPolicy(val); + case REBIND_POLICY_TYPE.value: + return RebindPolicyImpl.createPolicy(val); + case BIDIRECTIONAL_POLICY_TYPE.value: + return BidirectionalPolicyImpl.createPolicy(val); + case QUEUE_ORDER_POLICY_TYPE.value: + return QueueOrderPolicyImpl.createPolicy(val); + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + return RelativeRequestTimeoutPolicyImpl.createPolicy(val); + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + return RelativeRoundtripTimeoutPolicyImpl.createPolicy(val); + case REQUEST_PROCESSING_POLICY_ID.value: + return RequestProcessingPolicyImpl.createPolicy(val); + case REQUEST_PRIORITY_POLICY_TYPE.value: + return RequestPriorityPolicyImpl.createPolicy(val); + case REQUEST_START_TIME_POLICY_TYPE.value: + return RequestStartTimePolicyImpl.createPolicy(val); + case REQUEST_END_TIME_POLICY_TYPE.value: + return RequestEndTimePolicyImpl.createPolicy(val); + case SERVANT_RETENTION_POLICY_ID.value: + return ServantRetentionPolicyImpl.createPolicy(val); + case THREAD_POLICY_ID.value: + return ThreadPolicyImpl.createPolicy(val); + case COMPRESSION_ENABLING_POLICY_ID.value: + return CompressionEnablingPolicyImpl.createPolicy(val); + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + return CompressionLowValuePolicyImpl.createPolicy(val); + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + return CompressionMinRatioPolicyImpl.createPolicy(val); + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + return CompressorIdLevelListPolicyImpl.createPolicy(val); + default: + throw new PolicyError(org.omg.CORBA.UNSUPPORTED_POLICY.value); + } + + } + + /** + * + * Reads a policy from an INVOCATION_POLICY ServiceContext encapsulation. + * See QoS section: "22.3 Propagation of Messaging QoS" + * + * @param input + * @return + */ + public static Policy readPolicy(CDRInputStream input) + { + int policy_type = input.read_ulong(); + Policy policy = null; + + + switch (policy_type) { + case BIDIRECTIONAL_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = BidirectionalPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestEndTimePolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestStartTimePolicyImpl.read(input); + input.exitEncapsulation(); + break; + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RelativeRequestTimeoutPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestPriorityPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + input.enterEncapsulation(); + policy = CompressionEnablingPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + input.enterEncapsulation(); + policy = CompressorIdLevelListPolicyImpl.read(input); + input.exitEncapsulation(); + break; + default: // policy not supported skip + input.skipEncapsulation(); + return null; + } + + return policy; + } + +} diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyManagerImpl.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyManagerImpl.java.svn-base new file mode 100644 index 0000000..61dd1ce --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/PolicyManagerImpl.java.svn-base @@ -0,0 +1,76 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.CORBA.PolicyManagerLocalBase; + +import es.tid.TIDorbj.core.TIDORB; + +public class PolicyManagerImpl extends PolicyManagerLocalBase +{ + + TIDORB m_orb; + + public PolicyManagerImpl(TIDORB orb) + { + this.m_orb = orb; + } + + public org.omg.CORBA.Policy[] get_policy_overrides(int[] ts) + { + return m_orb.m_conf.getPolicyContext().getPolicies(ts); + } + + public void set_policy_overrides(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + m_orb.m_conf.getPolicyContext().setPolicies(policies, set_add); + } + + public PolicyContext getPolicyContext() + { + return m_orb.m_conf.getPolicyContext(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/.svn/text-base/UnsuportedPolicy.java.svn-base b/source/es/tid/TIDorbj/core/policy/.svn/text-base/UnsuportedPolicy.java.svn-base new file mode 100644 index 0000000..ccbd540 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/.svn/text-base/UnsuportedPolicy.java.svn-base @@ -0,0 +1,56 @@ +package es.tid.TIDorbj.core.policy; + + +import org.omg.CORBA.LocalObject; +import org.omg.CORBA.Policy; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; + + +/** + * @author caceres + * + */ +public class UnsuportedPolicy extends LocalObject + implements Policy +{ + + int type; + Encapsulation value; + + + public int policy_type() + { + return type; + } + + + public Policy copy() + { + return this; + } + + + public void destroy() + { + + } + + public void partialRead(CDRInputStream input) { + value = input.readEncapsulation(); + + } + + public void write(CDROutputStream output) + { + output.write_ulong(type); + if(value != null) { + output.writeEncapsulation(value); + } + } + + + +} diff --git a/source/es/tid/TIDorbj/core/policy/PolicyContext.java b/source/es/tid/TIDorbj/core/policy/PolicyContext.java new file mode 100644 index 0000000..6c51a2a --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/PolicyContext.java @@ -0,0 +1,1054 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE; +import org.omg.BiDirPolicy.BidirectionalPolicy; +import org.omg.BiDirPolicy.BidirectionalPolicyHelper; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INV_POLICY; +import org.omg.CORBA.InvalidPolicies; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.CORBA.SetOverrideType; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.QueueOrderPolicy; +import org.omg.Messaging.QueueOrderPolicyHelper; +import org.omg.Messaging.ORDER_ANY; +import org.omg.Messaging.ORDER_TEMPORAL; +import org.omg.Messaging.ORDER_PRIORITY; +import org.omg.Messaging.ORDER_DEADLINE; +import org.omg.Messaging.REBIND_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.Messaging.RebindModeHelper; +import org.omg.Messaging.RebindPolicy; +import org.omg.Messaging.RebindPolicyHelper; +import org.omg.Messaging.TRANSPARENT; +import org.omg.Messaging.NO_REBIND; +import org.omg.Messaging.NO_RECONNECT; +import org.omg.Messaging.RelativeRequestTimeoutPolicy; +import org.omg.Messaging.RelativeRequestTimeoutPolicyHelper; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicy; +import org.omg.Messaging.RelativeRoundtripTimeoutPolicyHelper; +import org.omg.Messaging.RequestEndTimePolicy; +import org.omg.Messaging.RequestEndTimePolicyHelper; +import org.omg.Messaging.RequestPriorityPolicy; +import org.omg.Messaging.RequestPriorityPolicyHelper; +import org.omg.Messaging.RequestStartTimePolicy; +import org.omg.Messaging.RequestStartTimePolicyHelper; +import org.omg.ZIOP.COMPRESSION_ENABLING_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_LOW_VALUE_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_MIN_RATIO_POLICY_ID; +import org.omg.ZIOP.COMPRESSOR_ID_LEVEL_LIST_POLICY_ID; +import org.omg.ZIOP.CompressionEnablingPolicy; +import org.omg.ZIOP.CompressionLowValuePolicy; +import org.omg.ZIOP.CompressionMinRatioPolicy; +import org.omg.ZIOP.CompressorIdLevelListPolicy; +import org.omg.ZIOP.CompressionEnablingPolicyHelper; +import org.omg.ZIOP.CompressionLowValuePolicyHelper; +import org.omg.ZIOP.CompressionMinRatioPolicyHelper; +import org.omg.ZIOP.CompressorIdLevelListPolicyHelper; +import org.omg.ZIOP.CompressionEnablingPolicyValueHelper; +import org.omg.ZIOP.CompressionLowValuePolicyValueHelper; +import org.omg.ZIOP.CompressionMinRatioPolicyValueHelper; +import org.omg.Compression.CompressorIdLevelListHelper; +import org.omg.Compression.CompressorIdLevel; +import es.tid.TIDorbj.core.BidirectionalPolicyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.comm.giop.InvocationPoliciesContext; +import es.tid.TIDorbj.core.messaging.QoS; +import es.tid.TIDorbj.core.messaging.QueueOrderPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRequestTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestEndTimePolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestPriorityPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestStartTimePolicyImpl; +import es.tid.TIDorbj.util.UTC; +import es.tid.TIDorbj.core.ziop.CompressionEnablingPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionLowValuePolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionMinRatioPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressorIdLevelListPolicyImpl; + + +public class PolicyContext + +{ + /** + * QoS Policy + */ + BidirectionalPolicy bidirectionalPolicy = null; + RebindPolicy rebindPolicy = null; + RelativeRequestTimeoutPolicy relativeRequestTimeoutPolicy = null; + RelativeRoundtripTimeoutPolicy relativeRoundtripTimeoutPolicy = null; + RequestPriorityPolicy requestPriorityPolicy = null; + RequestStartTimePolicy requestStartTimePolicy = null; + RequestEndTimePolicy requestEndTimePolicy = null; + QueueOrderPolicy queueOrderPolicy = null; + CompressionEnablingPolicy compressionEnablingPolicy = null; + CompressionLowValuePolicy compressionLowValuePolicy = null; + CompressionMinRatioPolicy compressionMinRatioPolicy = null; + CompressorIdLevelListPolicy compressorIdLevelListPolicy = null; + + private PolicyContext m_father_context; + + private int numPolicies; + + + /** + * Constructor. Context may be structured in an hierachy for + * the ORB, reference, request or thread + * + * @param father_context father context (it may be null) + */ + public PolicyContext(PolicyContext father_context) + { + m_father_context = father_context; + bidirectionalPolicy = null; + numPolicies = 0; + + } + + public void setFatherContext(PolicyContext father_context) + { + m_father_context = father_context; + } + + private void clear() + { + bidirectionalPolicy = null; + rebindPolicy = null; + relativeRequestTimeoutPolicy = null; + relativeRoundtripTimeoutPolicy = null; + requestPriorityPolicy = null; + requestStartTimePolicy = null; + requestEndTimePolicy = null; + queueOrderPolicy = null; + compressionEnablingPolicy = null; + compressionLowValuePolicy = null; + compressionMinRatioPolicy = null; + compressorIdLevelListPolicy = null; + } + + + public synchronized void setPolicies(Policy[] policies, + SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + + if (set_add == SetOverrideType.SET_OVERRIDE) { + clear(); + } + + java.util.Vector errors = null; + + for (short i = 0; i < policies.length; i++) { + try { + setPolicy(policies[i]); + } + catch (PolicyError pe) { + if (errors == null) + errors = new java.util.Vector(); + errors.add(new Short(i)); + } + } + + if (errors != null) { + InvalidPolicies ex = new InvalidPolicies(); + + int size = errors.size(); + + ex.indices = new short[size]; + + for (int i = 0; i < size; i++) + ex.indices[i] = ((Short) errors.elementAt(i)).shortValue(); + + throw ex; + } + + } + + public Policy getPolicy(int type) + { + Policy policy = null; + + switch(type) { + + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + policy = getRelativeRequestTimeoutPolicy(); + break; + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + policy = getRelativeRoundtripTimeoutPolicy(); + break; + case REBIND_POLICY_TYPE.value: + policy = getRebindPolicy(); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + policy = getRequestPriorityPolicy(); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + policy = getRequestStartTimePolicy(); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + policy = getRequestEndTimePolicy(); + break; + case QUEUE_ORDER_POLICY_TYPE.value: + policy = getQueueOrderPolicy(); + break; + case BIDIRECTIONAL_POLICY_TYPE.value: + policy = getBidirectionalPolicy(); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + policy = getCompressionEnablingPolicy(); + break; + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + policy = getCompressionLowValuePolicy(); + break; + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + policy = getCompressionMinRatioPolicy(); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + policy = getCompressorIdLevelListPolicy(); + break; + } + + if (policy == null) { + throw new INV_POLICY(); + } else { + return policy; + } + + + + + } + + public Policy[] getPolicies(int[] ts) + { + java.util.Vector list = new java.util.Vector(); + + Policy policy = null; + + for (int i = 0; i < ts.length; i++) { + policy = getPolicy(ts[i]); + if (policy != null) + list.add(policy); + } + + Policy[] result = new Policy[list.size()]; + + list.copyInto(result); + + return result; + + } + + public void setPolicy(Policy policy) + throws PolicyError + { + + if (policy == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + int type = policy.policy_type(); + + switch (type) { + case BIDIRECTIONAL_POLICY_TYPE.value: + bidirectionalPolicy = BidirectionalPolicyHelper.narrow(policy); + break; + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + this.setRelativeRequestTimeoutPolicy(RelativeRequestTimeoutPolicyHelper.narrow(policy)); + break; + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + this.setRelativeRoundtripTimeoutPolicy(RelativeRoundtripTimeoutPolicyHelper.narrow(policy)); + break; + case REBIND_POLICY_TYPE.value: + this.setRebindPolicy(RebindPolicyHelper.narrow(policy)); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + this.setRequestPriorityPolicy(RequestPriorityPolicyHelper.narrow(policy)); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + this.setRequestStartTimePolicy(RequestStartTimePolicyHelper.narrow(policy)); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + this.setRequestEndTimePolicy(RequestEndTimePolicyHelper.narrow(policy)); + break; + case QUEUE_ORDER_POLICY_TYPE.value: + this.setQueueOrderPolicy(QueueOrderPolicyHelper.narrow(policy)); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + this.setCompressionEnablingPolicy(CompressionEnablingPolicyHelper.narrow(policy)); + break; + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + this.setCompressionLowValuePolicy(CompressionLowValuePolicyHelper.narrow(policy)); + break; + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + this.setCompressionMinRatioPolicy(CompressionMinRatioPolicyHelper.narrow(policy)); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + this.setCompressorIdLevelListPolicy(CompressorIdLevelListPolicyHelper.narrow(policy)); + break; + default: + throw new PolicyError(org.omg.CORBA.UNSUPPORTED_POLICY.value); + } + + } + + + /** + * Duplicates completely the PolicyContext. It will be used by Reference + * duplication. + * @return a new PolicyContext + */ + public synchronized PolicyContext duplicate() + { + PolicyContext copy = new PolicyContext(m_father_context); + + copy.bidirectionalPolicy = bidirectionalPolicy; + copy.rebindPolicy = rebindPolicy; + copy.relativeRequestTimeoutPolicy = relativeRequestTimeoutPolicy; + copy.relativeRoundtripTimeoutPolicy = relativeRoundtripTimeoutPolicy; + copy.requestPriorityPolicy = requestPriorityPolicy; + copy.requestStartTimePolicy = requestStartTimePolicy; + copy.requestEndTimePolicy = requestEndTimePolicy; + copy.queueOrderPolicy = queueOrderPolicy; + copy.compressionEnablingPolicy = compressionEnablingPolicy; + copy.compressionLowValuePolicy = compressionLowValuePolicy; + copy.compressionMinRatioPolicy = compressionMinRatioPolicy; + copy.compressorIdLevelListPolicy = compressorIdLevelListPolicy; + + copy.numPolicies = numPolicies; + + return copy; + } + + + /** + * @return Returns the rebindPolicy. + */ + public RebindPolicy getRebindPolicy() + { + if(rebindPolicy != null) { + return rebindPolicy; + } else if(m_father_context != null) { + return m_father_context.getRebindPolicy(); + } else { + return null; + } + } + + + /** + * @param rebindPolicy The rebindPolicy to set. + */ + public void setRebindPolicy(RebindPolicy rebindPolicy) + { + if(this.rebindPolicy == null) { + numPolicies++; + } + if(rebindPolicy == null) { + numPolicies--; + } + + this.rebindPolicy = rebindPolicy; + } + + /** + * @return Returns the relativeRequestTimeoutPolicy. + */ + public RelativeRequestTimeoutPolicy getRelativeRequestTimeoutPolicy() + { + if(relativeRequestTimeoutPolicy != null) { + return relativeRequestTimeoutPolicy; + } else if(m_father_context != null) { + return m_father_context.getRelativeRequestTimeoutPolicy(); + } else { + return null; + } + } + + /** + * @param relativeRequestTimeoutPolicy The relativeRequestTimeoutPolicy to set. + */ + public void + setRelativeRequestTimeoutPolicy(RelativeRequestTimeoutPolicy relativeRequestTimeoutPolicy) + { + if(this.relativeRequestTimeoutPolicy == null) { + numPolicies++; + } + if(relativeRequestTimeoutPolicy == null) { + numPolicies--; + } + + this.relativeRequestTimeoutPolicy = relativeRequestTimeoutPolicy; + } + + /** + * @return Returns the relativeRountripTimeoutPolicy. + */ + public RelativeRoundtripTimeoutPolicy getRelativeRoundtripTimeoutPolicy() + { + if(relativeRoundtripTimeoutPolicy != null) { + return relativeRoundtripTimeoutPolicy; + } else if(m_father_context != null) { + return m_father_context.getRelativeRoundtripTimeoutPolicy(); + } else { + return null; + } + } + + /** + * @param relativeRequestTimeoutPolicy The relativeRequestTimeoutPolicy to set. + */ + public void + setRelativeRoundtripTimeoutPolicy(RelativeRoundtripTimeoutPolicy relativeRoundtripTimeoutPolicy) + { + if(this.relativeRoundtripTimeoutPolicy == null) { + numPolicies++; + } + if(relativeRoundtripTimeoutPolicy == null) { + numPolicies--; + } + + this.relativeRoundtripTimeoutPolicy = relativeRoundtripTimeoutPolicy; + } + + + /** + * @param requestEndTimePolicy The requestEndTimePolicy to set. + */ + public void setRequestEndTimePolicy(RequestEndTimePolicy requestEndTimePolicy) + { + if(this.requestEndTimePolicy == null) { + numPolicies++; + } + if(requestEndTimePolicy == null) { + numPolicies--; + } + + this.requestEndTimePolicy = requestEndTimePolicy; + } + + /** + * @return Returns the requestEndTimePolicy. + */ + public RequestEndTimePolicy getRequestEndTimePolicy() + { + if(requestEndTimePolicy != null) { + return requestEndTimePolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestEndTimePolicy(); + } else { + return null; + } + } + + /** + * @param requestPriorityPolicy The RequestPriorityPolicy to set. + */ + public void setRequestPriorityPolicy(RequestPriorityPolicy requestPriorityPolicy) + { + if(this.requestPriorityPolicy == null) { + numPolicies++; + } + if(requestPriorityPolicy == null) { + numPolicies--; + } + + this.requestPriorityPolicy = requestPriorityPolicy; + } + + /** + * @return Returns the requestPriorityPolicy. + */ + public RequestPriorityPolicy getRequestPriorityPolicy() + { + if(requestPriorityPolicy != null) { + return requestPriorityPolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestPriorityPolicy(); + } else { + return null; + } + } + + /** + * @param requestStartTimePolicy The requestStartTimePolicy to set. + */ + public void setRequestStartTimePolicy( + RequestStartTimePolicy requestStartTimePolicy) + { + if(this.requestStartTimePolicy == null) { + numPolicies++; + } + if(requestStartTimePolicy == null) { + numPolicies--; + } + this.requestStartTimePolicy = requestStartTimePolicy; + } + + /** + * @return Returns the requestStartTimePolicy. + */ + public RequestStartTimePolicy getRequestStartTimePolicy() + { + if(requestStartTimePolicy != null) { + return requestStartTimePolicy; + } else if(m_father_context != null) { + return m_father_context.getRequestStartTimePolicy(); + } else { + return null; + } + } + + + + + + /** + * @return Returns the queueOrderPolicy. + */ + public QueueOrderPolicy getQueueOrderPolicy() + { + if(queueOrderPolicy != null) { + return queueOrderPolicy; + } else if(m_father_context != null) { + return m_father_context.getQueueOrderPolicy(); + } else { + return null; + } + } + + /** + * @param rebindPolicy The queueOrderPolicy to set. + */ + public void setQueueOrderPolicy(QueueOrderPolicy queueOrderPolicy) + { + if(this.queueOrderPolicy == null) { + numPolicies++; + } + if(queueOrderPolicy == null) { + numPolicies--; + } + + this.queueOrderPolicy = queueOrderPolicy; + } + + + + + + /** + * @param priorityModelPolicy The queueOrderPolicy to set. + */ + public void setBidirectionalPolicy(BidirectionalPolicy bidirectionalPolicy) + { + if(this.bidirectionalPolicy == null) { + numPolicies++; + } + if(bidirectionalPolicy == null) { + numPolicies--; + } + + this.bidirectionalPolicy = bidirectionalPolicy; + } + + /** + * @return Returns the queueOrderPolicy. + */ + public BidirectionalPolicy getBidirectionalPolicy() + { + if(bidirectionalPolicy != null) { + return bidirectionalPolicy; + } else if(m_father_context != null) { + return m_father_context.getBidirectionalPolicy(); + } else { + return null; + } + } + + /** + * @param compressionEnablingPolicy The compressionEnablingPolicy to set. + */ + public void setCompressionEnablingPolicy(CompressionEnablingPolicy compressionEnablingPolicy) + { + if(this.compressionEnablingPolicy == null) { + numPolicies++; + } + if(compressionEnablingPolicy == null) { + numPolicies--; + } + + this.compressionEnablingPolicy = compressionEnablingPolicy; + } + + /** + * @return Returns the compressionEnablingPolicy. + */ + public CompressionEnablingPolicy getCompressionEnablingPolicy() + { + if(compressionEnablingPolicy != null) { + return compressionEnablingPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionEnablingPolicy(); + } else { + return null; + } + } + + /** + * @param compressionLowValuePolicy The compressionLowValuePolicy to set. + */ + public void setCompressionLowValuePolicy(CompressionLowValuePolicy compressionLowValuePolicy) + { + if(this.compressionLowValuePolicy == null) { + numPolicies++; + } + if(compressionLowValuePolicy == null) { + numPolicies--; + } + + this.compressionLowValuePolicy = compressionLowValuePolicy; + } + + /** + * @return Returns the compressionLowValuePolicy. + */ + public CompressionLowValuePolicy getCompressionLowValuePolicy() + { + if(compressionLowValuePolicy != null) { + return compressionLowValuePolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionLowValuePolicy(); + } else { + return null; + } + } + + /** + * @param compressionMinRatioPolicy The compressionMinRatioPolicy to set. + */ + public void setCompressionMinRatioPolicy(CompressionMinRatioPolicy compressionMinRatioPolicy) + { + if(this.compressionMinRatioPolicy == null) { + numPolicies++; + } + if(compressionMinRatioPolicy == null) { + numPolicies--; + } + + this.compressionMinRatioPolicy = compressionMinRatioPolicy; + } + + /** + * @return Returns the compressionMinRatioPolicy. + */ + public CompressionMinRatioPolicy getCompressionMinRatioPolicy() + { + if(compressionMinRatioPolicy != null) { + return compressionMinRatioPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressionMinRatioPolicy(); + } else { + return null; + } + } + + /** + * @param compressorIdLevelListPolicy The compressorIdLevelListPolicy to set. + */ + public void setCompressorIdLevelListPolicy(CompressorIdLevelListPolicy compressorIdLevelListPolicy) + { + if(this.compressorIdLevelListPolicy == null) { + numPolicies++; + } + if(compressorIdLevelListPolicy == null) { + numPolicies--; + } + + this.compressorIdLevelListPolicy = compressorIdLevelListPolicy; + } + + /** + * @return Returns the compressorIdLevelListPolicy. + */ + public CompressorIdLevelListPolicy getCompressorIdLevelListPolicy() + { + if(compressorIdLevelListPolicy != null) { + return compressorIdLevelListPolicy; + } else if(m_father_context != null) { + return m_father_context.getCompressorIdLevelListPolicy(); + } else { + return null; + } + } + + + + public InvocationPoliciesContext getInvocationPolicyServiceContext() + { + RequestEndTimePolicy endPolicy = + QoS.getEffectiveRequestEndTimePolicy(this); + + RequestPriorityPolicy priorityPolicy = getRequestPriorityPolicy(); + + if((endPolicy != null) || (priorityPolicy != null)){ + PolicyContext invocationPolicies = new PolicyContext(null); + if(endPolicy != null) { + invocationPolicies.setRequestEndTimePolicy(endPolicy); + } + if(priorityPolicy != null) { + invocationPolicies.setRequestPriorityPolicy(priorityPolicy); + } + return new InvocationPoliciesContext(invocationPolicies); + } else { + return null; + } + } + + + + + public synchronized void dump(java.io.PrintWriter writer) + { + if(bidirectionalPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(BidirectionalPolicyHelper.id()); + writer.print('='); + short bidir_value = bidirectionalPolicy.value(); + if (bidir_value == org.omg.BiDirPolicy.NORMAL.value) { + writer.print("NORMAL"); + } else { + writer.print("BOTH"); + } + } + + if(relativeRoundtripTimeoutPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RelativeRequestTimeoutPolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + relativeRoundtripTimeoutPolicy.relative_expiry())); + writer.print(" ms."); + } + + if (rebindPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RebindPolicyHelper.id()); + writer.print('='); + short rebind_value = rebindPolicy.rebind_mode(); + switch (rebind_value){ + case org.omg.Messaging.TRANSPARENT.value: + writer.print("TRANSPARENT"); + break; + case org.omg.Messaging.NO_REBIND.value: + writer.print("NO_REBIND"); + break; + case org.omg.Messaging.NO_RECONNECT.value: + writer.print("NO_RECONNECT"); + break; + } + } + + if (relativeRequestTimeoutPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RelativeRequestTimeoutPolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + relativeRequestTimeoutPolicy.relative_expiry())); + writer.print(" ms."); + } + + if (requestPriorityPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestPriorityPolicyHelper.id()); + writer.print('='); + writer.print("[" + requestPriorityPolicy.priority_range().min + "," + + requestPriorityPolicy.priority_range().max + "]"); + } + + if (requestStartTimePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestStartTimePolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + requestStartTimePolicy.start_time().time)); + writer.print(" ms."); + } + + if (requestEndTimePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(RequestEndTimePolicyHelper.id()); + writer.print('='); + writer.print(UTC.toTimeInMillis( + requestEndTimePolicy.end_time().time)); + writer.print(" ms."); + } + + if (queueOrderPolicy != null) { + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(QueueOrderPolicyHelper.id()); + writer.print('='); + short value = queueOrderPolicy.allowed_orders(); + switch (value) { + case org.omg.Messaging.ORDER_ANY.value: + writer.print("ORDER_ANY"); + break; + case org.omg.Messaging.ORDER_TEMPORAL.value: + writer.print("ORDER_TEMPORAL"); + break; + case org.omg.Messaging.ORDER_PRIORITY.value: + writer.print("ORDER_PRIORITY"); + break; + case org.omg.Messaging.ORDER_DEADLINE.value: + writer.print("ORDER_DEADLINE"); + break; + } + } + + + if (compressionEnablingPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionEnablingPolicyHelper.id()); + writer.print('='); + writer.print(compressionEnablingPolicy.compression_enabled()); + } + + if (compressionLowValuePolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionLowValuePolicyHelper.id()); + writer.print('='); + writer.print(compressionLowValuePolicy.low_value()); + } + + if (compressionMinRatioPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressionMinRatioPolicyHelper.id()); + writer.print('='); + writer.print(compressionMinRatioPolicy.ratio()); + } + + if (compressorIdLevelListPolicy != null){ + writer.print('\n'); + writer.print('\t'); + writer.print('\t'); + writer.print(CompressorIdLevelListPolicyHelper.id()); + writer.print('='); + CompressorIdLevel[] compressors = + compressorIdLevelListPolicy.compressor_ids(); + for (int i=0; i < compressors.length; i++) { + writer.print("(" + compressors[i].compressor_id + "," + + compressors[i].compression_level + ")" ); + } + } + } + + + /** + * Reads the policies as a pair PolicyType/encapsuled policy data + * @param input + */ + public void partialRead(CDRInputStream input) + { + int size = input.read_ulong(); + + Policy policy = null; + for (int i = 0; i< size; i++) { + policy = PolicyFactory.readPolicy(input); + if(policy != null) { + try { + setPolicy(policy); + } + catch (PolicyError e) {//unreachable + } + } + } + } + + /** + * Writes the policies as a pair PolicyType/encalsuled policy data + * @param output the outputstream + */ + public void write(CDROutputStream output) + { + output.write_ulong(numPolicies); + + if(rebindPolicy != null) { + // write PolicyType + output.write_ulong(rebindPolicy.policy_type()); + output.enterEncapsulation(); + RebindModeHelper.write(output, rebindPolicy.rebind_mode()); + output.exitEncapsulation(); + } + + + if(relativeRequestTimeoutPolicy != null) { + // write PolicyType + output.write_ulong(relativeRequestTimeoutPolicy.policy_type()); + output.enterEncapsulation(); + RelativeRequestTimeoutPolicyImpl.write(output,relativeRequestTimeoutPolicy); + output.exitEncapsulation(); + } + + if(relativeRoundtripTimeoutPolicy != null) { + // write PolicyType + output.write_ulong(relativeRoundtripTimeoutPolicy.policy_type()); + output.enterEncapsulation(); + RelativeRoundtripTimeoutPolicyImpl.write(output, + relativeRoundtripTimeoutPolicy); + output.exitEncapsulation(); + } + + if(requestStartTimePolicy != null) { + // write PolicyType + output.write_ulong(requestStartTimePolicy.policy_type()); + output.enterEncapsulation(); + RequestStartTimePolicyImpl.write(output, requestStartTimePolicy); + output.exitEncapsulation(); + } + + if(requestPriorityPolicy != null) { + // write PolicyType + output.write_ulong(requestPriorityPolicy.policy_type()); + output.enterEncapsulation(); + RequestPriorityPolicyImpl.write(output, requestPriorityPolicy); + output.exitEncapsulation(); + } + + if(requestEndTimePolicy != null) { + // write PolicyType + output.write_ulong(requestEndTimePolicy.policy_type()); + // write Encapsulation + output.enterEncapsulation(); + RequestEndTimePolicyImpl.write(output, requestEndTimePolicy); + output.exitEncapsulation(); + } + + if(queueOrderPolicy != null) { + // write PolicyType + output.write_ulong(queueOrderPolicy.policy_type()); + output.enterEncapsulation(); + QueueOrderPolicyImpl.write(output,queueOrderPolicy ); + output.exitEncapsulation(); + } + + if(compressionEnablingPolicy != null) { + // write PolicyType + output.write_ulong(compressionEnablingPolicy.policy_type()); + output.enterEncapsulation(); + CompressionEnablingPolicyImpl.write(output, compressionEnablingPolicy); + output.exitEncapsulation(); + } + + if(compressionLowValuePolicy != null) { + // write PolicyType + output.write_ulong(compressionLowValuePolicy.policy_type()); + output.enterEncapsulation(); + CompressionLowValuePolicyImpl.write(output, compressionLowValuePolicy); + output.exitEncapsulation(); + } + + if(compressionMinRatioPolicy != null) { + // write PolicyType + output.write_ulong(compressionMinRatioPolicy.policy_type()); + output.enterEncapsulation(); + CompressionMinRatioPolicyImpl.write(output, compressionMinRatioPolicy); + output.exitEncapsulation(); + } + + if(compressorIdLevelListPolicy != null) { + // write PolicyType + output.write_ulong(compressorIdLevelListPolicy.policy_type()); + output.enterEncapsulation(); + CompressorIdLevelListPolicyImpl.write(output, compressorIdLevelListPolicy); + output.exitEncapsulation(); + } + + if(this.bidirectionalPolicy != null) { + // write PolicyType + output.write_ulong(bidirectionalPolicy.policy_type()); + output.enterEncapsulation(); + BidirectionalPolicyImpl.write(output,bidirectionalPolicy ); + output.exitEncapsulation(); + } + } + + /** + * @return + */ + public int getSize() + { + return this.numPolicies; + } + + +} diff --git a/source/es/tid/TIDorbj/core/policy/PolicyContextManager.java b/source/es/tid/TIDorbj/core/policy/PolicyContextManager.java new file mode 100644 index 0000000..d08b6f8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/PolicyContextManager.java @@ -0,0 +1,107 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import java.util.Hashtable; + +import es.tid.TIDorbj.core.TIDORB; + +public class PolicyContextManager +{ + + public final static int CLEANUP_ROUND = 100; + + TIDORB m_orb; + + Hashtable m_thread_contexts; + + int m_cleanup_round; + + public PolicyContextManager(TIDORB orb) + { + this.m_orb = orb; + m_thread_contexts = new Hashtable(); + + m_cleanup_round = 0; + } + + public synchronized PolicyContext getThreadContext(Thread th) + { + PolicyContext context = (PolicyContext) m_thread_contexts.get(th); + + if (context == null) { + // Thread PolicyContext overrides ORB policies (that is has + // the ORB PolicyContext as father + context = new PolicyContext(m_orb.m_conf.getPolicyContext()); + m_thread_contexts.put(th, context); + + // Start cleaner thread + if ((++m_cleanup_round) > CLEANUP_ROUND) { + m_cleanup_round = 0; + clear_contexts(); + } + } + + return context; + } + + public synchronized PolicyContext tryToGetThreadContext(Thread th) + { + return (PolicyContext) m_thread_contexts.get(th); + } + + private void clear_contexts() + { + Object[] keys = m_thread_contexts.keySet().toArray(); + + Thread th = null; + + for (int i = 0; i < keys.length; i++) { + th = (Thread) keys[i]; + if (!th.isAlive()) + m_thread_contexts.remove(th); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.java b/source/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.java new file mode 100644 index 0000000..b11e183 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/PolicyCurrentImpl.java @@ -0,0 +1,86 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyCurrentLocalBase; + +public class PolicyCurrentImpl extends PolicyCurrentLocalBase +{ + + PolicyContextManager m_manager; + + final static Policy[] st_empty_list = {}; + + public PolicyCurrentImpl(PolicyContextManager manager) + { + m_manager = manager; + } + + public org.omg.CORBA.Policy[] get_policy_overrides(int[] ts) + { + PolicyContext context = + m_manager.tryToGetThreadContext(Thread.currentThread()); + + if (context == null) + return st_empty_list; + + return context.getPolicies(ts); + } + + public void set_policy_overrides(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + PolicyContext context = + m_manager.getThreadContext(Thread.currentThread()); + + context.setPolicies(policies, set_add); + } + + public PolicyContext getPolicyContext() + { + return m_manager.tryToGetThreadContext(Thread.currentThread()); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/PolicyFactory.java b/source/es/tid/TIDorbj/core/policy/PolicyFactory.java new file mode 100644 index 0000000..a648bdb --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/PolicyFactory.java @@ -0,0 +1,220 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 395 $ +* Date: $Date: 2009-05-27 16:10:32 +0200 (Wed, 27 May 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.Policy; +import org.omg.CORBA.PolicyError; +import org.omg.Messaging.QUEUE_ORDER_POLICY_TYPE; +import org.omg.Messaging.REBIND_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_REQ_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.RELATIVE_RT_TIMEOUT_POLICY_TYPE; +import org.omg.Messaging.REQUEST_END_TIME_POLICY_TYPE; +import org.omg.Messaging.REQUEST_PRIORITY_POLICY_TYPE; +import org.omg.Messaging.REQUEST_START_TIME_POLICY_TYPE; +import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID; +import org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID; +import org.omg.PortableServer.LIFESPAN_POLICY_ID; +import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID; +import org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID; +import org.omg.PortableServer.THREAD_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_ENABLING_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_LOW_VALUE_POLICY_ID; +import org.omg.ZIOP.COMPRESSION_MIN_RATIO_POLICY_ID; +import org.omg.ZIOP.COMPRESSOR_ID_LEVEL_LIST_POLICY_ID; + +import es.tid.TIDorbj.core.BidirectionalPolicyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.messaging.QueueOrderPolicyImpl; +import es.tid.TIDorbj.core.messaging.RebindPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRequestTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RelativeRoundtripTimeoutPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestEndTimePolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestStartTimePolicyImpl; +import es.tid.TIDorbj.core.poa.policies.IdAssignmentPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.IdUniquenessPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.LifespanPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.RequestProcessingPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.ServantRetentionPolicyImpl; +import es.tid.TIDorbj.core.poa.policies.ThreadPolicyImpl; +import es.tid.TIDorbj.core.messaging.RequestPriorityPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionEnablingPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionLowValuePolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressionMinRatioPolicyImpl; +import es.tid.TIDorbj.core.ziop.CompressorIdLevelListPolicyImpl; + +/** + * Methods used to instantiate ORB policies. + * + * @author Juan A. Cáceres + * @version 1.0 + */ + +public class PolicyFactory +{ + + + /** + * Attempts to instanciate a CORBA policy. + * + * @param type + * the CORBA policy identifier + * @param val + * the policy value inserted in a Any + * @throws org.omg.CORBA.PolicyError + */ + + public static org.omg.CORBA.Policy createPolicy(int type, Any val) + throws org.omg.CORBA.PolicyError + { + + if (val == null) + throw new BAD_PARAM("Null reference", 0, + CompletionStatus.COMPLETED_NO); + + switch (type) { + case ID_UNIQUENESS_POLICY_ID.value: + return IdUniquenessPolicyImpl.createPolicy(val); + case ID_ASSIGNMENT_POLICY_ID.value: + return IdAssignmentPolicyImpl.createPolicy(val); + case LIFESPAN_POLICY_ID.value: + return LifespanPolicyImpl.createPolicy(val); + case REBIND_POLICY_TYPE.value: + return RebindPolicyImpl.createPolicy(val); + case BIDIRECTIONAL_POLICY_TYPE.value: + return BidirectionalPolicyImpl.createPolicy(val); + case QUEUE_ORDER_POLICY_TYPE.value: + return QueueOrderPolicyImpl.createPolicy(val); + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + return RelativeRequestTimeoutPolicyImpl.createPolicy(val); + case RELATIVE_RT_TIMEOUT_POLICY_TYPE.value: + return RelativeRoundtripTimeoutPolicyImpl.createPolicy(val); + case REQUEST_PROCESSING_POLICY_ID.value: + return RequestProcessingPolicyImpl.createPolicy(val); + case REQUEST_PRIORITY_POLICY_TYPE.value: + return RequestPriorityPolicyImpl.createPolicy(val); + case REQUEST_START_TIME_POLICY_TYPE.value: + return RequestStartTimePolicyImpl.createPolicy(val); + case REQUEST_END_TIME_POLICY_TYPE.value: + return RequestEndTimePolicyImpl.createPolicy(val); + case SERVANT_RETENTION_POLICY_ID.value: + return ServantRetentionPolicyImpl.createPolicy(val); + case THREAD_POLICY_ID.value: + return ThreadPolicyImpl.createPolicy(val); + case COMPRESSION_ENABLING_POLICY_ID.value: + return CompressionEnablingPolicyImpl.createPolicy(val); + case COMPRESSION_LOW_VALUE_POLICY_ID.value: + return CompressionLowValuePolicyImpl.createPolicy(val); + case COMPRESSION_MIN_RATIO_POLICY_ID.value: + return CompressionMinRatioPolicyImpl.createPolicy(val); + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + return CompressorIdLevelListPolicyImpl.createPolicy(val); + default: + throw new PolicyError(org.omg.CORBA.UNSUPPORTED_POLICY.value); + } + + } + + /** + * + * Reads a policy from an INVOCATION_POLICY ServiceContext encapsulation. + * See QoS section: "22.3 Propagation of Messaging QoS" + * + * @param input + * @return + */ + public static Policy readPolicy(CDRInputStream input) + { + int policy_type = input.read_ulong(); + Policy policy = null; + + + switch (policy_type) { + case BIDIRECTIONAL_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = BidirectionalPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_END_TIME_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestEndTimePolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_START_TIME_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestStartTimePolicyImpl.read(input); + input.exitEncapsulation(); + break; + case RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RelativeRequestTimeoutPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case REQUEST_PRIORITY_POLICY_TYPE.value: + input.enterEncapsulation(); + policy = RequestPriorityPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case COMPRESSION_ENABLING_POLICY_ID.value: + input.enterEncapsulation(); + policy = CompressionEnablingPolicyImpl.read(input); + input.exitEncapsulation(); + break; + case COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value: + input.enterEncapsulation(); + policy = CompressorIdLevelListPolicyImpl.read(input); + input.exitEncapsulation(); + break; + default: // policy not supported skip + input.skipEncapsulation(); + return null; + } + + return policy; + } + +} diff --git a/source/es/tid/TIDorbj/core/policy/PolicyManagerImpl.java b/source/es/tid/TIDorbj/core/policy/PolicyManagerImpl.java new file mode 100644 index 0000000..e33ed6d --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/PolicyManagerImpl.java @@ -0,0 +1,76 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.policy; + +import org.omg.CORBA.PolicyManagerLocalBase; + +import es.tid.TIDorbj.core.TIDORB; + +public class PolicyManagerImpl extends PolicyManagerLocalBase +{ + + TIDORB m_orb; + + public PolicyManagerImpl(TIDORB orb) + { + this.m_orb = orb; + } + + public org.omg.CORBA.Policy[] get_policy_overrides(int[] ts) + { + return m_orb.m_conf.getPolicyContext().getPolicies(ts); + } + + public void set_policy_overrides(org.omg.CORBA.Policy[] policies, + org.omg.CORBA.SetOverrideType set_add) + throws org.omg.CORBA.InvalidPolicies + { + m_orb.m_conf.getPolicyContext().setPolicies(policies, set_add); + } + + public PolicyContext getPolicyContext() + { + return m_orb.m_conf.getPolicyContext(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/policy/UnsuportedPolicy.java b/source/es/tid/TIDorbj/core/policy/UnsuportedPolicy.java new file mode 100644 index 0000000..ccbd540 --- /dev/null +++ b/source/es/tid/TIDorbj/core/policy/UnsuportedPolicy.java @@ -0,0 +1,56 @@ +package es.tid.TIDorbj.core.policy; + + +import org.omg.CORBA.LocalObject; +import org.omg.CORBA.Policy; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; + + +/** + * @author caceres + * + */ +public class UnsuportedPolicy extends LocalObject + implements Policy +{ + + int type; + Encapsulation value; + + + public int policy_type() + { + return type; + } + + + public Policy copy() + { + return this; + } + + + public void destroy() + { + + } + + public void partialRead(CDRInputStream input) { + value = input.readEncapsulation(); + + } + + public void write(CDROutputStream output) + { + output.write_ulong(type); + if(value != null) { + output.writeEncapsulation(value); + } + } + + + +} diff --git a/source/es/tid/TIDorbj/core/security/.svn/all-wcprops b/source/es/tid/TIDorbj/core/security/.svn/all-wcprops new file mode 100644 index 0000000..e08bbee --- /dev/null +++ b/source/es/tid/TIDorbj/core/security/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 83 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/security +END +CSIComponent.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/security/CSIComponent.java +END diff --git a/source/es/tid/TIDorbj/core/security/.svn/entries b/source/es/tid/TIDorbj/core/security/.svn/entries new file mode 100644 index 0000000..2cf2282 --- /dev/null +++ b/source/es/tid/TIDorbj/core/security/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +478 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/security +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +CSIComponent.java +file + + + + +2011-03-27T14:11:14.000000Z +8372013974a27408a1489a9a4b94027a +2011-04-29T14:42:47.025714Z +478 +avega + + + + + + + + + + + + + + + + + + + + + +11798 + diff --git a/source/es/tid/TIDorbj/core/security/.svn/text-base/CSIComponent.java.svn-base b/source/es/tid/TIDorbj/core/security/.svn/text-base/CSIComponent.java.svn-base new file mode 100644 index 0000000..1858deb --- /dev/null +++ b/source/es/tid/TIDorbj/core/security/.svn/text-base/CSIComponent.java.svn-base @@ -0,0 +1,335 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.security; + +import java.io.StringWriter; +import java.io.PrintWriter; +import java.lang.Byte; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; +import org.omg.CSIIOP.CompoundSecMechList; +import org.omg.CSIIOP.CompoundSecMechListHelper; +import org.omg.CSIIOP.ServiceConfiguration; +import org.omg.CSI.ITTAbsent; +import org.omg.CSI.ITTAnonymous; +import org.omg.CSI.ITTPrincipalName; +import org.omg.CSI.ITTX509CertChain; +import org.omg.CSI.ITTDistinguishedName; + + + +/** + * CSIComponent data struct defined in the GIOP Module. + * + * @autor + * @version 1.0 + */ +public class CSIComponent extends TaggedComponent +{ + + private CompoundSecMechList m_mec_list; + + public CSIComponent() + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = new CompoundSecMechList(); + } + + public CSIComponent(CompoundSecMechList mec_list) + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = mec_list; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + CompoundSecMechListHelper.write(out, m_mec_list); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_mec_list = CompoundSecMechListHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("stateful: "); + print_buffer.print(m_mec_list.stateful); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + for (int i = 0; i < m_mec_list.mechanism_list.length; i++) { + print_buffer.print("mechanism: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" transport_mech: " + + CSIComponent.print_TransportMechTag( + m_mec_list.mechanism_list[i].transport_mech.tag)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" as_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" client_authentication_mech: " + + print_OID(m_mec_list.mechanism_list[i].as_context_mech.client_authentication_mech)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_name: " + + print_GSS_NT_ExportedName( + m_mec_list.mechanism_list[i].as_context_mech.target_name)); + + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" sas_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" privilege_authorities: " + + CSIComponent.print_PrivilegeAuthorities( + m_mec_list.mechanism_list[i].sas_context_mech.privilege_authorities)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_naming_mechanims: " + + print_OIDList( + m_mec_list.mechanism_list[i].sas_context_mech.supported_naming_mechanisms)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_identity_types: " + + print_IdentityTokenTypes( + m_mec_list.mechanism_list[i].sas_context_mech.supported_identity_types)); + } + return buffer.toString(); + } + + + + public static String print_PrivilegeAuthorities(ServiceConfiguration[] privilege_authorities) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < privilege_authorities.length; i++) { + print_buffer.print("\n \t \t \t sintax: " + privilege_authorities[i].syntax); + print_buffer.print("\n \t \t \t name: " + privilege_authorities[i].name); + } + + return buffer.toString(); + } + + public static String print_OID(byte[] oid) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t OID: "); + + for (int i = 0; i < oid.length; i++) { + //print_buffer.print(oid[i]); + String hex = Integer.toHexString(oid[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + } + + return buffer.toString(); + } + + + public static String print_OIDList(byte[][] oid_list) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < oid_list.length; i++) { + print_buffer.print(print_OID(oid_list[i])); + } + + return buffer.toString(); + } + + public static String print_IdentityTokenTypes(int type) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(type) { + case org.omg.CSI.ITTAbsent.value: + print_buffer.print("\n \t \t \t Absent"); + break; + case org.omg.CSI.ITTAnonymous.value: + print_buffer.print("\n \t \t \t Anonymous"); + break; + case org.omg.CSI.ITTPrincipalName.value: + print_buffer.print("\n \t \t \t PrincipalName"); + break; + case org.omg.CSI.ITTX509CertChain.value: + print_buffer.print("\n \t \t \t ITTX509CertChain"); + break; + case org.omg.CSI.ITTDistinguishedName.value: + print_buffer.print("\n \t \t \t ITTDistinguishedName"); + break; + } + return buffer.toString(); + } + + + public static String print_TransportMechTag(int tag) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(tag) { + case org.omg.IOP.TAG_SSL_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_SSL_SEC_TRANS"); + break; + case org.omg.IOP.TAG_TLS_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_TLS_SEC_TRANS"); + break; + case org.omg.IOP.TAG_NULL_TAG.value: + print_buffer.print("\n \t \t \t TAG_NULL_TAG"); + break; + } + return buffer.toString(); + } + + + public static String print_GSS_NT_ExportedName(byte[] name) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t "); + + for (int i = 0; i < name.length; i++) { + //print_buffer.print(name[i]); + + String hex = Integer.toHexString(name[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + + } + + return buffer.toString(); + + } + + +} diff --git a/source/es/tid/TIDorbj/core/security/CSIComponent.java b/source/es/tid/TIDorbj/core/security/CSIComponent.java new file mode 100644 index 0000000..1858deb --- /dev/null +++ b/source/es/tid/TIDorbj/core/security/CSIComponent.java @@ -0,0 +1,335 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 397 $ +* Date: $Date: 2009-06-18 08:42:11 +0200 (Thu, 18 Jun 2009) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.security; + +import java.io.StringWriter; +import java.io.PrintWriter; +import java.lang.Byte; + +import es.tid.TIDorbj.core.ConfORB; +import es.tid.TIDorbj.core.iop.TaggedComponent; +import es.tid.TIDorbj.core.comm.ssliop.SSLComponent; +import org.omg.IOP.TAG_CSI_SEC_MECH_LIST; +import org.omg.CSIIOP.CompoundSecMechList; +import org.omg.CSIIOP.CompoundSecMechListHelper; +import org.omg.CSIIOP.ServiceConfiguration; +import org.omg.CSI.ITTAbsent; +import org.omg.CSI.ITTAnonymous; +import org.omg.CSI.ITTPrincipalName; +import org.omg.CSI.ITTX509CertChain; +import org.omg.CSI.ITTDistinguishedName; + + + +/** + * CSIComponent data struct defined in the GIOP Module. + * + * @autor + * @version 1.0 + */ +public class CSIComponent extends TaggedComponent +{ + + private CompoundSecMechList m_mec_list; + + public CSIComponent() + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = new CompoundSecMechList(); + } + + public CSIComponent(CompoundSecMechList mec_list) + { + super(TAG_CSI_SEC_MECH_LIST.value); + m_mec_list = mec_list; + } + + public void write(es.tid.TIDorbj.core.cdr.CDROutputStream out) + { + out.write_ulong(m_tag); + + // enter ecapsulation + + out.enterEncapsulation(); + + CompoundSecMechListHelper.write(out, m_mec_list); + + out.exitEncapsulation(); + } + + public void partialRead(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.enterEncapsulation(); + m_mec_list = CompoundSecMechListHelper.read(input); + input.exitEncapsulation(); + } + + public String toString() + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print("stateful: "); + print_buffer.print(m_mec_list.stateful); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + for (int i = 0; i < m_mec_list.mechanism_list.length; i++) { + print_buffer.print("mechanism: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" transport_mech: " + + CSIComponent.print_TransportMechTag( + m_mec_list.mechanism_list[i].transport_mech.tag)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" as_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].as_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" client_authentication_mech: " + + print_OID(m_mec_list.mechanism_list[i].as_context_mech.client_authentication_mech)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_name: " + + print_GSS_NT_ExportedName( + m_mec_list.mechanism_list[i].as_context_mech.target_name)); + + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" sas_context_mech: "); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_supports: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_supports)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" target_requires: " + + SSLComponent.print_AssociationOptions( + m_mec_list.mechanism_list[i].sas_context_mech.target_requires)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" privilege_authorities: " + + CSIComponent.print_PrivilegeAuthorities( + m_mec_list.mechanism_list[i].sas_context_mech.privilege_authorities)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_naming_mechanims: " + + print_OIDList( + m_mec_list.mechanism_list[i].sas_context_mech.supported_naming_mechanisms)); + print_buffer.print('\n'); + print_buffer.print('\t'); + print_buffer.print('\t'); + print_buffer.print(" supported_identity_types: " + + print_IdentityTokenTypes( + m_mec_list.mechanism_list[i].sas_context_mech.supported_identity_types)); + } + return buffer.toString(); + } + + + + public static String print_PrivilegeAuthorities(ServiceConfiguration[] privilege_authorities) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < privilege_authorities.length; i++) { + print_buffer.print("\n \t \t \t sintax: " + privilege_authorities[i].syntax); + print_buffer.print("\n \t \t \t name: " + privilege_authorities[i].name); + } + + return buffer.toString(); + } + + public static String print_OID(byte[] oid) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t OID: "); + + for (int i = 0; i < oid.length; i++) { + //print_buffer.print(oid[i]); + String hex = Integer.toHexString(oid[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + } + + return buffer.toString(); + } + + + public static String print_OIDList(byte[][] oid_list) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + for (int i = 0; i < oid_list.length; i++) { + print_buffer.print(print_OID(oid_list[i])); + } + + return buffer.toString(); + } + + public static String print_IdentityTokenTypes(int type) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(type) { + case org.omg.CSI.ITTAbsent.value: + print_buffer.print("\n \t \t \t Absent"); + break; + case org.omg.CSI.ITTAnonymous.value: + print_buffer.print("\n \t \t \t Anonymous"); + break; + case org.omg.CSI.ITTPrincipalName.value: + print_buffer.print("\n \t \t \t PrincipalName"); + break; + case org.omg.CSI.ITTX509CertChain.value: + print_buffer.print("\n \t \t \t ITTX509CertChain"); + break; + case org.omg.CSI.ITTDistinguishedName.value: + print_buffer.print("\n \t \t \t ITTDistinguishedName"); + break; + } + return buffer.toString(); + } + + + public static String print_TransportMechTag(int tag) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + switch(tag) { + case org.omg.IOP.TAG_SSL_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_SSL_SEC_TRANS"); + break; + case org.omg.IOP.TAG_TLS_SEC_TRANS.value: + print_buffer.print("\n \t \t \t TAG_TLS_SEC_TRANS"); + break; + case org.omg.IOP.TAG_NULL_TAG.value: + print_buffer.print("\n \t \t \t TAG_NULL_TAG"); + break; + } + return buffer.toString(); + } + + + public static String print_GSS_NT_ExportedName(byte[] name) { + + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + print_buffer.print("\n \t \t \t "); + + for (int i = 0; i < name.length; i++) { + //print_buffer.print(name[i]); + + String hex = Integer.toHexString(name[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + print_buffer.print("0" + hex); + break; + case 2: + print_buffer.print(hex); + break; + default: + print_buffer.print(hex.substring(hlength-2, hlength)); + } + print_buffer.print(" "); + + } + + return buffer.toString(); + + } + + +} diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/all-wcprops b/source/es/tid/TIDorbj/core/typecode/.svn/all-wcprops new file mode 100644 index 0000000..3b6114f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/all-wcprops @@ -0,0 +1,149 @@ +K 25 +svn:wc:ra_dav:version-url +V 83 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode +END +WStringTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/WStringTypeCode.java +END +EnumTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/EnumTypeCode.java +END +SequenceTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/SequenceTypeCode.java +END +TypeCodeDumper.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeDumper.java +END +TypeCodeImpl.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeImpl.java +END +TransparentAliasTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.java +END +TypeCodeMarshaler.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.java +END +TypeCodeFactory.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeFactory.java +END +TypeCodeHandler.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeHandler.java +END +ValueBoxTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.java +END +ArrayTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ArrayTypeCode.java +END +AbstractInterfaceTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.java +END +NativeTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/NativeTypeCode.java +END +StructTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/StructTypeCode.java +END +FixedTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/FixedTypeCode.java +END +ObjectRefTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.java +END +TypeCodeCache.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/TypeCodeCache.java +END +RecursiveTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.java +END +StringTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/StringTypeCode.java +END +ValueTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ValueTypeCode.java +END +AliasTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/AliasTypeCode.java +END +ComplexTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ComplexTypeCode.java +END +ExceptionTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.java +END +UnionTypeCode.java +K 25 +svn:wc:ra_dav:version-url +V 102 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode/UnionTypeCode.java +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/entries b/source/es/tid/TIDorbj/core/typecode/.svn/entries new file mode 100644 index 0000000..ecbf1de --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/entries @@ -0,0 +1,844 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/typecode +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2005-12-19T07:58:21.000000Z +2 +caceres + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TypeCodeCache.java +file + + + + +2009-05-27T12:24:01.000000Z +082576893a3db275a679e53c17dcc17d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3360 + +ObjectRefTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +dfc439005b9d609ebde0405be9271d47 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6585 + +EnumTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +622c928d6a0e494cc78d131ec136ca8d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +10926 + +StringTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +3306cbdd9b8876937c14a25ca7b1fce3 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7939 + +RecursiveTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +00c6942f58aafe1a070e996611bd5e46 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5546 + +ComplexTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +440a9c3065ad2482e0434becfec5eede +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9167 + +TypeCodeFactory.java +file + + + + +2009-05-27T12:24:01.000000Z +28bcc6f03b12e9de37931003b27febd8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8051 + +SequenceTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +e878b117a6cfe957c9af4feb0050e729 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9192 + +TransparentAliasTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +c88ec4d549343e47247c6f3219633569 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4647 + +ValueTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +57376b831baeb131a1a3006307554f88 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +13504 + +TypeCodeHandler.java +file + + + + +2009-05-27T12:24:01.000000Z +c7eb26f453fc0b23384cc02b16d95a1e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1945 + +ArrayTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +07a3feb23475c39cf7ceba18010da5fe +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9966 + +TypeCodeMarshaler.java +file + + + + +2009-05-27T12:24:01.000000Z +7379f068b6cf833daeb868e152cdb27e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +17033 + +StructTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +b3c4ddaa32aab64977374363c28ecf15 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +13516 + +AbstractInterfaceTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +bf01330796c88af41492b6830455d141 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3682 + +ValueBoxTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +ad11c736525defb3cfc9fb74d98231fb +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7999 + +NativeTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +a35d518453b7848079e094bf71c00b3d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2054 + +UnionTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +6426ede7d12cd54e20a2ff409a4fd14c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +18519 + +AliasTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +c0a057e7a50af4fc5ba235507acd062d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8336 + +TypeCodeDumper.java +file + + + + +2009-05-27T12:24:01.000000Z +852e14885ff77bebf4bc0b2f2fc7964a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6447 + +WStringTypeCode.java +file + + + + +2009-05-27T12:24:01.000000Z +6d98a002040d5f6c0a20dc33370d6243 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6236 + +ExceptionTypeCode.java +file + + + + +2009-05-27T12:24:02.000000Z +61d78c87318f529693a4005217c0201c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7767 + +FixedTypeCode.java +file + + + + +2009-05-27T12:24:02.000000Z +10dc0ce0769d1094cd23905f1cd698b6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8391 + +TypeCodeImpl.java +file + + + + +2009-05-27T12:24:02.000000Z +3ac39734db70dd985dbefbc410294c7a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +21293 + diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AbstractInterfaceTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AbstractInterfaceTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AbstractInterfaceTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AliasTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AliasTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/AliasTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ArrayTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ArrayTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ArrayTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ComplexTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ComplexTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ComplexTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/EnumTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/EnumTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/EnumTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ExceptionTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ExceptionTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ExceptionTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/FixedTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/FixedTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/FixedTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/NativeTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/NativeTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/NativeTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ObjectRefTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ObjectRefTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ObjectRefTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/RecursiveTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/RecursiveTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/RecursiveTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/SequenceTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/SequenceTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/SequenceTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StringTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StringTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StringTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StructTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StructTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/StructTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TransparentAliasTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TransparentAliasTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TransparentAliasTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeCache.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeCache.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeCache.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeDumper.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeDumper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeDumper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeFactory.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeFactory.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeFactory.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeHandler.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeHandler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeHandler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeImpl.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeMarshaler.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeMarshaler.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/TypeCodeMarshaler.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/UnionTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/UnionTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/UnionTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueBoxTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueBoxTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueBoxTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/ValueTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/WStringTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/WStringTypeCode.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/prop-base/WStringTypeCode.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AbstractInterfaceTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AbstractInterfaceTypeCode.java.svn-base new file mode 100644 index 0000000..9b56763 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AbstractInterfaceTypeCode.java.svn-base @@ -0,0 +1,120 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The AbstractInterfaceTypeCode class represents a + * TypeCode object which is associated with an IDL abstract + * interface. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AbstractInterfaceTypeCode extends ComplexTypeCode +{ + + public AbstractInterfaceTypeCode() + { + super(TCKind.tk_abstract_interface); + } + + public AbstractInterfaceTypeCode(String repositoryId, String name) + { + super(TCKind.tk_abstract_interface, repositoryId, name); + } + + /** + * Dumps the description of a given ComplexTypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a ComplexTypeCode. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[TYPECODE]{abstract interface: "); + ComplexTypeCode.dumpParams(type, output); + output.print('}'); + } + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + input.read_abstract_interface(); + return true; + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean + dump_value(TypeCode type, + org.omg.CORBA_2_3.portable.InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + java.lang.Object obj = input.read_abstract_interface(); + + dump(type, output); + output.print("[VALUE] {--}"); + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AliasTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AliasTypeCode.java.svn-base new file mode 100644 index 0000000..3f029d1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/AliasTypeCode.java.svn-base @@ -0,0 +1,266 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The AliasTypeCode class represents a TypeCode + * object which is associated with an IDL typedef. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AliasTypeCode extends ComplexTypeCode +{ + + protected TypeCode _type; + + public AliasTypeCode() + { + super(TCKind.tk_alias); + _type = null; + } + + public AliasTypeCode(String repositoryId, String name, TypeCode type) + { + super(TCKind.tk_alias, repositoryId, name); + _type = type; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + + if (!super.equal(tc)) + return false; + try { + return _type.equal(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + return _type.equivalent(tc); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type; + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + _type = input.read_TypeCode(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValue(type.content_type(), input); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an alias type + */ + + public static void write_params(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + output.write_TypeCode(type.content_type()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshal_value(TypeCode type, InputStream input, + OutputStream output) + { + try { + TypeCodeMarshaler.remarshalValue(type.content_type(), + input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an alias type. + */ + + public static boolean values_equal(org.omg.CORBA.TypeCode type, + InputStream input_a, + InputStream input_b) + { + try { + return TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a ComplexTypeCode. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{typedef: "); + ComplexTypeCode.dumpParams(type, output); + output.print(" , type= "); + TypeCodeDumper.dump(type.content_type(), output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an alias type + * @return true if if has been possible dump the value. + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + + try { + output.print("[VALUE]{typedef "); + output.print(type.name()); + output.print(": "); + TypeCodeDumper.dumpValue(type.content_type(), input, output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ArrayTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ArrayTypeCode.java.svn-base new file mode 100644 index 0000000..cec2cfa --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ArrayTypeCode.java.svn-base @@ -0,0 +1,321 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ArrayTypeCode class represents a TypeCode + * object which is associated with an IDL array. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ArrayTypeCode extends TypeCodeImpl +{ + + protected TypeCode _element_type; + + protected int _length; + + public ArrayTypeCode() + { + super(TCKind.tk_array); + _element_type = null; + _length = 0; + } + + public ArrayTypeCode(TypeCode element_type, int length) + { + super(TCKind.tk_array); + _element_type = element_type; + _length = length; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (_element_type.equal(tc.content_type()) + && (_length == tc.length())); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _length; + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _element_type; + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public static void skip_params(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int length = input.read_ulong(); + input.skip(length); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + input.enterEncapsulation(); + + _element_type = input.read_TypeCode(); + _length = input.read_ulong(); + + input.exitEncapsulation(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValueArray(type.content_type(), input, + type.length()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + // write TCKind + output.write_long(type.kind().value()); + + // copy the output for insert the encapsulation length later + + CDROutputStream encapsulation = output.copy(); + + // marshalling of params + + output.enterEncapsulation(); + + output.write_TypeCode(type.content_type()); + output.write_ulong(type.length()); + + output.exitEncapsulation(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void remarshal_value(TypeCode type, InputStream input, + OutputStream output) + { + try { + int length = type.length(); + for (int i = 0; i < length; i++) + TypeCodeMarshaler.remarshalValue(type.content_type(), input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an array type. + */ + + public static boolean values_equal(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int length = type.length(); + + for (int i = 0; i < length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an array type. + */ + + public static void dump(org.omg.CORBA.TypeCode type, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{"); + TypeCodeDumper.dump(type.content_type(), output); + output.print('['); + output.print(type.length()); + output.print("]}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Array type expected to invoke length()" + + "and content_type()."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an array type + * @return true if if has been possible dump the value. + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int length = type.length(); + org.omg.CORBA.TypeCode elements_type = type.content_type(); + output.print("[VALUE]{"); + for (int i = 0; i < length; i++) { + output.print('('); + output.print(i); + output.print(") "); + if (!TypeCodeDumper.dumpValue(elements_type, input, output)) + return false; + output.print(" | "); + } + + output.print(" END_ARRAY-}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Array type expected to invoke length()" + + "and content_type()."); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ComplexTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ComplexTypeCode.java.svn-base new file mode 100644 index 0000000..b96cf9c --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ComplexTypeCode.java.svn-base @@ -0,0 +1,328 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.cdr.PointerCDR; + +/** + * The ComplexTypeCode class is base class the base for + * constructing complex TypeCode classes as + * StructTypeCode,AliasTypeCode, etc. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ComplexTypeCode extends TypeCodeImpl +{ + + protected String m_repository_id; + + protected String m_name; + + protected Encapsulation m_encapsuled_params; + + public ComplexTypeCode(TCKind type) + { + super(type); + m_repository_id = null; + m_name = null; + m_encapsuled_params = null; + } + + public ComplexTypeCode(TCKind type, String repositoryId, String name) + { + super(type); + m_repository_id = repositoryId; + m_name = name; + m_encapsuled_params = null; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (m_repository_id.equals(tc.id()) + && m_name.equals(tc.name())); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + } + + + + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_repository_id; + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_name; + } + + public int hashCode() + { + return m_repository_id.hashCode(); + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + output.write_string(type.id()); + output.write_string(type.name()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("TypeCode has not params"); + } + } + + public void readParams(CDRInputStream input) + { + m_repository_id = input.read_string(); + m_name = input.read_string(); + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int length = input.read_ulong(); + input.skip(length); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + CDRInputStream encap_input = input.copy(); + + input.enterEncapsulation(); + + readParams(input); + + if (!input.getContextCDR().hasExternalIndirections()) { + m_encapsuled_params = encap_input.readEncapsulation(); + } + + encap_input = null; + + input.exitEncapsulation(); + + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a complex type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + // views if the typecode has been marshaled before + + PointerCDR previous_position = null; + + // "Indirections are not "freestanding", but only exist inside some + // other encoded TypeCode + + if (!output.getContextCDR().isRootContext()) { + + try { + previous_position = output.getContextCDR() + .lookupPosition(type.id()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("type.id() fails."); + } + } + + if (previous_position != null) { // marshal indirection + + output.writeIndirection(previous_position); + return; + } + + // aligns to get the typeCode position + + output.alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + PointerCDR typecode_position; + + typecode_position = output.getPointer(); + + try { + // saves the typecode position + output.getContextCDR().putObject(type.id(), typecode_position); + } + catch (BadKind bk) {} + + // write the tc_kind value and un + + output.write_long(type.kind().value()); + + // if the typecode has a copy of the params marshaled write its + // encapsulation + if (type instanceof ComplexTypeCode) { + + synchronized (type) { + // esto se debe cambiar a una tabla de typecodes para tratar + // typecodes de + // otros ORBs + Encapsulation encap = + ((ComplexTypeCode) type).m_encapsuled_params; + + if (encap != null) { + output.writeEncapsulation(encap); + return; + } + + // create input stream for save the encapsualation + + boolean read_encapsulation = false; + + CDRInputStream encapsulation_input; + + encapsulation_input = output.inputStreamAtThisPosition(); + + // marshalling of params + + output.enterEncapsulation(); + + TypeCodeMarshaler.writeParams(type, output); + + read_encapsulation = !output.getContextCDR() + .hasExternalIndirections(); + + output.exitEncapsulation(); + + // if the typecode can be saved, because it does not have any + // indirection out + // of the scope of the encapsulation, save it + + if (read_encapsulation) + ((ComplexTypeCode) type).m_encapsuled_params = + encapsulation_input.readEncapsulation(); + + try { + encapsulation_input.close(); + } + catch (Exception e) {} + } + + return; + + } + + output.enterEncapsulation(); + + TypeCodeMarshaler.writeParams(type, output); + + output.exitEncapsulation(); + + } + + /** + * Dumps the description of a given ComplexTypeCode. Fails if it is not + * overriden by a child class. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Dumps the parameters description of a a given complex TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the value will be dumped + */ + + protected static void dumpParams(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("repositoryId= "); + output.print(type.id()); + output.print(", name="); + output.print(type.name()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Complex type expected."); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/EnumTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/EnumTypeCode.java.svn-base new file mode 100644 index 0000000..1a0c8b0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/EnumTypeCode.java.svn-base @@ -0,0 +1,363 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The EnumTypeCode class represents a TypeCode + * object which is associated with an IDL enum. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class EnumTypeCode extends ComplexTypeCode +{ + + protected String[] m_members; + + public EnumTypeCode() + { + super(TCKind.tk_enum); + m_members = null; + + } + + public EnumTypeCode(String id, String name, String[] members) + { + super(TCKind.tk_enum, id, name); + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!m_members[i].equals(tc.member_name(i))) + return false; + } + // all rigth + return true; + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!m_members[i].equals(tc.member_name(i))) + return false; + } + // all rigth + return true; + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index]; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + int length = input.read_ulong(); + + m_members = new String[length]; + for (int i = 0; i < length; i++) + m_members[i] = input.read_string(); + + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipUlong(); + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an enum type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + ComplexTypeCode.writeParams(type, output); + + try { + + int length = type.member_count(); + + output.write_ulong(length); + for (int i = 0; i < length; i++) + output.write_string(type.member_name(i)); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an enum type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + int value = input.read_ulong(); + + try { + + if (value >= type.member_count()) + throw new MARSHAL("Enum discriminator value out of range."); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + + output.write_ulong(value); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an alias type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int value = input_a.read_ulong(); + if (value >= type.member_count()) + throw new MARSHAL("Enum discriminator value out of range."); + + return value == input_b.read_ulong(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + + output.print("[TYPECODE]{enum "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + int length = type.member_count(); + + output.print(type.member_name(0)); + for (int i = 1; i < length; i++) { + output.print(" ,"); + output.print(type.member_name(i)); + } + output.print("} }"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an enum type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{enum "); + output.print(type.id()); + output.print(": "); + output.print(input.read_ulong()); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ExceptionTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ExceptionTypeCode.java.svn-base new file mode 100644 index 0000000..84dca9b --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ExceptionTypeCode.java.svn-base @@ -0,0 +1,237 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The ExceptionTypeCode class represents a TypeCode + * object which is associated with an IDL exception. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ExceptionTypeCode extends StructTypeCode +{ + + public ExceptionTypeCode() + { + m_kind = TCKind.tk_except; + } + + public ExceptionTypeCode(String repositoryId, String name, + org.omg.CORBA.StructMember[] members) + { + super(repositoryId, name, members); + m_kind = TCKind.tk_except; + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + // skip the id + input.skipString(); + // skip the members + return StructTypeCode.skipValue(type, input); + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a struct type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + // exception id + output.write_string(input.read_string()); + StructTypeCode.remarshalValue(type, input, output); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a struct type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + if (input_a.read_string().equals(input_b.read_string())) + return StructTypeCode.valuesEqual(type, input_a, input_b); + else + return false; + + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a exception type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[TYPECODE]{exception ("); + output.print(member_length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < member_length; i++) { + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bds.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an exception type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[VALUE]{exception "); + output.print(type.name()); + output.print(": "); + + output.print("(exception id)"); + output.print(input.read_string()); + output.print(" - "); + + for (int i = 0; i < member_length; i++) { + output.print('('); + output.print(i); + output.print(") "); + output.print(type.member_name(i)); + output.print(": "); + if (!TypeCodeDumper.dumpValue(type.member_type(i), input, + output)) + return false; + output.print(" | "); + } + output.print(" END_STRUCT-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bds.toString()); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/FixedTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/FixedTypeCode.java.svn-base new file mode 100644 index 0000000..b4ebc5f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/FixedTypeCode.java.svn-base @@ -0,0 +1,277 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The FixedTypeCode class represents a TypeCode + * object which is associated with an IDL fixed. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class FixedTypeCode extends TypeCodeImpl +{ + + protected short m_digits; + + protected short m_scale; + + public FixedTypeCode() + { + super(TCKind.tk_fixed); + } + + public FixedTypeCode(short digits, short scale) + { + super(TCKind.tk_fixed); + this.m_digits = digits; + this.m_scale = scale; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + try { + return super.equal(tc) && (m_digits == tc.fixed_digits()) + && (m_scale == tc.fixed_scale()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_digits; + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_scale; + } + + //TIDORB operations + + public static int valueLength(TypeCode type) + { + try { + int fix_digits = type.fixed_digits(); + + return (fix_digits + (fix_digits % 2)) / 2; //it must have a odd + // number of octets + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operation fixed_digits()."); + } + } + + public boolean isSimple() + { + return false; + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUshort(); + input.skipShort(); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_digits = input.read_ushort(); + m_scale = input.read_short(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + int length = valueLength(type); + input.skipOctetArray(length); + return true; + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a fixed type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + output.write_long(type.kind().value()); + output.write_ushort(type.fixed_digits()); + output.write_short(type.fixed_scale()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operations."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a fixed type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + int length = valueLength(type); + for (int i = 0; i < length; i++) + output.write_octet(input.read_octet()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a fixed type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + int length = valueLength(type); + for (int i = 0; i < length; i++) + if (input_a.read_octet() != input_b.read_octet()) + return false; + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a fixed type. + */ + + public static void dump(org.omg.CORBA.TypeCode type, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{fixed<"); + output.print(type.fixed_digits()); + output.print(','); + output.print(type.fixed_scale()); + output.print(">}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operations."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a fixed type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[VALUE]{fixed: "); + int length = valueLength(type); + + for (int i = 0; i < length; i++) + output.print(input.read_octet()); + + output.print("}"); + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/NativeTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/NativeTypeCode.java.svn-base new file mode 100644 index 0000000..922850e --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/NativeTypeCode.java.svn-base @@ -0,0 +1,68 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; + +/** + * The NativeTypeCode class represents a TypeCode + * object which is associated with an IDL native. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class NativeTypeCode extends ComplexTypeCode +{ + + public NativeTypeCode() + { + super(TCKind.tk_native); + } + + public NativeTypeCode(String repositoryId, String name) + { + super(TCKind.tk_native, repositoryId, name); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ObjectRefTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ObjectRefTypeCode.java.svn-base new file mode 100644 index 0000000..db00e39 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ObjectRefTypeCode.java.svn-base @@ -0,0 +1,211 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +/** + * The ArrayTypeCode class represents a TypeCode + * object which is associated with an IDL reference. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ObjectRefTypeCode extends ComplexTypeCode +{ + + public ObjectRefTypeCode() + { + super(TCKind.tk_objref); + } + + public ObjectRefTypeCode(String repositoryId, String name) + { + super(TCKind.tk_objref, repositoryId, name); + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[TYPECODE]{obj_reference:"); + ComplexTypeCode.dumpParams(type, output); + output.print('}'); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + // skip the IOR + IOR.skip(input); + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + + output.write_Object(input.read_Object()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an array type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + //compare two objects + return input_a.read_Object()._is_equivalent(input_b.read_Object()); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an array type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + IOR ior = null; + + if (input instanceof CDRInputStream) { + ior = new DefaultIOR(); + ior.read((CDRInputStream) input); + } else { + org.omg.CORBA.Object obj = input.read_Object(); + String str = input.orb().object_to_string(obj); + ior = DefaultIOR.fromString(null, str); + } + + try { + + int size = ior.memberCount(); + + if (size == 0) { + output.print("[VALUE]{IOR: nil}"); + } else { + output.print("[VALUE]{IOR Repository Id: "); + output.print(ior.getTypeId()); + output.print(" ("); + output.print(size); + output.print(" Profiles )"); + + for (int i = 0; i < size; i++) { + output.print(size); + output.print(" | "); + output.print(ior.getProfile(i).toString()); + } + + output.print("-}"); + + } + } + catch (Exception e) { + return false; + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/RecursiveTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/RecursiveTypeCode.java.svn-base new file mode 100644 index 0000000..f81d7b9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/RecursiveTypeCode.java.svn-base @@ -0,0 +1,179 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.PointerCDR; + +/** + * The RecursiveTypeCode class represents a TypeCode + * object which is associated with an IDL recursion in a typecode definition. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class RecursiveTypeCode extends TypeCodeImpl +{ + + protected String m_repository_id; + + public RecursiveTypeCode() + { + m_repository_id = ""; + } + + public RecursiveTypeCode(String id) + { + //it is not a real typecode!!!! + m_repository_id = id; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (tc instanceof RecursiveTypeCode) + return m_repository_id.equals( + ((RecursiveTypeCode) tc).m_repository_id); + else + return false; + } + + //TIDORB operations + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a recursisve type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + PointerCDR previous_position = null; + + previous_position = output.getContextCDR() + .lookupPosition(type.id()); + + if (previous_position == null) + throw new MARSHAL("Invalid Recursive TypeCode: " + type.id() + + " is not yet marshaled."); + + output.writeIndirection(previous_position); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operations:" + + bk.toString()); + } + + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{obj_reference:"); + ComplexTypeCode.dumpParams(type.content_type(), output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operation:" + + bk.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("Indirection to " + type.id() + + "[CAN'T PROCESS MORE."); + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operation:" + + bk.toString()); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/SequenceTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/SequenceTypeCode.java.svn-base new file mode 100644 index 0000000..d41452f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/SequenceTypeCode.java.svn-base @@ -0,0 +1,275 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The SequenceTypeCode class represents a TypeCode + * object which is associated with an IDL sequence. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SequenceTypeCode extends ArrayTypeCode +{ + + public SequenceTypeCode() + { + m_kind = TCKind.tk_sequence; + } + + public SequenceTypeCode(TypeCode element_type, int length) + { + super(element_type, length); + m_kind = TCKind.tk_sequence; + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + + int length = input.read_ulong(); + + int type_length = type.length(); + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + "indicated in typecode."); + + return TypeCodeMarshaler.skipValueArray(type.content_type(), + input, + length); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a sequence type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + + int length = input.read_ulong(); + + int type_length = type.length(); + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + output.write_ulong(length); + + for (int i = 0; i < length; i++) + TypeCodeMarshaler.remarshalValue(type.content_type(), input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a sequence type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int a_length = input_a.read_ulong(); + int b_length = input_b.read_ulong(); + + if (a_length != b_length) + return false; + + int type_length = type.length(); + + if ((type_length > 0) && (a_length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + for (int i = 0; i < a_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length() " + + "and content_type()."); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a sequence type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{sequence "); + + output.print('<'); + + if (type.length() != 0) { + output.print(type.length()); + output.print(","); + } + TypeCodeDumper.dump(type.content_type(), output); + output.print('>'); + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length() " + + "and content_type()."); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a sequence type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int length = input.read_ulong(); + + int type_length = type.length(); + + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + output.print('['); + output.print(length); + output.print(" VALUES]"); + output.print('{'); + for (int i = 0; i < length; i++) { + output.print('('); + output.print(i); + output.print(") "); + if (!TypeCodeDumper.dumpValue(type.content_type(), + input, + output)) + return false; + output.print(" | "); + } + + output.print(" END_SEQUENCE-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StringTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StringTypeCode.java.svn-base new file mode 100644 index 0000000..d89714f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StringTypeCode.java.svn-base @@ -0,0 +1,270 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The StringTypeCode class represents a TypeCode + * object which is associated with an IDL string. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class StringTypeCode extends TypeCodeImpl +{ + + /** + * Max length of the string, or 0 if unbounded. + */ + + protected int m_length; + + public StringTypeCode() + { + super(TCKind.tk_string); + m_length = 0; + } + + public StringTypeCode(int length) + { + super(TCKind.tk_string); + m_length = length; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (m_length == tc.length()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_length; + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + m_length = input.read_ulong(); + + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + //skip length + input.skipUlong(); + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a string type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + output.write_long(type.kind().value()); + output.write_long(type.length()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a string type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + output.write_string(input.read_string()); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipString(); + return true; + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a string type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + return (input_a.read_string()).equals(input_b.read_string()); + } + + /** + * Dumps the description of a given string TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a string type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]{string"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in string operations:" + + bk.toString()); + } + + output.print('}'); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a string type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[VALUE]{string"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in string operations:" + + bk.toString()); + } + + output.print(": \""); + output.print(input.read_string()); + output.print("\"}"); + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StructTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StructTypeCode.java.svn-base new file mode 100644 index 0000000..73f0ca1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/StructTypeCode.java.svn-base @@ -0,0 +1,431 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.StructMember; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The StructTypeCode class represents a TypeCode + * object which is associated with an IDL struct. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class StructTypeCode extends ComplexTypeCode +{ + + protected StructMember[] m_members; + + public StructTypeCode() + { + super(TCKind.tk_struct); + m_members = null; + } + + public StructTypeCode(String repositoryId, String name, + StructMember[] members) + { + super(TCKind.tk_struct, repositoryId, name); + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (!(m_members[i].type.equal(tc.member_type(i)))) + return false; + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (!(m_members[i].type.equivalent(tc.member_type(i)))) + return false; + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + + int length = input.read_ulong(); + + m_members = new StructMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i] = new StructMember(); + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + int member_length = type.member_count(); + for (int i = 0; i < member_length; i++) { + if (!TypeCodeMarshaler.skipValue(type.member_type(i), input)) + return false; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a struct type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + + ComplexTypeCode.writeParams(type, output); + try { + int member_length = type.member_count(); + output.write_ulong(member_length); + for (int i = 0; i < member_length; i++) { + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a struct type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + TypeCodeMarshaler.remarshalValue(type.member_type(i), input, + output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a struct type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.member_type(i), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an struct type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[TYPECODE]{struct ("); + output.print(member_length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < member_length; i++) { + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a struct type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[VALUE]{struct "); + output.print(type.name()); + output.print(": "); + for (int i = 0; i < member_length; i++) { + output.print('('); + output.print(i); + output.print(") "); + output.print(type.member_name(i)); + output.print(": "); + if (!TypeCodeDumper.dumpValue(type.member_type(i), input, + output)) + return false; + output.print(" | "); + } + output.print(" END_STRUCT-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TransparentAliasTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TransparentAliasTypeCode.java.svn-base new file mode 100644 index 0000000..ccd1349 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TransparentAliasTypeCode.java.svn-base @@ -0,0 +1,173 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +public class TransparentAliasTypeCode extends AliasTypeCode +{ + + public TransparentAliasTypeCode() + { + super(); + } + + public TransparentAliasTypeCode(String repositoryId, String name, + TypeCodeImpl type) + { + super(repositoryId, name, type); + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + return _type.equal(tc); + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + return _type.equivalent(tc); + } + + public org.omg.CORBA.TypeCode get_compact_typecode() + { + return _type.get_compact_typecode(); + } + + public org.omg.CORBA.TCKind kind() + { + return _type.kind(); + } + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.id(); + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.name(); + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.member_count(); + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_name(index); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_type(index); + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_label(index); + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.discriminator_type(); + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.default_index(); + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.length(); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.content_type(); + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.fixed_digits(); + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.fixed_scale(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_visibility(index); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.type_modifier(); + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.concrete_base_type(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeCache.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeCache.java.svn-base new file mode 100644 index 0000000..d596182 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeCache.java.svn-base @@ -0,0 +1,116 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.UseTable; + +public class TypeCodeCache +{ + + protected UseTable m_table; + + public TypeCodeCache(int max) + { + m_table = new UseTable(max); + } + + public synchronized TypeCode find(String rep_id) + { + if (m_table.object_exist(rep_id)) { + TypeCodeHandler handler = (TypeCodeHandler) m_table.get(rep_id); + + m_table.use(rep_id); + return handler.getTypeCode(); + } + + return null; + } + + /** + * Tries to insert one TypeCode in the TypeCodeCache. + * + * @param type + * @return if there is also a TypeCode with the same id, returns the + * TypeCode cached otherwise, the same Typecode put. * + */ + public synchronized TypeCode put(TypeCode type) + { + String rep_id = null; + try { + rep_id = type.id(); + } + catch (BadKind badKind) { + throw new + INTERNAL("Only Complex Typecodes can be put in the cache"); + } + + if (rep_id == null) + throw new org.omg.CORBA.INTERNAL("Cannot get RepositoryId"); + + if (m_table.object_exist(rep_id)) { + m_table.use(rep_id); + return ((TypeCodeHandler) m_table.get(rep_id)).getTypeCode(); + } else { + try { + m_table.append(rep_id, new TypeCodeHandler(type)); + return type; + } + catch (FullUseTableException e) { + //ignore it + } + } + + return type; + + } + + public synchronized void destroy() + { + m_table = null; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeDumper.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeDumper.java.svn-base new file mode 100644 index 0000000..de82d45 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeDumper.java.svn-base @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; + +/** + * Dumps the description of a TypeCode and the marshaled value asociated to it. + *

+ * For example, a 5 long elements array typecode will be dumed as: + *

+ * [TYPECODE]{[TYPECODE]{long}[5]} + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class TypeCodeDumper +{ + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.dump(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.dump(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.dump(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.dump(type, output); + break; + case TCKind._tk_string: + StringTypeCode.dump(type, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.dump(type, output); + break; + case TCKind._tk_array: + ArrayTypeCode.dump(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.dump(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.dump(type, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.dump(type, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.dump(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.dump(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.dump(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.dump(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.dump(type, output); + break; + default: + TypeCodeImpl.dump(type, output); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.dumpValue(type, input, output); + case TCKind._tk_objref: + return ObjectRefTypeCode.dumpValue(type, input, output); + case TCKind._tk_union: + return UnionTypeCode.dumpValue(type, input, output); + case TCKind._tk_enum: + return EnumTypeCode.dumpValue(type, input, output); + case TCKind._tk_string: + return StringTypeCode.dumpValue(type, input, output); + case TCKind._tk_sequence: + return SequenceTypeCode.dumpValue(type, input, output); + case TCKind._tk_array: + return ArrayTypeCode.dump_value(type, input, output); + case TCKind._tk_alias: + return AliasTypeCode.dump_value(type, input, output); + case TCKind._tk_except: + return ExceptionTypeCode.dumpValue(type, input, output); + case TCKind._tk_wstring: + return WStringTypeCode.dumpValue(type, input, output); + case TCKind._tk_fixed: + return FixedTypeCode.dumpValue(type, input, output); + case TCKind._tk_value: + return ValueTypeCode.dump_value(type, input, output); + case TCKind._tk_value_box: + return ValueBoxTypeCode.dumpValue(type, input, output); + case TCKind._tk_native: + return NativeTypeCode.dump_value(type, input, output); + case TCKind._tk_abstract_interface: + return + AbstractInterfaceTypeCode.dump_value(type, input, output); + default: + return TypeCodeImpl.dump_value(type, input, output); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeFactory.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeFactory.java.svn-base new file mode 100644 index 0000000..0ca59c3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeFactory.java.svn-base @@ -0,0 +1,233 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; + +/** + * Factory of basic and complex typecodes. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class TypeCodeFactory +{ + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getBasicTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_null: + return tc_null; + case TCKind._tk_objref: + return tc_objref; + case TCKind._tk_any: + return tc_any; + case TCKind._tk_TypeCode: + return tc_TypeCode; + case TCKind._tk_void: + return tc_void; + case TCKind._tk_short: + return tc_short; + case TCKind._tk_long: + return tc_long; + case TCKind._tk_ushort: + return tc_ushort; + case TCKind._tk_ulong: + return tc_ulong; + case TCKind._tk_float: + return tc_float; + case TCKind._tk_double: + return tc_double; + case TCKind._tk_boolean: + return tc_boolean; + case TCKind._tk_char: + return tc_char; + case TCKind._tk_octet: + return tc_octet; + case TCKind._tk_longlong: + return tc_longlong; + case TCKind._tk_ulonglong: + return tc_ulonglong; + case TCKind._tk_longdouble: + return tc_longdouble; + case TCKind._tk_wchar: + return tc_wchar; + case TCKind._tk_string: + return tc_string; + case TCKind._tk_wstring: + return tc_wstring; + default: + return null; + } + } + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getComplexTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_struct: + return new StructTypeCode(); + case TCKind._tk_objref: + return new ObjectRefTypeCode(); + case TCKind._tk_union: + return new UnionTypeCode(); + case TCKind._tk_enum: + return new EnumTypeCode(); + case TCKind._tk_alias: + // return new TransparentAliasTypeCode(); + return new AliasTypeCode(); + // this is a transparent alias it will be the content type for user + case TCKind._tk_except: + return new ExceptionTypeCode(); + case TCKind._tk_value: + return new ValueTypeCode(); + case TCKind._tk_value_box: + return new ValueBoxTypeCode(); + case TCKind._tk_native: + return new NativeTypeCode(); + case TCKind._tk_abstract_interface: + return new AbstractInterfaceTypeCode(); + default: + return null; + } + } + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getSemiComplexTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_string: + return new StringTypeCode(); + case TCKind._tk_sequence: + return new SequenceTypeCode(); + case TCKind._tk_array: + return new ArrayTypeCode(); + case TCKind._tk_wstring: + return new WStringTypeCode(); + case TCKind._tk_fixed: + return new FixedTypeCode(); + default: + return null; + } + } + + public static final boolean isComplex(TCKind kind) + { + switch (kind.value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + return true; + default: + return false; + } + } + + public static final boolean isSemiComplex(TCKind kind) + { + + switch (kind.value()) + { + case TCKind._tk_sequence: + case TCKind._tk_string: + case TCKind._tk_array: + case TCKind._tk_wstring: + case TCKind._tk_fixed: + return true; + default: + return false; + } + } + + public static final TypeCodeImpl tc_null = new TypeCodeImpl(TCKind.tk_null); + + public static final TypeCodeImpl tc_objref = + new ObjectRefTypeCode("IDL:omg/org/CORBA/Object:1.0", + "Object"); + + public static final TypeCodeImpl tc_any = new TypeCodeImpl(TCKind.tk_any); + public static final TypeCodeImpl tc_TypeCode = + new TypeCodeImpl(TCKind.tk_TypeCode); + public static final TypeCodeImpl tc_void = new TypeCodeImpl(TCKind.tk_void); + public static final TypeCodeImpl tc_short = new TypeCodeImpl(TCKind.tk_short); + public static final TypeCodeImpl tc_long = new TypeCodeImpl(TCKind.tk_long); + public static final TypeCodeImpl tc_ushort = + new TypeCodeImpl(TCKind.tk_ushort); + public static final TypeCodeImpl tc_ulong = + new TypeCodeImpl(TCKind.tk_ulong); + public static final TypeCodeImpl tc_float = + new TypeCodeImpl(TCKind.tk_float); + public static final TypeCodeImpl tc_double = + new TypeCodeImpl(TCKind.tk_double); + public static final TypeCodeImpl tc_boolean = + new TypeCodeImpl(TCKind.tk_boolean); + public static final TypeCodeImpl tc_char = new TypeCodeImpl(TCKind.tk_char); + public static final TypeCodeImpl tc_octet = + new TypeCodeImpl(TCKind.tk_octet); + public static final TypeCodeImpl tc_longlong = + new TypeCodeImpl(TCKind.tk_longlong); + public static final TypeCodeImpl tc_ulonglong = + new TypeCodeImpl(TCKind.tk_ulonglong); + public static final TypeCodeImpl tc_longdouble = + new TypeCodeImpl(TCKind.tk_longdouble); + public static final TypeCodeImpl tc_wchar = + new TypeCodeImpl(TCKind.tk_wchar); + public static final StringTypeCode tc_string = + (StringTypeCode) getSemiComplexTypeCode(TCKind.tk_string); + public static final WStringTypeCode tc_wstring = + (WStringTypeCode) getSemiComplexTypeCode(TCKind.tk_wstring); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeHandler.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeHandler.java.svn-base new file mode 100644 index 0000000..598d6a4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeHandler.java.svn-base @@ -0,0 +1,66 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TypeCode; + +public class TypeCodeHandler + implements es.tid.TIDorbj.core.util.RemovableObject +{ + TypeCode m_typecode; + + public TypeCodeHandler(TypeCode tc) + { + m_typecode = tc; + } + + public TypeCode getTypeCode() + { + return m_typecode; + } + + public boolean canBeRemoved() + { + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeImpl.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeImpl.java.svn-base new file mode 100644 index 0000000..6e31c86 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeImpl.java.svn-base @@ -0,0 +1,655 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The TypeCode class represents a TypeCode object + * which is associated with an IDL of a basic type. It is the base class to the + * rest of simple and complex typecodes. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class TypeCodeImpl extends org.omg.CORBA.TypeCode +{ + + TCKind m_kind; + + boolean m_exhaustive_equal = false; + + protected TypeCodeImpl() + { + m_kind = TCKind.tk_null; + } + + public TypeCodeImpl(TCKind kind) + { + m_kind = kind; + } + + public void setExhaustiveEqual(boolean value) + { + m_exhaustive_equal = value; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + return (m_kind.value() == tc.kind().value()); + } + + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } else { + return equals(tc); + } + } + + public org.omg.CORBA.TypeCode get_compact_typecode() + { + return this; + } + + public org.omg.CORBA.TCKind kind() + { + return m_kind; + } + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + //TIDORB operations + + public boolean isSimple() + { + return true; + } + + /** + * TypeCode Marshaling. + */ + + public static void marshal(org.omg.CORBA.TypeCode type, + CDROutputStream output) + { + output.write_ulong(type.kind().value()); + } + + /** + * TypeCode parameters demarshaling. In this case, theres nothing to do. + * This operation will throw the INTERNAL exception. + */ + public void partialUnmarshal(CDRInputStream input) + { + throw new org.omg.CORBA.INTERNAL("Nothing to unmarshal", 0, + CompletionStatus.COMPLETED_NO); + } + + /** + * Skips the TypeCode parameters. + */ + + public static void skipParams(CDRInputStream input) + { + //nothing to do + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + input.skipShort(); + break; + case TCKind._tk_long: + input.skipLong(); + break; + case TCKind._tk_longlong: + input.skip_longlong(); + break; + case TCKind._tk_ushort: + input.skipUshort(); + break; + case TCKind._tk_ulong: + input.skipUlong(); + break; + case TCKind._tk_ulonglong: + input.skipUlonglong(); + break; + case TCKind._tk_float: + input.skipFloat(); + break; + case TCKind._tk_double: + input.skipDouble(); + break; + case TCKind._tk_boolean: + input.skipBoolean(); + break; + case TCKind._tk_char: + input.skipChar(); + break; + case TCKind._tk_wchar: + input.skipWchar(); + break; + case TCKind._tk_octet: + input.skipOctet(); + break; + case TCKind._tk_any: + input.skipAny(); + break; + case TCKind._tk_TypeCode: + input.skipTypeCode(); + break; + case TCKind._tk_Principal: + input.skipPrincipal(); + break; + case TCKind._tk_null: + case TCKind._tk_void: + break; + default: + throw new INTERNAL("TypeCode is not basic.", 0, + CompletionStatus.COMPLETED_NO); + } + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a basic type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + output.write_short(input.read_short()); + break; + case TCKind._tk_long: + output.write_long(input.read_long()); + break; + case TCKind._tk_longlong: + output.write_longlong(input.read_longlong()); + break; + case TCKind._tk_ushort: + output.write_ushort(input.read_ushort()); + break; + case TCKind._tk_ulong: + output.write_ulong(input.read_ulong()); + break; + case TCKind._tk_ulonglong: + output.write_ulonglong(input.read_ulonglong()); + break; + case TCKind._tk_float: + output.write_float(input.read_float()); + break; + case TCKind._tk_double: + output.write_double(input.read_double()); + break; + case TCKind._tk_boolean: + output.write_boolean(input.read_boolean()); + break; + case TCKind._tk_char: + output.write_char(input.read_char()); + break; + case TCKind._tk_wchar: + output.write_wchar(input.read_wchar()); + break; + case TCKind._tk_octet: + output.write_octet(input.read_octet()); + break; + case TCKind._tk_any: + output.write_any(input.read_any()); + break; + case TCKind._tk_objref: + output.write_Object(input.read_Object()); + break; + case TCKind._tk_string: + output.write_string(input.read_string()); + break; + case TCKind._tk_wstring: + output.write_wstring(input.read_wstring()); + break; + case TCKind._tk_TypeCode: + output.write_TypeCode(input.read_TypeCode()); + break; + case TCKind._tk_Principal: + output.write_Principal(input.read_Principal()); + break; + case TCKind._tk_null: + case TCKind._tk_void: + break; + default: + throw new org.omg.CORBA.INTERNAL("TypeCode is not basic", 0, + CompletionStatus.COMPLETED_NO); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a basic type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream a_input, InputStream b_input) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + return a_input.read_short() == b_input.read_short(); + case TCKind._tk_long: + return a_input.read_long() == b_input.read_long(); + case TCKind._tk_longlong: + return a_input.read_longlong() == b_input.read_longlong(); + case TCKind._tk_ushort: + return a_input.read_ushort() == b_input.read_ushort(); + case TCKind._tk_ulong: + return a_input.read_ulong() == b_input.read_ulong(); + case TCKind._tk_ulonglong: + return a_input.read_ulonglong() == b_input.read_ulonglong(); + case TCKind._tk_float: + return a_input.read_float() == b_input.read_float(); + case TCKind._tk_double: + return a_input.read_double() == b_input.read_double(); + case TCKind._tk_boolean: + return a_input.read_boolean() == b_input.read_boolean(); + case TCKind._tk_char: + return a_input.read_char() == b_input.read_char(); + case TCKind._tk_wchar: + return a_input.read_wchar() == b_input.read_wchar(); + case TCKind._tk_octet: + return a_input.read_octet() == b_input.read_octet(); + case TCKind._tk_any: + TypeCode tc_a, + tc_b; + tc_a = a_input.read_TypeCode(); + tc_b = b_input.read_TypeCode(); + if (tc_a.equal(tc_b)) + return TypeCodeMarshaler + .valuesEqual(tc_a, a_input, b_input); + else + return false; + case TCKind._tk_TypeCode: + return (a_input.read_TypeCode()).equal(b_input.read_TypeCode()); + case TCKind._tk_Principal: + return + (a_input.read_Principal()).equals(b_input.read_Principal()); + case TCKind._tk_null: + case TCKind._tk_void: + return true; + default: + throw new org.omg.CORBA.MARSHAL("TypeCode is not basic", 0, + CompletionStatus.COMPLETED_NO); + + } + + } + + /** + * Dumps the description of a given string TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a string type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]"); + switch (type.kind().value()) + { + case TCKind._tk_short: + output.print("{short}"); + break; + case TCKind._tk_long: + output.print("{long}"); + break; + case TCKind._tk_longlong: + output.print("{longlong}"); + break; + case TCKind._tk_ushort: + output.print("{ushort}"); + break; + case TCKind._tk_ulong: + output.print("{ulong}"); + break; + case TCKind._tk_ulonglong: + output.print("{ulonglong}"); + break; + case TCKind._tk_float: + output.print("{float}"); + break; + case TCKind._tk_double: + output.print("{double}"); + break; + case TCKind._tk_boolean: + output.print("{boolean}"); + break; + case TCKind._tk_char: + output.print("{char}"); + break; + case TCKind._tk_wchar: + output.print("{wchar}"); + break; + case TCKind._tk_octet: + output.print("{octet}"); + break; + case TCKind._tk_any: + output.print("{any}"); + break; + case TCKind._tk_string: + output.print("{string}"); + break; + case TCKind._tk_wstring: + output.print("{wstring}"); + break; + case TCKind._tk_TypeCode: + output.print("{TypeCode}"); + break; + case TCKind._tk_Principal: + output.print("{Principal}"); + case TCKind._tk_null: + output.print("{null}"); + break; + case TCKind._tk_void: + output.print("{void}"); + break; + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a simple type + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + + { + switch (type.kind().value()) + { + case TCKind._tk_null: + output.print("{null value}"); + return true; + case TCKind._tk_short: + output.print("{short: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_long: + output.print("{long: "); + output.print(input.read_long()); + output.print("}"); + return true; + case TCKind._tk_longlong: + output.print("{longlong: "); + output.print(input.read_longlong()); + output.print("}"); + return true; + case TCKind._tk_ushort: + output.print("{ushort: "); + output.print(input.read_ushort()); + output.print("}"); + return true; + case TCKind._tk_ulong: + output.print("{ulong: "); + output.print(input.read_ulong()); + output.print("}"); + return true; + case TCKind._tk_ulonglong: + output.print("{ulonglong: "); + output.print(input.read_ulonglong()); + output.print("}"); + return true; + case TCKind._tk_float: + output.print("{float: "); + output.print(input.read_float()); + output.print("}"); + return true; + case TCKind._tk_double: + output.print("{double: "); + output.print(input.read_double()); + output.print("}"); + return true; + case TCKind._tk_boolean: + output.print("{boolean: "); + output.print(input.read_boolean()); + output.print("}"); + return true; + case TCKind._tk_char: + output.print("{char: "); + output.print(input.read_char()); + output.print("}"); + return true; + case TCKind._tk_wchar: + output.print("{wchar: "); + output.print(input.read_wchar()); + output.print("}"); + return true; + case TCKind._tk_octet: + output.print("{octet: "); + output.print(input.read_octet()); + output.print("}"); + return true; + case TCKind._tk_any: + output.print("{any: "); + AnyImpl.dump(input.read_any(), output); + output.print("}"); + return true; + case TCKind._tk_string: + output.print("{string: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_wstring: + output.print("{wstring: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_TypeCode: + output.print("{TypeCode: "); + TypeCodeDumper.dump(input.read_TypeCode(), output); + output.print("}"); + return true; + case TCKind._tk_Principal: + output.print("{Principal: "); + output.print(input.read_Principal()); + output.print("}"); + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeMarshaler.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeMarshaler.java.svn-base new file mode 100644 index 0000000..e5fa15f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/TypeCodeMarshaler.java.svn-base @@ -0,0 +1,476 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * General TypeCode marshalling operations. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class TypeCodeMarshaler +{ + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + putInCache(type, output); + + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.marshal(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.marshal(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.marshal(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.marshal(type, output); + break; + case TCKind._tk_string: + StringTypeCode.marshal(type, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.marshal(type, output); + break; + case TCKind._tk_array: + ArrayTypeCode.marshal(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.marshal(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.marshal(type, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.marshal(type, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.marshal(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.marshal(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.marshal(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.marshal(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.marshal(type, output); + break; + default: + TypeCodeImpl.marshal(type, output); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.writeParams(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.writeParams(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.writeParams(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.writeParams(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.write_params(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.writeParams(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.writeParams(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.writeParams(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.writeParams(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.writeParams(type, output); + break; + default: + throw new org.omg.CORBA.INTERNAL("TypeCode has not params"); + } + } + + public static void skipParams(TCKind kind, CDRInputStream input) + { + switch (kind.value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + ComplexTypeCode.skipParams(input); + break; + case TCKind._tk_sequence: + SequenceTypeCode.skip_params(input); + break; + case TCKind._tk_array: + ArrayTypeCode.skip_params(input); + break; + case TCKind._tk_string: + StringTypeCode.skipParams(input); + break; + case TCKind._tk_wstring: + WStringTypeCode.skipParams(input); + break; + case TCKind._tk_fixed: + FixedTypeCode.skipParams(input); + break; + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, OutputStream output) + { + + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_union: + UnionTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_enum: + EnumTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_string: + StringTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_array: + ArrayTypeCode.remarshal_value(type, input, output); + break; + case TCKind._tk_alias: + AliasTypeCode.remarshal_value(type, input, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_value: + ValueTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_native: + NativeTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.remarshalValue(type, input, output); + break; + default: + TypeCodeImpl.remarshalValue(type, input, output); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_objref: + return ObjectRefTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_union: + return UnionTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_enum: + return EnumTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_string: + return StringTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_sequence: + return SequenceTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_array: + return ArrayTypeCode.values_equal(type, input_a, input_b); + case TCKind._tk_alias: + return AliasTypeCode.values_equal(type, input_a, input_b); + case TCKind._tk_except: + return ExceptionTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_wstring: + return WStringTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_fixed: + return FixedTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_value: + return ValueTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_value_box: + return ValueBoxTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_native: + return NativeTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_abstract_interface: + return AbstractInterfaceTypeCode.valuesEqual(type, input_a, + input_b); + default: + return TypeCodeImpl.valuesEqual(type, input_a, input_b); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.skipValue(type, input); + case TCKind._tk_objref: + return ObjectRefTypeCode.skipValue(type, input); + case TCKind._tk_union: + return UnionTypeCode.skipValue(type, input); + case TCKind._tk_enum: + return EnumTypeCode.skipValue(type, input); + case TCKind._tk_string: + return StringTypeCode.skipValue(type, input); + case TCKind._tk_sequence: + return SequenceTypeCode.skipValue(type, input); + case TCKind._tk_array: + return ArrayTypeCode.skip_value(type, input); + case TCKind._tk_alias: + return AliasTypeCode.skip_value(type, input); + case TCKind._tk_except: + return ExceptionTypeCode.skip_value(type, input); + case TCKind._tk_wstring: + return WStringTypeCode.skipValue(type, input); + case TCKind._tk_fixed: + return FixedTypeCode.skipValue(type, input); + case TCKind._tk_value: + return ValueTypeCode.skipValue(type, input); + case TCKind._tk_value_box: + return ValueBoxTypeCode.skipValue(type, input); + case TCKind._tk_native: + return NativeTypeCode.skipValue(type, input); + case TCKind._tk_abstract_interface: + return AbstractInterfaceTypeCode.skip_value(type, input); + default: + return TypeCodeImpl.skipValue(type, input); + } + } + + /** + * Skips a value array asociated to the TypeCode. This operation is used by + * the TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + public static boolean skipValueArray(TypeCode type, CDRInputStream input, + int n) + { + + switch (type.kind().value()) + { + case TCKind._tk_short: + input.skipShortArray(n); + break; + case TCKind._tk_long: + input.skipLongArray(n); + break; + case TCKind._tk_longlong: + input.skipLonglongArray(n); + break; + case TCKind._tk_ushort: + input.skipUshortArray(n); + break; + case TCKind._tk_ulong: + input.skipUlongArray(n); + break; + case TCKind._tk_ulonglong: + input.skipUlonglongArray(n); + break; + case TCKind._tk_float: + input.skipFloatArray(n); + break; + case TCKind._tk_double: + input.skipDoubleArray(n); + break; + case TCKind._tk_boolean: + input.skipBooleanArray(n); + break; + case TCKind._tk_char: + input.skipCharArray(n); + break; + case TCKind._tk_wchar: + input.skipWcharArray(n); + break; + case TCKind._tk_octet: + input.skipOctetArray(n); + break; + default: + for (int i = 0; i < n; i++) + if (!skipValue(type, input)) + return false; + } + + return true; + } + + public static void putInCache(TypeCode type, CDROutputStream output) + { + org.omg.CORBA.ORB input_orb = output.orb(); + + if (input_orb == null) + return; + + TypeCodeCache cache = null; + + if (input_orb instanceof TIDORB) + cache = ((TIDORB) input_orb).getTypeCodeCache(); + + if (cache != null) { + switch (type.kind().value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + cache.put(type); + } + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/UnionTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/UnionTypeCode.java.svn-base new file mode 100644 index 0000000..ae50611 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/UnionTypeCode.java.svn-base @@ -0,0 +1,579 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UnionMember; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The UnionTypeCode class represents a TypeCode + * object which is associated with an IDL union. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class UnionTypeCode extends ComplexTypeCode +{ + + protected TypeCode m_discriminator_type; + + protected int m_default_used; + + protected UnionMember[] m_members; + + public UnionTypeCode() + { + super(TCKind.tk_union); + m_discriminator_type = null; + m_members = null; + } + + public UnionTypeCode(String repositoryId, String name, + TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + super(TCKind.tk_union, repositoryId, name); + m_discriminator_type = discriminator_type; + + boolean thereis_default = false; + int i = 0; + + m_default_used = -1; // default_used mecanism not explicited in CORBA + // 2.3 + + TypeCode tc_default = TypeCodeFactory.tc_octet; + + for (i = 0; i < members.length; i++) { + if (tc_default.equal(members[i].label.type())) { + m_default_used = i; + break; + } + } + + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + + if (!m_discriminator_type.equal(tc.discriminator_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + if (m_default_used != tc.default_index()) + return false; + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + } + + // all rigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (!m_discriminator_type.equivalent(tc.discriminator_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + if (m_default_used != tc.default_index()) + return false; + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equivalent(tc.member_type(i))) + return false; + } + + // all rigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_discriminator_type; + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_default_used; + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].label; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + + m_discriminator_type = input.read_TypeCode(); + m_default_used = input.read_long(); + int length = input.read_ulong(); + + m_members = new UnionMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i] = new org.omg.CORBA.UnionMember(); + // Change, only the the value of label is marshaled + //_members[i].label = input.read_any(); + m_members[i].label = input.orb().create_any(); + m_members[i].label.read_value(input, m_discriminator_type); + if (!m_discriminator_type.equal(m_members[i].label.type())) { + if (m_members[i].label.type().kind().value() + == TCKind._tk_octet) { + if (m_default_used != i) + throw new MARSHAL( + "Bad label: Union does not have any " + + "defalt member.", + 0, CompletionStatus.COMPLETED_NO); + } else { + throw new MARSHAL("Invalid Union discriminator TypeCode", + 0, CompletionStatus.COMPLETED_NO); + } + } + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + + try { + Any discriminator = input.orb().create_any(); + + discriminator.read_value(input, type.discriminator_type()); + + int member_index = searchMemberIndex(type, discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + return TypeCodeMarshaler.skipValue(type.member_type(member_index), + input); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an union type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_TypeCode(type.discriminator_type()); + output.write_long(type.default_index()); + + int length = type.member_count(); + + output.write_ulong(length); + + for (int i = 0; i < length; i++) { + // Change, only the value of discriminator is marshalled + // output.write_any(type.member_label(i)); + type.member_label(i).write_value(output); + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + Any discriminator = input.orb().create_any(); + + discriminator.read_value(input, type.discriminator_type()); + + int member_index = searchMemberIndex(type, discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + discriminator.write_value(output); + + TypeCodeMarshaler.remarshalValue(type.member_type(member_index), + input, output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an union type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + Any a_discriminator = input_a.orb().create_any(); + + a_discriminator.read_value(input_a, type.discriminator_type()); + + Any b_discriminator = input_b.orb().create_any(); + + b_discriminator.read_value(input_b, type.discriminator_type()); + + if (!a_discriminator.equal(b_discriminator)) + return false; + + int member_index = searchMemberIndex(type, a_discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + return + TypeCodeMarshaler.valuesEqual(type.member_type(member_index), + input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an union type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{union ("); + + int length = type.member_count(); + + output.print(length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < length; i++) { + output.print(" case "); + AnyImpl.dump(type.member_label(i), output); + + output.print(": "); + output.print(type.member_name(i)); + output.print(" -> "); + TypeCodeDumper.dump(type.member_type(i), output); + output.print(" | "); + } + + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a struct type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{union "); + output.print(type.name()); + output.print(" discriminator: "); + Any disc_any = input.orb().create_any(); + disc_any.read_value(input, type.discriminator_type()); + AnyImpl.dump(disc_any, output); + + int member_index = searchMemberIndex(type, disc_any); + + if (member_index < 0) + throw new MARSHAL("TypeCode with no default case."); + + if (member_index == type.default_index()) + output.print(" /default/ "); + output.print(type.member_name(member_index)); + output.print(" -> "); + + if (!TypeCodeDumper.dumpValue(type.member_type(member_index), + input, output)) + return false; + + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + return true; + } + + public static int searchMemberIndex(TypeCode type, + org.omg.CORBA.Any discriminator) + { + try { + int length = type.member_count(); + for (int i = 0; i < length; i++) + if (discriminator.equal(type.member_label(i))) + return i; + + return type.default_index(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueBoxTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueBoxTypeCode.java.svn-base new file mode 100644 index 0000000..996b428 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueBoxTypeCode.java.svn-base @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ValueBoxTypeCode class represents a TypeCode + * object which is associated with an IDL valuebox. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class ValueBoxTypeCode extends ComplexTypeCode +{ + + TypeCode m_type; + + public ValueBoxTypeCode() + { + super(TCKind.tk_value_box); + m_type = null; + } + + public ValueBoxTypeCode(String repositoryId, String name, TypeCode type) + { + super(TCKind.tk_value_box, repositoryId, name); + m_type = type; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + return m_type.equal(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + /* unreachable */ + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + try { + return m_type.equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + /* unreachable */ + return false; + } + + } + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_type; + } + + //TIDORB operations + + public void readParams(CDRInputStream input) + { + super.readParams(input); + m_type = input.read_TypeCode(); + } + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValue(type.content_type(), input); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a valuebox type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_TypeCode(type.content_type()); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in valuebox operations:" + + bk.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, CDROutputStream output) + { + try { + TypeCodeMarshaler.remarshalValue(type.content_type(), + input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a valuebox type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + return TypeCodeMarshaler.valuesEqual(type.content_type(), input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in valuebox operations:" + + bk.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an alias type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{valuebox "); + output.print(type.name()); + output.print(": "); + TypeCodeDumper.dumpValue(type.content_type(), input, output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueTypeCode.java.svn-base new file mode 100644 index 0000000..3a0b30f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/ValueTypeCode.java.svn-base @@ -0,0 +1,437 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.ValueMember; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ValueTypeCode class represents a TypeCode + * object which is associated with an IDL value. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ValueTypeCode extends ComplexTypeCode +{ + + protected short m_value_modifier; + + protected TypeCode m_concrete_base; + + protected ValueMember[] m_members; + + public ValueTypeCode() + { + super(TCKind.tk_value); + m_concrete_base = null; + m_members = null; + + } + + public ValueTypeCode(String repositoryId, String name, + short value_modifier, TypeCode concrete_base, + ValueMember[] members) + { + super(TCKind.tk_value, repositoryId, name); + m_value_modifier = value_modifier; + m_concrete_base = concrete_base; + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_value_modifier != tc.type_modifier()) + return false; + if (!m_concrete_base.equal(tc.concrete_base_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + if (m_members[i].access != tc.member_visibility(i)) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_value_modifier != tc.type_modifier()) + return false; + if (!m_concrete_base.equivalent(tc.concrete_base_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equivalent(tc.member_type(i))) + return false; + if (m_members[i].access != tc.member_visibility(i)) + return false; + + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].access; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_value_modifier; + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_concrete_base; + + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + m_value_modifier = input.read_short(); + m_concrete_base = input.read_TypeCode(); + + int length = input.read_ulong(); + + m_members = new ValueMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + m_members[i].access = input.read_short(); + } + } + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + int member_length = type.member_count(); + for (int i = 0; i < member_length; i++) { + if (!TypeCodeMarshaler.skipValue(type.member_type(i), input)) + return false; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a value type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_short(type.type_modifier()); + output.write_TypeCode(type.concrete_base_type()); + + int length = type.member_count(); + output.write_ulong(length); + + for (int i = 0; i < length; i++) { + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + output.write_short(type.member_visibility(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value type operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value type operations:" + + bds.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, CDROutputStream output) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + TypeCodeMarshaler.remarshalValue(type.member_type(i), input, + output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a value type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.member_type(i), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{value "); + ComplexTypeCode.dumpParams(type, output); + output.print(", visibility= "); + output.print(type.type_modifier()); + output.print(", concrete base= "); + TypeCodeDumper.dump(type.concrete_base_type(), output); + + output.print(" {"); + + int length = type.member_count(); + + for (int i = 0; i < length; i++) { + output.print(type.member_visibility(i)); + output.print(' '); + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/.svn/text-base/WStringTypeCode.java.svn-base b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/WStringTypeCode.java.svn-base new file mode 100644 index 0000000..a4859ce --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/.svn/text-base/WStringTypeCode.java.svn-base @@ -0,0 +1,198 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The WStringTypeCode class represents a TypeCode + * object which is associated with an IDL wstring. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class WStringTypeCode extends StringTypeCode +{ + + public WStringTypeCode() + { + m_kind = TCKind.tk_wstring; + } + + public WStringTypeCode(int length) + { + super(length); + m_kind = TCKind.tk_wstring; + + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipWstring(); + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an wstring type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + output.write_wstring(input.read_wstring()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a wstring type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + return (input_a.read_wstring()).equals(input_a.read_wstring()); + } + + /** + * Dumps the description of a given wstring TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an wstring type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]{wstring"); + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + + output.print('}'); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a wstring type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[VALUE]{wstring"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + output.print(": \""); + output.print(input.read_wstring()); + output.print("\"}"); + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.java b/source/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.java new file mode 100644 index 0000000..c624409 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/AbstractInterfaceTypeCode.java @@ -0,0 +1,120 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The AbstractInterfaceTypeCode class represents a + * TypeCode object which is associated with an IDL abstract + * interface. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AbstractInterfaceTypeCode extends ComplexTypeCode +{ + + public AbstractInterfaceTypeCode() + { + super(TCKind.tk_abstract_interface); + } + + public AbstractInterfaceTypeCode(String repositoryId, String name) + { + super(TCKind.tk_abstract_interface, repositoryId, name); + } + + /** + * Dumps the description of a given ComplexTypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a ComplexTypeCode. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[TYPECODE]{abstract interface: "); + ComplexTypeCode.dumpParams(type, output); + output.print('}'); + } + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + input.read_abstract_interface(); + return true; + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean + dump_value(TypeCode type, + org.omg.CORBA_2_3.portable.InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + java.lang.Object obj = input.read_abstract_interface(); + + dump(type, output); + output.print("[VALUE] {--}"); + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/AliasTypeCode.java b/source/es/tid/TIDorbj/core/typecode/AliasTypeCode.java new file mode 100644 index 0000000..6052549 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/AliasTypeCode.java @@ -0,0 +1,266 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The AliasTypeCode class represents a TypeCode + * object which is associated with an IDL typedef. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class AliasTypeCode extends ComplexTypeCode +{ + + protected TypeCode _type; + + public AliasTypeCode() + { + super(TCKind.tk_alias); + _type = null; + } + + public AliasTypeCode(String repositoryId, String name, TypeCode type) + { + super(TCKind.tk_alias, repositoryId, name); + _type = type; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + + if (!super.equal(tc)) + return false; + try { + return _type.equal(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + return _type.equivalent(tc); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type; + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + _type = input.read_TypeCode(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValue(type.content_type(), input); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an alias type + */ + + public static void write_params(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + output.write_TypeCode(type.content_type()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshal_value(TypeCode type, InputStream input, + OutputStream output) + { + try { + TypeCodeMarshaler.remarshalValue(type.content_type(), + input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an alias type. + */ + + public static boolean values_equal(org.omg.CORBA.TypeCode type, + InputStream input_a, + InputStream input_b) + { + try { + return TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a ComplexTypeCode. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{typedef: "); + ComplexTypeCode.dumpParams(type, output); + output.print(" , type= "); + TypeCodeDumper.dump(type.content_type(), output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an alias type + * @return true if if has been possible dump the value. + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + + try { + output.print("[VALUE]{typedef "); + output.print(type.name()); + output.print(": "); + TypeCodeDumper.dumpValue(type.content_type(), input, output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ArrayTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ArrayTypeCode.java new file mode 100644 index 0000000..3e46439 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ArrayTypeCode.java @@ -0,0 +1,321 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ArrayTypeCode class represents a TypeCode + * object which is associated with an IDL array. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ArrayTypeCode extends TypeCodeImpl +{ + + protected TypeCode _element_type; + + protected int _length; + + public ArrayTypeCode() + { + super(TCKind.tk_array); + _element_type = null; + _length = 0; + } + + public ArrayTypeCode(TypeCode element_type, int length) + { + super(TCKind.tk_array); + _element_type = element_type; + _length = length; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (_element_type.equal(tc.content_type()) + && (_length == tc.length())); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _length; + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _element_type; + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public static void skip_params(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int length = input.read_ulong(); + input.skip(length); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + input.enterEncapsulation(); + + _element_type = input.read_TypeCode(); + _length = input.read_ulong(); + + input.exitEncapsulation(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValueArray(type.content_type(), input, + type.length()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + // write TCKind + output.write_long(type.kind().value()); + + // copy the output for insert the encapsulation length later + + CDROutputStream encapsulation = output.copy(); + + // marshalling of params + + output.enterEncapsulation(); + + output.write_TypeCode(type.content_type()); + output.write_ulong(type.length()); + + output.exitEncapsulation(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void remarshal_value(TypeCode type, InputStream input, + OutputStream output) + { + try { + int length = type.length(); + for (int i = 0; i < length; i++) + TypeCodeMarshaler.remarshalValue(type.content_type(), input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an array type. + */ + + public static boolean values_equal(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int length = type.length(); + + for (int i = 0; i < length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault in Array type operation: " + + bk.toString()); + } + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an array type. + */ + + public static void dump(org.omg.CORBA.TypeCode type, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{"); + TypeCodeDumper.dump(type.content_type(), output); + output.print('['); + output.print(type.length()); + output.print("]}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Array type expected to invoke length()" + + "and content_type()."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an array type + * @return true if if has been possible dump the value. + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int length = type.length(); + org.omg.CORBA.TypeCode elements_type = type.content_type(); + output.print("[VALUE]{"); + for (int i = 0; i < length; i++) { + output.print('('); + output.print(i); + output.print(") "); + if (!TypeCodeDumper.dumpValue(elements_type, input, output)) + return false; + output.print(" | "); + } + + output.print(" END_ARRAY-}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Array type expected to invoke length()" + + "and content_type()."); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ComplexTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ComplexTypeCode.java new file mode 100644 index 0000000..8f07e53 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ComplexTypeCode.java @@ -0,0 +1,328 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.Encapsulation; +import es.tid.TIDorbj.core.cdr.PointerCDR; + +/** + * The ComplexTypeCode class is base class the base for + * constructing complex TypeCode classes as + * StructTypeCode,AliasTypeCode, etc. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ComplexTypeCode extends TypeCodeImpl +{ + + protected String m_repository_id; + + protected String m_name; + + protected Encapsulation m_encapsuled_params; + + public ComplexTypeCode(TCKind type) + { + super(type); + m_repository_id = null; + m_name = null; + m_encapsuled_params = null; + } + + public ComplexTypeCode(TCKind type, String repositoryId, String name) + { + super(type); + m_repository_id = repositoryId; + m_name = name; + m_encapsuled_params = null; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (m_repository_id.equals(tc.id()) + && m_name.equals(tc.name())); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + } + + + + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_repository_id; + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_name; + } + + public int hashCode() + { + return m_repository_id.hashCode(); + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + output.write_string(type.id()); + output.write_string(type.name()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("TypeCode has not params"); + } + } + + public void readParams(CDRInputStream input) + { + m_repository_id = input.read_string(); + m_name = input.read_string(); + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + int length = input.read_ulong(); + input.skip(length); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + CDRInputStream encap_input = input.copy(); + + input.enterEncapsulation(); + + readParams(input); + + if (!input.getContextCDR().hasExternalIndirections()) { + m_encapsuled_params = encap_input.readEncapsulation(); + } + + encap_input = null; + + input.exitEncapsulation(); + + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a complex type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + // views if the typecode has been marshaled before + + PointerCDR previous_position = null; + + // "Indirections are not "freestanding", but only exist inside some + // other encoded TypeCode + + if (!output.getContextCDR().isRootContext()) { + + try { + previous_position = output.getContextCDR() + .lookupPosition(type.id()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("type.id() fails."); + } + } + + if (previous_position != null) { // marshal indirection + + output.writeIndirection(previous_position); + return; + } + + // aligns to get the typeCode position + + output.alignment(CDR.LONG_SIZE); + + // calculate the typecode position + + PointerCDR typecode_position; + + typecode_position = output.getPointer(); + + try { + // saves the typecode position + output.getContextCDR().putObject(type.id(), typecode_position); + } + catch (BadKind bk) {} + + // write the tc_kind value and un + + output.write_long(type.kind().value()); + + // if the typecode has a copy of the params marshaled write its + // encapsulation + if (type instanceof ComplexTypeCode) { + + synchronized (type) { + // esto se debe cambiar a una tabla de typecodes para tratar + // typecodes de + // otros ORBs + Encapsulation encap = + ((ComplexTypeCode) type).m_encapsuled_params; + + if (encap != null) { + output.writeEncapsulation(encap); + return; + } + + // create input stream for save the encapsualation + + boolean read_encapsulation = false; + + CDRInputStream encapsulation_input; + + encapsulation_input = output.inputStreamAtThisPosition(); + + // marshalling of params + + output.enterEncapsulation(); + + TypeCodeMarshaler.writeParams(type, output); + + read_encapsulation = !output.getContextCDR() + .hasExternalIndirections(); + + output.exitEncapsulation(); + + // if the typecode can be saved, because it does not have any + // indirection out + // of the scope of the encapsulation, save it + + if (read_encapsulation) + ((ComplexTypeCode) type).m_encapsuled_params = + encapsulation_input.readEncapsulation(); + + try { + encapsulation_input.close(); + } + catch (Exception e) {} + } + + return; + + } + + output.enterEncapsulation(); + + TypeCodeMarshaler.writeParams(type, output); + + output.exitEncapsulation(); + + } + + /** + * Dumps the description of a given ComplexTypeCode. Fails if it is not + * overriden by a child class. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Dumps the parameters description of a a given complex TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the value will be dumped + */ + + protected static void dumpParams(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("repositoryId= "); + output.print(type.id()); + output.print(", name="); + output.print(type.name()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Complex type expected."); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/EnumTypeCode.java b/source/es/tid/TIDorbj/core/typecode/EnumTypeCode.java new file mode 100644 index 0000000..22b1f67 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/EnumTypeCode.java @@ -0,0 +1,363 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The EnumTypeCode class represents a TypeCode + * object which is associated with an IDL enum. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class EnumTypeCode extends ComplexTypeCode +{ + + protected String[] m_members; + + public EnumTypeCode() + { + super(TCKind.tk_enum); + m_members = null; + + } + + public EnumTypeCode(String id, String name, String[] members) + { + super(TCKind.tk_enum, id, name); + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!m_members[i].equals(tc.member_name(i))) + return false; + } + // all rigth + return true; + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!m_members[i].equals(tc.member_name(i))) + return false; + } + // all rigth + return true; + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index]; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + int length = input.read_ulong(); + + m_members = new String[length]; + for (int i = 0; i < length; i++) + m_members[i] = input.read_string(); + + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipUlong(); + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an enum type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + ComplexTypeCode.writeParams(type, output); + + try { + + int length = type.member_count(); + + output.write_ulong(length); + for (int i = 0; i < length; i++) + output.write_string(type.member_name(i)); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an enum type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + int value = input.read_ulong(); + + try { + + if (value >= type.member_count()) + throw new MARSHAL("Enum discriminator value out of range."); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + + output.write_ulong(value); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an alias type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int value = input_a.read_ulong(); + if (value >= type.member_count()) + throw new MARSHAL("Enum discriminator value out of range."); + + return value == input_b.read_ulong(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + + output.print("[TYPECODE]{enum "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + int length = type.member_count(); + + output.print(type.member_name(0)); + for (int i = 1; i < length; i++) { + output.print(" ,"); + output.print(type.member_name(i)); + } + output.print("} }"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in enum operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an enum type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{enum "); + output.print(type.id()); + output.print(": "); + output.print(input.read_ulong()); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in enum operations:" + bk.toString()); + } + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.java new file mode 100644 index 0000000..771e249 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ExceptionTypeCode.java @@ -0,0 +1,237 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The ExceptionTypeCode class represents a TypeCode + * object which is associated with an IDL exception. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class ExceptionTypeCode extends StructTypeCode +{ + + public ExceptionTypeCode() + { + m_kind = TCKind.tk_except; + } + + public ExceptionTypeCode(String repositoryId, String name, + org.omg.CORBA.StructMember[] members) + { + super(repositoryId, name, members); + m_kind = TCKind.tk_except; + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skip_value(TypeCode type, CDRInputStream input) + { + // skip the id + input.skipString(); + // skip the members + return StructTypeCode.skipValue(type, input); + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a struct type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + // exception id + output.write_string(input.read_string()); + StructTypeCode.remarshalValue(type, input, output); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a struct type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + if (input_a.read_string().equals(input_b.read_string())) + return StructTypeCode.valuesEqual(type, input_a, input_b); + else + return false; + + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a exception type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[TYPECODE]{exception ("); + output.print(member_length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < member_length; i++) { + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bds.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an exception type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[VALUE]{exception "); + output.print(type.name()); + output.print(": "); + + output.print("(exception id)"); + output.print(input.read_string()); + output.print(" - "); + + for (int i = 0; i < member_length; i++) { + output.print('('); + output.print(i); + output.print(") "); + output.print(type.member_name(i)); + output.print(": "); + if (!TypeCodeDumper.dumpValue(type.member_type(i), input, + output)) + return false; + output.print(" | "); + } + output.print(" END_STRUCT-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in exception operations:" + + bds.toString()); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/FixedTypeCode.java b/source/es/tid/TIDorbj/core/typecode/FixedTypeCode.java new file mode 100644 index 0000000..03fe673 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/FixedTypeCode.java @@ -0,0 +1,277 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The FixedTypeCode class represents a TypeCode + * object which is associated with an IDL fixed. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class FixedTypeCode extends TypeCodeImpl +{ + + protected short m_digits; + + protected short m_scale; + + public FixedTypeCode() + { + super(TCKind.tk_fixed); + } + + public FixedTypeCode(short digits, short scale) + { + super(TCKind.tk_fixed); + this.m_digits = digits; + this.m_scale = scale; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + try { + return super.equal(tc) && (m_digits == tc.fixed_digits()) + && (m_scale == tc.fixed_scale()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_digits; + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_scale; + } + + //TIDORB operations + + public static int valueLength(TypeCode type) + { + try { + int fix_digits = type.fixed_digits(); + + return (fix_digits + (fix_digits % 2)) / 2; //it must have a odd + // number of octets + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operation fixed_digits()."); + } + } + + public boolean isSimple() + { + return false; + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + input.skipUshort(); + input.skipShort(); + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + m_digits = input.read_ushort(); + m_scale = input.read_short(); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + int length = valueLength(type); + input.skipOctetArray(length); + return true; + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a fixed type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + output.write_long(type.kind().value()); + output.write_ushort(type.fixed_digits()); + output.write_short(type.fixed_scale()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operations."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a fixed type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + int length = valueLength(type); + for (int i = 0; i < length; i++) + output.write_octet(input.read_octet()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a fixed type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + int length = valueLength(type); + for (int i = 0; i < length; i++) + if (input_a.read_octet() != input_b.read_octet()) + return false; + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a fixed type. + */ + + public static void dump(org.omg.CORBA.TypeCode type, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{fixed<"); + output.print(type.fixed_digits()); + output.print(','); + output.print(type.fixed_scale()); + output.print(">}"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in Fixed operations."); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a fixed type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[VALUE]{fixed: "); + int length = valueLength(type); + + for (int i = 0; i < length; i++) + output.print(input.read_octet()); + + output.print("}"); + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/NativeTypeCode.java b/source/es/tid/TIDorbj/core/typecode/NativeTypeCode.java new file mode 100644 index 0000000..41384cf --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/NativeTypeCode.java @@ -0,0 +1,68 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; + +/** + * The NativeTypeCode class represents a TypeCode + * object which is associated with an IDL native. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class NativeTypeCode extends ComplexTypeCode +{ + + public NativeTypeCode() + { + super(TCKind.tk_native); + } + + public NativeTypeCode(String repositoryId, String name) + { + super(TCKind.tk_native, repositoryId, name); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.java new file mode 100644 index 0000000..bd2e24f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ObjectRefTypeCode.java @@ -0,0 +1,211 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +/** + * The ArrayTypeCode class represents a TypeCode + * object which is associated with an IDL reference. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ObjectRefTypeCode extends ComplexTypeCode +{ + + public ObjectRefTypeCode() + { + super(TCKind.tk_objref); + } + + public ObjectRefTypeCode(String repositoryId, String name) + { + super(TCKind.tk_objref, repositoryId, name); + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[TYPECODE]{obj_reference:"); + ComplexTypeCode.dumpParams(type, output); + output.print('}'); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + // skip the IOR + IOR.skip(input); + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an array type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + + output.write_Object(input.read_Object()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an array type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + //compare two objects + return input_a.read_Object()._is_equivalent(input_b.read_Object()); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an array type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + IOR ior = null; + + if (input instanceof CDRInputStream) { + ior = new DefaultIOR(); + ior.read((CDRInputStream) input); + } else { + org.omg.CORBA.Object obj = input.read_Object(); + String str = input.orb().object_to_string(obj); + ior = DefaultIOR.fromString(null, str); + } + + try { + + int size = ior.memberCount(); + + if (size == 0) { + output.print("[VALUE]{IOR: nil}"); + } else { + output.print("[VALUE]{IOR Repository Id: "); + output.print(ior.getTypeId()); + output.print(" ("); + output.print(size); + output.print(" Profiles )"); + + for (int i = 0; i < size; i++) { + output.print(size); + output.print(" | "); + output.print(ior.getProfile(i).toString()); + } + + output.print("-}"); + + } + } + catch (Exception e) { + return false; + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.java b/source/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.java new file mode 100644 index 0000000..63ec4f2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/RecursiveTypeCode.java @@ -0,0 +1,179 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.PointerCDR; + +/** + * The RecursiveTypeCode class represents a TypeCode + * object which is associated with an IDL recursion in a typecode definition. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class RecursiveTypeCode extends TypeCodeImpl +{ + + protected String m_repository_id; + + public RecursiveTypeCode() + { + m_repository_id = ""; + } + + public RecursiveTypeCode(String id) + { + //it is not a real typecode!!!! + m_repository_id = id; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (tc instanceof RecursiveTypeCode) + return m_repository_id.equals( + ((RecursiveTypeCode) tc).m_repository_id); + else + return false; + } + + //TIDORB operations + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a recursisve type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + PointerCDR previous_position = null; + + previous_position = output.getContextCDR() + .lookupPosition(type.id()); + + if (previous_position == null) + throw new MARSHAL("Invalid Recursive TypeCode: " + type.id() + + " is not yet marshaled."); + + output.writeIndirection(previous_position); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operations:" + + bk.toString()); + } + + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{obj_reference:"); + ComplexTypeCode.dumpParams(type.content_type(), output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operation:" + + bk.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("Indirection to " + type.id() + + "[CAN'T PROCESS MORE."); + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in recursive operation:" + + bk.toString()); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/SequenceTypeCode.java b/source/es/tid/TIDorbj/core/typecode/SequenceTypeCode.java new file mode 100644 index 0000000..62e119f --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/SequenceTypeCode.java @@ -0,0 +1,275 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The SequenceTypeCode class represents a TypeCode + * object which is associated with an IDL sequence. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SequenceTypeCode extends ArrayTypeCode +{ + + public SequenceTypeCode() + { + m_kind = TCKind.tk_sequence; + } + + public SequenceTypeCode(TypeCode element_type, int length) + { + super(element_type, length); + m_kind = TCKind.tk_sequence; + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + + int length = input.read_ulong(); + + int type_length = type.length(); + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + "indicated in typecode."); + + return TypeCodeMarshaler.skipValueArray(type.content_type(), + input, + length); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a sequence type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + + int length = input.read_ulong(); + + int type_length = type.length(); + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + output.write_ulong(length); + + for (int i = 0; i < length; i++) + TypeCodeMarshaler.remarshalValue(type.content_type(), input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a sequence type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int a_length = input_a.read_ulong(); + int b_length = input_b.read_ulong(); + + if (a_length != b_length) + return false; + + int type_length = type.length(); + + if ((type_length > 0) && (a_length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + for (int i = 0; i < a_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.content_type(), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length() " + + "and content_type()."); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a sequence type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{sequence "); + + output.print('<'); + + if (type.length() != 0) { + output.print(type.length()); + output.print(","); + } + TypeCodeDumper.dump(type.content_type(), output); + output.print('>'); + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length() " + + "and content_type()."); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a sequence type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int length = input.read_ulong(); + + int type_length = type.length(); + + if ((type_length > 0) && (length > type_length)) //fixed size + throw new MARSHAL("Sequence length greater than maximum length" + + " indicated in typecode."); + + output.print('['); + output.print(length); + output.print(" VALUES]"); + output.print('{'); + for (int i = 0; i < length; i++) { + output.print('('); + output.print(i); + output.print(") "); + if (!TypeCodeDumper.dumpValue(type.content_type(), + input, + output)) + return false; + output.print(" | "); + } + + output.print(" END_SEQUENCE-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Sequence type expected to invoke length()" + + " and content_type()."); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/StringTypeCode.java b/source/es/tid/TIDorbj/core/typecode/StringTypeCode.java new file mode 100644 index 0000000..aecec34 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/StringTypeCode.java @@ -0,0 +1,270 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The StringTypeCode class represents a TypeCode + * object which is associated with an IDL string. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class StringTypeCode extends TypeCodeImpl +{ + + /** + * Max length of the string, or 0 if unbounded. + */ + + protected int m_length; + + public StringTypeCode() + { + super(TCKind.tk_string); + m_length = 0; + } + + public StringTypeCode(int length) + { + super(TCKind.tk_string); + m_length = length; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + try { + return (m_length == tc.length()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind e) { + return false; + } + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_length; + } + + //TIDORB operations + + public boolean isSimple() + { + return false; + } + + public void partialUnmarshal(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + + m_length = input.read_ulong(); + + } + + public static void skipParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + //skip length + input.skipUlong(); + } + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream via the TypeCodeMarshaler. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a string type + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + try { + output.write_long(type.kind().value()); + output.write_long(type.length()); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a string type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + output.write_string(input.read_string()); + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipString(); + return true; + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a string type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + return (input_a.read_string()).equals(input_b.read_string()); + } + + /** + * Dumps the description of a given string TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a string type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]{string"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in string operations:" + + bk.toString()); + } + + output.print('}'); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a string type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + + output.print("[VALUE]{string"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in string operations:" + + bk.toString()); + } + + output.print(": \""); + output.print(input.read_string()); + output.print("\"}"); + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/StructTypeCode.java b/source/es/tid/TIDorbj/core/typecode/StructTypeCode.java new file mode 100644 index 0000000..13ce65d --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/StructTypeCode.java @@ -0,0 +1,431 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.StructMember; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The StructTypeCode class represents a TypeCode + * object which is associated with an IDL struct. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class StructTypeCode extends ComplexTypeCode +{ + + protected StructMember[] m_members; + + public StructTypeCode() + { + super(TCKind.tk_struct); + m_members = null; + } + + public StructTypeCode(String repositoryId, String name, + StructMember[] members) + { + super(TCKind.tk_struct, repositoryId, name); + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (!(m_members[i].type.equal(tc.member_type(i)))) + return false; + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (!(m_members[i].type.equivalent(tc.member_type(i)))) + return false; + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + + int length = input.read_ulong(); + + m_members = new StructMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i] = new StructMember(); + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + int member_length = type.member_count(); + for (int i = 0; i < member_length; i++) { + if (!TypeCodeMarshaler.skipValue(type.member_type(i), input)) + return false; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a struct type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + + ComplexTypeCode.writeParams(type, output); + try { + int member_length = type.member_count(); + output.write_ulong(member_length); + for (int i = 0; i < member_length; i++) { + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a struct type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + TypeCodeMarshaler.remarshalValue(type.member_type(i), input, + output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a struct type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.member_type(i), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an struct type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[TYPECODE]{struct ("); + output.print(member_length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < member_length; i++) { + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a struct type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + int member_length = type.member_count(); + + output.print("[VALUE]{struct "); + output.print(type.name()); + output.print(": "); + for (int i = 0; i < member_length; i++) { + output.print('('); + output.print(i); + output.print(") "); + output.print(type.member_name(i)); + output.print(": "); + if (!TypeCodeDumper.dumpValue(type.member_type(i), input, + output)) + return false; + output.print(" | "); + } + output.print(" END_STRUCT-}"); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.java b/source/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.java new file mode 100644 index 0000000..41641a4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TransparentAliasTypeCode.java @@ -0,0 +1,173 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +public class TransparentAliasTypeCode extends AliasTypeCode +{ + + public TransparentAliasTypeCode() + { + super(); + } + + public TransparentAliasTypeCode(String repositoryId, String name, + TypeCodeImpl type) + { + super(repositoryId, name, type); + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + return _type.equal(tc); + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + return _type.equivalent(tc); + } + + public org.omg.CORBA.TypeCode get_compact_typecode() + { + return _type.get_compact_typecode(); + } + + public org.omg.CORBA.TCKind kind() + { + return _type.kind(); + } + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.id(); + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.name(); + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.member_count(); + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_name(index); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_type(index); + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_label(index); + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.discriminator_type(); + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.default_index(); + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.length(); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.content_type(); + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.fixed_digits(); + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.fixed_scale(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + return _type.member_visibility(index); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.type_modifier(); + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return _type.concrete_base_type(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeCache.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeCache.java new file mode 100644 index 0000000..1dc9447 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeCache.java @@ -0,0 +1,116 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.util.FullUseTableException; +import es.tid.TIDorbj.core.util.UseTable; + +public class TypeCodeCache +{ + + protected UseTable m_table; + + public TypeCodeCache(int max) + { + m_table = new UseTable(max); + } + + public synchronized TypeCode find(String rep_id) + { + if (m_table.object_exist(rep_id)) { + TypeCodeHandler handler = (TypeCodeHandler) m_table.get(rep_id); + + m_table.use(rep_id); + return handler.getTypeCode(); + } + + return null; + } + + /** + * Tries to insert one TypeCode in the TypeCodeCache. + * + * @param type + * @return if there is also a TypeCode with the same id, returns the + * TypeCode cached otherwise, the same Typecode put. * + */ + public synchronized TypeCode put(TypeCode type) + { + String rep_id = null; + try { + rep_id = type.id(); + } + catch (BadKind badKind) { + throw new + INTERNAL("Only Complex Typecodes can be put in the cache"); + } + + if (rep_id == null) + throw new org.omg.CORBA.INTERNAL("Cannot get RepositoryId"); + + if (m_table.object_exist(rep_id)) { + m_table.use(rep_id); + return ((TypeCodeHandler) m_table.get(rep_id)).getTypeCode(); + } else { + try { + m_table.append(rep_id, new TypeCodeHandler(type)); + return type; + } + catch (FullUseTableException e) { + //ignore it + } + } + + return type; + + } + + public synchronized void destroy() + { + m_table = null; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeDumper.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeDumper.java new file mode 100644 index 0000000..f26a7f6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeDumper.java @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; + +/** + * Dumps the description of a TypeCode and the marshaled value asociated to it. + *

+ * For example, a 5 long elements array typecode will be dumed as: + *

+ * [TYPECODE]{[TYPECODE]{long}[5]} + * + * @author Juan A. Cáceres + * @version 1.0 + */ +public class TypeCodeDumper +{ + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.dump(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.dump(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.dump(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.dump(type, output); + break; + case TCKind._tk_string: + StringTypeCode.dump(type, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.dump(type, output); + break; + case TCKind._tk_array: + ArrayTypeCode.dump(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.dump(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.dump(type, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.dump(type, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.dump(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.dump(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.dump(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.dump(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.dump(type, output); + break; + default: + TypeCodeImpl.dump(type, output); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.dumpValue(type, input, output); + case TCKind._tk_objref: + return ObjectRefTypeCode.dumpValue(type, input, output); + case TCKind._tk_union: + return UnionTypeCode.dumpValue(type, input, output); + case TCKind._tk_enum: + return EnumTypeCode.dumpValue(type, input, output); + case TCKind._tk_string: + return StringTypeCode.dumpValue(type, input, output); + case TCKind._tk_sequence: + return SequenceTypeCode.dumpValue(type, input, output); + case TCKind._tk_array: + return ArrayTypeCode.dump_value(type, input, output); + case TCKind._tk_alias: + return AliasTypeCode.dump_value(type, input, output); + case TCKind._tk_except: + return ExceptionTypeCode.dumpValue(type, input, output); + case TCKind._tk_wstring: + return WStringTypeCode.dumpValue(type, input, output); + case TCKind._tk_fixed: + return FixedTypeCode.dumpValue(type, input, output); + case TCKind._tk_value: + return ValueTypeCode.dump_value(type, input, output); + case TCKind._tk_value_box: + return ValueBoxTypeCode.dumpValue(type, input, output); + case TCKind._tk_native: + return NativeTypeCode.dump_value(type, input, output); + case TCKind._tk_abstract_interface: + return + AbstractInterfaceTypeCode.dump_value(type, input, output); + default: + return TypeCodeImpl.dump_value(type, input, output); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeFactory.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeFactory.java new file mode 100644 index 0000000..9003119 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeFactory.java @@ -0,0 +1,233 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; + +/** + * Factory of basic and complex typecodes. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class TypeCodeFactory +{ + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getBasicTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_null: + return tc_null; + case TCKind._tk_objref: + return tc_objref; + case TCKind._tk_any: + return tc_any; + case TCKind._tk_TypeCode: + return tc_TypeCode; + case TCKind._tk_void: + return tc_void; + case TCKind._tk_short: + return tc_short; + case TCKind._tk_long: + return tc_long; + case TCKind._tk_ushort: + return tc_ushort; + case TCKind._tk_ulong: + return tc_ulong; + case TCKind._tk_float: + return tc_float; + case TCKind._tk_double: + return tc_double; + case TCKind._tk_boolean: + return tc_boolean; + case TCKind._tk_char: + return tc_char; + case TCKind._tk_octet: + return tc_octet; + case TCKind._tk_longlong: + return tc_longlong; + case TCKind._tk_ulonglong: + return tc_ulonglong; + case TCKind._tk_longdouble: + return tc_longdouble; + case TCKind._tk_wchar: + return tc_wchar; + case TCKind._tk_string: + return tc_string; + case TCKind._tk_wstring: + return tc_wstring; + default: + return null; + } + } + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getComplexTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_struct: + return new StructTypeCode(); + case TCKind._tk_objref: + return new ObjectRefTypeCode(); + case TCKind._tk_union: + return new UnionTypeCode(); + case TCKind._tk_enum: + return new EnumTypeCode(); + case TCKind._tk_alias: + // return new TransparentAliasTypeCode(); + return new AliasTypeCode(); + // this is a transparent alias it will be the content type for user + case TCKind._tk_except: + return new ExceptionTypeCode(); + case TCKind._tk_value: + return new ValueTypeCode(); + case TCKind._tk_value_box: + return new ValueBoxTypeCode(); + case TCKind._tk_native: + return new NativeTypeCode(); + case TCKind._tk_abstract_interface: + return new AbstractInterfaceTypeCode(); + default: + return null; + } + } + + public static final es.tid.TIDorbj.core.typecode.TypeCodeImpl + getSemiComplexTypeCode(TCKind tcKind) + { + switch (tcKind.value()) + { + case TCKind._tk_string: + return new StringTypeCode(); + case TCKind._tk_sequence: + return new SequenceTypeCode(); + case TCKind._tk_array: + return new ArrayTypeCode(); + case TCKind._tk_wstring: + return new WStringTypeCode(); + case TCKind._tk_fixed: + return new FixedTypeCode(); + default: + return null; + } + } + + public static final boolean isComplex(TCKind kind) + { + switch (kind.value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + return true; + default: + return false; + } + } + + public static final boolean isSemiComplex(TCKind kind) + { + + switch (kind.value()) + { + case TCKind._tk_sequence: + case TCKind._tk_string: + case TCKind._tk_array: + case TCKind._tk_wstring: + case TCKind._tk_fixed: + return true; + default: + return false; + } + } + + public static final TypeCodeImpl tc_null = new TypeCodeImpl(TCKind.tk_null); + + public static final TypeCodeImpl tc_objref = + new ObjectRefTypeCode("IDL:omg/org/CORBA/Object:1.0", + "Object"); + + public static final TypeCodeImpl tc_any = new TypeCodeImpl(TCKind.tk_any); + public static final TypeCodeImpl tc_TypeCode = + new TypeCodeImpl(TCKind.tk_TypeCode); + public static final TypeCodeImpl tc_void = new TypeCodeImpl(TCKind.tk_void); + public static final TypeCodeImpl tc_short = new TypeCodeImpl(TCKind.tk_short); + public static final TypeCodeImpl tc_long = new TypeCodeImpl(TCKind.tk_long); + public static final TypeCodeImpl tc_ushort = + new TypeCodeImpl(TCKind.tk_ushort); + public static final TypeCodeImpl tc_ulong = + new TypeCodeImpl(TCKind.tk_ulong); + public static final TypeCodeImpl tc_float = + new TypeCodeImpl(TCKind.tk_float); + public static final TypeCodeImpl tc_double = + new TypeCodeImpl(TCKind.tk_double); + public static final TypeCodeImpl tc_boolean = + new TypeCodeImpl(TCKind.tk_boolean); + public static final TypeCodeImpl tc_char = new TypeCodeImpl(TCKind.tk_char); + public static final TypeCodeImpl tc_octet = + new TypeCodeImpl(TCKind.tk_octet); + public static final TypeCodeImpl tc_longlong = + new TypeCodeImpl(TCKind.tk_longlong); + public static final TypeCodeImpl tc_ulonglong = + new TypeCodeImpl(TCKind.tk_ulonglong); + public static final TypeCodeImpl tc_longdouble = + new TypeCodeImpl(TCKind.tk_longdouble); + public static final TypeCodeImpl tc_wchar = + new TypeCodeImpl(TCKind.tk_wchar); + public static final StringTypeCode tc_string = + (StringTypeCode) getSemiComplexTypeCode(TCKind.tk_string); + public static final WStringTypeCode tc_wstring = + (WStringTypeCode) getSemiComplexTypeCode(TCKind.tk_wstring); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeHandler.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeHandler.java new file mode 100644 index 0000000..4e5e16a --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeHandler.java @@ -0,0 +1,66 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TypeCode; + +public class TypeCodeHandler + implements es.tid.TIDorbj.core.util.RemovableObject +{ + TypeCode m_typecode; + + public TypeCodeHandler(TypeCode tc) + { + m_typecode = tc; + } + + public TypeCode getTypeCode() + { + return m_typecode; + } + + public boolean canBeRemoved() + { + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeImpl.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeImpl.java new file mode 100644 index 0000000..0eedd42 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeImpl.java @@ -0,0 +1,655 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The TypeCode class represents a TypeCode object + * which is associated with an IDL of a basic type. It is the base class to the + * rest of simple and complex typecodes. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class TypeCodeImpl extends org.omg.CORBA.TypeCode +{ + + TCKind m_kind; + + boolean m_exhaustive_equal = false; + + protected TypeCodeImpl() + { + m_kind = TCKind.tk_null; + } + + public TypeCodeImpl(TCKind kind) + { + m_kind = kind; + } + + public void setExhaustiveEqual(boolean value) + { + m_exhaustive_equal = value; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + return (m_kind.value() == tc.kind().value()); + } + + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } else { + return equals(tc); + } + } + + public org.omg.CORBA.TypeCode get_compact_typecode() + { + return this; + } + + public org.omg.CORBA.TCKind kind() + { + return m_kind; + } + + public java.lang.String id() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public java.lang.String name() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public int length() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short fixed_digits() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short fixed_scale() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + throw new org.omg.CORBA.TypeCodePackage.BadKind(); + } + + //TIDORB operations + + public boolean isSimple() + { + return true; + } + + /** + * TypeCode Marshaling. + */ + + public static void marshal(org.omg.CORBA.TypeCode type, + CDROutputStream output) + { + output.write_ulong(type.kind().value()); + } + + /** + * TypeCode parameters demarshaling. In this case, theres nothing to do. + * This operation will throw the INTERNAL exception. + */ + public void partialUnmarshal(CDRInputStream input) + { + throw new org.omg.CORBA.INTERNAL("Nothing to unmarshal", 0, + CompletionStatus.COMPLETED_NO); + } + + /** + * Skips the TypeCode parameters. + */ + + public static void skipParams(CDRInputStream input) + { + //nothing to do + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + input.skipShort(); + break; + case TCKind._tk_long: + input.skipLong(); + break; + case TCKind._tk_longlong: + input.skip_longlong(); + break; + case TCKind._tk_ushort: + input.skipUshort(); + break; + case TCKind._tk_ulong: + input.skipUlong(); + break; + case TCKind._tk_ulonglong: + input.skipUlonglong(); + break; + case TCKind._tk_float: + input.skipFloat(); + break; + case TCKind._tk_double: + input.skipDouble(); + break; + case TCKind._tk_boolean: + input.skipBoolean(); + break; + case TCKind._tk_char: + input.skipChar(); + break; + case TCKind._tk_wchar: + input.skipWchar(); + break; + case TCKind._tk_octet: + input.skipOctet(); + break; + case TCKind._tk_any: + input.skipAny(); + break; + case TCKind._tk_TypeCode: + input.skipTypeCode(); + break; + case TCKind._tk_Principal: + input.skipPrincipal(); + break; + case TCKind._tk_null: + case TCKind._tk_void: + break; + default: + throw new INTERNAL("TypeCode is not basic.", 0, + CompletionStatus.COMPLETED_NO); + } + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be a basic type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + output.write_short(input.read_short()); + break; + case TCKind._tk_long: + output.write_long(input.read_long()); + break; + case TCKind._tk_longlong: + output.write_longlong(input.read_longlong()); + break; + case TCKind._tk_ushort: + output.write_ushort(input.read_ushort()); + break; + case TCKind._tk_ulong: + output.write_ulong(input.read_ulong()); + break; + case TCKind._tk_ulonglong: + output.write_ulonglong(input.read_ulonglong()); + break; + case TCKind._tk_float: + output.write_float(input.read_float()); + break; + case TCKind._tk_double: + output.write_double(input.read_double()); + break; + case TCKind._tk_boolean: + output.write_boolean(input.read_boolean()); + break; + case TCKind._tk_char: + output.write_char(input.read_char()); + break; + case TCKind._tk_wchar: + output.write_wchar(input.read_wchar()); + break; + case TCKind._tk_octet: + output.write_octet(input.read_octet()); + break; + case TCKind._tk_any: + output.write_any(input.read_any()); + break; + case TCKind._tk_objref: + output.write_Object(input.read_Object()); + break; + case TCKind._tk_string: + output.write_string(input.read_string()); + break; + case TCKind._tk_wstring: + output.write_wstring(input.read_wstring()); + break; + case TCKind._tk_TypeCode: + output.write_TypeCode(input.read_TypeCode()); + break; + case TCKind._tk_Principal: + output.write_Principal(input.read_Principal()); + break; + case TCKind._tk_null: + case TCKind._tk_void: + break; + default: + throw new org.omg.CORBA.INTERNAL("TypeCode is not basic", 0, + CompletionStatus.COMPLETED_NO); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a basic type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream a_input, InputStream b_input) + { + switch (type.kind().value()) + { + case TCKind._tk_short: + return a_input.read_short() == b_input.read_short(); + case TCKind._tk_long: + return a_input.read_long() == b_input.read_long(); + case TCKind._tk_longlong: + return a_input.read_longlong() == b_input.read_longlong(); + case TCKind._tk_ushort: + return a_input.read_ushort() == b_input.read_ushort(); + case TCKind._tk_ulong: + return a_input.read_ulong() == b_input.read_ulong(); + case TCKind._tk_ulonglong: + return a_input.read_ulonglong() == b_input.read_ulonglong(); + case TCKind._tk_float: + return a_input.read_float() == b_input.read_float(); + case TCKind._tk_double: + return a_input.read_double() == b_input.read_double(); + case TCKind._tk_boolean: + return a_input.read_boolean() == b_input.read_boolean(); + case TCKind._tk_char: + return a_input.read_char() == b_input.read_char(); + case TCKind._tk_wchar: + return a_input.read_wchar() == b_input.read_wchar(); + case TCKind._tk_octet: + return a_input.read_octet() == b_input.read_octet(); + case TCKind._tk_any: + TypeCode tc_a, + tc_b; + tc_a = a_input.read_TypeCode(); + tc_b = b_input.read_TypeCode(); + if (tc_a.equal(tc_b)) + return TypeCodeMarshaler + .valuesEqual(tc_a, a_input, b_input); + else + return false; + case TCKind._tk_TypeCode: + return (a_input.read_TypeCode()).equal(b_input.read_TypeCode()); + case TCKind._tk_Principal: + return + (a_input.read_Principal()).equals(b_input.read_Principal()); + case TCKind._tk_null: + case TCKind._tk_void: + return true; + default: + throw new org.omg.CORBA.MARSHAL("TypeCode is not basic", 0, + CompletionStatus.COMPLETED_NO); + + } + + } + + /** + * Dumps the description of a given string TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be a string type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]"); + switch (type.kind().value()) + { + case TCKind._tk_short: + output.print("{short}"); + break; + case TCKind._tk_long: + output.print("{long}"); + break; + case TCKind._tk_longlong: + output.print("{longlong}"); + break; + case TCKind._tk_ushort: + output.print("{ushort}"); + break; + case TCKind._tk_ulong: + output.print("{ulong}"); + break; + case TCKind._tk_ulonglong: + output.print("{ulonglong}"); + break; + case TCKind._tk_float: + output.print("{float}"); + break; + case TCKind._tk_double: + output.print("{double}"); + break; + case TCKind._tk_boolean: + output.print("{boolean}"); + break; + case TCKind._tk_char: + output.print("{char}"); + break; + case TCKind._tk_wchar: + output.print("{wchar}"); + break; + case TCKind._tk_octet: + output.print("{octet}"); + break; + case TCKind._tk_any: + output.print("{any}"); + break; + case TCKind._tk_string: + output.print("{string}"); + break; + case TCKind._tk_wstring: + output.print("{wstring}"); + break; + case TCKind._tk_TypeCode: + output.print("{TypeCode}"); + break; + case TCKind._tk_Principal: + output.print("{Principal}"); + case TCKind._tk_null: + output.print("{null}"); + break; + case TCKind._tk_void: + output.print("{void}"); + break; + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a simple type + */ + + public static boolean dump_value(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + + { + switch (type.kind().value()) + { + case TCKind._tk_null: + output.print("{null value}"); + return true; + case TCKind._tk_short: + output.print("{short: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_long: + output.print("{long: "); + output.print(input.read_long()); + output.print("}"); + return true; + case TCKind._tk_longlong: + output.print("{longlong: "); + output.print(input.read_longlong()); + output.print("}"); + return true; + case TCKind._tk_ushort: + output.print("{ushort: "); + output.print(input.read_ushort()); + output.print("}"); + return true; + case TCKind._tk_ulong: + output.print("{ulong: "); + output.print(input.read_ulong()); + output.print("}"); + return true; + case TCKind._tk_ulonglong: + output.print("{ulonglong: "); + output.print(input.read_ulonglong()); + output.print("}"); + return true; + case TCKind._tk_float: + output.print("{float: "); + output.print(input.read_float()); + output.print("}"); + return true; + case TCKind._tk_double: + output.print("{double: "); + output.print(input.read_double()); + output.print("}"); + return true; + case TCKind._tk_boolean: + output.print("{boolean: "); + output.print(input.read_boolean()); + output.print("}"); + return true; + case TCKind._tk_char: + output.print("{char: "); + output.print(input.read_char()); + output.print("}"); + return true; + case TCKind._tk_wchar: + output.print("{wchar: "); + output.print(input.read_wchar()); + output.print("}"); + return true; + case TCKind._tk_octet: + output.print("{octet: "); + output.print(input.read_octet()); + output.print("}"); + return true; + case TCKind._tk_any: + output.print("{any: "); + AnyImpl.dump(input.read_any(), output); + output.print("}"); + return true; + case TCKind._tk_string: + output.print("{string: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_wstring: + output.print("{wstring: "); + output.print(input.read_short()); + output.print("}"); + return true; + case TCKind._tk_TypeCode: + output.print("{TypeCode: "); + TypeCodeDumper.dump(input.read_TypeCode(), output); + output.print("}"); + return true; + case TCKind._tk_Principal: + output.print("{Principal: "); + output.print(input.read_Principal()); + output.print("}"); + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.java b/source/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.java new file mode 100644 index 0000000..55b2171 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/TypeCodeMarshaler.java @@ -0,0 +1,476 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * General TypeCode marshalling operations. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class TypeCodeMarshaler +{ + + /** + * Marshal the given typecode in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void marshal(TypeCode type, CDROutputStream output) + { + putInCache(type, output); + + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.marshal(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.marshal(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.marshal(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.marshal(type, output); + break; + case TCKind._tk_string: + StringTypeCode.marshal(type, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.marshal(type, output); + break; + case TCKind._tk_array: + ArrayTypeCode.marshal(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.marshal(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.marshal(type, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.marshal(type, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.marshal(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.marshal(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.marshal(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.marshal(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.marshal(type, output); + break; + default: + TypeCodeImpl.marshal(type, output); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.writeParams(type, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.writeParams(type, output); + break; + case TCKind._tk_union: + UnionTypeCode.writeParams(type, output); + break; + case TCKind._tk_enum: + EnumTypeCode.writeParams(type, output); + break; + case TCKind._tk_alias: + AliasTypeCode.write_params(type, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.writeParams(type, output); + break; + case TCKind._tk_value: + ValueTypeCode.writeParams(type, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.writeParams(type, output); + break; + case TCKind._tk_native: + NativeTypeCode.writeParams(type, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.writeParams(type, output); + break; + default: + throw new org.omg.CORBA.INTERNAL("TypeCode has not params"); + } + } + + public static void skipParams(TCKind kind, CDRInputStream input) + { + switch (kind.value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + ComplexTypeCode.skipParams(input); + break; + case TCKind._tk_sequence: + SequenceTypeCode.skip_params(input); + break; + case TCKind._tk_array: + ArrayTypeCode.skip_params(input); + break; + case TCKind._tk_string: + StringTypeCode.skipParams(input); + break; + case TCKind._tk_wstring: + WStringTypeCode.skipParams(input); + break; + case TCKind._tk_fixed: + FixedTypeCode.skipParams(input); + break; + } + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, OutputStream output) + { + + switch (type.kind().value()) + { + case TCKind._tk_struct: + StructTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_objref: + ObjectRefTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_union: + UnionTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_enum: + EnumTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_string: + StringTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_sequence: + SequenceTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_array: + ArrayTypeCode.remarshal_value(type, input, output); + break; + case TCKind._tk_alias: + AliasTypeCode.remarshal_value(type, input, output); + break; + case TCKind._tk_except: + ExceptionTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_wstring: + WStringTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_fixed: + FixedTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_value: + ValueTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_value_box: + ValueBoxTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_native: + NativeTypeCode.remarshalValue(type, input, output); + break; + case TCKind._tk_abstract_interface: + AbstractInterfaceTypeCode.remarshalValue(type, input, output); + break; + default: + TypeCodeImpl.remarshalValue(type, input, output); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_objref: + return ObjectRefTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_union: + return UnionTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_enum: + return EnumTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_string: + return StringTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_sequence: + return SequenceTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_array: + return ArrayTypeCode.values_equal(type, input_a, input_b); + case TCKind._tk_alias: + return AliasTypeCode.values_equal(type, input_a, input_b); + case TCKind._tk_except: + return ExceptionTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_wstring: + return WStringTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_fixed: + return FixedTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_value: + return ValueTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_value_box: + return ValueBoxTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_native: + return NativeTypeCode.valuesEqual(type, input_a, input_b); + case TCKind._tk_abstract_interface: + return AbstractInterfaceTypeCode.valuesEqual(type, input_a, + input_b); + default: + return TypeCodeImpl.valuesEqual(type, input_a, input_b); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + switch (type.kind().value()) + { + case TCKind._tk_struct: + return StructTypeCode.skipValue(type, input); + case TCKind._tk_objref: + return ObjectRefTypeCode.skipValue(type, input); + case TCKind._tk_union: + return UnionTypeCode.skipValue(type, input); + case TCKind._tk_enum: + return EnumTypeCode.skipValue(type, input); + case TCKind._tk_string: + return StringTypeCode.skipValue(type, input); + case TCKind._tk_sequence: + return SequenceTypeCode.skipValue(type, input); + case TCKind._tk_array: + return ArrayTypeCode.skip_value(type, input); + case TCKind._tk_alias: + return AliasTypeCode.skip_value(type, input); + case TCKind._tk_except: + return ExceptionTypeCode.skip_value(type, input); + case TCKind._tk_wstring: + return WStringTypeCode.skipValue(type, input); + case TCKind._tk_fixed: + return FixedTypeCode.skipValue(type, input); + case TCKind._tk_value: + return ValueTypeCode.skipValue(type, input); + case TCKind._tk_value_box: + return ValueBoxTypeCode.skipValue(type, input); + case TCKind._tk_native: + return NativeTypeCode.skipValue(type, input); + case TCKind._tk_abstract_interface: + return AbstractInterfaceTypeCode.skip_value(type, input); + default: + return TypeCodeImpl.skipValue(type, input); + } + } + + /** + * Skips a value array asociated to the TypeCode. This operation is used by + * the TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + public static boolean skipValueArray(TypeCode type, CDRInputStream input, + int n) + { + + switch (type.kind().value()) + { + case TCKind._tk_short: + input.skipShortArray(n); + break; + case TCKind._tk_long: + input.skipLongArray(n); + break; + case TCKind._tk_longlong: + input.skipLonglongArray(n); + break; + case TCKind._tk_ushort: + input.skipUshortArray(n); + break; + case TCKind._tk_ulong: + input.skipUlongArray(n); + break; + case TCKind._tk_ulonglong: + input.skipUlonglongArray(n); + break; + case TCKind._tk_float: + input.skipFloatArray(n); + break; + case TCKind._tk_double: + input.skipDoubleArray(n); + break; + case TCKind._tk_boolean: + input.skipBooleanArray(n); + break; + case TCKind._tk_char: + input.skipCharArray(n); + break; + case TCKind._tk_wchar: + input.skipWcharArray(n); + break; + case TCKind._tk_octet: + input.skipOctetArray(n); + break; + default: + for (int i = 0; i < n; i++) + if (!skipValue(type, input)) + return false; + } + + return true; + } + + public static void putInCache(TypeCode type, CDROutputStream output) + { + org.omg.CORBA.ORB input_orb = output.orb(); + + if (input_orb == null) + return; + + TypeCodeCache cache = null; + + if (input_orb instanceof TIDORB) + cache = ((TIDORB) input_orb).getTypeCodeCache(); + + if (cache != null) { + switch (type.kind().value()) + { + case TCKind._tk_struct: + case TCKind._tk_objref: + case TCKind._tk_union: + case TCKind._tk_enum: + case TCKind._tk_alias: + case TCKind._tk_except: + case TCKind._tk_value: + case TCKind._tk_value_box: + case TCKind._tk_native: + case TCKind._tk_abstract_interface: + cache.put(type); + } + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/UnionTypeCode.java b/source/es/tid/TIDorbj/core/typecode/UnionTypeCode.java new file mode 100644 index 0000000..07a4a23 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/UnionTypeCode.java @@ -0,0 +1,579 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.UnionMember; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The UnionTypeCode class represents a TypeCode + * object which is associated with an IDL union. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class UnionTypeCode extends ComplexTypeCode +{ + + protected TypeCode m_discriminator_type; + + protected int m_default_used; + + protected UnionMember[] m_members; + + public UnionTypeCode() + { + super(TCKind.tk_union); + m_discriminator_type = null; + m_members = null; + } + + public UnionTypeCode(String repositoryId, String name, + TypeCode discriminator_type, + org.omg.CORBA.UnionMember[] members) + { + super(TCKind.tk_union, repositoryId, name); + m_discriminator_type = discriminator_type; + + boolean thereis_default = false; + int i = 0; + + m_default_used = -1; // default_used mecanism not explicited in CORBA + // 2.3 + + TypeCode tc_default = TypeCodeFactory.tc_octet; + + for (i = 0; i < members.length; i++) { + if (tc_default.equal(members[i].label.type())) { + m_default_used = i; + break; + } + } + + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + + if (!m_discriminator_type.equal(tc.discriminator_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + if (m_default_used != tc.default_index()) + return false; + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + } + + // all rigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (!m_discriminator_type.equivalent(tc.discriminator_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + if (m_default_used != tc.default_index()) + return false; + for (int i = 0; i < m_members.length; i++) { + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equivalent(tc.member_type(i))) + return false; + } + + // all rigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public org.omg.CORBA.TypeCode discriminator_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_discriminator_type; + } + + public int default_index() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_default_used; + } + + public org.omg.CORBA.Any member_label(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].label; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + + m_discriminator_type = input.read_TypeCode(); + m_default_used = input.read_long(); + int length = input.read_ulong(); + + m_members = new UnionMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i] = new org.omg.CORBA.UnionMember(); + // Change, only the the value of label is marshaled + //_members[i].label = input.read_any(); + m_members[i].label = input.orb().create_any(); + m_members[i].label.read_value(input, m_discriminator_type); + if (!m_discriminator_type.equal(m_members[i].label.type())) { + if (m_members[i].label.type().kind().value() + == TCKind._tk_octet) { + if (m_default_used != i) + throw new MARSHAL( + "Bad label: Union does not have any " + + "defalt member.", + 0, CompletionStatus.COMPLETED_NO); + } else { + throw new MARSHAL("Invalid Union discriminator TypeCode", + 0, CompletionStatus.COMPLETED_NO); + } + } + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + } + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + + try { + Any discriminator = input.orb().create_any(); + + discriminator.read_value(input, type.discriminator_type()); + + int member_index = searchMemberIndex(type, discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + return TypeCodeMarshaler.skipValue(type.member_type(member_index), + input); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be an union type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_TypeCode(type.discriminator_type()); + output.write_long(type.default_index()); + + int length = type.member_count(); + + output.write_ulong(length); + + for (int i = 0; i < length; i++) { + // Change, only the value of discriminator is marshalled + // output.write_any(type.member_label(i)); + type.member_label(i).write_value(output); + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + try { + Any discriminator = input.orb().create_any(); + + discriminator.read_value(input, type.discriminator_type()); + + int member_index = searchMemberIndex(type, discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + discriminator.write_value(output); + + TypeCodeMarshaler.remarshalValue(type.member_type(member_index), + input, output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be an union type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + Any a_discriminator = input_a.orb().create_any(); + + a_discriminator.read_value(input_a, type.discriminator_type()); + + Any b_discriminator = input_b.orb().create_any(); + + b_discriminator.read_value(input_b, type.discriminator_type()); + + if (!a_discriminator.equal(b_discriminator)) + return false; + + int member_index = searchMemberIndex(type, a_discriminator); + + if (member_index <= -1) + throw new MARSHAL("TypeCode with no default case."); + + return + TypeCodeMarshaler.valuesEqual(type.member_type(member_index), + input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an union type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{union ("); + + int length = type.member_count(); + + output.print(length); + output.print(" members) "); + ComplexTypeCode.dumpParams(type, output); + output.print(" {"); + + for (int i = 0; i < length; i++) { + output.print(" case "); + AnyImpl.dump(type.member_label(i), output); + + output.print(": "); + output.print(type.member_name(i)); + output.print(" -> "); + TypeCodeDumper.dump(type.member_type(i), output); + output.print(" | "); + } + + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a struct type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{union "); + output.print(type.name()); + output.print(" discriminator: "); + Any disc_any = input.orb().create_any(); + disc_any.read_value(input, type.discriminator_type()); + AnyImpl.dump(disc_any, output); + + int member_index = searchMemberIndex(type, disc_any); + + if (member_index < 0) + throw new MARSHAL("TypeCode with no default case."); + + if (member_index == type.default_index()) + output.print(" /default/ "); + output.print(type.member_name(member_index)); + output.print(" -> "); + + if (!TypeCodeDumper.dumpValue(type.member_type(member_index), + input, output)) + return false; + + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + return true; + } + + public static int searchMemberIndex(TypeCode type, + org.omg.CORBA.Any discriminator) + { + try { + int length = type.member_count(); + for (int i = 0; i < length; i++) + if (discriminator.equal(type.member_label(i))) + return i; + + return type.default_index(); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in union operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in union operations:" + + bds.toString()); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.java new file mode 100644 index 0000000..34bc436 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ValueBoxTypeCode.java @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ValueBoxTypeCode class represents a TypeCode + * object which is associated with an IDL valuebox. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class ValueBoxTypeCode extends ComplexTypeCode +{ + + TypeCode m_type; + + public ValueBoxTypeCode() + { + super(TCKind.tk_value_box); + m_type = null; + } + + public ValueBoxTypeCode(String repositoryId, String name, TypeCode type) + { + super(TCKind.tk_value_box, repositoryId, name); + m_type = type; + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + try { + return m_type.equal(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + /* unreachable */ + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + try { + return m_type.equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + /* unreachable */ + return false; + } + + } + public org.omg.CORBA.TypeCode content_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_type; + } + + //TIDORB operations + + public void readParams(CDRInputStream input) + { + super.readParams(input); + m_type = input.read_TypeCode(); + } + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + return TypeCodeMarshaler.skipValue(type.content_type(), input); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a valuebox type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_TypeCode(type.content_type()); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in valuebox operations:" + + bk.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, CDROutputStream output) + { + try { + TypeCodeMarshaler.remarshalValue(type.content_type(), + input, + output); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a valuebox type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + return TypeCodeMarshaler.valuesEqual(type.content_type(), input_a, + input_b); + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in valuebox operations:" + + bk.toString()); + } + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be an alias type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[VALUE]{valuebox "); + output.print(type.name()); + output.print(": "); + TypeCodeDumper.dumpValue(type.content_type(), input, output); + output.print('}'); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(" Fault ivoking content_type()."); + } + return true; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/ValueTypeCode.java b/source/es/tid/TIDorbj/core/typecode/ValueTypeCode.java new file mode 100644 index 0000000..4eb1bb2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/ValueTypeCode.java @@ -0,0 +1,437 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.ValueMember; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * The ValueTypeCode class represents a TypeCode + * object which is associated with an IDL value. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class ValueTypeCode extends ComplexTypeCode +{ + + protected short m_value_modifier; + + protected TypeCode m_concrete_base; + + protected ValueMember[] m_members; + + public ValueTypeCode() + { + super(TCKind.tk_value); + m_concrete_base = null; + m_members = null; + + } + + public ValueTypeCode(String repositoryId, String name, + short value_modifier, TypeCode concrete_base, + ValueMember[] members) + { + super(TCKind.tk_value, repositoryId, name); + m_value_modifier = value_modifier; + m_concrete_base = concrete_base; + m_members = members; + + } + + public boolean equal(org.omg.CORBA.TypeCode tc) + { + if (!super.equal(tc)) + return false; + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_value_modifier != tc.type_modifier()) + return false; + if (!m_concrete_base.equal(tc.concrete_base_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + if (m_members[i].access != tc.member_visibility(i)) + return false; + if (m_members[i].type.equal(tc.member_type(i))) + return false; + + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public boolean equivalent(org.omg.CORBA.TypeCode tc) + { + if (tc.kind().value() == TCKind._tk_alias) { + try { // the exception must never be throwed, but, it is in the + // definition. + return equivalent(tc.content_type()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind ex) { + return false; + } + } + + if (m_kind.value() != tc.kind().value()) { + return false; + } + + if (!m_exhaustive_equal) + return true; + + try { + + if (m_value_modifier != tc.type_modifier()) + return false; + if (!m_concrete_base.equivalent(tc.concrete_base_type())) + return false; + if (m_members.length != tc.member_count()) + return false; + + for (int i = 0; i < m_members.length; i++) { + + if (!(m_members[i].name).equals(tc.member_name(i))) + return false; + if (m_members[i].type.equivalent(tc.member_type(i))) + return false; + if (m_members[i].access != tc.member_visibility(i)) + return false; + + } + + // allrigth + return true; + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + return false; + } + catch (org.omg.CORBA.TypeCodePackage.Bounds bk) { + return false; + } + + } + + public int member_count() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_members.length; + } + + public java.lang.String member_name(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].name; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public org.omg.CORBA.TypeCode member_type(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].type; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public short member_visibility(int index) + throws org.omg.CORBA.TypeCodePackage.BadKind, + org.omg.CORBA.TypeCodePackage.Bounds + { + if (index < m_members.length) + return m_members[index].access; + else + throw new org.omg.CORBA.TypeCodePackage.Bounds(); + } + + public short type_modifier() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_value_modifier; + } + + public org.omg.CORBA.TypeCode concrete_base_type() + throws org.omg.CORBA.TypeCodePackage.BadKind + { + return m_concrete_base; + + } + + //TIDORB operations + + public void readParams(es.tid.TIDorbj.core.cdr.CDRInputStream input) + { + super.readParams(input); + m_value_modifier = input.read_short(); + m_concrete_base = input.read_TypeCode(); + + int length = input.read_ulong(); + + m_members = new ValueMember[length]; + + for (int i = 0; i < length; i++) { + m_members[i].name = input.read_string(); + m_members[i].type = input.read_TypeCode(); + m_members[i].access = input.read_short(); + } + } + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + try { + int member_length = type.member_count(); + for (int i = 0; i < member_length; i++) { + if (!TypeCodeMarshaler.skipValue(type.member_type(i), input)) + return false; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + return true; + } + + /** + * Marshal the given typecode params in a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the TypeCode + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the the TypeCode must be a value type + */ + + public static void writeParams(TypeCode type, CDROutputStream output) + { + try { + ComplexTypeCode.writeParams(type, output); + + output.write_short(type.type_modifier()); + output.write_TypeCode(type.concrete_base_type()); + + int length = type.member_count(); + output.write_ulong(length); + + for (int i = 0; i < length; i++) { + output.write_string(type.member_name(i)); + output.write_TypeCode(type.member_type(i)); + output.write_short(type.member_visibility(i)); + } + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value type operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value type operations:" + + bds.toString()); + } + + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an alias type + */ + + public static void remarshalValue(org.omg.CORBA.TypeCode type, + InputStream input, CDROutputStream output) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + TypeCodeMarshaler.remarshalValue(type.member_type(i), input, + output); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a value type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + try { + int member_length = type.member_count(); + + for (int i = 0; i < member_length; i++) + if (!TypeCodeMarshaler.valuesEqual(type.member_type(i), + input_a, input_b)) + return false; + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in struct operations:" + + bds.toString()); + } + + return true; + } + + /** + * Dumps the description of a given TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an enum type. + */ + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + try { + output.print("[TYPECODE]{value "); + ComplexTypeCode.dumpParams(type, output); + output.print(", visibility= "); + output.print(type.type_modifier()); + output.print(", concrete base= "); + TypeCodeDumper.dump(type.concrete_base_type(), output); + + output.print(" {"); + + int length = type.member_count(); + + for (int i = 0; i < length; i++) { + output.print(type.member_visibility(i)); + output.print(' '); + output.print(type.member_name(i)); + output.print(": "); + TypeCodeDumper.dump(type.member_type(i), output); + } + output.print('}'); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in value operations:" + + bk.toString()); + + } + catch (Bounds bds) { + throw new BAD_TYPECODE("Fault in value operations:" + + bds.toString()); + } + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/typecode/WStringTypeCode.java b/source/es/tid/TIDorbj/core/typecode/WStringTypeCode.java new file mode 100644 index 0000000..78fc019 --- /dev/null +++ b/source/es/tid/TIDorbj/core/typecode/WStringTypeCode.java @@ -0,0 +1,198 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.typecode; + +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.OutputStream; + +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * The WStringTypeCode class represents a TypeCode + * object which is associated with an IDL wstring. + * + * @autor Juan A. Ca´ceres + * @version 1.0 + */ + +public class WStringTypeCode extends StringTypeCode +{ + + public WStringTypeCode() + { + m_kind = TCKind.tk_wstring; + } + + public WStringTypeCode(int length) + { + super(length); + m_kind = TCKind.tk_wstring; + + } + + /** + * Skips the value asociated to the TypeCode. This operation is used by the + * TIDorb's Any implementation an the subclass skip_value() + * operations. + * + * @param input + * must be alwais a reference to a CDRInputStream object. + */ + + public static boolean skipValue(TypeCode type, CDRInputStream input) + { + input.skipWstring(); + return true; + } + + /** + * Copies and remarshals the given typecode value marshaled in an + * InputStream to a es.tid.TIDorbj.core.CDRInputStream. This + * method will alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input + * the InputStream where the value is marshaled + * @param output + * the es.tid.TIDorbj.core.CDRInputStream + * @pre the TypeCode must be an wstring type + */ + + public static void remarshalValue(TypeCode type, InputStream input, + OutputStream output) + { + output.write_wstring(input.read_wstring()); + } + + /** + * Compares two InputStream marshaled values of a given TypeCode to a + * es.tid.TIDorbj.core.CDRInputStream. This method will + * alwais be invoked by this stream. + * + * @param type + * the value TypeCode + * @param input_a + * the InputStream where one value is marshaled + * @param input_b + * the InputStream where the value value is + * marshaled + * @pre type must be a wstring type. + */ + + public static boolean valuesEqual(org.omg.CORBA.TypeCode type, + InputStream input_a, InputStream input_b) + { + return (input_a.read_wstring()).equals(input_a.read_wstring()); + } + + /** + * Dumps the description of a given wstring TypeCode. + * + * @param type + * the TypeCode + * @param output + * the output stream where the TypeCode will be dumped + * @pre type must be an wstring type. + */ + + public static void dump(TypeCode type, java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[TYPECODE]{wstring"); + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + + output.print('}'); + } + + /** + * Dumps the description of a the marshaled value of a given TypeCode. + * + * @param type + * the TypeCode + * @param input + * the input stream where the value is marshaled + * @param output + * the output stream where the value will be dumped + * @pre the typecode must be a wstring type + * @return true if if has been possible dump the value. + */ + + public static boolean dumpValue(TypeCode type, InputStream input, + java.io.PrintWriter output) + throws java.io.IOException + { + output.print("[VALUE]{wstring"); + + try { + if (type.length() != 0) { + output.print('<'); + output.print(type.length()); + output.print('>'); + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE("Fault in length() operation:" + + bk.toString()); + } + output.print(": \""); + output.print(input.read_wstring()); + output.print("\"}"); + return true; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/all-wcprops b/source/es/tid/TIDorbj/core/util/.svn/all-wcprops new file mode 100644 index 0000000..c47887b --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/all-wcprops @@ -0,0 +1,167 @@ +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util +END +Mutex.java +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/Mutex.java +END +EnumHolder.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/EnumHolder.java +END +ULongLongHolder.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/ULongLongHolder.java +END +WCharHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/WCharHolder.java +END +LinkedList.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/LinkedList.java +END +RemovableObject.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/RemovableObject.java +END +StringHolder.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/StringHolder.java +END +DestructionState.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/DestructionState.java +END +UseTable.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/UseTable.java +END +FullUseTableException.java +K 25 +svn:wc:ra_dav:version-url +V 106 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/FullUseTableException.java +END +InitialReference.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/InitialReference.java +END +ValueHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/ValueHolder.java +END +HashedLinkedList.java +K 25 +svn:wc:ra_dav:version-url +V 101 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/HashedLinkedList.java +END +Counter.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/Counter.java +END +ULongHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/ULongHolder.java +END +OnlyOneThreadCanWait.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.java +END +AbstractInterfaceHolder.java +K 25 +svn:wc:ra_dav:version-url +V 108 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.java +END +UShortHolder.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/UShortHolder.java +END +Corbaloc.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/478/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/Corbaloc.java +END +BoxedValueHelperFinder.java +K 25 +svn:wc:ra_dav:version-url +V 107 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.java +END +Corbaname.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/Corbaname.java +END +CodeBaseURL.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/CodeBaseURL.java +END +OperationCompletion.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/OperationCompletion.java +END +WStringHolder.java +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/WStringHolder.java +END +RepositoryId.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/RepositoryId.java +END +FixedHolder.java +K 25 +svn:wc:ra_dav:version-url +V 96 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/FixedHolder.java +END +UserExceptionEncoder.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/UserExceptionEncoder.java +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/entries b/source/es/tid/TIDorbj/core/util/.svn/entries new file mode 100644 index 0000000..8a07fca --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/entries @@ -0,0 +1,949 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2007-02-12T15:07:48.674225Z +45 +iredondo + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +WCharHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +8019f1015dc264b1025ba85b442289ea +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2282 + +ULongLongHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +f39daa3131491d45112adbc8458086fb +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2309 + +EnumHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +9ebd588f20357ab3c2f0491a4def172e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2465 + +LinkedList.java +file + + + + +2009-05-27T12:24:02.000000Z +9306034ff357ced25ca8ac83dfa3e18b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6455 + +Mutex.java +file + + + + +2009-05-27T12:24:02.000000Z +598d5727c6b52287e5ecc3994fa6206b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1946 + +RemovableObject.java +file + + + + +2009-05-27T12:24:02.000000Z +745103a181e956ea47ba7c2273ddef38 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1642 + +UseTable.java +file + + + + +2009-05-27T12:24:02.000000Z +6fd1a4cfccb5366cbb8714e35d2897d7 +2007-02-12T15:07:48.674225Z +45 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +8166 + +StringHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +96d4f3879b1b53a1e0b2d188cbd7ace2 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3288 + +DestructionState.java +file + + + + +2009-05-27T12:24:02.000000Z +b82ec57f14ab3a8ac1076770bdc26f2d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1882 + +FullUseTableException.java +file + + + + +2009-05-27T12:24:02.000000Z +f91e33f754a91750aa3bcc4d3f982004 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1771 + +InitialReference.java +file + + + + +2009-05-27T12:24:02.000000Z +8792b4625e70677dcc67a237e46c8cb0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2506 + +ValueHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +c10e0368bd74d39389b193a2a070b502 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3322 + +exception +dir + +Counter.java +file + + + + +2009-05-27T12:24:02.000000Z +18a6cf50d19fb4db705e106b001e1651 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3014 + +HashedLinkedList.java +file + + + + +2009-05-27T12:24:02.000000Z +d81d7271b4b16e78eba52caec429e34f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4244 + +OnlyOneThreadCanWait.java +file + + + + +2009-05-27T12:24:02.000000Z +dca2b1fa3be144fa8de16bff88b5b60f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1817 + +AbstractInterfaceHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +79d60fd9462e85e787ac59658c24132c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3106 + +ULongHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +add7eb150c7dfccac26013e184629dd1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2283 + +UShortHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +3f430c0f1aada26f8c39d4f4da5e9b8d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2290 + +Corbaloc.java +file +478 + + + +2011-04-29T14:42:47.000000Z +c34e01cfa66cb7006728196662bc4c58 +2011-04-29T14:42:47.025714Z +478 +avega +has-props + + + + + + + + + + + + + + + + + + + + +9352 + +BoxedValueHelperFinder.java +file + + + + +2009-05-27T12:24:02.000000Z +14e32e4935cb7ac507cee022f33586c6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2508 + +Corbaname.java +file + + + + +2009-05-27T12:24:02.000000Z +686640edf6ea5acb13e21426df9e2187 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5235 + +CodeBaseURL.java +file + + + + +2009-05-27T12:24:02.000000Z +5e1eb84afe4680847d3856e2fdd57548 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1698 + +OperationCompletion.java +file + + + + +2009-05-27T12:24:02.000000Z +e0668a76dc1e2e131039239cab4f6e89 +2006-08-25T11:13:29.033495Z +35 +ldlfd +has-props + + + + + + + + + + + + + + + + + + + + +3538 + +WStringHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +3d7112933b5d6ce9a9fdc8e788724f4c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3578 + +RepositoryId.java +file + + + + +2009-05-27T12:24:02.000000Z +40fdb1f8d0ddb70dbb8968103695d7da +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6625 + +FixedHolder.java +file + + + + +2009-05-27T12:24:02.000000Z +c247fc751338f53806dd6f256c805f4c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6273 + +UserExceptionEncoder.java +file + + + + +2009-05-27T12:24:02.000000Z +63b3885b8508782ed8ba8c3b679a157b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3087 + diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/AbstractInterfaceHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/AbstractInterfaceHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/AbstractInterfaceHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/BoxedValueHelperFinder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/BoxedValueHelperFinder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/BoxedValueHelperFinder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/CodeBaseURL.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/CodeBaseURL.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/CodeBaseURL.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaloc.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaloc.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaloc.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaname.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaname.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Corbaname.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/Counter.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Counter.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Counter.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/DestructionState.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/DestructionState.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/DestructionState.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/EnumHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/EnumHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/EnumHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/FixedHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/FixedHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/FixedHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/FullUseTableException.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/FullUseTableException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/FullUseTableException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/HashedLinkedList.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/HashedLinkedList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/HashedLinkedList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/InitialReference.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/InitialReference.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/InitialReference.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/LinkedList.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/LinkedList.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/LinkedList.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/Mutex.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Mutex.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/Mutex.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/OnlyOneThreadCanWait.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/OnlyOneThreadCanWait.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/OnlyOneThreadCanWait.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/OperationCompletion.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/OperationCompletion.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/OperationCompletion.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/RemovableObject.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/RemovableObject.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/RemovableObject.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/RepositoryId.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/RepositoryId.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/RepositoryId.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/StringHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/StringHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/StringHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongLongHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongLongHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ULongLongHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/UShortHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UShortHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UShortHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/UseTable.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UseTable.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UseTable.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/UserExceptionEncoder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UserExceptionEncoder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/UserExceptionEncoder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/ValueHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ValueHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/ValueHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/WCharHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/WCharHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/WCharHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/prop-base/WStringHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/prop-base/WStringHolder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/prop-base/WStringHolder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/AbstractInterfaceHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/AbstractInterfaceHolder.java.svn-base new file mode 100644 index 0000000..bc7d13c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/AbstractInterfaceHolder.java.svn-base @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.TypeCode; + +/** + * Particular Holder for ValueTypes, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class AbstractInterfaceHolder + implements org.omg.CORBA.portable.Streamable +{ + + public java.lang.Object value; + + public TypeCode abstract_typecode; + + public AbstractInterfaceHolder(TypeCode type) + { + abstract_typecode = type; + } + + public AbstractInterfaceHolder(TypeCode type, java.lang.Object initial) + { + abstract_typecode = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + if (is instanceof org.omg.CORBA_2_3.portable.InputStream) { + org.omg.CORBA_2_3.portable.InputStream in_2_3 = + (org.omg.CORBA_2_3.portable.InputStream) is; + value = + in_2_3.read_abstract_interface(); + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (os instanceof org.omg.CORBA_2_3.portable.OutputStream) { + org.omg.CORBA_2_3.portable.OutputStream os_2_3 = + (org.omg.CORBA_2_3.portable.OutputStream) os; + os_2_3.write_abstract_interface(value); + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return abstract_typecode; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/BoxedValueHelperFinder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/BoxedValueHelperFinder.java.svn-base new file mode 100644 index 0000000..5e214c0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/BoxedValueHelperFinder.java.svn-base @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public abstract class BoxedValueHelperFinder +{ + public static Class findHelper(java.io.Serializable boxed_value) + { + StringBuffer buff = new StringBuffer(); + + Package pkg = boxed_value.getClass().getPackage(); + + if (pkg != null) { + + String pkg_str = pkg.getName(); + + if (pkg_str.length() > 0) { + buff.append(pkg_str); + buff.append('.'); + } + } + + buff.append(boxed_value.getClass().getName()); + buff.append("Helper"); + + String helper_name = buff.toString(); + + try { + return Class.forName(helper_name); + + } + catch (ClassNotFoundException cnf) { + return null; + } + catch (OutOfMemoryError om) { + throw new org.omg.CORBA.NO_MEMORY(); + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/CodeBaseURL.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/CodeBaseURL.java.svn-base new file mode 100644 index 0000000..57c4fb9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/CodeBaseURL.java.svn-base @@ -0,0 +1,53 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class CodeBaseURL +{ + public CodeBaseURL(String url) + { + m_url = url; + } + + public String m_url; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaloc.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaloc.java.svn-base new file mode 100644 index 0000000..92fd629 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaloc.java.svn-base @@ -0,0 +1,274 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.StringTokenizer; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.ListenPoint; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.poa.OID; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.TranslateURLEscapes; + +//TODO: put this together with into IIOPCorbaloc +public class Corbaloc +{ + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc; + String addr; + String path; + String v; + String l; + + ObjectKey objectkey; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:tidorbj:")) { + corbaloc = corbaloc_URL.substring(17); + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = parseVersion(v); + } + } + l = staddr.nextToken(); + listener = parseListenPoint(l); + path = corbaloc.substring(slashposition + 1); + objectkey = parsePOAPath(path); + } else + throw new InvalidName("Invalid TIDorbJ corbaloc"); + profiles = new IIOPProfile[1]; + profiles[0] = new IIOPProfile(version, listener, objectkey, null); + return new IIOPIOR( "", profiles ); + } + + private static ObjectKey parsePOAPath(String poa_path) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String[] poa_path_a; + String path; + String oid_str; + int ntokens; + OID oid; + POAKey poakey; + ObjectKey objectkey; + path = TranslateURLEscapes.putEscapes(poa_path); + if (path.indexOf("//") != -1) + throw new org.omg.CORBA.ORBPackage.InvalidName("Invalid POA Name"); + StringTokenizer stpath = new StringTokenizer(path, "/", false); + ntokens = stpath.countTokens(); + poa_path_a = new String[ntokens - 1]; + for (int i = 0; i < ntokens - 1; i++) { + poa_path_a[i] = + TranslateURLEscapes.translateUnicode( + TranslateURLEscapes.resolveEscapes(stpath.nextToken())); + } + oid_str = TranslateURLEscapes.resolveEscapes(stpath.nextToken()); + try { + oid = OID.fromString(oid_str); + } + catch (java.lang.Exception e) { + throw new org.omg.CORBA.ORBPackage.InvalidName("Invalid OID"); + } + poakey = new POAKey(poa_path_a, 0L, oid); + return poakey; + } + + public static GIOPVersion parseVersion(String v) + throws org.omg.CORBA.ORBPackage.InvalidName + { + int major, minor; + int ntokens; + GIOPVersion version; + StringTokenizer stversion = new StringTokenizer(v, ".", false); + ntokens = stversion.countTokens(); + if (ntokens == 2) { + major = Integer.parseInt(stversion.nextToken()); + minor = Integer.parseInt(stversion.nextToken()); + if (major == 1) { + if (minor == 0) + version = GIOPVersion.VERSION_1_0; + else if (minor == 1) + version = GIOPVersion.VERSION_1_1; + else if (minor == 2) + version = GIOPVersion.VERSION_1_2; + else + throw new InvalidName("Invalid Minor GIOPVersion Number"); + + } else + throw new InvalidName("Invalid Major GIOPVersion Number"); + } else + throw new InvalidName("Invalid GIOPVersion"); + return version; + } + + + public static ListenPoint parseListenPoint(String listenp) + throws org.omg.CORBA.ORBPackage.InvalidName + { + System.out.println("IIOPCorbaloc parseListenPoint"); + String host; + int port; + int ntokens; + /*StringTokenizer stlistenpoint = + new StringTokenizer(listenp, ":", false); + ntokens = stlistenpoint.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Listener Name"); + else {*/ + int ipv6SeperatorStart = -1; + int ipv6SeperatorEnd = -1; + int sep; + ipv6SeperatorStart = listenp.indexOf('['); + if (ipv6SeperatorStart != -1) + { + ipv6SeperatorEnd = listenp.indexOf(']'); + if (ipv6SeperatorEnd == -1) + { + throw new InvalidName("Invalid Listener Name"); + } + } + + sep = listenp.indexOf(':'); + if( sep != -1 ) + { + if (ipv6SeperatorStart != -1) //IPv6 + { + host=listenp.substring(ipv6SeperatorStart+1, ipv6SeperatorEnd); + if (listenp.charAt(ipv6SeperatorEnd+1) == ':') + { + try + { + port=(short)Integer.parseInt(listenp.substring(ipv6SeperatorEnd+2)); + } + catch( NumberFormatException ill ) + { + throw new InvalidName("Invalid Listener Name"); + } + } + else + { + throw new InvalidName("Invalid Listener Name"); + } + } + else //IPv4 or hostname + { + try + { + port =(short)Integer.parseInt(listenp.substring(sep+1)); + host = listenp.substring(0, sep); + } + catch( NumberFormatException ill ) + { + throw new InvalidName("Invalid Listener Name"); + } + } + } + //mcpg - end + else + { + host = listenp; + port = 2809; + } + /*host = stlistenpoint.nextToken(); + if (ntokens == 1) { + port = 2809; + } else { + port = Integer.parseInt(stlistenpoint.nextToken()); + }*/ + + return new ListenPoint(host, port); + } + + public static String toURL(IOR ior) + { + String corbaloc = "corbaloc:tidorbj:"; + IIOPProfile p = (IIOPProfile) ior.getProfile(0); + GIOPVersion v = p.getVersion(); + ListenPoint l = p.getListenPoint(); + ObjectKey o = p.getObjectKey(); + + POAKey k; + try { + k = POAKey.createKey( o.getMarshaledKey() ); + } catch ( Throwable th ){ + throw new BAD_PARAM( + "Non persistent reference", 0, CompletionStatus.COMPLETED_NO + ); + } + + if (k.getPOAId() != 0L) { + throw new BAD_PARAM( + "Non persistent reference", 0, CompletionStatus.COMPLETED_NO); + } + OID oid = k.getOID(); + corbaloc += v.getMajor() + "." + v.getMinor() + "@"; + corbaloc += l.m_host + ":" + l.m_port + "/"; + for (int i = 0; i < k.numberOfPOAs(); i++) + corbaloc += TranslateURLEscapes.stringfy(k.getPOA(i)) + "/"; + corbaloc += TranslateURLEscapes.stringfy(oid.toString()); + return corbaloc; + } + +} diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaname.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaname.java.svn-base new file mode 100644 index 0000000..8ef00e9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/Corbaname.java.svn-base @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.StringTokenizer; + +import org.omg.CosNaming.NameComponent; +import org.omg.CosNaming.NamingContextPackage.InvalidName; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.TranslateURLEscapes; + +public class Corbaname +{ + + public static org.omg.CORBA.Object toObject(TIDORB tidorb, + String corbaname_URL) + throws org.omg.CosNaming.NamingContextPackage.InvalidName, + org.omg.CosNaming.NamingContextPackage.NotFound, + org.omg.CosNaming.NamingContextPackage.CannotProceed, + org.omg.CORBA.ORBPackage.InvalidName + { + String corbaname; + int nameposition; + org.omg.CosNaming.NameComponent[] name_path; + org.omg.CosNaming.NamingContext ncontext; + if (corbaname_URL.startsWith("corbaname:")) { + corbaname = corbaname_URL.substring(10); + nameposition = corbaname.indexOf('#'); + ncontext = + parseProtocol(tidorb, corbaname.substring(0, + nameposition)); + name_path = toName(corbaname.substring(nameposition + 1)); + return ncontext.resolve(name_path); + } else + throw new InvalidName(); /* Invalid corbaname" */ + + } + + private static org.omg.CosNaming.NamingContext + parseProtocol(TIDORB tidorb, + String protocol) + throws org.omg.CosNaming.NamingContextPackage.InvalidName, + org.omg.CORBA.ORBPackage.InvalidName + { + if (protocol.equals("rir:") || protocol.equals("rir:/NameService")) { + org.omg.CORBA.Object naming_ref = + tidorb.resolve_initial_references("NameService"); + return org.omg.CosNaming.NamingContextHelper.narrow(naming_ref); + } else + throw new InvalidName(); + } + + public static org.omg.CosNaming.NameComponent[] toName(String sn) + throws org.omg.CosNaming.NamingContextPackage.InvalidName + { + int ntokensn, ntokenscmp; + String name = ""; + String component = ""; + String id; + String kind; + name = TranslateURLEscapes.putEscapes(sn); + if (name.indexOf("//") != -1) + throw new InvalidName(); + StringTokenizer stname = new StringTokenizer(name, "/", false); + ntokensn = stname.countTokens(); + org.omg.CosNaming.NameComponent[] n = + new org.omg.CosNaming.NameComponent[ntokensn]; + for (int i = 0; i < ntokensn; i++) { + id = ""; + kind = ""; + component = stname.nextToken(); + StringTokenizer stcomp = new StringTokenizer(component, ".", false); + ntokenscmp = stcomp.countTokens(); + if (ntokenscmp > 2) + throw new InvalidName(); + if (!(ntokenscmp <= 1 && component.charAt(0) == '.')) + id = TranslateURLEscapes.resolveEscapes(stcomp.nextToken()); + if (stcomp.countTokens() == 1) + kind = TranslateURLEscapes.resolveEscapes(stcomp.nextToken()); + n[i] = new NameComponent(id, kind); + } + return n; + } + + public static String toString(org.omg.CosNaming.NameComponent[] n) + { + String id; + String kind; + String sn = ""; + for (int i = 0; i < n.length; i++) { + id = TranslateURLEscapes.stringfy(n[i].id); + kind = TranslateURLEscapes.stringfy(n[i].kind); + sn = sn + id; + if (!kind.equals("")) + sn = sn + "." + kind; + if (i < n.length - 1) + sn = sn + "/"; + } + return sn; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/Counter.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/Counter.java.svn-base new file mode 100644 index 0000000..4be3c49 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/Counter.java.svn-base @@ -0,0 +1,130 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Simple syncrhonized counter. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class Counter +{ + + /** + * IIOPConnection state. + */ + private int m_value; + + public Counter() + { + m_value = 0; + } + + synchronized public int getValue() + { + return m_value; + } + + synchronized public boolean isZero() + { + return (m_value == 0); + } + + synchronized public boolean isNonZero() + { + return (m_value != 0); + } + + /** + * Increments the counter 1 unity. + * + * @return the new value of the counter. + */ + synchronized public int inc() + { + m_value++; + return m_value; + } + + /** + * Decrements the counter 1 unity. + * + * @return the new value of the counter. + */ + synchronized public int dec() + { + if (m_value > 0) + m_value--; + return m_value; + } + + /** + * Increments the counter 1 unity. + * + * @return the previous value of the counter. + */ + synchronized public int postInc() + { + int post_value = m_value; + m_value++; + return post_value; + } + + /** + * Decrements the counter 1 unity. + * + * @return the previous value of the counter. + */ + + synchronized public int postDec() + { + int post_value = m_value; + + if (m_value > 0) + m_value--; + return post_value; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/DestructionState.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/DestructionState.java.svn-base new file mode 100644 index 0000000..353ba5f --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/DestructionState.java.svn-base @@ -0,0 +1,64 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class DestructionState +{ + + private boolean m_destroyed; + + public DestructionState() + { + m_destroyed = false; + } + + synchronized public void destroy() + { + m_destroyed = true; + } + + synchronized public boolean isDestroyed() + { + return m_destroyed; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/EnumHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/EnumHolder.java.svn-base new file mode 100644 index 0000000..08ce69a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/EnumHolder.java.svn-base @@ -0,0 +1,88 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Particular Holder for ULong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class EnumHolder + implements org.omg.CORBA.portable.Streamable +{ + + public int value; + + public es.tid.TIDorbj.core.typecode.EnumTypeCode enum_type; + + public EnumHolder(es.tid.TIDorbj.core.typecode.EnumTypeCode type) + { + value = 0; + enum_type = type; + } + + public EnumHolder(es.tid.TIDorbj.core.typecode.EnumTypeCode type, + int initial) + { + value = initial; + enum_type = type; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return enum_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/FixedHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/FixedHolder.java.svn-base new file mode 100644 index 0000000..695cdc2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/FixedHolder.java.svn-base @@ -0,0 +1,208 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * Particular Holder for FixedType. + * + * @autor Juan A. Ca´ceres + * @version 0.1 + */ + +public class FixedHolder + implements org.omg.CORBA.portable.Streamable +{ + + TypeCode m_fixed_type; + + public java.math.BigDecimal value; + + public FixedHolder(TypeCode type) + { + m_fixed_type = type; + value = null; + } + + public FixedHolder(TypeCode type, java.math.BigDecimal initial) + { + m_fixed_type = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + int value_length = FixedTypeCode.valueLength(m_fixed_type); + + StringBuffer buffer = new StringBuffer(value_length); + + int pairs = value_length / 2; + + try { + + for (int i = 1; i < pairs; i++) { + byte octet = is.read_octet(); + buffer.append(Base16Codec.getDigit(0xf & (octet >> 4))); + buffer.append(Base16Codec.getDigit(0xf & octet)); + } + + // last pair + byte octet = is.read_octet(); + + buffer.append(Base16Codec.getDigit(0xf & (octet >> 4))); + + boolean positive; + switch (0xf & octet) + { + case 0xD: + positive = false; + break; + case 0xC: + positive = true; + break; + default: + throw new MARSHAL("Fixed_read: Invalid signum value", 0, + CompletionStatus.COMPLETED_NO); + } + + BigInteger value_int = new BigInteger(buffer.toString()); + + if (positive) + value = new BigDecimal(value_int, m_fixed_type.fixed_scale()); + else + value = new BigDecimal(value_int.negate(), + m_fixed_type.fixed_scale()); + + } + catch (MARSHAL m) { + throw m; + } + catch (Exception e) { + throw new MARSHAL(e.getMessage(), 0, CompletionStatus.COMPLETED_NO); + } + + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (value == null) + value = new BigDecimal(0.0); + + int value_length = FixedTypeCode.valueLength(m_fixed_type); + + int digits = 0; + try { + + digits = m_fixed_type.fixed_digits(); + } + catch (BadKind bk) {/* unreachable */} + + BigInteger unscaled = value.setScale(0).toBigInteger(); + + char[] literal = unscaled.toString().toCharArray(); + + int literal_count = (value.signum() < 0) ? 1 : 0;//skip the signum char + + int literal_digits = literal.length - literal_count; + + if (digits < literal_digits) + throw new MARSHAL("Fixed Overflow.", 0, + CompletionStatus.COMPLETED_NO); + + int value_pairs = (literal_digits - 1) / 2; // number of digit_digit + // octets + // 1 is substracted from literals represents + //the last digit int digit_signum pair + + int zero_value_pairs = (literal_digits - 1) % 2; // 0_digit octet is 0 + // or 1 + int zero_pairs = (value_length / 2) - zero_value_pairs - value_pairs + - 1; + // 0_0 octets + // 1 is substracted from zero_pairs represents the zero_signum pair + + for (int i = 0; i < zero_pairs; i++) + write_pair(os, 0, 0); + + try { + if (zero_value_pairs != 0) + write_pair(os, 0, + Base16Codec.getValue(literal[literal_count++])); + + for (int i = 0; i < zero_pairs; i++) + write_pair(os, Base16Codec.getValue(literal[literal_count++]), + Base16Codec.getValue(literal[literal_count++])); + + write_pair(os, Base16Codec.getValue(literal[literal_count++]), + (value.signum() < 0) ? 0xD : 0xC); + } + catch (MARSHAL m) { + throw m; + } + catch (Exception e) { + throw new MARSHAL(e.getMessage(), 0, CompletionStatus.COMPLETED_NO); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return m_fixed_type; + } + + static void write_pair(org.omg.CORBA.portable.OutputStream os, int digit1, + int digit2) + { + os.write_octet((byte) ((digit1 << 4) | (digit2))); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/FullUseTableException.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/FullUseTableException.java.svn-base new file mode 100644 index 0000000..c62b154 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/FullUseTableException.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class FullUseTableException extends Exception +{ + + public FullUseTableException() + { + super(); + } + + public FullUseTableException(String s) + { + super(s); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/HashedLinkedList.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/HashedLinkedList.java.svn-base new file mode 100644 index 0000000..5075d87 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/HashedLinkedList.java.svn-base @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class HashedLinkedList extends LinkedList +{ + + public HashedLinkedList(int maximumSize) + { + super(maximumSize); + m_table = new java.util.Hashtable(); + } + + /** + * @param object + * represents the key & item to be saved in the hashtable + */ + public void append(Object object) + throws Exception + { + append(object, object); + } + + public void append(Object key, Object item) + throws Exception + { + super.append(item); + m_table.put(key, new Integer(getLast())); + } + + public Object get(Object key) + { + Integer index = (Integer) m_table.get(key); + return getObjectAt(index.intValue()); + } + + public boolean object_exist(Object key) + { + return (m_table.get(key) != null); + } + + protected int getIndex(Object key) + { + Integer index = (Integer) m_table.get(key); + + if (index == null) + return -1; + + return index.intValue(); + } + + public Object remove(Object key) + { + + Integer index = (Integer) m_table.get(key); + if (index == null) { + return null; + } + Object removed = internalRemove(index.intValue()); + m_table.remove(key); + return removed; + } + + public Object removeFirst() + { + Object removed = super.removeFirst(); + m_table.remove(removed); + return removed; + } + + public Object removeLast() + { + Object removed = super.removeLast(); + m_table.remove(removed); + return removed; + } + + public java.util.Enumeration getKeys() + { + return m_table.keys(); + } + + /* + * public void dump(java.io.PrintStream os) { super.dump(os); + * os.print("Keys: ["); for (java.util.Enumeration enum = _table.keys(); + * enum.hasMoreElements(); ) { os.print(enum.nextElement()); if + * (enum.hasMoreElements()) os.print(", "); } os.println("]"); } + */ + + protected java.util.Hashtable m_table; + + /* + * public static void main(String[] args) { HashedLinkedList l = new + * HashedLinkedList(10); l.append(new Integer(1)); l.append(new Integer(2)); + * l.append(new Integer(3)); l.append(new Integer(4)); l.append(new + * Integer(5)); l.append(new Integer(6)); l.append(new Integer(7)); + * l.append(new Integer(8)); l.append(new Integer(9)); l.append(new + * Integer(10)); System.out.println("-------"); l.dump(System.out); + * l.remove(new Integer(7)); System.out.println("-------"); + * l.dump(System.out); l.removeFirst(); System.out.println("-------"); + * l.dump(System.out); System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/InitialReference.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/InitialReference.java.svn-base new file mode 100644 index 0000000..f78e24a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/InitialReference.java.svn-base @@ -0,0 +1,89 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.BAD_PARAM; + +public class InitialReference +{ + String m_service_name; + + String m_service_url; + + public InitialReference() + { + m_service_name = null; + m_service_url = null; + } + + public InitialReference(String name, String url) + { + m_service_name = name; + m_service_url = url; + } + + public String getName() + { + return m_service_name; + } + + public String getURL() + { + return m_service_url; + } + + public void parse(String value) + { + java.util.StringTokenizer tokenizer = + new java.util.StringTokenizer(value, "="); + + if (tokenizer.countTokens() != 2) + throw new BAD_PARAM( "Invalid -ORBInitRef value: it does not match" + + " = pattern"); + + m_service_name = tokenizer.nextToken(); + m_service_url = tokenizer.nextToken(); + } + +} + diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/LinkedList.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/LinkedList.java.svn-base new file mode 100644 index 0000000..9b8d5d2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/LinkedList.java.svn-base @@ -0,0 +1,239 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class LinkedList +{ + + protected static int NULL = -1; + + public LinkedList(int maximumSize) + { + m_maximum_size = maximumSize; + m_next = new int[maximumSize]; + m_previous = new int[maximumSize]; + m_free_indexes = new int[maximumSize]; + m_objects = new Object[maximumSize]; + m_last_free = maximumSize - 1; + for (int i = 0; i < maximumSize; i++) { + m_free_indexes[i] = i; + } + m_first = NULL; + m_last = NULL; + } + + public void append(Object object) + throws Exception + { + if (m_last_free < 0) { + throw new Exception("Not enough space in linked list of size " + + m_maximum_size + "!!"); + } + int index = m_free_indexes[m_last_free]; + m_last_free -= 1; + if (m_first >= 0) { + m_next[m_last] = index; + m_objects[index] = object; + m_next[index] = NULL; + m_previous[index] = m_last; + m_last = index; + } else { + m_first = index; + m_last = index; + m_objects[index] = object; + m_next[index] = NULL; + m_previous[index] = NULL; + } + } + + public Object removeFirst() + { + return internalRemove(m_first); + } + + public Object removeLast() + { + return internalRemove(m_last); + } + + public java.util.Enumeration elements() + { + return new LinkedListEnumeration(this); + } + + public int getSize() + { + return m_maximum_size - m_last_free - 1; + } + + public int getMaximumSize() + { + return m_maximum_size; + } + + public void dump(java.io.PrintStream os) + { + int i = m_first; + os.print("["); + while (i > NULL) { + os.print(m_objects[i]); + i = m_next[i]; + if (i > NULL) + os.print(", "); + } + os.println("]"); + } + + /** + * @param pos + * internal index of object to remove (it must be a legal + * position) + */ + protected Object internalRemove(int pos) + { + Object removed = m_objects[pos]; + if (pos != m_first) + m_next[m_previous[pos]] = m_next[pos]; + else + m_first = m_next[pos]; + if (pos != m_last) + m_previous[m_next[pos]] = m_previous[pos]; + else + m_last = m_previous[pos]; + m_last_free += 1; + m_free_indexes[m_last_free] = pos; + return removed; + } + + protected int getLast() + { + return m_last; + } + + protected int getFirst() + { + return m_first; + } + + protected int getNext(int index) + { + return m_next[index]; + } + + protected int getPrevious(int index) + { + return m_previous[index]; + } + + protected Object getObjectAt(int index) + { + return m_objects[index]; + } + + // Maximum size + private int m_maximum_size; + + // Arrays for objects and indexes + private int[] m_next = null; + + private int[] m_previous = null; + + private int[] m_free_indexes = null; + + private Object[] m_objects = null; + + // Indexes + private int m_last_free; + + private int m_first; + + private int m_last; + + /** + * Enumeration support. + */ + protected class LinkedListEnumeration + implements java.util.Enumeration + { + + public LinkedListEnumeration(LinkedList list) + { + _list = list; + _index = _list.m_first; + } + + public boolean hasMoreElements() + { + return (_index != NULL); + } + + public Object nextElement() + { + int i = _index; + _index = _list.m_next[_index]; + return _list.m_objects[i]; + } + + private int _index; + + private LinkedList _list; + } + + // Main - test method + /* + * public static void main(String[] args) { LinkedList l = new + * LinkedList(10); l.append(new Integer(1)); l.append(new Integer(2)); + * l.append(new Integer(3)); l.append(new Integer(4)); l.append(new + * Integer(5)); l.append(new Integer(6)); l.append(new Integer(7)); + * l.append(new Integer(8)); l.append(new Integer(9)); l.append(new + * Integer(10)); System.out.println("-------"); l.dump(System.out); + * l.removeLast(); System.out.println("-------"); l.dump(System.out); + * l.removeFirst(); System.out.println("-------"); l.dump(System.out); + * l.append(new Integer(11)); System.out.println("-------"); + * l.dump(System.out); l.append(new Integer(12)); + * System.out.println("-------"); l.dump(System.out); l.removeFirst(); + * System.out.println("-------"); l.dump(System.out); l.removeLast(); + * System.out.println("-------"); l.dump(System.out); + * System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/Mutex.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/Mutex.java.svn-base new file mode 100644 index 0000000..b918409 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/Mutex.java.svn-base @@ -0,0 +1,69 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class Mutex +{ + + boolean m_value; + + public Mutex() + { + m_value = false; + } + + public synchronized void enter() + throws java.lang.InterruptedException + { + while (m_value) { + wait(); + } + m_value = false; + } + + public synchronized void exit() + { + m_value = false; + notify(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/OnlyOneThreadCanWait.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/OnlyOneThreadCanWait.java.svn-base new file mode 100644 index 0000000..6c1bf3c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/OnlyOneThreadCanWait.java.svn-base @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * It is thrown if the restriction of a OperationCompletion than only one thread + * can wait, has been violated. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class OnlyOneThreadCanWait extends java.lang.Exception +{ + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/OperationCompletion.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/OperationCompletion.java.svn-base new file mode 100644 index 0000000..2aaf35f --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/OperationCompletion.java.svn-base @@ -0,0 +1,131 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Manages the completion status of an operation. + *

+ * Also, makes one thread to wait the completion. + *

+ * The status are: + *

    + *
  • INITIAL: the operation is not completed and there is not + * any Thread waiting for the completion + *
  • WAITING: there is a Thread that is waiting for the completion + *
  • COMPLETED: the operation is completed. + *
+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class OperationCompletion +{ + + public final static int INITIAL = 0; + + public final static int WAITING = 1; + + public final static int COMPLETED = 2; + + /** + * The Completion status. + */ + int m_state; + + public OperationCompletion() + { + m_state = INITIAL; + } + + /** + * @return whether or not the operation is completed + */ + public synchronized boolean isCompleted() + { + return m_state == COMPLETED; + } + + /** + * The operation is completed. + *

+ * If there is a thread waiting for the completion notifies it. + */ + public synchronized void setCompleted() + { + int actual_state = m_state; + + m_state = COMPLETED; + + if (actual_state == WAITING) + notify(); + } + + /** + * Makes a thread wait for the operation completion (with a timeout). + * + * @timeout the timeout + */ + public synchronized void waitForCompletion(long timeout) + throws java.lang.InterruptedException, + es.tid.TIDorbj.core.util.OnlyOneThreadCanWait + { + if (m_state == INITIAL) { + m_state = WAITING; + wait(timeout); + } else if (m_state == WAITING) { + throw new es.tid.TIDorbj.core.util.OnlyOneThreadCanWait(); + } + // else do nothing, is completed + } + + /** + * If there is a thread waiting for the completion notifies it. + * + */ + public synchronized void interruptWaiting() + { + notify(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/RemovableObject.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/RemovableObject.java.svn-base new file mode 100644 index 0000000..e0321bf --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/RemovableObject.java.svn-base @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public interface RemovableObject +{ + + boolean canBeRemoved(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/RepositoryId.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/RepositoryId.java.svn-base new file mode 100644 index 0000000..b9cf981 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/RepositoryId.java.svn-base @@ -0,0 +1,207 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class RepositoryId +{ + + public String m_value; + + public RepositoryId(String value) + { + m_value = value; + } + + public static String className(String repId) + { + if (repId.equals("IDL:omg.org/CORBA/WStringValue:1.0")) { + return "java.lang.String"; + } else if (repId.startsWith("IDL:")) { + // cut "IDL:" and version + // and swap "org.omg" if necessary + + String id_base = repId.substring(4, repId.lastIndexOf(':')); + if (id_base.startsWith("omg.org")) + return ir2scopes("org.omg", id_base.substring(7)); + else + return ir2scopes("", id_base); + } else if (repId.startsWith("RMI:")) { + return repId.substring(4, repId.indexOf(':', 4)); + } else { + throw new RuntimeException("unrecognized RepositoryID: " + repId); + } + } + + /** + * @return java.lang.String + */ + + private static String ir2scopes(String prefix, String s) + { + if (s.indexOf("/") < 0) + return s; + java.util.StringTokenizer strtok = + new java.util.StringTokenizer(s, "/"); + + int count = strtok.countTokens(); + StringBuffer sb = new StringBuffer(); + sb.append(prefix); + + for (int i = 0; strtok.hasMoreTokens(); i++) { + String sc = strtok.nextToken(); + Class c = null; + if (sb.toString().length() > 0) + c = loadClass(sb.toString() + "." + sc); + else + c = loadClass(sc); + if (c == null) + if (sb.toString().length() > 0) + sb.append("." + sc); + else + sb.append(sc); + else if (i < count - 1) + sb.append("." + sc + "Package"); + else + sb.append("." + sc); + } + + return sb.toString(); + } + + public static String repId(Class c) + { + if (org.omg.CORBA.portable.IDLEntity.class.isAssignableFrom(c)) { + String className = c.getName(); + String head = ""; + String body = ""; + + // add "IDL:" and ":1.0" + // and swap "org.omg" if necessary + + if (className.startsWith("org.omg") + || className.startsWith("org/omg")) { + if (className.length() > 7) + body = className.substring(7); + return "IDL:omg.org/" + scopesToIR(body) + ":1.0"; + } else + return "IDL:" + scopesToIR(className) + ":1.0"; + } else + return javax.rmi.CORBA.Util.createValueHandler() + .getRMIRepositoryID(c); + } + + private static String scopesToIR(String s) + { + if (s.indexOf(".") < 0) + return s; + java.util.StringTokenizer strtok = + new java.util.StringTokenizer(s, "."); + + String scopes[] = new String[strtok.countTokens()]; + + for (int i = 0; strtok.hasMoreTokens(); i++) { + String sc = strtok.nextToken(); + if (sc.endsWith("Package")) + scopes[i] = sc.substring(0, sc.indexOf("Package")); + else + scopes[i] = sc; + } + + StringBuffer sb = new StringBuffer(); + if (scopes.length > 1) { + for (int i = 0; i < scopes.length - 1; i++) + sb.append(scopes[i] + "/"); + } + + sb.append(scopes[scopes.length - 1]); + return sb.toString(); + } + + /** + * convert a class name to a Repository ID
+ * classname - the class name to convert resolveClass - indicates whether + * the method should try to resolve and load the class. If true and the + * class could not be loaded, an IllegalArgumentException will be thrown + */ + + public static String toRepositoryID(String className, boolean resolveClass) + { + if (className.equals("") || className.startsWith("IDL:") + || className.startsWith("RMI:")) + return className; + else { + if (resolveClass) { + + Class c = loadClass(className); + if (c == null) + throw new IllegalArgumentException("cannot find class: " + + className); + else + return repId(c); + } + return "IDL:" + className + ":1.0"; + } + } + + public static String toRepositoryID(String className) + { + return toRepositoryID(className, true); + } + + /** + * Loads class `name' using an appropriate class loader. Returns the + * corresponding class object, or null if the class loader cannot find a + * class by that name. + */ + private static Class loadClass(String name) + { + try { + return Thread.currentThread().getContextClassLoader() + .loadClass(name); + } + catch (ClassNotFoundException e) { + return null; + } + } +} + diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/StringHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/StringHolder.java.svn-base new file mode 100644 index 0000000..2e63024 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/StringHolder.java.svn-base @@ -0,0 +1,117 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WString, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class StringHolder + implements org.omg.CORBA.portable.Streamable +{ + + public TypeCode string_type; + + public String value = null; + + public StringHolder() + { + string_type = TypeCodeFactory.tc_string; + } + + public StringHolder(TypeCode type) + { + string_type = type; + } + + public StringHolder(TypeCode type, String initial) + { + string_type = type; + value = initial; + } + + public StringHolder(String initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_string(); + try { + if (string_type.length() != 0) + if (value.length() > string_type.length()) + throw new MARSHAL("String out of bounds."); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + if (string_type.length() != 0) + if (value.length() > string_type.length()) + throw new MARSHAL("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + os.write_string(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return string_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongHolder.java.svn-base new file mode 100644 index 0000000..577549a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongHolder.java.svn-base @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for ULongLong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ULongHolder + implements org.omg.CORBA.portable.Streamable +{ + + public int value; + + public ULongHolder() + {} + + public ULongHolder(int initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ulong; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongLongHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongLongHolder.java.svn-base new file mode 100644 index 0000000..e73c45a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/ULongLongHolder.java.svn-base @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for ULongLong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ULongLongHolder + implements org.omg.CORBA.portable.Streamable +{ + + public long value; + + public ULongLongHolder() + {} + + public ULongLongHolder(long initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulonglong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulonglong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ulonglong; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/UShortHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/UShortHolder.java.svn-base new file mode 100644 index 0000000..f303068 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/UShortHolder.java.svn-base @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for UShort, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ +final public class UShortHolder + implements org.omg.CORBA.portable.Streamable +{ + + public short value; + + public UShortHolder() + {} + + public UShortHolder(short initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ushort(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ushort(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ushort; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/UseTable.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/UseTable.java.svn-base new file mode 100644 index 0000000..a2f3933 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/UseTable.java.svn-base @@ -0,0 +1,247 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.Enumeration; +import java.util.Vector; + +public class UseTable extends HashedLinkedList +{ + + public UseTable(int maximumSize) + { + super(maximumSize); + m_use = new int[maximumSize]; + m_round = 0; + m_used_conections = 0; + m_removed_objects = null; + } + + synchronized public void append(Object object) + throws FullUseTableException + { + append(object, object); + } + + synchronized public void append(Object key, Object item) + throws FullUseTableException + { + // Remove elements if needed + m_removed_objects = removeOldObjects(); + + /* + * if (_removedObjects != null) { + * System.out.println("Round: " + _round + + * "Eliminando conexiones: " + _removedObjects.length); } + */ + + if (getSize() == getMaximumSize()) { + throw new + FullUseTableException("Not enough space to append a new object"); + } + + // Append new element + try { + super.append(key, item); + } + catch (Exception e) { + // should never happen!! + } + if (m_round == Integer.MAX_VALUE) { + // Should check if count == maxInteger !! + } + // Initialize round + m_use[getLast()] = m_round - 1; + } + + synchronized public void use(Object key) + { + // Update round + int i = getIndex(key); + + if (i < 0) + return; + + if (m_use[i] != m_round) { + m_used_conections++; + if (m_used_conections > (getMaximumSize() / 2)) { + m_round++; + m_used_conections = 0; + } + } + + // Update linked list of elements + Object removed = remove(key); + try { + append(key, removed); + } + catch (Exception e) { + // should never happen! + } + m_use[getLast()] = m_round; + } + + synchronized public Object[] getRemovedObjects() + { + return m_removed_objects; + } + + protected Object[] removeOldObjects() + { + + Vector removed = new Vector(); + Vector reinsertedKeys = new Vector(); + Vector reinsertedObjects = new Vector(); + + if (getSize() > getMaximumSize() * 0.8) { + do { + int firstRound = m_use[getFirst()]; + int maxRemoved = (int) (getMaximumSize() * 0.5); + for (Enumeration myenum = getKeys(); myenum.hasMoreElements();) { + Object obj = myenum.nextElement(); + int i = getIndex(obj); + if (m_use[i] <= (m_round - 4)) { + removed.addElement(obj); + } + } + + for (int j = 0; j < removed.size(); j++) { + Object key = removed.elementAt(j); + if (key instanceof RemovableObject) { + RemovableObject removableKey = (RemovableObject) key; + if (!removableKey.canBeRemoved()) { + Object obj = get(key); + reinsertedKeys.addElement(key); + reinsertedObjects.addElement(obj); + removed.removeElement(key); + } + } + remove(key); + } + + if ((getSize() + reinsertedKeys.size()) >= getMaximumSize()) { + m_round++; + } + } while ((getSize() > 0) + && (getSize() + reinsertedKeys.size()) + >= getMaximumSize()); + } + + try { + for (int j = 0; j < reinsertedKeys.size(); j++) { + super.append(reinsertedKeys.elementAt(j), + reinsertedObjects.elementAt(j)); + } + } + catch (Exception e) { + // should never happen!! + } + + if (reinsertedKeys.size() == getSize()) { + return null; + } + + if (removed.size() != 0) { + Object[] res = new Object[removed.size()]; + removed.copyInto(res); + return res; + } else + return null; + } + + public void dump(java.io.PrintStream os) + { + super.dump(os); + int i = getFirst(); + os.print("Uses: ["); + while (i > NULL) { + os.print(m_use[i]); + i = getNext(i); + if (i > NULL) + os.print(", "); + } + os.println("]"); + } + + private int[] m_use; + + private int m_round; + + private int m_used_conections; + + private Object[] m_removed_objects; + + /* + * public static void main(String[] args) { try { + * + * UseTable l = new UseTable(10); l.append(new Integer(1), new String("a")); + * l.append(new Integer(2), new String("b")); l.append(new Integer(3), new + * String("c")); l.append(new Integer(4), new String("d")); l.append(new + * Integer(5), new String("e")); l.append(new Integer(6), new String("f")); + * l.append(new Integer(7), new String("g")); l.append(new Integer(8), new + * String("h")); System.out.println("-------"); l.dump(System.out); + * System.out.println("Objeto: " + l.get(new Integer(5))); + * + * l.use(new Integer(4)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(5)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(1)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(7)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(2)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(3)); System.out.println("-------"); l.dump(System.out); + * + * l.append(new Integer(9), new String("i")); l.append(new Integer(10), new + * String("j")); System.out.println("-------"); l.dump(System.out); + * l.append(new Integer(11), new String("k")); + * System.out.println("-------"); l.dump(System.out); l.append(new + * Integer(12), new String("p")); System.out.println("-------"); + * l.dump(System.out); l.append(new Integer(13), new String("q")); } catch + * (Throwable t) { t.printStackTrace(); } + * + * + * l.remove(new Integer(5)); System.out.println("-------"); + * l.dump(System.out); l.use(new Integer(6)); System.out.println("-------"); + * l.dump(System.out); l.use(new Integer(11)); + * System.out.println("-------"); l.dump(System.out); + * System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/UserExceptionEncoder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/UserExceptionEncoder.java.svn-base new file mode 100644 index 0000000..2766915 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/UserExceptionEncoder.java.svn-base @@ -0,0 +1,92 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA.TypeCodePackage.BadKind; + +/** + * Helper class for inserting/extracting user exceptons in a stream. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +class UserSystemExceptionEncoder +{ + public static void write(org.omg.CORBA.portable.OutputStream out, + org.omg.CORBA.SystemException sys) + { + out.write_string(sys.getClass().getName()); + out.write_ulong(sys.minor); + out.write_ulong(sys.completed.value()); + } + + public static org.omg.CORBA.UnknownUserException + read(org.omg.CORBA.portable.InputStream in, + org.omg.CORBA.TypeCode[] types) + { + String name = in.read_string(); + + try { + if (types != null) + for (int i = 0; i < types.length; i++) { + if (types[i].kind().value() != TCKind._tk_except) + throw new + BAD_PARAM("Bad ExceptionList: not Exception TypeCode"); + + if (name.equals(types[i].name())) { + Any any = in.orb().create_any(); + any.read_value(in, types[i]); + return new UnknownUserException(any); + } + } + } + catch (BadKind bk) {} + throw new UNKNOWN("Unexpected exception: " + name); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/ValueHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/ValueHolder.java.svn-base new file mode 100644 index 0000000..e64db86 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/ValueHolder.java.svn-base @@ -0,0 +1,107 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.TypeCode; + +/** + * Particular Holder for ValueTypes, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ValueHolder + implements org.omg.CORBA.portable.Streamable +{ + + public java.io.Serializable value; + + public TypeCode value_type_typecode; + + public ValueHolder(TypeCode type) + { + value_type_typecode = type; + } + + public ValueHolder(TypeCode type, java.io.Serializable initial) + { + value_type_typecode = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + + if (is instanceof org.omg.CORBA_2_3.portable.InputStream) { + + try { + org.omg.CORBA_2_3.portable.InputStream is_2_3 = + (org.omg.CORBA_2_3.portable.InputStream) is; + value = is_2_3.read_value(value_type_typecode.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (os instanceof org.omg.CORBA_2_3.portable.OutputStream) { + try { + org.omg.CORBA_2_3.portable.OutputStream os_2_3 = + (org.omg.CORBA_2_3.portable.OutputStream) os; + os_2_3.write_value(value,value_type_typecode.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return value_type_typecode; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/WCharHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/WCharHolder.java.svn-base new file mode 100644 index 0000000..1198741 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/WCharHolder.java.svn-base @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WChar, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class WCharHolder + implements org.omg.CORBA.portable.Streamable +{ + + public char value; + + public WCharHolder() + {} + + public WCharHolder(char initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_wchar(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_wchar(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_wchar; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/.svn/text-base/WStringHolder.java.svn-base b/source/es/tid/TIDorbj/core/util/.svn/text-base/WStringHolder.java.svn-base new file mode 100644 index 0000000..e27d80b --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/.svn/text-base/WStringHolder.java.svn-base @@ -0,0 +1,122 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WString, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class WStringHolder + implements org.omg.CORBA.portable.Streamable +{ + + public TypeCode wstring_type; + + public String value = null; + + public WStringHolder() + { + wstring_type = TypeCodeFactory.tc_wstring; + } + + public WStringHolder(TypeCode type) + { + wstring_type = type; + } + + public WStringHolder(TypeCode type, String initial) + { + wstring_type = type; + value = initial; + } + + public WStringHolder(String initial) + { + wstring_type = TypeCodeFactory.tc_wstring; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_wstring(); + try { + if (wstring_type.length() != 0) + if (value.length() > (wstring_type.length() / CDR.WCHAR_SIZE)) + throw new MARSHAL("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + if (wstring_type.length() != 0) + if (value.length() > (wstring_type.length() / CDR.WCHAR_SIZE)) + throw new BAD_PARAM("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + os.write_wstring(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return wstring_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.java b/source/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.java new file mode 100644 index 0000000..df30a05 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/AbstractInterfaceHolder.java @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.TypeCode; + +/** + * Particular Holder for ValueTypes, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class AbstractInterfaceHolder + implements org.omg.CORBA.portable.Streamable +{ + + public java.lang.Object value; + + public TypeCode abstract_typecode; + + public AbstractInterfaceHolder(TypeCode type) + { + abstract_typecode = type; + } + + public AbstractInterfaceHolder(TypeCode type, java.lang.Object initial) + { + abstract_typecode = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + if (is instanceof org.omg.CORBA_2_3.portable.InputStream) { + org.omg.CORBA_2_3.portable.InputStream in_2_3 = + (org.omg.CORBA_2_3.portable.InputStream) is; + value = + in_2_3.read_abstract_interface(); + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (os instanceof org.omg.CORBA_2_3.portable.OutputStream) { + org.omg.CORBA_2_3.portable.OutputStream os_2_3 = + (org.omg.CORBA_2_3.portable.OutputStream) os; + os_2_3.write_abstract_interface(value); + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return abstract_typecode; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.java b/source/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.java new file mode 100644 index 0000000..2c7615c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/BoxedValueHelperFinder.java @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public abstract class BoxedValueHelperFinder +{ + public static Class findHelper(java.io.Serializable boxed_value) + { + StringBuffer buff = new StringBuffer(); + + Package pkg = boxed_value.getClass().getPackage(); + + if (pkg != null) { + + String pkg_str = pkg.getName(); + + if (pkg_str.length() > 0) { + buff.append(pkg_str); + buff.append('.'); + } + } + + buff.append(boxed_value.getClass().getName()); + buff.append("Helper"); + + String helper_name = buff.toString(); + + try { + return Class.forName(helper_name); + + } + catch (ClassNotFoundException cnf) { + return null; + } + catch (OutOfMemoryError om) { + throw new org.omg.CORBA.NO_MEMORY(); + } + catch (Throwable th) { + throw new org.omg.CORBA.UNKNOWN(th.toString()); + } + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/CodeBaseURL.java b/source/es/tid/TIDorbj/core/util/CodeBaseURL.java new file mode 100644 index 0000000..b1be004 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/CodeBaseURL.java @@ -0,0 +1,53 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class CodeBaseURL +{ + public CodeBaseURL(String url) + { + m_url = url; + } + + public String m_url; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/Corbaloc.java b/source/es/tid/TIDorbj/core/util/Corbaloc.java new file mode 100644 index 0000000..f898970 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/Corbaloc.java @@ -0,0 +1,274 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 478 $ +* Date: $Date: 2011-04-29 16:42:47 +0200 (Fri, 29 Apr 2011) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.StringTokenizer; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.ORBPackage.InvalidName; + +import es.tid.TIDorbj.core.ObjectKey; +import es.tid.TIDorbj.core.comm.giop.GIOPVersion; +import es.tid.TIDorbj.core.comm.iiop.IIOPIOR; +import es.tid.TIDorbj.core.comm.iiop.ListenPoint; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; +import es.tid.TIDorbj.core.iop.IOR; +import es.tid.TIDorbj.core.poa.OID; +import es.tid.TIDorbj.core.poa.POAKey; +import es.tid.TIDorbj.util.TranslateURLEscapes; + +//TODO: put this together with into IIOPCorbaloc +public class Corbaloc +{ + + public static IOR getIOR(String corbaloc_URL) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String corbaloc; + String addr; + String path; + String v; + String l; + + ObjectKey objectkey; + GIOPVersion version; + ListenPoint listener; + IIOPProfile[] profiles; + int slashposition, ntokens; + if (corbaloc_URL.startsWith("corbaloc:tidorbj:")) { + corbaloc = corbaloc_URL.substring(17); + slashposition = corbaloc.indexOf('/'); + addr = corbaloc.substring(0, slashposition); + StringTokenizer staddr = new StringTokenizer(addr, "@", false); + ntokens = staddr.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Address Name"); + else { + if (ntokens == 1) { + version = parseVersion("1.0"); + } else { + v = staddr.nextToken(); + version = parseVersion(v); + } + } + l = staddr.nextToken(); + listener = parseListenPoint(l); + path = corbaloc.substring(slashposition + 1); + objectkey = parsePOAPath(path); + } else + throw new InvalidName("Invalid TIDorbJ corbaloc"); + profiles = new IIOPProfile[1]; + profiles[0] = new IIOPProfile(version, listener, objectkey, null); + return new IIOPIOR( "", profiles ); + } + + private static ObjectKey parsePOAPath(String poa_path) + throws org.omg.CORBA.ORBPackage.InvalidName + { + String[] poa_path_a; + String path; + String oid_str; + int ntokens; + OID oid; + POAKey poakey; + ObjectKey objectkey; + path = TranslateURLEscapes.putEscapes(poa_path); + if (path.indexOf("//") != -1) + throw new org.omg.CORBA.ORBPackage.InvalidName("Invalid POA Name"); + StringTokenizer stpath = new StringTokenizer(path, "/", false); + ntokens = stpath.countTokens(); + poa_path_a = new String[ntokens - 1]; + for (int i = 0; i < ntokens - 1; i++) { + poa_path_a[i] = + TranslateURLEscapes.translateUnicode( + TranslateURLEscapes.resolveEscapes(stpath.nextToken())); + } + oid_str = TranslateURLEscapes.resolveEscapes(stpath.nextToken()); + try { + oid = OID.fromString(oid_str); + } + catch (java.lang.Exception e) { + throw new org.omg.CORBA.ORBPackage.InvalidName("Invalid OID"); + } + poakey = new POAKey(poa_path_a, 0L, oid); + return poakey; + } + + public static GIOPVersion parseVersion(String v) + throws org.omg.CORBA.ORBPackage.InvalidName + { + int major, minor; + int ntokens; + GIOPVersion version; + StringTokenizer stversion = new StringTokenizer(v, ".", false); + ntokens = stversion.countTokens(); + if (ntokens == 2) { + major = Integer.parseInt(stversion.nextToken()); + minor = Integer.parseInt(stversion.nextToken()); + if (major == 1) { + if (minor == 0) + version = GIOPVersion.VERSION_1_0; + else if (minor == 1) + version = GIOPVersion.VERSION_1_1; + else if (minor == 2) + version = GIOPVersion.VERSION_1_2; + else + throw new InvalidName("Invalid Minor GIOPVersion Number"); + + } else + throw new InvalidName("Invalid Major GIOPVersion Number"); + } else + throw new InvalidName("Invalid GIOPVersion"); + return version; + } + + + public static ListenPoint parseListenPoint(String listenp) + throws org.omg.CORBA.ORBPackage.InvalidName + { + System.out.println("IIOPCorbaloc parseListenPoint"); + String host; + int port; + int ntokens; + /*StringTokenizer stlistenpoint = + new StringTokenizer(listenp, ":", false); + ntokens = stlistenpoint.countTokens(); + if (ntokens > 2) + throw new InvalidName("Invalid Listener Name"); + else {*/ + int ipv6SeperatorStart = -1; + int ipv6SeperatorEnd = -1; + int sep; + ipv6SeperatorStart = listenp.indexOf('['); + if (ipv6SeperatorStart != -1) + { + ipv6SeperatorEnd = listenp.indexOf(']'); + if (ipv6SeperatorEnd == -1) + { + throw new InvalidName("Invalid Listener Name"); + } + } + + sep = listenp.indexOf(':'); + if( sep != -1 ) + { + if (ipv6SeperatorStart != -1) //IPv6 + { + host=listenp.substring(ipv6SeperatorStart+1, ipv6SeperatorEnd); + if (listenp.charAt(ipv6SeperatorEnd+1) == ':') + { + try + { + port=(short)Integer.parseInt(listenp.substring(ipv6SeperatorEnd+2)); + } + catch( NumberFormatException ill ) + { + throw new InvalidName("Invalid Listener Name"); + } + } + else + { + throw new InvalidName("Invalid Listener Name"); + } + } + else //IPv4 or hostname + { + try + { + port =(short)Integer.parseInt(listenp.substring(sep+1)); + host = listenp.substring(0, sep); + } + catch( NumberFormatException ill ) + { + throw new InvalidName("Invalid Listener Name"); + } + } + } + //mcpg - end + else + { + host = listenp; + port = 2809; + } + /*host = stlistenpoint.nextToken(); + if (ntokens == 1) { + port = 2809; + } else { + port = Integer.parseInt(stlistenpoint.nextToken()); + }*/ + + return new ListenPoint(host, port); + } + + public static String toURL(IOR ior) + { + String corbaloc = "corbaloc:tidorbj:"; + IIOPProfile p = (IIOPProfile) ior.getProfile(0); + GIOPVersion v = p.getVersion(); + ListenPoint l = p.getListenPoint(); + ObjectKey o = p.getObjectKey(); + + POAKey k; + try { + k = POAKey.createKey( o.getMarshaledKey() ); + } catch ( Throwable th ){ + throw new BAD_PARAM( + "Non persistent reference", 0, CompletionStatus.COMPLETED_NO + ); + } + + if (k.getPOAId() != 0L) { + throw new BAD_PARAM( + "Non persistent reference", 0, CompletionStatus.COMPLETED_NO); + } + OID oid = k.getOID(); + corbaloc += v.getMajor() + "." + v.getMinor() + "@"; + corbaloc += l.m_host + ":" + l.m_port + "/"; + for (int i = 0; i < k.numberOfPOAs(); i++) + corbaloc += TranslateURLEscapes.stringfy(k.getPOA(i)) + "/"; + corbaloc += TranslateURLEscapes.stringfy(oid.toString()); + return corbaloc; + } + +} diff --git a/source/es/tid/TIDorbj/core/util/Corbaname.java b/source/es/tid/TIDorbj/core/util/Corbaname.java new file mode 100644 index 0000000..e6d3a2a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/Corbaname.java @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.StringTokenizer; + +import org.omg.CosNaming.NameComponent; +import org.omg.CosNaming.NamingContextPackage.InvalidName; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.util.TranslateURLEscapes; + +public class Corbaname +{ + + public static org.omg.CORBA.Object toObject(TIDORB tidorb, + String corbaname_URL) + throws org.omg.CosNaming.NamingContextPackage.InvalidName, + org.omg.CosNaming.NamingContextPackage.NotFound, + org.omg.CosNaming.NamingContextPackage.CannotProceed, + org.omg.CORBA.ORBPackage.InvalidName + { + String corbaname; + int nameposition; + org.omg.CosNaming.NameComponent[] name_path; + org.omg.CosNaming.NamingContext ncontext; + if (corbaname_URL.startsWith("corbaname:")) { + corbaname = corbaname_URL.substring(10); + nameposition = corbaname.indexOf('#'); + ncontext = + parseProtocol(tidorb, corbaname.substring(0, + nameposition)); + name_path = toName(corbaname.substring(nameposition + 1)); + return ncontext.resolve(name_path); + } else + throw new InvalidName(); /* Invalid corbaname" */ + + } + + private static org.omg.CosNaming.NamingContext + parseProtocol(TIDORB tidorb, + String protocol) + throws org.omg.CosNaming.NamingContextPackage.InvalidName, + org.omg.CORBA.ORBPackage.InvalidName + { + if (protocol.equals("rir:") || protocol.equals("rir:/NameService")) { + org.omg.CORBA.Object naming_ref = + tidorb.resolve_initial_references("NameService"); + return org.omg.CosNaming.NamingContextHelper.narrow(naming_ref); + } else + throw new InvalidName(); + } + + public static org.omg.CosNaming.NameComponent[] toName(String sn) + throws org.omg.CosNaming.NamingContextPackage.InvalidName + { + int ntokensn, ntokenscmp; + String name = ""; + String component = ""; + String id; + String kind; + name = TranslateURLEscapes.putEscapes(sn); + if (name.indexOf("//") != -1) + throw new InvalidName(); + StringTokenizer stname = new StringTokenizer(name, "/", false); + ntokensn = stname.countTokens(); + org.omg.CosNaming.NameComponent[] n = + new org.omg.CosNaming.NameComponent[ntokensn]; + for (int i = 0; i < ntokensn; i++) { + id = ""; + kind = ""; + component = stname.nextToken(); + StringTokenizer stcomp = new StringTokenizer(component, ".", false); + ntokenscmp = stcomp.countTokens(); + if (ntokenscmp > 2) + throw new InvalidName(); + if (!(ntokenscmp <= 1 && component.charAt(0) == '.')) + id = TranslateURLEscapes.resolveEscapes(stcomp.nextToken()); + if (stcomp.countTokens() == 1) + kind = TranslateURLEscapes.resolveEscapes(stcomp.nextToken()); + n[i] = new NameComponent(id, kind); + } + return n; + } + + public static String toString(org.omg.CosNaming.NameComponent[] n) + { + String id; + String kind; + String sn = ""; + for (int i = 0; i < n.length; i++) { + id = TranslateURLEscapes.stringfy(n[i].id); + kind = TranslateURLEscapes.stringfy(n[i].kind); + sn = sn + id; + if (!kind.equals("")) + sn = sn + "." + kind; + if (i < n.length - 1) + sn = sn + "/"; + } + return sn; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/Counter.java b/source/es/tid/TIDorbj/core/util/Counter.java new file mode 100644 index 0000000..2b34727 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/Counter.java @@ -0,0 +1,130 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Simple syncrhonized counter. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ + +public class Counter +{ + + /** + * IIOPConnection state. + */ + private int m_value; + + public Counter() + { + m_value = 0; + } + + synchronized public int getValue() + { + return m_value; + } + + synchronized public boolean isZero() + { + return (m_value == 0); + } + + synchronized public boolean isNonZero() + { + return (m_value != 0); + } + + /** + * Increments the counter 1 unity. + * + * @return the new value of the counter. + */ + synchronized public int inc() + { + m_value++; + return m_value; + } + + /** + * Decrements the counter 1 unity. + * + * @return the new value of the counter. + */ + synchronized public int dec() + { + if (m_value > 0) + m_value--; + return m_value; + } + + /** + * Increments the counter 1 unity. + * + * @return the previous value of the counter. + */ + synchronized public int postInc() + { + int post_value = m_value; + m_value++; + return post_value; + } + + /** + * Decrements the counter 1 unity. + * + * @return the previous value of the counter. + */ + + synchronized public int postDec() + { + int post_value = m_value; + + if (m_value > 0) + m_value--; + return post_value; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/DestructionState.java b/source/es/tid/TIDorbj/core/util/DestructionState.java new file mode 100644 index 0000000..2920c0a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/DestructionState.java @@ -0,0 +1,64 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class DestructionState +{ + + private boolean m_destroyed; + + public DestructionState() + { + m_destroyed = false; + } + + synchronized public void destroy() + { + m_destroyed = true; + } + + synchronized public boolean isDestroyed() + { + return m_destroyed; + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/EnumHolder.java b/source/es/tid/TIDorbj/core/util/EnumHolder.java new file mode 100644 index 0000000..bdd4ea0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/EnumHolder.java @@ -0,0 +1,88 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Particular Holder for ULong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class EnumHolder + implements org.omg.CORBA.portable.Streamable +{ + + public int value; + + public es.tid.TIDorbj.core.typecode.EnumTypeCode enum_type; + + public EnumHolder(es.tid.TIDorbj.core.typecode.EnumTypeCode type) + { + value = 0; + enum_type = type; + } + + public EnumHolder(es.tid.TIDorbj.core.typecode.EnumTypeCode type, + int initial) + { + value = initial; + enum_type = type; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return enum_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/FixedHolder.java b/source/es/tid/TIDorbj/core/util/FixedHolder.java new file mode 100644 index 0000000..913238d --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/FixedHolder.java @@ -0,0 +1,208 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.typecode.FixedTypeCode; +import es.tid.TIDorbj.util.Base16Codec; + +/** + * Particular Holder for FixedType. + * + * @autor Juan A. Ca´ceres + * @version 0.1 + */ + +public class FixedHolder + implements org.omg.CORBA.portable.Streamable +{ + + TypeCode m_fixed_type; + + public java.math.BigDecimal value; + + public FixedHolder(TypeCode type) + { + m_fixed_type = type; + value = null; + } + + public FixedHolder(TypeCode type, java.math.BigDecimal initial) + { + m_fixed_type = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + int value_length = FixedTypeCode.valueLength(m_fixed_type); + + StringBuffer buffer = new StringBuffer(value_length); + + int pairs = value_length / 2; + + try { + + for (int i = 1; i < pairs; i++) { + byte octet = is.read_octet(); + buffer.append(Base16Codec.getDigit(0xf & (octet >> 4))); + buffer.append(Base16Codec.getDigit(0xf & octet)); + } + + // last pair + byte octet = is.read_octet(); + + buffer.append(Base16Codec.getDigit(0xf & (octet >> 4))); + + boolean positive; + switch (0xf & octet) + { + case 0xD: + positive = false; + break; + case 0xC: + positive = true; + break; + default: + throw new MARSHAL("Fixed_read: Invalid signum value", 0, + CompletionStatus.COMPLETED_NO); + } + + BigInteger value_int = new BigInteger(buffer.toString()); + + if (positive) + value = new BigDecimal(value_int, m_fixed_type.fixed_scale()); + else + value = new BigDecimal(value_int.negate(), + m_fixed_type.fixed_scale()); + + } + catch (MARSHAL m) { + throw m; + } + catch (Exception e) { + throw new MARSHAL(e.getMessage(), 0, CompletionStatus.COMPLETED_NO); + } + + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (value == null) + value = new BigDecimal(0.0); + + int value_length = FixedTypeCode.valueLength(m_fixed_type); + + int digits = 0; + try { + + digits = m_fixed_type.fixed_digits(); + } + catch (BadKind bk) {/* unreachable */} + + BigInteger unscaled = value.setScale(0).toBigInteger(); + + char[] literal = unscaled.toString().toCharArray(); + + int literal_count = (value.signum() < 0) ? 1 : 0;//skip the signum char + + int literal_digits = literal.length - literal_count; + + if (digits < literal_digits) + throw new MARSHAL("Fixed Overflow.", 0, + CompletionStatus.COMPLETED_NO); + + int value_pairs = (literal_digits - 1) / 2; // number of digit_digit + // octets + // 1 is substracted from literals represents + //the last digit int digit_signum pair + + int zero_value_pairs = (literal_digits - 1) % 2; // 0_digit octet is 0 + // or 1 + int zero_pairs = (value_length / 2) - zero_value_pairs - value_pairs + - 1; + // 0_0 octets + // 1 is substracted from zero_pairs represents the zero_signum pair + + for (int i = 0; i < zero_pairs; i++) + write_pair(os, 0, 0); + + try { + if (zero_value_pairs != 0) + write_pair(os, 0, + Base16Codec.getValue(literal[literal_count++])); + + for (int i = 0; i < zero_pairs; i++) + write_pair(os, Base16Codec.getValue(literal[literal_count++]), + Base16Codec.getValue(literal[literal_count++])); + + write_pair(os, Base16Codec.getValue(literal[literal_count++]), + (value.signum() < 0) ? 0xD : 0xC); + } + catch (MARSHAL m) { + throw m; + } + catch (Exception e) { + throw new MARSHAL(e.getMessage(), 0, CompletionStatus.COMPLETED_NO); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return m_fixed_type; + } + + static void write_pair(org.omg.CORBA.portable.OutputStream os, int digit1, + int digit2) + { + os.write_octet((byte) ((digit1 << 4) | (digit2))); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/FullUseTableException.java b/source/es/tid/TIDorbj/core/util/FullUseTableException.java new file mode 100644 index 0000000..9a3ab91 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/FullUseTableException.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class FullUseTableException extends Exception +{ + + public FullUseTableException() + { + super(); + } + + public FullUseTableException(String s) + { + super(s); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/HashedLinkedList.java b/source/es/tid/TIDorbj/core/util/HashedLinkedList.java new file mode 100644 index 0000000..40c2f30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/HashedLinkedList.java @@ -0,0 +1,143 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class HashedLinkedList extends LinkedList +{ + + public HashedLinkedList(int maximumSize) + { + super(maximumSize); + m_table = new java.util.Hashtable(); + } + + /** + * @param object + * represents the key & item to be saved in the hashtable + */ + public void append(Object object) + throws Exception + { + append(object, object); + } + + public void append(Object key, Object item) + throws Exception + { + super.append(item); + m_table.put(key, new Integer(getLast())); + } + + public Object get(Object key) + { + Integer index = (Integer) m_table.get(key); + return getObjectAt(index.intValue()); + } + + public boolean object_exist(Object key) + { + return (m_table.get(key) != null); + } + + protected int getIndex(Object key) + { + Integer index = (Integer) m_table.get(key); + + if (index == null) + return -1; + + return index.intValue(); + } + + public Object remove(Object key) + { + + Integer index = (Integer) m_table.get(key); + if (index == null) { + return null; + } + Object removed = internalRemove(index.intValue()); + m_table.remove(key); + return removed; + } + + public Object removeFirst() + { + Object removed = super.removeFirst(); + m_table.remove(removed); + return removed; + } + + public Object removeLast() + { + Object removed = super.removeLast(); + m_table.remove(removed); + return removed; + } + + public java.util.Enumeration getKeys() + { + return m_table.keys(); + } + + /* + * public void dump(java.io.PrintStream os) { super.dump(os); + * os.print("Keys: ["); for (java.util.Enumeration enum = _table.keys(); + * enum.hasMoreElements(); ) { os.print(enum.nextElement()); if + * (enum.hasMoreElements()) os.print(", "); } os.println("]"); } + */ + + protected java.util.Hashtable m_table; + + /* + * public static void main(String[] args) { HashedLinkedList l = new + * HashedLinkedList(10); l.append(new Integer(1)); l.append(new Integer(2)); + * l.append(new Integer(3)); l.append(new Integer(4)); l.append(new + * Integer(5)); l.append(new Integer(6)); l.append(new Integer(7)); + * l.append(new Integer(8)); l.append(new Integer(9)); l.append(new + * Integer(10)); System.out.println("-------"); l.dump(System.out); + * l.remove(new Integer(7)); System.out.println("-------"); + * l.dump(System.out); l.removeFirst(); System.out.println("-------"); + * l.dump(System.out); System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/InitialReference.java b/source/es/tid/TIDorbj/core/util/InitialReference.java new file mode 100644 index 0000000..163baad --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/InitialReference.java @@ -0,0 +1,89 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.BAD_PARAM; + +public class InitialReference +{ + String m_service_name; + + String m_service_url; + + public InitialReference() + { + m_service_name = null; + m_service_url = null; + } + + public InitialReference(String name, String url) + { + m_service_name = name; + m_service_url = url; + } + + public String getName() + { + return m_service_name; + } + + public String getURL() + { + return m_service_url; + } + + public void parse(String value) + { + java.util.StringTokenizer tokenizer = + new java.util.StringTokenizer(value, "="); + + if (tokenizer.countTokens() != 2) + throw new BAD_PARAM( "Invalid -ORBInitRef value: it does not match" + + " = pattern"); + + m_service_name = tokenizer.nextToken(); + m_service_url = tokenizer.nextToken(); + } + +} + diff --git a/source/es/tid/TIDorbj/core/util/LinkedList.java b/source/es/tid/TIDorbj/core/util/LinkedList.java new file mode 100644 index 0000000..6691c64 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/LinkedList.java @@ -0,0 +1,239 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class LinkedList +{ + + protected static int NULL = -1; + + public LinkedList(int maximumSize) + { + m_maximum_size = maximumSize; + m_next = new int[maximumSize]; + m_previous = new int[maximumSize]; + m_free_indexes = new int[maximumSize]; + m_objects = new Object[maximumSize]; + m_last_free = maximumSize - 1; + for (int i = 0; i < maximumSize; i++) { + m_free_indexes[i] = i; + } + m_first = NULL; + m_last = NULL; + } + + public void append(Object object) + throws Exception + { + if (m_last_free < 0) { + throw new Exception("Not enough space in linked list of size " + + m_maximum_size + "!!"); + } + int index = m_free_indexes[m_last_free]; + m_last_free -= 1; + if (m_first >= 0) { + m_next[m_last] = index; + m_objects[index] = object; + m_next[index] = NULL; + m_previous[index] = m_last; + m_last = index; + } else { + m_first = index; + m_last = index; + m_objects[index] = object; + m_next[index] = NULL; + m_previous[index] = NULL; + } + } + + public Object removeFirst() + { + return internalRemove(m_first); + } + + public Object removeLast() + { + return internalRemove(m_last); + } + + public java.util.Enumeration elements() + { + return new LinkedListEnumeration(this); + } + + public int getSize() + { + return m_maximum_size - m_last_free - 1; + } + + public int getMaximumSize() + { + return m_maximum_size; + } + + public void dump(java.io.PrintStream os) + { + int i = m_first; + os.print("["); + while (i > NULL) { + os.print(m_objects[i]); + i = m_next[i]; + if (i > NULL) + os.print(", "); + } + os.println("]"); + } + + /** + * @param pos + * internal index of object to remove (it must be a legal + * position) + */ + protected Object internalRemove(int pos) + { + Object removed = m_objects[pos]; + if (pos != m_first) + m_next[m_previous[pos]] = m_next[pos]; + else + m_first = m_next[pos]; + if (pos != m_last) + m_previous[m_next[pos]] = m_previous[pos]; + else + m_last = m_previous[pos]; + m_last_free += 1; + m_free_indexes[m_last_free] = pos; + return removed; + } + + protected int getLast() + { + return m_last; + } + + protected int getFirst() + { + return m_first; + } + + protected int getNext(int index) + { + return m_next[index]; + } + + protected int getPrevious(int index) + { + return m_previous[index]; + } + + protected Object getObjectAt(int index) + { + return m_objects[index]; + } + + // Maximum size + private int m_maximum_size; + + // Arrays for objects and indexes + private int[] m_next = null; + + private int[] m_previous = null; + + private int[] m_free_indexes = null; + + private Object[] m_objects = null; + + // Indexes + private int m_last_free; + + private int m_first; + + private int m_last; + + /** + * Enumeration support. + */ + protected class LinkedListEnumeration + implements java.util.Enumeration + { + + public LinkedListEnumeration(LinkedList list) + { + _list = list; + _index = _list.m_first; + } + + public boolean hasMoreElements() + { + return (_index != NULL); + } + + public Object nextElement() + { + int i = _index; + _index = _list.m_next[_index]; + return _list.m_objects[i]; + } + + private int _index; + + private LinkedList _list; + } + + // Main - test method + /* + * public static void main(String[] args) { LinkedList l = new + * LinkedList(10); l.append(new Integer(1)); l.append(new Integer(2)); + * l.append(new Integer(3)); l.append(new Integer(4)); l.append(new + * Integer(5)); l.append(new Integer(6)); l.append(new Integer(7)); + * l.append(new Integer(8)); l.append(new Integer(9)); l.append(new + * Integer(10)); System.out.println("-------"); l.dump(System.out); + * l.removeLast(); System.out.println("-------"); l.dump(System.out); + * l.removeFirst(); System.out.println("-------"); l.dump(System.out); + * l.append(new Integer(11)); System.out.println("-------"); + * l.dump(System.out); l.append(new Integer(12)); + * System.out.println("-------"); l.dump(System.out); l.removeFirst(); + * System.out.println("-------"); l.dump(System.out); l.removeLast(); + * System.out.println("-------"); l.dump(System.out); + * System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/Mutex.java b/source/es/tid/TIDorbj/core/util/Mutex.java new file mode 100644 index 0000000..9bf04df --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/Mutex.java @@ -0,0 +1,69 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class Mutex +{ + + boolean m_value; + + public Mutex() + { + m_value = false; + } + + public synchronized void enter() + throws java.lang.InterruptedException + { + while (m_value) { + wait(); + } + m_value = false; + } + + public synchronized void exit() + { + m_value = false; + notify(); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.java b/source/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.java new file mode 100644 index 0000000..0940d84 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/OnlyOneThreadCanWait.java @@ -0,0 +1,56 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * It is thrown if the restriction of a OperationCompletion than only one thread + * can wait, has been violated. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class OnlyOneThreadCanWait extends java.lang.Exception +{ + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/OperationCompletion.java b/source/es/tid/TIDorbj/core/util/OperationCompletion.java new file mode 100644 index 0000000..35efd56 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/OperationCompletion.java @@ -0,0 +1,131 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 35 $ +* Date: $Date: 2006-08-25 13:13:29 +0200 (Fri, 25 Aug 2006) $ +* Last modified by: $Author: ldlfd $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +/** + * Manages the completion status of an operation. + *

+ * Also, makes one thread to wait the completion. + *

+ * The status are: + *

    + *
  • INITIAL: the operation is not completed and there is not + * any Thread waiting for the completion + *
  • WAITING: there is a Thread that is waiting for the completion + *
  • COMPLETED: the operation is completed. + *
+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class OperationCompletion +{ + + public final static int INITIAL = 0; + + public final static int WAITING = 1; + + public final static int COMPLETED = 2; + + /** + * The Completion status. + */ + int m_state; + + public OperationCompletion() + { + m_state = INITIAL; + } + + /** + * @return whether or not the operation is completed + */ + public synchronized boolean isCompleted() + { + return m_state == COMPLETED; + } + + /** + * The operation is completed. + *

+ * If there is a thread waiting for the completion notifies it. + */ + public synchronized void setCompleted() + { + int actual_state = m_state; + + m_state = COMPLETED; + + if (actual_state == WAITING) + notify(); + } + + /** + * Makes a thread wait for the operation completion (with a timeout). + * + * @timeout the timeout + */ + public synchronized void waitForCompletion(long timeout) + throws java.lang.InterruptedException, + es.tid.TIDorbj.core.util.OnlyOneThreadCanWait + { + if (m_state == INITIAL) { + m_state = WAITING; + wait(timeout); + } else if (m_state == WAITING) { + throw new es.tid.TIDorbj.core.util.OnlyOneThreadCanWait(); + } + // else do nothing, is completed + } + + /** + * If there is a thread waiting for the completion notifies it. + * + */ + public synchronized void interruptWaiting() + { + notify(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/RemovableObject.java b/source/es/tid/TIDorbj/core/util/RemovableObject.java new file mode 100644 index 0000000..0104812 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/RemovableObject.java @@ -0,0 +1,50 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public interface RemovableObject +{ + + boolean canBeRemoved(); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/RepositoryId.java b/source/es/tid/TIDorbj/core/util/RepositoryId.java new file mode 100644 index 0000000..837d2b7 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/RepositoryId.java @@ -0,0 +1,207 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +public class RepositoryId +{ + + public String m_value; + + public RepositoryId(String value) + { + m_value = value; + } + + public static String className(String repId) + { + if (repId.equals("IDL:omg.org/CORBA/WStringValue:1.0")) { + return "java.lang.String"; + } else if (repId.startsWith("IDL:")) { + // cut "IDL:" and version + // and swap "org.omg" if necessary + + String id_base = repId.substring(4, repId.lastIndexOf(':')); + if (id_base.startsWith("omg.org")) + return ir2scopes("org.omg", id_base.substring(7)); + else + return ir2scopes("", id_base); + } else if (repId.startsWith("RMI:")) { + return repId.substring(4, repId.indexOf(':', 4)); + } else { + throw new RuntimeException("unrecognized RepositoryID: " + repId); + } + } + + /** + * @return java.lang.String + */ + + private static String ir2scopes(String prefix, String s) + { + if (s.indexOf("/") < 0) + return s; + java.util.StringTokenizer strtok = + new java.util.StringTokenizer(s, "/"); + + int count = strtok.countTokens(); + StringBuffer sb = new StringBuffer(); + sb.append(prefix); + + for (int i = 0; strtok.hasMoreTokens(); i++) { + String sc = strtok.nextToken(); + Class c = null; + if (sb.toString().length() > 0) + c = loadClass(sb.toString() + "." + sc); + else + c = loadClass(sc); + if (c == null) + if (sb.toString().length() > 0) + sb.append("." + sc); + else + sb.append(sc); + else if (i < count - 1) + sb.append("." + sc + "Package"); + else + sb.append("." + sc); + } + + return sb.toString(); + } + + public static String repId(Class c) + { + if (org.omg.CORBA.portable.IDLEntity.class.isAssignableFrom(c)) { + String className = c.getName(); + String head = ""; + String body = ""; + + // add "IDL:" and ":1.0" + // and swap "org.omg" if necessary + + if (className.startsWith("org.omg") + || className.startsWith("org/omg")) { + if (className.length() > 7) + body = className.substring(7); + return "IDL:omg.org/" + scopesToIR(body) + ":1.0"; + } else + return "IDL:" + scopesToIR(className) + ":1.0"; + } else + return javax.rmi.CORBA.Util.createValueHandler() + .getRMIRepositoryID(c); + } + + private static String scopesToIR(String s) + { + if (s.indexOf(".") < 0) + return s; + java.util.StringTokenizer strtok = + new java.util.StringTokenizer(s, "."); + + String scopes[] = new String[strtok.countTokens()]; + + for (int i = 0; strtok.hasMoreTokens(); i++) { + String sc = strtok.nextToken(); + if (sc.endsWith("Package")) + scopes[i] = sc.substring(0, sc.indexOf("Package")); + else + scopes[i] = sc; + } + + StringBuffer sb = new StringBuffer(); + if (scopes.length > 1) { + for (int i = 0; i < scopes.length - 1; i++) + sb.append(scopes[i] + "/"); + } + + sb.append(scopes[scopes.length - 1]); + return sb.toString(); + } + + /** + * convert a class name to a Repository ID
+ * classname - the class name to convert resolveClass - indicates whether + * the method should try to resolve and load the class. If true and the + * class could not be loaded, an IllegalArgumentException will be thrown + */ + + public static String toRepositoryID(String className, boolean resolveClass) + { + if (className.equals("") || className.startsWith("IDL:") + || className.startsWith("RMI:")) + return className; + else { + if (resolveClass) { + + Class c = loadClass(className); + if (c == null) + throw new IllegalArgumentException("cannot find class: " + + className); + else + return repId(c); + } + return "IDL:" + className + ":1.0"; + } + } + + public static String toRepositoryID(String className) + { + return toRepositoryID(className, true); + } + + /** + * Loads class `name' using an appropriate class loader. Returns the + * corresponding class object, or null if the class loader cannot find a + * class by that name. + */ + private static Class loadClass(String name) + { + try { + return Thread.currentThread().getContextClassLoader() + .loadClass(name); + } + catch (ClassNotFoundException e) { + return null; + } + } +} + diff --git a/source/es/tid/TIDorbj/core/util/StringHolder.java b/source/es/tid/TIDorbj/core/util/StringHolder.java new file mode 100644 index 0000000..305325f --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/StringHolder.java @@ -0,0 +1,117 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WString, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class StringHolder + implements org.omg.CORBA.portable.Streamable +{ + + public TypeCode string_type; + + public String value = null; + + public StringHolder() + { + string_type = TypeCodeFactory.tc_string; + } + + public StringHolder(TypeCode type) + { + string_type = type; + } + + public StringHolder(TypeCode type, String initial) + { + string_type = type; + value = initial; + } + + public StringHolder(String initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_string(); + try { + if (string_type.length() != 0) + if (value.length() > string_type.length()) + throw new MARSHAL("String out of bounds."); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + if (string_type.length() != 0) + if (value.length() > string_type.length()) + throw new MARSHAL("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + os.write_string(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return string_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/ULongHolder.java b/source/es/tid/TIDorbj/core/util/ULongHolder.java new file mode 100644 index 0000000..4dfa05d --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/ULongHolder.java @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for ULongLong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ULongHolder + implements org.omg.CORBA.portable.Streamable +{ + + public int value; + + public ULongHolder() + {} + + public ULongHolder(int initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ulong; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/ULongLongHolder.java b/source/es/tid/TIDorbj/core/util/ULongLongHolder.java new file mode 100644 index 0000000..fc4db08 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/ULongLongHolder.java @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for ULongLong, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ULongLongHolder + implements org.omg.CORBA.portable.Streamable +{ + + public long value; + + public ULongLongHolder() + {} + + public ULongLongHolder(long initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ulonglong(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ulonglong(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ulonglong; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/UShortHolder.java b/source/es/tid/TIDorbj/core/util/UShortHolder.java new file mode 100644 index 0000000..2d0ccf2 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/UShortHolder.java @@ -0,0 +1,82 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for UShort, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 0.1 + */ +final public class UShortHolder + implements org.omg.CORBA.portable.Streamable +{ + + public short value; + + public UShortHolder() + {} + + public UShortHolder(short initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_ushort(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_ushort(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_ushort; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/UseTable.java b/source/es/tid/TIDorbj/core/util/UseTable.java new file mode 100644 index 0000000..c8a7f6a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/UseTable.java @@ -0,0 +1,247 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 45 $ +* Date: $Date: 2007-02-12 16:07:48 +0100 (Mon, 12 Feb 2007) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import java.util.Enumeration; +import java.util.Vector; + +public class UseTable extends HashedLinkedList +{ + + public UseTable(int maximumSize) + { + super(maximumSize); + m_use = new int[maximumSize]; + m_round = 0; + m_used_conections = 0; + m_removed_objects = null; + } + + synchronized public void append(Object object) + throws FullUseTableException + { + append(object, object); + } + + synchronized public void append(Object key, Object item) + throws FullUseTableException + { + // Remove elements if needed + m_removed_objects = removeOldObjects(); + + /* + * if (_removedObjects != null) { + * System.out.println("Round: " + _round + + * "Eliminando conexiones: " + _removedObjects.length); } + */ + + if (getSize() == getMaximumSize()) { + throw new + FullUseTableException("Not enough space to append a new object"); + } + + // Append new element + try { + super.append(key, item); + } + catch (Exception e) { + // should never happen!! + } + if (m_round == Integer.MAX_VALUE) { + // Should check if count == maxInteger !! + } + // Initialize round + m_use[getLast()] = m_round - 1; + } + + synchronized public void use(Object key) + { + // Update round + int i = getIndex(key); + + if (i < 0) + return; + + if (m_use[i] != m_round) { + m_used_conections++; + if (m_used_conections > (getMaximumSize() / 2)) { + m_round++; + m_used_conections = 0; + } + } + + // Update linked list of elements + Object removed = remove(key); + try { + append(key, removed); + } + catch (Exception e) { + // should never happen! + } + m_use[getLast()] = m_round; + } + + synchronized public Object[] getRemovedObjects() + { + return m_removed_objects; + } + + protected Object[] removeOldObjects() + { + + Vector removed = new Vector(); + Vector reinsertedKeys = new Vector(); + Vector reinsertedObjects = new Vector(); + + if (getSize() > getMaximumSize() * 0.8) { + do { + int firstRound = m_use[getFirst()]; + int maxRemoved = (int) (getMaximumSize() * 0.5); + for (Enumeration myenum = getKeys(); myenum.hasMoreElements();) { + Object obj = myenum.nextElement(); + int i = getIndex(obj); + if (m_use[i] <= (m_round - 4)) { + removed.addElement(obj); + } + } + + for (int j = 0; j < removed.size(); j++) { + Object key = removed.elementAt(j); + if (key instanceof RemovableObject) { + RemovableObject removableKey = (RemovableObject) key; + if (!removableKey.canBeRemoved()) { + Object obj = get(key); + reinsertedKeys.addElement(key); + reinsertedObjects.addElement(obj); + removed.removeElement(key); + } + } + remove(key); + } + + if ((getSize() + reinsertedKeys.size()) >= getMaximumSize()) { + m_round++; + } + } while ((getSize() > 0) + && (getSize() + reinsertedKeys.size()) + >= getMaximumSize()); + } + + try { + for (int j = 0; j < reinsertedKeys.size(); j++) { + super.append(reinsertedKeys.elementAt(j), + reinsertedObjects.elementAt(j)); + } + } + catch (Exception e) { + // should never happen!! + } + + if (reinsertedKeys.size() == getSize()) { + return null; + } + + if (removed.size() != 0) { + Object[] res = new Object[removed.size()]; + removed.copyInto(res); + return res; + } else + return null; + } + + public void dump(java.io.PrintStream os) + { + super.dump(os); + int i = getFirst(); + os.print("Uses: ["); + while (i > NULL) { + os.print(m_use[i]); + i = getNext(i); + if (i > NULL) + os.print(", "); + } + os.println("]"); + } + + private int[] m_use; + + private int m_round; + + private int m_used_conections; + + private Object[] m_removed_objects; + + /* + * public static void main(String[] args) { try { + * + * UseTable l = new UseTable(10); l.append(new Integer(1), new String("a")); + * l.append(new Integer(2), new String("b")); l.append(new Integer(3), new + * String("c")); l.append(new Integer(4), new String("d")); l.append(new + * Integer(5), new String("e")); l.append(new Integer(6), new String("f")); + * l.append(new Integer(7), new String("g")); l.append(new Integer(8), new + * String("h")); System.out.println("-------"); l.dump(System.out); + * System.out.println("Objeto: " + l.get(new Integer(5))); + * + * l.use(new Integer(4)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(5)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(1)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(7)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(2)); System.out.println("-------"); l.dump(System.out); + * l.use(new Integer(3)); System.out.println("-------"); l.dump(System.out); + * + * l.append(new Integer(9), new String("i")); l.append(new Integer(10), new + * String("j")); System.out.println("-------"); l.dump(System.out); + * l.append(new Integer(11), new String("k")); + * System.out.println("-------"); l.dump(System.out); l.append(new + * Integer(12), new String("p")); System.out.println("-------"); + * l.dump(System.out); l.append(new Integer(13), new String("q")); } catch + * (Throwable t) { t.printStackTrace(); } + * + * + * l.remove(new Integer(5)); System.out.println("-------"); + * l.dump(System.out); l.use(new Integer(6)); System.out.println("-------"); + * l.dump(System.out); l.use(new Integer(11)); + * System.out.println("-------"); l.dump(System.out); + * System.out.println("Tam: " + l.getSize()); } + */ +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/UserExceptionEncoder.java b/source/es/tid/TIDorbj/core/util/UserExceptionEncoder.java new file mode 100644 index 0000000..d2b570e --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/UserExceptionEncoder.java @@ -0,0 +1,92 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.UNKNOWN; +import org.omg.CORBA.UnknownUserException; +import org.omg.CORBA.TypeCodePackage.BadKind; + +/** + * Helper class for inserting/extracting user exceptons in a stream. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +class UserSystemExceptionEncoder +{ + public static void write(org.omg.CORBA.portable.OutputStream out, + org.omg.CORBA.SystemException sys) + { + out.write_string(sys.getClass().getName()); + out.write_ulong(sys.minor); + out.write_ulong(sys.completed.value()); + } + + public static org.omg.CORBA.UnknownUserException + read(org.omg.CORBA.portable.InputStream in, + org.omg.CORBA.TypeCode[] types) + { + String name = in.read_string(); + + try { + if (types != null) + for (int i = 0; i < types.length; i++) { + if (types[i].kind().value() != TCKind._tk_except) + throw new + BAD_PARAM("Bad ExceptionList: not Exception TypeCode"); + + if (name.equals(types[i].name())) { + Any any = in.orb().create_any(); + any.read_value(in, types[i]); + return new UnknownUserException(any); + } + } + } + catch (BadKind bk) {} + throw new UNKNOWN("Unexpected exception: " + name); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/ValueHolder.java b/source/es/tid/TIDorbj/core/util/ValueHolder.java new file mode 100644 index 0000000..7bcf54b --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/ValueHolder.java @@ -0,0 +1,107 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.TypeCode; + +/** + * Particular Holder for ValueTypes, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +final public class ValueHolder + implements org.omg.CORBA.portable.Streamable +{ + + public java.io.Serializable value; + + public TypeCode value_type_typecode; + + public ValueHolder(TypeCode type) + { + value_type_typecode = type; + } + + public ValueHolder(TypeCode type, java.io.Serializable initial) + { + value_type_typecode = type; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + + if (is instanceof org.omg.CORBA_2_3.portable.InputStream) { + + try { + org.omg.CORBA_2_3.portable.InputStream is_2_3 = + (org.omg.CORBA_2_3.portable.InputStream) is; + value = is_2_3.read_value(value_type_typecode.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (os instanceof org.omg.CORBA_2_3.portable.OutputStream) { + try { + org.omg.CORBA_2_3.portable.OutputStream os_2_3 = + (org.omg.CORBA_2_3.portable.OutputStream) os; + os_2_3.write_value(value,value_type_typecode.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } else { + throw new org.omg.CORBA.MARSHAL("InputStream is not CORBA 2.3"); + } + } + + public org.omg.CORBA.TypeCode _type() + { + return value_type_typecode; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/WCharHolder.java b/source/es/tid/TIDorbj/core/util/WCharHolder.java new file mode 100644 index 0000000..e01ad56 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/WCharHolder.java @@ -0,0 +1,83 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WChar, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class WCharHolder + implements org.omg.CORBA.portable.Streamable +{ + + public char value; + + public WCharHolder() + {} + + public WCharHolder(char initial) + { + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_wchar(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + os.write_wchar(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return TypeCodeFactory.tc_wchar; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/WStringHolder.java b/source/es/tid/TIDorbj/core/util/WStringHolder.java new file mode 100644 index 0000000..259d3dc --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/WStringHolder.java @@ -0,0 +1,122 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Particular Holder for WString, Java Mapping does not give one. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +final public class WStringHolder + implements org.omg.CORBA.portable.Streamable +{ + + public TypeCode wstring_type; + + public String value = null; + + public WStringHolder() + { + wstring_type = TypeCodeFactory.tc_wstring; + } + + public WStringHolder(TypeCode type) + { + wstring_type = type; + } + + public WStringHolder(TypeCode type, String initial) + { + wstring_type = type; + value = initial; + } + + public WStringHolder(String initial) + { + wstring_type = TypeCodeFactory.tc_wstring; + value = initial; + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + value = is.read_wstring(); + try { + if (wstring_type.length() != 0) + if (value.length() > (wstring_type.length() / CDR.WCHAR_SIZE)) + throw new MARSHAL("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + if (wstring_type.length() != 0) + if (value.length() > (wstring_type.length() / CDR.WCHAR_SIZE)) + throw new BAD_PARAM("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + + os.write_wstring(value); + } + + public org.omg.CORBA.TypeCode _type() + { + return wstring_type; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/all-wcprops b/source/es/tid/TIDorbj/core/util/exception/.svn/all-wcprops new file mode 100644 index 0000000..85499f0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/all-wcprops @@ -0,0 +1,215 @@ +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception +END +FREE_MEM_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.java +END +INV_IDENT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.java +END +BAD_TYPECODE_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.java +END +TIMEOUT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.java +END +INV_POLICY_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.java +END +NO_MEMORY_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.java +END +NO_RESPONSE_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.java +END +SystemExceptionCreator.java +K 25 +svn:wc:ra_dav:version-url +V 117 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.java +END +INTERNAL_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.java +END +INV_FLAG_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 111 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.java +END +INTF_REPOS_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.java +END +Makefile +K 25 +svn:wc:ra_dav:version-url +V 98 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/Makefile +END +COMM_FAILURE_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.java +END +INVALID_TRANSACTION_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 122 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.java +END +BAD_CONTEXT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.java +END +INITIALIZE_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.java +END +SystemExceptionEncoder.java +K 25 +svn:wc:ra_dav:version-url +V 117 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.java +END +BAD_OPERATION_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.java +END +IMP_LIMIT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.java +END +TRANSACTION_REQUIRED_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 123 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.java +END +MARSHAL_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.java +END +SystemExceptionNames.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.java +END +PERSIST_STORE_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.java +END +BAD_PARAM_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.java +END +NO_PERMISSION_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.java +END +DATA_CONVERSION_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 118 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.java +END +OBJECT_NOT_EXIST_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 119 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.java +END +INV_OBJREF_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 113 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.java +END +TRANSIENT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 112 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.java +END +UNKNOWN_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 110 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.java +END +NO_RESOURCES_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.java +END +OBJ_ADAPTER_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.java +END +BAD_INV_ORDER_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.java +END +NO_IMPLEMENT_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 115 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.java +END +TRANSACTION_ROLLEDBACK_Creator.java +K 25 +svn:wc:ra_dav:version-url +V 125 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.java +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/entries b/source/es/tid/TIDorbj/core/util/exception/.svn/entries new file mode 100644 index 0000000..4af2809 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/entries @@ -0,0 +1,1218 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/util/exception +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2006-07-14T12:08:38.000000Z +21 +iredondo + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +BAD_TYPECODE_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +f901abd2c6d8cfcb7f158556f0a94589 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1898 + +IMP_LIMIT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +e0ff0ff1a97b53353222e2ea5585e5fc +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1892 + +SystemExceptionEncoder.java +file + + + + +2009-05-27T12:24:02.000000Z +5e865d19eab14f4c3e3ac67e8cc23704 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +11121 + +NO_RESPONSE_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +06f63f18f745a1336564962fbc09e1e6 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1895 + +BAD_CONTEXT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +822fcf2067494371628ea92f8acbc5d9 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1896 + +INVALID_TRANSACTION_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +a6ceb6559e634a02bab89df140e06367 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1911 + +UNKNOWN_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +1bc82af63123899e8824d94a0d4a9ee4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1887 + +INITIALIZE_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +839dceba1e8e90deaedd2d9c75a4489d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1894 + +OBJECT_NOT_EXIST_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +bb7a0952474d27fbd5378197e9875180 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1905 + +SystemExceptionCreator.java +file + + + + +2009-05-27T12:24:02.000000Z +79f8b12d70d47b20e13102c675a0afed +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1777 + +NO_MEMORY_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +4ae93100d97da3719b8068556f678b1d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1891 + +PERSIST_STORE_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +5cb5d6d3ec3f1ab46f5be7a08a40a65d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1899 + +NO_RESOURCES_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +e6355d352f7d744b92ef4a7c40a42e8e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1897 + +BAD_OPERATION_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +475e2e46cc13a5e7d8c71f8bfdab6ff7 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1900 + +TRANSIENT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +82c7326f64ade46f38e215cb697afb4e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1891 + +OBJ_ADAPTER_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +2686e6a1b79481a8aabd28633417b28f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1895 + +INV_POLICY_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +a9cb36f7520ddc34a30947d526f99d24 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1893 + +Makefile +file + + + + +2009-05-27T12:24:02.000000Z +106790f2ea8f289fdf9686f0ab8a6794 +2006-07-14T12:08:38.000000Z +21 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +1472 + +DATA_CONVERSION_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +beddc69302b575aaf3dee77c57036fc5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1904 + +INV_IDENT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +eef88f25c1e3ddc1edc4760db7980434 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1892 + +INV_OBJREF_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +923d8bfd12c26fb74a6a5eec9992e958 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1894 + +NO_PERMISSION_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +0132e84b698b45d095136b23b9b710da +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1899 + +INV_FLAG_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +af1b30d13f977761252a9d9d765b2df9 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1890 + +TRANSACTION_REQUIRED_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +d2f08f919f2304c1751107ba3672f3e3 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1913 + +TIMEOUT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +751869e5c5cd309d8d98e5683e3c1e07 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1888 + +NO_IMPLEMENT_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +fe55af3bdb595c4496114dcdf13efb82 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1897 + +MARSHAL_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +df4d746fdf7cf70185ebdd959a8285d8 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1887 + +BAD_INV_ORDER_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +048aafc1c7b40e4c17a3bcfdd4f2a85e +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1900 + +COMM_FAILURE_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +1f4212f1a056821bc7ff503dd89ca066 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1898 + +BAD_PARAM_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +fac5de823200ecb03b423fd1e18c02b0 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1892 + +TRANSACTION_ROLLEDBACK_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +30cf789028c7cfa068c36da8fcb40c88 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1917 + +SystemExceptionNames.java +file + + + + +2009-05-27T12:24:02.000000Z +2858f0cdc8030d2d766bb44a819247e4 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +5717 + +INTF_REPOS_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +7f3db7901dbf9feb96187725a502444d +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1894 + +INTERNAL_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +f0a350ea27e780003aa6589c1b9e7890 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1890 + +FREE_MEM_Creator.java +file + + + + +2009-05-27T12:24:02.000000Z +242790280b1fc8ab5ea68b33dcb34804 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1890 + diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_CONTEXT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_CONTEXT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_CONTEXT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_INV_ORDER_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_INV_ORDER_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_INV_ORDER_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_OPERATION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_OPERATION_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_OPERATION_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_PARAM_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_PARAM_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_PARAM_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_TYPECODE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_TYPECODE_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/BAD_TYPECODE_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/COMM_FAILURE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/COMM_FAILURE_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/COMM_FAILURE_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/DATA_CONVERSION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/DATA_CONVERSION_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/DATA_CONVERSION_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/FREE_MEM_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/FREE_MEM_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/FREE_MEM_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/IMP_LIMIT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/IMP_LIMIT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/IMP_LIMIT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INITIALIZE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INITIALIZE_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INITIALIZE_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTERNAL_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTERNAL_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTERNAL_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTF_REPOS_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTF_REPOS_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INTF_REPOS_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INVALID_TRANSACTION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INVALID_TRANSACTION_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INVALID_TRANSACTION_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_FLAG_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_FLAG_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_FLAG_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_IDENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_IDENT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_IDENT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_OBJREF_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_OBJREF_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_OBJREF_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_POLICY_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_POLICY_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/INV_POLICY_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/MARSHAL_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/MARSHAL_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/MARSHAL_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/Makefile.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/Makefile.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/Makefile.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_IMPLEMENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_IMPLEMENT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_IMPLEMENT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_MEMORY_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_MEMORY_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_MEMORY_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_PERMISSION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_PERMISSION_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_PERMISSION_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESOURCES_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESOURCES_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESOURCES_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESPONSE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESPONSE_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/NO_RESPONSE_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJECT_NOT_EXIST_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJECT_NOT_EXIST_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJECT_NOT_EXIST_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJ_ADAPTER_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJ_ADAPTER_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/OBJ_ADAPTER_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/PERSIST_STORE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/PERSIST_STORE_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/PERSIST_STORE_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionCreator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionCreator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionCreator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionEncoder.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionEncoder.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionEncoder.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionNames.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionNames.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/SystemExceptionNames.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TIMEOUT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TIMEOUT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TIMEOUT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_REQUIRED_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_REQUIRED_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_REQUIRED_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSIENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSIENT_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/TRANSIENT_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/UNKNOWN_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/UNKNOWN_Creator.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/prop-base/UNKNOWN_Creator.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_CONTEXT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_CONTEXT_Creator.java.svn-base new file mode 100644 index 0000000..23a139c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_CONTEXT_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_CONTEXT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_CONTEXT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_INV_ORDER_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_INV_ORDER_Creator.java.svn-base new file mode 100644 index 0000000..71b19e4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_INV_ORDER_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_INV_ORDER_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_INV_ORDER("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_OPERATION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_OPERATION_Creator.java.svn-base new file mode 100644 index 0000000..54bed36 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_OPERATION_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_OPERATION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_OPERATION("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_PARAM_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_PARAM_Creator.java.svn-base new file mode 100644 index 0000000..788026a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_PARAM_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_PARAM_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_PARAM("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_TYPECODE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_TYPECODE_Creator.java.svn-base new file mode 100644 index 0000000..e4f05ef --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/BAD_TYPECODE_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_TYPECODE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_TYPECODE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/COMM_FAILURE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/COMM_FAILURE_Creator.java.svn-base new file mode 100644 index 0000000..40dcab5 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/COMM_FAILURE_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class COMM_FAILURE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.COMM_FAILURE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/DATA_CONVERSION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/DATA_CONVERSION_Creator.java.svn-base new file mode 100644 index 0000000..af3f803 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/DATA_CONVERSION_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class DATA_CONVERSION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.DATA_CONVERSION("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/FREE_MEM_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/FREE_MEM_Creator.java.svn-base new file mode 100644 index 0000000..4c8e62f --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/FREE_MEM_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class FREE_MEM_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.FREE_MEM("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/IMP_LIMIT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/IMP_LIMIT_Creator.java.svn-base new file mode 100644 index 0000000..9eb3dfe --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/IMP_LIMIT_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class IMP_LIMIT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.IMP_LIMIT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INITIALIZE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INITIALIZE_Creator.java.svn-base new file mode 100644 index 0000000..f4abf24 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INITIALIZE_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INITIALIZE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INITIALIZE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTERNAL_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTERNAL_Creator.java.svn-base new file mode 100644 index 0000000..bec2af3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTERNAL_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INTERNAL_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INTERNAL("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTF_REPOS_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTF_REPOS_Creator.java.svn-base new file mode 100644 index 0000000..baff288 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INTF_REPOS_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INTF_REPOS_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INTF_REPOS("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INVALID_TRANSACTION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INVALID_TRANSACTION_Creator.java.svn-base new file mode 100644 index 0000000..24b70dd --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INVALID_TRANSACTION_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INVALID_TRANSACTION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INVALID_TRANSACTION("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_FLAG_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_FLAG_Creator.java.svn-base new file mode 100644 index 0000000..b6ce855 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_FLAG_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_FLAG_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_FLAG("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_IDENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_IDENT_Creator.java.svn-base new file mode 100644 index 0000000..ca1b095 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_IDENT_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_IDENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_IDENT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_OBJREF_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_OBJREF_Creator.java.svn-base new file mode 100644 index 0000000..0843e22 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_OBJREF_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_OBJREF_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_OBJREF("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_POLICY_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_POLICY_Creator.java.svn-base new file mode 100644 index 0000000..73ed463 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/INV_POLICY_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_POLICY_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_POLICY("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/MARSHAL_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/MARSHAL_Creator.java.svn-base new file mode 100644 index 0000000..c20c372 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/MARSHAL_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class MARSHAL_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.MARSHAL("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/Makefile.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/Makefile.svn-base new file mode 100644 index 0000000..f2ee1eb --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/Makefile.svn-base @@ -0,0 +1,52 @@ +# +# Makefile +# (Java & IDL) +# ----------------------------------------------------------------------------------- + +#SUBDIRS= + +#EFC_SERVICES= +#JAVA_TOOLS= + +#IDL_JMODULES= + +SOURCES=BAD_CONTEXT_Creator BAD_INV_ORDER_Creator BAD_OPERATION_Creator \ +BAD_PARAM_Creator BAD_TYPECODE_Creator COMM_FAILURE_Creator \ +DATA_CONVERSION_Creator FREE_MEM_Creator IMP_LIMIT_Creator \ +INITIALIZE_Creator INTERNAL_Creator INTF_REPOS_Creator \ +INVALID_TRANSACTION_Creator INV_FLAG_Creator INV_IDENT_Creator \ +INV_OBJREF_Creator INV_POLICY_Creator MARSHAL_Creator \ +NO_IMPLEMENT_Creator NO_MEMORY_Creator NO_PERMISSION_Creator \ +NO_RESOURCES_Creator NO_RESPONSE_Creator OBJECT_NOT_EXIST_Creator \ +OBJ_ADAPTER_Creator PERSIST_STORE_Creator SystemExceptionCreator \ +SystemExceptionEncoder SystemExceptionNames TRANSACTION_REQUIRED_Creator \ +UNKNOWN_Creator TRANSACTION_ROLLEDBACK_Creator TRANSIENT_Creator + + +USR_CLASSPATH=$(MODULE_PATH)/orb/util/lib/util.jar:$(MODULE_PATH)/orb/idl/orb/lib/CORBA.jar + +#USR_IDLJ_FLAGS= +#USR_JAVAC_FLAGS= +#USR_JAR_FLAGS= + +#USR_CLASSPATH= +#USR_IDL_INCLUDES= + +#SERVICE_JLIB=yes +#SERVICE_JBIN=yes +LOCAL_JLIB=exception +#GLOBAL_JBIN= +#LOCAL_JLIB= +#LOCAL_JBIN= + +#USR_PRE_TARGETS= +#USR_POST_TARGETS= + +#PKG= + +#-------------------------------------------------------- +# PARTE FINAL: er meollo +#-------------------------------------------------------- +include $(CCM_PROJECT_PATH)/java/MakeRules/TIDJMakeRules.mk + +BASIC_CLASSPATH=$(JDK_DIR)/jre/lib/rt.jar diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_IMPLEMENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_IMPLEMENT_Creator.java.svn-base new file mode 100644 index 0000000..036d57d --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_IMPLEMENT_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_IMPLEMENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_IMPLEMENT("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_MEMORY_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_MEMORY_Creator.java.svn-base new file mode 100644 index 0000000..b537754 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_MEMORY_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_MEMORY_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_MEMORY("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_PERMISSION_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_PERMISSION_Creator.java.svn-base new file mode 100644 index 0000000..6469bf8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_PERMISSION_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_PERMISSION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_PERMISSION("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESOURCES_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESOURCES_Creator.java.svn-base new file mode 100644 index 0000000..2a52346 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESOURCES_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_RESOURCES_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_RESOURCES("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESPONSE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESPONSE_Creator.java.svn-base new file mode 100644 index 0000000..6566862 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/NO_RESPONSE_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_RESPONSE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_RESPONSE("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJECT_NOT_EXIST_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJECT_NOT_EXIST_Creator.java.svn-base new file mode 100644 index 0000000..5093e7e --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJECT_NOT_EXIST_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class OBJECT_NOT_EXIST_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.OBJECT_NOT_EXIST("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJ_ADAPTER_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJ_ADAPTER_Creator.java.svn-base new file mode 100644 index 0000000..3a61453 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/OBJ_ADAPTER_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class OBJ_ADAPTER_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.OBJ_ADAPTER("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/PERSIST_STORE_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/PERSIST_STORE_Creator.java.svn-base new file mode 100644 index 0000000..a66c5f4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/PERSIST_STORE_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class PERSIST_STORE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.PERSIST_STORE("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionCreator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionCreator.java.svn-base new file mode 100644 index 0000000..33dfa72 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionCreator.java.svn-base @@ -0,0 +1,53 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public interface SystemExceptionCreator +{ + + SystemException create(int minor, CompletionStatus completion); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionEncoder.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionEncoder.java.svn-base new file mode 100644 index 0000000..84eaa0a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionEncoder.java.svn-base @@ -0,0 +1,235 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; + +/** + * Write/Read SystemExceptions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SystemExceptionEncoder +{ + + private static java.util.Hashtable st_creators_table = null; + + private static java.util.Hashtable st_ids_table = null; + + private synchronized static void initCreators() + { + if (st_creators_table != null) + return; + + st_creators_table = new java.util.Hashtable(); + + st_creators_table.put(SystemExceptionNames.BAD_CONTEXT_id, + new BAD_CONTEXT_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_INV_ORDER_id, + new BAD_INV_ORDER_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_OPERATION_id, + new BAD_OPERATION_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_PARAM_id, + new BAD_PARAM_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_TYPECODE_id, + new BAD_TYPECODE_Creator()); + st_creators_table.put(SystemExceptionNames.COMM_FAILURE_id, + new COMM_FAILURE_Creator()); + st_creators_table.put(SystemExceptionNames.DATA_CONVERSION_id, + new DATA_CONVERSION_Creator()); + st_creators_table.put(SystemExceptionNames.FREE_MEM_id, + new FREE_MEM_Creator()); + st_creators_table.put(SystemExceptionNames.IMP_LIMIT_id, + new IMP_LIMIT_Creator()); + st_creators_table.put(SystemExceptionNames.INITIALIZE_id, + new INITIALIZE_Creator()); + st_creators_table.put(SystemExceptionNames.INTERNAL_id, + new INTERNAL_Creator()); + st_creators_table.put(SystemExceptionNames.INTF_REPOS_id, + new INTF_REPOS_Creator()); + st_creators_table.put(SystemExceptionNames.INV_FLAG_id, + new INV_FLAG_Creator()); + st_creators_table.put(SystemExceptionNames.INV_IDENT_id, + new INV_IDENT_Creator()); + st_creators_table.put(SystemExceptionNames.INV_OBJREF_id, + new INV_OBJREF_Creator()); + st_creators_table.put(SystemExceptionNames.INV_POLICY_id, + new INV_POLICY_Creator()); + st_creators_table.put(SystemExceptionNames.INVALID_TRANSACTION_id, + new INVALID_TRANSACTION_Creator()); + st_creators_table.put(SystemExceptionNames.MARSHAL_id, + new MARSHAL_Creator()); + st_creators_table.put(SystemExceptionNames.NO_IMPLEMENT_id, + new NO_IMPLEMENT_Creator()); + st_creators_table.put(SystemExceptionNames.NO_MEMORY_id, + new NO_MEMORY_Creator()); + st_creators_table.put(SystemExceptionNames.NO_PERMISSION_id, + new NO_PERMISSION_Creator()); + st_creators_table.put(SystemExceptionNames.NO_RESOURCES_id, + new NO_RESOURCES_Creator()); + st_creators_table.put(SystemExceptionNames.NO_RESPONSE_id, + new NO_RESPONSE_Creator()); + st_creators_table.put(SystemExceptionNames.OBJECT_NOT_EXIST_id, + new OBJECT_NOT_EXIST_Creator()); + st_creators_table.put(SystemExceptionNames.OBJ_ADAPTER_id, + new OBJ_ADAPTER_Creator()); + st_creators_table.put(SystemExceptionNames.PERSIST_STORE_id, + new PERSIST_STORE_Creator()); + st_creators_table.put(SystemExceptionNames.TIMEOUT_id, + new TIMEOUT_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSACTION_REQUIRED_id, + new TRANSACTION_REQUIRED_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSACTION_ROLLEDBACK_id, + new TRANSACTION_ROLLEDBACK_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSIENT_id, + new TRANSIENT_Creator()); + st_creators_table.put(SystemExceptionNames.UNKNOWN_id, + new UNKNOWN_Creator()); + } + + private synchronized static void initIds() + { + if (st_ids_table != null) + return; + + st_ids_table = new java.util.Hashtable(); + + st_ids_table.put(SystemExceptionNames.BAD_CONTEXT_name, + SystemExceptionNames.BAD_CONTEXT_id); + st_ids_table.put(SystemExceptionNames.BAD_INV_ORDER_name, + SystemExceptionNames.BAD_INV_ORDER_id); + st_ids_table.put(SystemExceptionNames.BAD_OPERATION_name, + SystemExceptionNames.BAD_OPERATION_id); + st_ids_table.put(SystemExceptionNames.BAD_PARAM_name, + SystemExceptionNames.BAD_PARAM_id); + st_ids_table.put(SystemExceptionNames.BAD_TYPECODE_name, + SystemExceptionNames.BAD_TYPECODE_id); + st_ids_table.put(SystemExceptionNames.COMM_FAILURE_name, + SystemExceptionNames.COMM_FAILURE_id); + st_ids_table.put(SystemExceptionNames.DATA_CONVERSION_name, + SystemExceptionNames.DATA_CONVERSION_id); + st_ids_table.put(SystemExceptionNames.FREE_MEM_name, + SystemExceptionNames.FREE_MEM_id); + st_ids_table.put(SystemExceptionNames.IMP_LIMIT_name, + SystemExceptionNames.IMP_LIMIT_id); + st_ids_table.put(SystemExceptionNames.INITIALIZE_name, + SystemExceptionNames.INITIALIZE_id); + st_ids_table.put(SystemExceptionNames.INTERNAL_name, + SystemExceptionNames.INTERNAL_id); + st_ids_table.put(SystemExceptionNames.INTF_REPOS_name, + SystemExceptionNames.INTF_REPOS_id); + st_ids_table.put(SystemExceptionNames.INV_FLAG_name, + SystemExceptionNames.INV_FLAG_id); + st_ids_table.put(SystemExceptionNames.INV_IDENT_name, + SystemExceptionNames.INV_IDENT_id); + st_ids_table.put(SystemExceptionNames.INV_OBJREF_name, + SystemExceptionNames.INV_OBJREF_id); + st_ids_table.put(SystemExceptionNames.INV_POLICY_name, + SystemExceptionNames.INV_POLICY_id); + st_ids_table.put(SystemExceptionNames.INVALID_TRANSACTION_name, + SystemExceptionNames.INVALID_TRANSACTION_id); + st_ids_table.put(SystemExceptionNames.MARSHAL_name, + SystemExceptionNames.MARSHAL_id); + st_ids_table.put(SystemExceptionNames.NO_IMPLEMENT_name, + SystemExceptionNames.NO_IMPLEMENT_id); + st_ids_table.put(SystemExceptionNames.NO_MEMORY_name, + SystemExceptionNames.NO_MEMORY_id); + st_ids_table.put(SystemExceptionNames.NO_PERMISSION_name, + SystemExceptionNames.NO_PERMISSION_id); + st_ids_table.put(SystemExceptionNames.NO_RESOURCES_name, + SystemExceptionNames.NO_RESOURCES_id); + st_ids_table.put(SystemExceptionNames.NO_RESPONSE_name, + SystemExceptionNames.NO_RESPONSE_id); + st_ids_table.put(SystemExceptionNames.OBJECT_NOT_EXIST_name, + SystemExceptionNames.OBJECT_NOT_EXIST_id); + st_ids_table.put(SystemExceptionNames.OBJ_ADAPTER_name, + SystemExceptionNames.OBJ_ADAPTER_id); + st_ids_table.put(SystemExceptionNames.PERSIST_STORE_name, + SystemExceptionNames.PERSIST_STORE_id); + st_ids_table.put(SystemExceptionNames.TIMEOUT_name, + SystemExceptionNames.TIMEOUT_id); + st_ids_table.put(SystemExceptionNames.TRANSACTION_REQUIRED_name, + SystemExceptionNames.TRANSACTION_REQUIRED_id); + st_ids_table.put(SystemExceptionNames.TRANSACTION_ROLLEDBACK_name, + SystemExceptionNames.TRANSACTION_ROLLEDBACK_id); + st_ids_table.put(SystemExceptionNames.TRANSIENT_name, + SystemExceptionNames.TRANSIENT_id); + st_ids_table.put(SystemExceptionNames.UNKNOWN_name, + SystemExceptionNames.UNKNOWN_id); + } + + public static void write(org.omg.CORBA.portable.OutputStream out, + org.omg.CORBA.SystemException sys) + { + if (st_ids_table == null) + initIds(); + + out.write_string((String) st_ids_table.get(sys.getClass().getName())); + out.write_ulong(sys.minor); + out.write_ulong(sys.completed.value()); + } + + public static org.omg.CORBA.SystemException + read(org.omg.CORBA.portable.InputStream in) + { + String name = in.read_string(); + int minor = in.read_ulong(); + int completed = in.read_ulong(); + + CompletionStatus completion = CompletionStatus.from_int(completed); + + if (st_creators_table == null) + initCreators(); + + SystemExceptionCreator creator = (SystemExceptionCreator) + st_creators_table.get(name); + + if (creator == null) + throw new org.omg.CORBA.MARSHAL("Invalid System Exception Name"); + + return creator.create(minor, completion); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionNames.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionNames.java.svn-base new file mode 100644 index 0000000..7eaf648 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/SystemExceptionNames.java.svn-base @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +/** + * SystemException names and Repository Ids. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public interface SystemExceptionNames +{ + + String BAD_CONTEXT_id = "IDL:omg.org/CORBA/BAD_CONTEXT:1.0"; + + String BAD_CONTEXT_name = "org.omg.CORBA.BAD_CONTEXT"; + + String BAD_INV_ORDER_id = "IDL:omg.org/CORBA/BAD_INV_ORDER:1.0"; + + String BAD_INV_ORDER_name = "org.omg.CORBA.BAD_INV_ORDER"; + + String BAD_OPERATION_id = "IDL:omg.org/CORBA/BAD_OPERATION:1.0"; + + String BAD_OPERATION_name = "org.omg.CORBA.BAD_OPERATION"; + + String BAD_PARAM_id = "IDL:omg.org/CORBA/BAD_PARAM:1.0"; + + String BAD_PARAM_name = "org.omg.CORBA.BAD_PARAM"; + + String BAD_TYPECODE_id = "IDL:omg.org/CORBA/BAD_TYPECODE:1.0"; + + String BAD_TYPECODE_name = "org.omg.CORBA.BAD_TYPECODE"; + + String COMM_FAILURE_id = "IDL:omg.org/CORBA/COMM_FAILURE:1.0"; + + String COMM_FAILURE_name = "org.omg.CORBA.COMM_FAILURE"; + + String DATA_CONVERSION_id = "IDL:omg.org/CORBA/DATA_CONVERSION:1.0"; + + String DATA_CONVERSION_name = "org.omg.CORBA.DATA_CONVERSION"; + + String FREE_MEM_id = "IDL:omg.org/CORBA/FREE_MEM:1.0"; + + String FREE_MEM_name = "org.omg.CORBA.FREE_MEM"; + + String IMP_LIMIT_id = "IDL:omg.org/CORBA/IMP_LIMIT:1.0"; + + String IMP_LIMIT_name = "org.omg.CORBA.IMP_LIMIT"; + + String INITIALIZE_id = "IDL:omg.org/CORBA/INITIALIZE:1.0"; + + String INITIALIZE_name = "org.omg.CORBA.INITIALIZE"; + + String INTERNAL_id = "IDL:omg.org/CORBA/INTERNAL:1.0"; + + String INTERNAL_name = "org.omg.CORBA.INTERNAL"; + + String INTF_REPOS_id = "IDL:omg.org/CORBA/INTF_REPOS:1.0"; + + String INTF_REPOS_name = "org.omg.CORBA.INTF_REPOS"; + + String INV_FLAG_id = "IDL:omg.org/CORBA/INV_FLAG:1.0"; + + String INV_FLAG_name = "org.omg.CORBA.INV_FLAG"; + + String INV_IDENT_id = "IDL:omg.org/CORBA/INV_IDENT:1.0"; + + String INV_IDENT_name = "org.omg.CORBA.INV_IDENT"; + + String INV_OBJREF_id = "IDL:omg.org/CORBA/INV_OBJREF:1.0"; + + String INV_OBJREF_name = "org.omg.CORBA.INV_OBJREF"; + + String INV_POLICY_id = "IDL:omg.org/CORBA/INV_POLICY:1.0"; + + String INV_POLICY_name = "org.omg.CORBA.INV_POLICY"; + + String INVALID_TRANSACTION_id = "IDL:omg.org/CORBA/INVALID_TRANSACTION:1.0"; + + String INVALID_TRANSACTION_name = "org.omg.CORBA.INVALID_TRANSACTION"; + + String MARSHAL_id = "IDL:omg.org/CORBA/MARSHAL:1.0"; + + String MARSHAL_name = "org.omg.CORBA.MARSHAL"; + + String NO_IMPLEMENT_id = "IDL:omg.org/CORBA/NO_IMPLEMENT:1.0"; + + String NO_IMPLEMENT_name = "org.omg.CORBA.NO_IMPLEMENT"; + + String NO_MEMORY_id = "IDL:omg.org/CORBA/NO_MEMORY:1.0"; + + String NO_MEMORY_name = "org.omg.CORBA.NO_MEMORY"; + + String NO_PERMISSION_id = "IDL:omg.org/CORBA/NO_PERMISSION:1.0"; + + String NO_PERMISSION_name = "org.omg.CORBA.NO_PERMISSION"; + + String NO_RESOURCES_id = "IDL:omg.org/CORBA/NO_RESOURCES:1.0"; + + String NO_RESOURCES_name = "org.omg.CORBA.NO_RESOURCES"; + + String NO_RESPONSE_id = "IDL:omg.org/CORBA/NO_RESPONSE:1.0"; + + String NO_RESPONSE_name = "org.omg.CORBA.NO_RESPONSE"; + + String OBJECT_NOT_EXIST_id = "IDL:omg.org/CORBA/OBJECT_NOT_EXIST:1.0"; + + String OBJECT_NOT_EXIST_name = "org.omg.CORBA.OBJECT_NOT_EXIST"; + + String OBJ_ADAPTER_id = "IDL:omg.org/CORBA/OBJ_ADAPTER:1.0"; + + String OBJ_ADAPTER_name = "org.omg.CORBA.OBJ_ADAPTER"; + + String PERSIST_STORE_id = "IDL:omg.org/CORBA/PERSIST_STORE:1.0"; + + String PERSIST_STORE_name = "org.omg.CORBA.PERSIST_STORE"; + + String TIMEOUT_id = "IDL:omg.org/CORBA/TIMEOUT:1.0"; + + String TIMEOUT_name = "org.omg.CORBA.TIMEOUT"; + + String TRANSACTION_REQUIRED_id = "IDL:omg.org/CORBA/TRANSACTION_REQUIRED:1.0"; + + String TRANSACTION_REQUIRED_name = "org.omg.CORBA.TRANSACTION_REQUIRED"; + + String TRANSACTION_ROLLEDBACK_id = "IDL:omg.org/CORBA/TRANSACTION_ROLLEDBACK:1.0"; + + String TRANSACTION_ROLLEDBACK_name = "org.omg.CORBA.TRANSACTION_ROLLEDBACK"; + + String TRANSIENT_id = "IDL:omg.org/CORBA/TRANSIENT:1.0"; + + String TRANSIENT_name = "org.omg.CORBA.TRANSIENT"; + + String UNKNOWN_id = "IDL:omg.org/CORBA/UNKNOWN:1.0"; + + String UNKNOWN_name = "org.omg.CORBA.UNKNOWN"; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TIMEOUT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TIMEOUT_Creator.java.svn-base new file mode 100644 index 0000000..32bb00a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TIMEOUT_Creator.java.svn-base @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TIMEOUT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TIMEOUT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_REQUIRED_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_REQUIRED_Creator.java.svn-base new file mode 100644 index 0000000..f1b4fb3 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_REQUIRED_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSACTION_REQUIRED_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSACTION_REQUIRED("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base new file mode 100644 index 0000000..9f182e0 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSACTION_ROLLEDBACK_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSACTION_ROLLEDBACK_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSACTION_ROLLEDBACK("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSIENT_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSIENT_Creator.java.svn-base new file mode 100644 index 0000000..7904543 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/TRANSIENT_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSIENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSIENT("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/UNKNOWN_Creator.java.svn-base b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/UNKNOWN_Creator.java.svn-base new file mode 100644 index 0000000..e98ebb8 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/.svn/text-base/UNKNOWN_Creator.java.svn-base @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class UNKNOWN_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.UNKNOWN("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.java new file mode 100644 index 0000000..48d8029 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/BAD_CONTEXT_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_CONTEXT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_CONTEXT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.java b/source/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.java new file mode 100644 index 0000000..003e40c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/BAD_INV_ORDER_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_INV_ORDER_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_INV_ORDER("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.java b/source/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.java new file mode 100644 index 0000000..f531efa --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/BAD_OPERATION_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_OPERATION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_OPERATION("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.java b/source/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.java new file mode 100644 index 0000000..7e5a62b --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/BAD_PARAM_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_PARAM_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_PARAM("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.java b/source/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.java new file mode 100644 index 0000000..6569a43 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/BAD_TYPECODE_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class BAD_TYPECODE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.BAD_TYPECODE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.java b/source/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.java new file mode 100644 index 0000000..07af911 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/COMM_FAILURE_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class COMM_FAILURE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.COMM_FAILURE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.java b/source/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.java new file mode 100644 index 0000000..3c6c107 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/DATA_CONVERSION_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class DATA_CONVERSION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.DATA_CONVERSION("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.java b/source/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.java new file mode 100644 index 0000000..31307d4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/FREE_MEM_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class FREE_MEM_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.FREE_MEM("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.java new file mode 100644 index 0000000..d6a3a08 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/IMP_LIMIT_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class IMP_LIMIT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.IMP_LIMIT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.java new file mode 100644 index 0000000..cc7d251 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INITIALIZE_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INITIALIZE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INITIALIZE("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.java new file mode 100644 index 0000000..3aea3ec --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INTERNAL_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INTERNAL_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INTERNAL("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.java new file mode 100644 index 0000000..299e6ed --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INTF_REPOS_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INTF_REPOS_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INTF_REPOS("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.java new file mode 100644 index 0000000..21398d4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INVALID_TRANSACTION_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INVALID_TRANSACTION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INVALID_TRANSACTION("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.java new file mode 100644 index 0000000..f6434bd --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INV_FLAG_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_FLAG_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_FLAG("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.java new file mode 100644 index 0000000..18651d6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INV_IDENT_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_IDENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_IDENT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.java new file mode 100644 index 0000000..f1030c6 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INV_OBJREF_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_OBJREF_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_OBJREF("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.java b/source/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.java new file mode 100644 index 0000000..4a39e1c --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/INV_POLICY_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class INV_POLICY_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.INV_POLICY("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.java b/source/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.java new file mode 100644 index 0000000..4fde971 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/MARSHAL_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class MARSHAL_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.MARSHAL("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/Makefile b/source/es/tid/TIDorbj/core/util/exception/Makefile new file mode 100644 index 0000000..f2ee1eb --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/Makefile @@ -0,0 +1,52 @@ +# +# Makefile +# (Java & IDL) +# ----------------------------------------------------------------------------------- + +#SUBDIRS= + +#EFC_SERVICES= +#JAVA_TOOLS= + +#IDL_JMODULES= + +SOURCES=BAD_CONTEXT_Creator BAD_INV_ORDER_Creator BAD_OPERATION_Creator \ +BAD_PARAM_Creator BAD_TYPECODE_Creator COMM_FAILURE_Creator \ +DATA_CONVERSION_Creator FREE_MEM_Creator IMP_LIMIT_Creator \ +INITIALIZE_Creator INTERNAL_Creator INTF_REPOS_Creator \ +INVALID_TRANSACTION_Creator INV_FLAG_Creator INV_IDENT_Creator \ +INV_OBJREF_Creator INV_POLICY_Creator MARSHAL_Creator \ +NO_IMPLEMENT_Creator NO_MEMORY_Creator NO_PERMISSION_Creator \ +NO_RESOURCES_Creator NO_RESPONSE_Creator OBJECT_NOT_EXIST_Creator \ +OBJ_ADAPTER_Creator PERSIST_STORE_Creator SystemExceptionCreator \ +SystemExceptionEncoder SystemExceptionNames TRANSACTION_REQUIRED_Creator \ +UNKNOWN_Creator TRANSACTION_ROLLEDBACK_Creator TRANSIENT_Creator + + +USR_CLASSPATH=$(MODULE_PATH)/orb/util/lib/util.jar:$(MODULE_PATH)/orb/idl/orb/lib/CORBA.jar + +#USR_IDLJ_FLAGS= +#USR_JAVAC_FLAGS= +#USR_JAR_FLAGS= + +#USR_CLASSPATH= +#USR_IDL_INCLUDES= + +#SERVICE_JLIB=yes +#SERVICE_JBIN=yes +LOCAL_JLIB=exception +#GLOBAL_JBIN= +#LOCAL_JLIB= +#LOCAL_JBIN= + +#USR_PRE_TARGETS= +#USR_POST_TARGETS= + +#PKG= + +#-------------------------------------------------------- +# PARTE FINAL: er meollo +#-------------------------------------------------------- +include $(CCM_PROJECT_PATH)/java/MakeRules/TIDJMakeRules.mk + +BASIC_CLASSPATH=$(JDK_DIR)/jre/lib/rt.jar diff --git a/source/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.java new file mode 100644 index 0000000..a377fdc --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/NO_IMPLEMENT_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_IMPLEMENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_IMPLEMENT("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.java b/source/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.java new file mode 100644 index 0000000..8358f71 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/NO_MEMORY_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_MEMORY_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_MEMORY("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.java b/source/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.java new file mode 100644 index 0000000..535c1bb --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/NO_PERMISSION_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_PERMISSION_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_PERMISSION("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.java b/source/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.java new file mode 100644 index 0000000..2ed1270 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/NO_RESOURCES_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_RESOURCES_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_RESOURCES("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.java b/source/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.java new file mode 100644 index 0000000..e1cd92a --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/NO_RESPONSE_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class NO_RESPONSE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.NO_RESPONSE("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.java b/source/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.java new file mode 100644 index 0000000..6175810 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/OBJECT_NOT_EXIST_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class OBJECT_NOT_EXIST_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.OBJECT_NOT_EXIST("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.java b/source/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.java new file mode 100644 index 0000000..726cf3e --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/OBJ_ADAPTER_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class OBJ_ADAPTER_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.OBJ_ADAPTER("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.java b/source/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.java new file mode 100644 index 0000000..864e971 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/PERSIST_STORE_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class PERSIST_STORE_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.PERSIST_STORE("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.java b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.java new file mode 100644 index 0000000..a151052 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionCreator.java @@ -0,0 +1,53 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public interface SystemExceptionCreator +{ + + SystemException create(int minor, CompletionStatus completion); + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.java b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.java new file mode 100644 index 0000000..ccc32a9 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionEncoder.java @@ -0,0 +1,235 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; + +/** + * Write/Read SystemExceptions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class SystemExceptionEncoder +{ + + private static java.util.Hashtable st_creators_table = null; + + private static java.util.Hashtable st_ids_table = null; + + private synchronized static void initCreators() + { + if (st_creators_table != null) + return; + + st_creators_table = new java.util.Hashtable(); + + st_creators_table.put(SystemExceptionNames.BAD_CONTEXT_id, + new BAD_CONTEXT_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_INV_ORDER_id, + new BAD_INV_ORDER_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_OPERATION_id, + new BAD_OPERATION_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_PARAM_id, + new BAD_PARAM_Creator()); + st_creators_table.put(SystemExceptionNames.BAD_TYPECODE_id, + new BAD_TYPECODE_Creator()); + st_creators_table.put(SystemExceptionNames.COMM_FAILURE_id, + new COMM_FAILURE_Creator()); + st_creators_table.put(SystemExceptionNames.DATA_CONVERSION_id, + new DATA_CONVERSION_Creator()); + st_creators_table.put(SystemExceptionNames.FREE_MEM_id, + new FREE_MEM_Creator()); + st_creators_table.put(SystemExceptionNames.IMP_LIMIT_id, + new IMP_LIMIT_Creator()); + st_creators_table.put(SystemExceptionNames.INITIALIZE_id, + new INITIALIZE_Creator()); + st_creators_table.put(SystemExceptionNames.INTERNAL_id, + new INTERNAL_Creator()); + st_creators_table.put(SystemExceptionNames.INTF_REPOS_id, + new INTF_REPOS_Creator()); + st_creators_table.put(SystemExceptionNames.INV_FLAG_id, + new INV_FLAG_Creator()); + st_creators_table.put(SystemExceptionNames.INV_IDENT_id, + new INV_IDENT_Creator()); + st_creators_table.put(SystemExceptionNames.INV_OBJREF_id, + new INV_OBJREF_Creator()); + st_creators_table.put(SystemExceptionNames.INV_POLICY_id, + new INV_POLICY_Creator()); + st_creators_table.put(SystemExceptionNames.INVALID_TRANSACTION_id, + new INVALID_TRANSACTION_Creator()); + st_creators_table.put(SystemExceptionNames.MARSHAL_id, + new MARSHAL_Creator()); + st_creators_table.put(SystemExceptionNames.NO_IMPLEMENT_id, + new NO_IMPLEMENT_Creator()); + st_creators_table.put(SystemExceptionNames.NO_MEMORY_id, + new NO_MEMORY_Creator()); + st_creators_table.put(SystemExceptionNames.NO_PERMISSION_id, + new NO_PERMISSION_Creator()); + st_creators_table.put(SystemExceptionNames.NO_RESOURCES_id, + new NO_RESOURCES_Creator()); + st_creators_table.put(SystemExceptionNames.NO_RESPONSE_id, + new NO_RESPONSE_Creator()); + st_creators_table.put(SystemExceptionNames.OBJECT_NOT_EXIST_id, + new OBJECT_NOT_EXIST_Creator()); + st_creators_table.put(SystemExceptionNames.OBJ_ADAPTER_id, + new OBJ_ADAPTER_Creator()); + st_creators_table.put(SystemExceptionNames.PERSIST_STORE_id, + new PERSIST_STORE_Creator()); + st_creators_table.put(SystemExceptionNames.TIMEOUT_id, + new TIMEOUT_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSACTION_REQUIRED_id, + new TRANSACTION_REQUIRED_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSACTION_ROLLEDBACK_id, + new TRANSACTION_ROLLEDBACK_Creator()); + st_creators_table.put(SystemExceptionNames.TRANSIENT_id, + new TRANSIENT_Creator()); + st_creators_table.put(SystemExceptionNames.UNKNOWN_id, + new UNKNOWN_Creator()); + } + + private synchronized static void initIds() + { + if (st_ids_table != null) + return; + + st_ids_table = new java.util.Hashtable(); + + st_ids_table.put(SystemExceptionNames.BAD_CONTEXT_name, + SystemExceptionNames.BAD_CONTEXT_id); + st_ids_table.put(SystemExceptionNames.BAD_INV_ORDER_name, + SystemExceptionNames.BAD_INV_ORDER_id); + st_ids_table.put(SystemExceptionNames.BAD_OPERATION_name, + SystemExceptionNames.BAD_OPERATION_id); + st_ids_table.put(SystemExceptionNames.BAD_PARAM_name, + SystemExceptionNames.BAD_PARAM_id); + st_ids_table.put(SystemExceptionNames.BAD_TYPECODE_name, + SystemExceptionNames.BAD_TYPECODE_id); + st_ids_table.put(SystemExceptionNames.COMM_FAILURE_name, + SystemExceptionNames.COMM_FAILURE_id); + st_ids_table.put(SystemExceptionNames.DATA_CONVERSION_name, + SystemExceptionNames.DATA_CONVERSION_id); + st_ids_table.put(SystemExceptionNames.FREE_MEM_name, + SystemExceptionNames.FREE_MEM_id); + st_ids_table.put(SystemExceptionNames.IMP_LIMIT_name, + SystemExceptionNames.IMP_LIMIT_id); + st_ids_table.put(SystemExceptionNames.INITIALIZE_name, + SystemExceptionNames.INITIALIZE_id); + st_ids_table.put(SystemExceptionNames.INTERNAL_name, + SystemExceptionNames.INTERNAL_id); + st_ids_table.put(SystemExceptionNames.INTF_REPOS_name, + SystemExceptionNames.INTF_REPOS_id); + st_ids_table.put(SystemExceptionNames.INV_FLAG_name, + SystemExceptionNames.INV_FLAG_id); + st_ids_table.put(SystemExceptionNames.INV_IDENT_name, + SystemExceptionNames.INV_IDENT_id); + st_ids_table.put(SystemExceptionNames.INV_OBJREF_name, + SystemExceptionNames.INV_OBJREF_id); + st_ids_table.put(SystemExceptionNames.INV_POLICY_name, + SystemExceptionNames.INV_POLICY_id); + st_ids_table.put(SystemExceptionNames.INVALID_TRANSACTION_name, + SystemExceptionNames.INVALID_TRANSACTION_id); + st_ids_table.put(SystemExceptionNames.MARSHAL_name, + SystemExceptionNames.MARSHAL_id); + st_ids_table.put(SystemExceptionNames.NO_IMPLEMENT_name, + SystemExceptionNames.NO_IMPLEMENT_id); + st_ids_table.put(SystemExceptionNames.NO_MEMORY_name, + SystemExceptionNames.NO_MEMORY_id); + st_ids_table.put(SystemExceptionNames.NO_PERMISSION_name, + SystemExceptionNames.NO_PERMISSION_id); + st_ids_table.put(SystemExceptionNames.NO_RESOURCES_name, + SystemExceptionNames.NO_RESOURCES_id); + st_ids_table.put(SystemExceptionNames.NO_RESPONSE_name, + SystemExceptionNames.NO_RESPONSE_id); + st_ids_table.put(SystemExceptionNames.OBJECT_NOT_EXIST_name, + SystemExceptionNames.OBJECT_NOT_EXIST_id); + st_ids_table.put(SystemExceptionNames.OBJ_ADAPTER_name, + SystemExceptionNames.OBJ_ADAPTER_id); + st_ids_table.put(SystemExceptionNames.PERSIST_STORE_name, + SystemExceptionNames.PERSIST_STORE_id); + st_ids_table.put(SystemExceptionNames.TIMEOUT_name, + SystemExceptionNames.TIMEOUT_id); + st_ids_table.put(SystemExceptionNames.TRANSACTION_REQUIRED_name, + SystemExceptionNames.TRANSACTION_REQUIRED_id); + st_ids_table.put(SystemExceptionNames.TRANSACTION_ROLLEDBACK_name, + SystemExceptionNames.TRANSACTION_ROLLEDBACK_id); + st_ids_table.put(SystemExceptionNames.TRANSIENT_name, + SystemExceptionNames.TRANSIENT_id); + st_ids_table.put(SystemExceptionNames.UNKNOWN_name, + SystemExceptionNames.UNKNOWN_id); + } + + public static void write(org.omg.CORBA.portable.OutputStream out, + org.omg.CORBA.SystemException sys) + { + if (st_ids_table == null) + initIds(); + + out.write_string((String) st_ids_table.get(sys.getClass().getName())); + out.write_ulong(sys.minor); + out.write_ulong(sys.completed.value()); + } + + public static org.omg.CORBA.SystemException + read(org.omg.CORBA.portable.InputStream in) + { + String name = in.read_string(); + int minor = in.read_ulong(); + int completed = in.read_ulong(); + + CompletionStatus completion = CompletionStatus.from_int(completed); + + if (st_creators_table == null) + initCreators(); + + SystemExceptionCreator creator = (SystemExceptionCreator) + st_creators_table.get(name); + + if (creator == null) + throw new org.omg.CORBA.MARSHAL("Invalid System Exception Name"); + + return creator.create(minor, completion); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.java b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.java new file mode 100644 index 0000000..1a40878 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/SystemExceptionNames.java @@ -0,0 +1,178 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +/** + * SystemException names and Repository Ids. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public interface SystemExceptionNames +{ + + String BAD_CONTEXT_id = "IDL:omg.org/CORBA/BAD_CONTEXT:1.0"; + + String BAD_CONTEXT_name = "org.omg.CORBA.BAD_CONTEXT"; + + String BAD_INV_ORDER_id = "IDL:omg.org/CORBA/BAD_INV_ORDER:1.0"; + + String BAD_INV_ORDER_name = "org.omg.CORBA.BAD_INV_ORDER"; + + String BAD_OPERATION_id = "IDL:omg.org/CORBA/BAD_OPERATION:1.0"; + + String BAD_OPERATION_name = "org.omg.CORBA.BAD_OPERATION"; + + String BAD_PARAM_id = "IDL:omg.org/CORBA/BAD_PARAM:1.0"; + + String BAD_PARAM_name = "org.omg.CORBA.BAD_PARAM"; + + String BAD_TYPECODE_id = "IDL:omg.org/CORBA/BAD_TYPECODE:1.0"; + + String BAD_TYPECODE_name = "org.omg.CORBA.BAD_TYPECODE"; + + String COMM_FAILURE_id = "IDL:omg.org/CORBA/COMM_FAILURE:1.0"; + + String COMM_FAILURE_name = "org.omg.CORBA.COMM_FAILURE"; + + String DATA_CONVERSION_id = "IDL:omg.org/CORBA/DATA_CONVERSION:1.0"; + + String DATA_CONVERSION_name = "org.omg.CORBA.DATA_CONVERSION"; + + String FREE_MEM_id = "IDL:omg.org/CORBA/FREE_MEM:1.0"; + + String FREE_MEM_name = "org.omg.CORBA.FREE_MEM"; + + String IMP_LIMIT_id = "IDL:omg.org/CORBA/IMP_LIMIT:1.0"; + + String IMP_LIMIT_name = "org.omg.CORBA.IMP_LIMIT"; + + String INITIALIZE_id = "IDL:omg.org/CORBA/INITIALIZE:1.0"; + + String INITIALIZE_name = "org.omg.CORBA.INITIALIZE"; + + String INTERNAL_id = "IDL:omg.org/CORBA/INTERNAL:1.0"; + + String INTERNAL_name = "org.omg.CORBA.INTERNAL"; + + String INTF_REPOS_id = "IDL:omg.org/CORBA/INTF_REPOS:1.0"; + + String INTF_REPOS_name = "org.omg.CORBA.INTF_REPOS"; + + String INV_FLAG_id = "IDL:omg.org/CORBA/INV_FLAG:1.0"; + + String INV_FLAG_name = "org.omg.CORBA.INV_FLAG"; + + String INV_IDENT_id = "IDL:omg.org/CORBA/INV_IDENT:1.0"; + + String INV_IDENT_name = "org.omg.CORBA.INV_IDENT"; + + String INV_OBJREF_id = "IDL:omg.org/CORBA/INV_OBJREF:1.0"; + + String INV_OBJREF_name = "org.omg.CORBA.INV_OBJREF"; + + String INV_POLICY_id = "IDL:omg.org/CORBA/INV_POLICY:1.0"; + + String INV_POLICY_name = "org.omg.CORBA.INV_POLICY"; + + String INVALID_TRANSACTION_id = "IDL:omg.org/CORBA/INVALID_TRANSACTION:1.0"; + + String INVALID_TRANSACTION_name = "org.omg.CORBA.INVALID_TRANSACTION"; + + String MARSHAL_id = "IDL:omg.org/CORBA/MARSHAL:1.0"; + + String MARSHAL_name = "org.omg.CORBA.MARSHAL"; + + String NO_IMPLEMENT_id = "IDL:omg.org/CORBA/NO_IMPLEMENT:1.0"; + + String NO_IMPLEMENT_name = "org.omg.CORBA.NO_IMPLEMENT"; + + String NO_MEMORY_id = "IDL:omg.org/CORBA/NO_MEMORY:1.0"; + + String NO_MEMORY_name = "org.omg.CORBA.NO_MEMORY"; + + String NO_PERMISSION_id = "IDL:omg.org/CORBA/NO_PERMISSION:1.0"; + + String NO_PERMISSION_name = "org.omg.CORBA.NO_PERMISSION"; + + String NO_RESOURCES_id = "IDL:omg.org/CORBA/NO_RESOURCES:1.0"; + + String NO_RESOURCES_name = "org.omg.CORBA.NO_RESOURCES"; + + String NO_RESPONSE_id = "IDL:omg.org/CORBA/NO_RESPONSE:1.0"; + + String NO_RESPONSE_name = "org.omg.CORBA.NO_RESPONSE"; + + String OBJECT_NOT_EXIST_id = "IDL:omg.org/CORBA/OBJECT_NOT_EXIST:1.0"; + + String OBJECT_NOT_EXIST_name = "org.omg.CORBA.OBJECT_NOT_EXIST"; + + String OBJ_ADAPTER_id = "IDL:omg.org/CORBA/OBJ_ADAPTER:1.0"; + + String OBJ_ADAPTER_name = "org.omg.CORBA.OBJ_ADAPTER"; + + String PERSIST_STORE_id = "IDL:omg.org/CORBA/PERSIST_STORE:1.0"; + + String PERSIST_STORE_name = "org.omg.CORBA.PERSIST_STORE"; + + String TIMEOUT_id = "IDL:omg.org/CORBA/TIMEOUT:1.0"; + + String TIMEOUT_name = "org.omg.CORBA.TIMEOUT"; + + String TRANSACTION_REQUIRED_id = "IDL:omg.org/CORBA/TRANSACTION_REQUIRED:1.0"; + + String TRANSACTION_REQUIRED_name = "org.omg.CORBA.TRANSACTION_REQUIRED"; + + String TRANSACTION_ROLLEDBACK_id = "IDL:omg.org/CORBA/TRANSACTION_ROLLEDBACK:1.0"; + + String TRANSACTION_ROLLEDBACK_name = "org.omg.CORBA.TRANSACTION_ROLLEDBACK"; + + String TRANSIENT_id = "IDL:omg.org/CORBA/TRANSIENT:1.0"; + + String TRANSIENT_name = "org.omg.CORBA.TRANSIENT"; + + String UNKNOWN_id = "IDL:omg.org/CORBA/UNKNOWN:1.0"; + + String UNKNOWN_name = "org.omg.CORBA.UNKNOWN"; +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.java new file mode 100644 index 0000000..6509a52 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/TIMEOUT_Creator.java @@ -0,0 +1,58 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TIMEOUT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TIMEOUT("", minor, completion); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.java b/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.java new file mode 100644 index 0000000..e26fc75 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_REQUIRED_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSACTION_REQUIRED_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSACTION_REQUIRED("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.java b/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.java new file mode 100644 index 0000000..6ad2971 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/TRANSACTION_ROLLEDBACK_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSACTION_ROLLEDBACK_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSACTION_ROLLEDBACK("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.java b/source/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.java new file mode 100644 index 0000000..a468e07 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/TRANSIENT_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class TRANSIENT_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.TRANSIENT("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.java b/source/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.java new file mode 100644 index 0000000..9232723 --- /dev/null +++ b/source/es/tid/TIDorbj/core/util/exception/UNKNOWN_Creator.java @@ -0,0 +1,57 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.util.exception; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.SystemException; + +public class UNKNOWN_Creator + implements SystemExceptionCreator +{ + + public SystemException create(int minor, CompletionStatus completion) + { + return new org.omg.CORBA.UNKNOWN("", minor, completion); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/all-wcprops b/source/es/tid/TIDorbj/core/ziop/.svn/all-wcprops new file mode 100644 index 0000000..36c2d19 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/all-wcprops @@ -0,0 +1,35 @@ +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop +END +ZIOP.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop/ZIOP.java +END +CompressionEnablingPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.java +END +CompressionLowValuePolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.java +END +CompressorIdLevelListPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 116 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.java +END +CompressionMinRatioPolicyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 114 +/svn/tidorbj/!svn/ver/395/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.java +END diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/entries b/source/es/tid/TIDorbj/core/ziop/.svn/entries new file mode 100644 index 0000000..c42adb4 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/entries @@ -0,0 +1,205 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/core/ziop +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + + + + + + +0 + +CompressorIdLevelListPolicyImpl.java +file + + + + +2009-05-27T12:26:06.000000Z +928f344e36fca76619138eaf8d2fe7b7 +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +4806 + +ZIOP.java +file + + + + +2009-05-27T12:26:06.000000Z +f39551077efadd6747f1f1cceef97869 +2009-05-27T14:10:32.637285Z +395 +avega +has-props + + + + + + + + + + + + + + + + + + + + +9065 + +CompressionLowValuePolicyImpl.java +file + + + + +2009-05-27T12:26:06.000000Z +d0cbe9f9b5ab6866c0a4d8f344556c62 +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +4308 + +CompressionEnablingPolicyImpl.java +file + + + + +2009-05-27T12:26:06.000000Z +768eab0d515f39b5050f31a2af2e2685 +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +4856 + +CompressionMinRatioPolicyImpl.java +file + + + + +2009-05-27T12:26:06.000000Z +b5a0c44f85f74817249f3dababb9c4eb +2009-05-27T14:10:32.637285Z +395 +avega + + + + + + + + + + + + + + + + + + + + + +4268 + diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/prop-base/ZIOP.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/prop-base/ZIOP.java.svn-base new file mode 100644 index 0000000..3160658 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/prop-base/ZIOP.java.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mergeinfo +V 0 + +END diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionEnablingPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionEnablingPolicyImpl.java.svn-base new file mode 100644 index 0000000..7026f0e --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionEnablingPolicyImpl.java.svn-base @@ -0,0 +1,167 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionEnablingPolicyImpl implementation of + * CompressionEnabling Policy. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionEnablingPolicyImpl + extends org.omg.ZIOP.CompressionEnablingPolicyLocalBase +{ + + boolean m_value; + + /** + * Creates a new CompressionEnablingPolicyImpl instance. + * + * @param val a boolean value + */ + public CompressionEnablingPolicyImpl(boolean val) + { + m_value = val; + } + + /** + * compression_enabled returns if compression is enabled. + * + * @return a boolean value + */ + public boolean compression_enabled() + { + return m_value; + } + + /** + * Returns policy_type + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_ENABLING_POLICY_ID.value; + } + + /** + * copy . + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionEnablingPolicyImpl(m_value); + } + + /** + * destroy . + * + */ + public void destroy() + { + // do nothing! + } + + /** + * Describe createPolicy method here. + * + * @param val an Any value + * @return a CompressionEnablingPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionEnablingPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + boolean policy_value = + CompressionEnablingPolicyValueHelper.extract(val); + + return new CompressionEnablingPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * read CompressionEnablingPolicy from a encapsulation. + * + * @param input a CDRInputStream value + * @return a CompressionEnablingPolicyImpl value + */ + public static CompressionEnablingPolicyImpl read(CDRInputStream input) + { + boolean policy_value = CompressionEnablingPolicyValueHelper.read(input); + + return new CompressionEnablingPolicyImpl(policy_value); + } + + /** + * write CompressionEnablingPolicy into a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionEnablingPolicy value + */ + public static void write(CDROutputStream output, + CompressionEnablingPolicy policy) + { + CompressionEnablingPolicyValueHelper.write(output, + policy.compression_enabled()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionLowValuePolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionLowValuePolicyImpl.java.svn-base new file mode 100644 index 0000000..0bb7a3c --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionLowValuePolicyImpl.java.svn-base @@ -0,0 +1,154 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionLowValuePolicyImpl policy implementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionLowValuePolicyImpl + extends CompressionLowValuePolicyLocalBase +{ + + int m_value; + + /** + * Creates a new CompressionLowValuePolicyImpl instance. + * + * @param val an int value + */ + public CompressionLowValuePolicyImpl(int val) + { + m_value = val; + } + + /** + * Returns low_value . + * + * @return an int value + */ + public int low_value() + { + return m_value; + } + + /** + * Retruns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_LOW_VALUE_POLICY_ID.value; + } + + /** + * copy current policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionLowValuePolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy create a new CompressionLowValuePolicyImpl. + * + * @param val an Any value + * @return a CompressionLowValuePolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionLowValuePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + int policy_value = + CompressionLowValuePolicyValueHelper.extract(val); + + return new CompressionLowValuePolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * write policy into a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionLowValuePolicy value + */ + public static void write(CDROutputStream output, + CompressionLowValuePolicy policy) + { + + CompressionLowValuePolicyValueHelper.write(output, + policy.low_value()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionMinRatioPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionMinRatioPolicyImpl.java.svn-base new file mode 100644 index 0000000..402af44 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressionMinRatioPolicyImpl.java.svn-base @@ -0,0 +1,154 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionMinRatioPolicyImpl policy implmementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionMinRatioPolicyImpl + extends CompressionMinRatioPolicyLocalBase +{ + + float m_value; + + /** + * Creates a new CompressionMinRatioPolicyImpl instance. + * + * @param val an int value + */ + public CompressionMinRatioPolicyImpl(float val) + { + m_value = val; + } + + /** + * Returns ratio . + * + * @return an int value + */ + public float ratio() + { + return m_value; + } + + /** + * Returns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_MIN_RATIO_POLICY_ID.value; + } + + /** + * copy current policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionMinRatioPolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy . + * + * @param val an Any value + * @return a CompressionMinRatioPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionMinRatioPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + float policy_value = + CompressionMinRatioPolicyValueHelper.extract(val); + + return new CompressionMinRatioPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * write policy in to a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionMinRatioPolicy value + */ + public static void write(CDROutputStream output, + CompressionMinRatioPolicy policy) + { + + CompressionMinRatioPolicyValueHelper.write(output, + policy.ratio()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressorIdLevelListPolicyImpl.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressorIdLevelListPolicyImpl.java.svn-base new file mode 100644 index 0000000..c8157da --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/CompressorIdLevelListPolicyImpl.java.svn-base @@ -0,0 +1,165 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressorIdLevelListPolicyImpl policy implementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressorIdLevelListPolicyImpl + extends CompressorIdLevelListPolicyLocalBase +{ + + CompressorIdLevel[] m_value; + + /** + * Creates a new CompressorIdLevelListPolicyImpl instance. + * + * @param val a CompressorIdLevel value + */ + public CompressorIdLevelListPolicyImpl(CompressorIdLevel[] val) + { + m_value = val; + } + + /** + * Returns compressor_ids . + * + * @return a CompressorIdLevel[] value + */ + public CompressorIdLevel[] compressor_ids() + { + return m_value; + } + + /** + * Returns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value; + } + + /** + * copy policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressorIdLevelListPolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy . + * + * @param val an Any value + * @return a CompressorIdLevelListPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressorIdLevelListPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + CompressorIdLevel[] policy_value = + CompressorIdLevelListHelper.extract(val); + + return new CompressorIdLevelListPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * read policy from an encapsulation. + * + * @param input a CDRInputStream value + * @return a CompressorIdLevelListPolicyImpl value + */ + public static CompressorIdLevelListPolicyImpl read(CDRInputStream input) + { + CompressorIdLevel[] policy_value = CompressorIdLevelListHelper.read(input); + return new CompressorIdLevelListPolicyImpl(policy_value); + } + + /** + * write policy into an encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressorIdLevelListPolicy value + */ + public static void write(CDROutputStream output, + CompressorIdLevelListPolicy policy) + { + CompressorIdLevelListHelper.write(output, + policy.compressor_ids()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/.svn/text-base/ZIOP.java.svn-base b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/ZIOP.java.svn-base new file mode 100644 index 0000000..22658a1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/.svn/text-base/ZIOP.java.svn-base @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.ziop; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +import org.omg.Compression.*; +import org.omg.ZIOP.*; + + +/** + * ZIOP common facilities to dealing with ZIOP policies + * CompressionEnabling Policy. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class ZIOP +{ + + + /** + * checkCompressionEnabled cheks if the context contains a + * CompressionEnablingPolicy enabled + * + * @param context a PolicyContext value + * @return a boolean value + */ + public static boolean checkCompressionEnabled(PolicyContext context) + { + if (context != null) { + + CompressionEnablingPolicy compressionEnablingPolicy = + context.getCompressionEnablingPolicy(); + + if (compressionEnablingPolicy != null) { + return compressionEnablingPolicy.compression_enabled(); + } + } + return false; + } + + /** + * checkCompressionEnabled checks if both context provided + * contains CompressionEnablingPolicy enabled. + * + * @param context a PolicyContext value + * @param ior_context a PolicyContext value + * @return a boolean value + */ + public static boolean checkCompressionEnabled(PolicyContext context, + PolicyContext ior_context) + { + if ( (context != null) && (ior_context != null) ) { + + CompressionEnablingPolicy compressionEnablingPolicy = + context.getCompressionEnablingPolicy(); + + CompressionEnablingPolicy compressionEnablingPolicy_ior = + ior_context.getCompressionEnablingPolicy(); + + if ( (compressionEnablingPolicy != null) && + (compressionEnablingPolicy_ior != null) ){ + return ( compressionEnablingPolicy.compression_enabled() && + compressionEnablingPolicy_ior.compression_enabled() ); + } + } + return false; + } + + /** + * Retuns getClientCompressor a CompressorIdLevel that could + * be used in client side, taken in accont client context and IOR (server + * context). + * + * @param context a PolicyContext value + * @param ior_context a PolicyContext value + * @return a CompressorIdLevel value + */ + public static CompressorIdLevel getClientCompressor(PolicyContext context, + PolicyContext ior_context, + boolean assume_ziop_server) + { + + CompressorIdLevel result = new CompressorIdLevel((short)0, (short)0); + + if (context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy = + context.getCompressorIdLevelListPolicy(); + + if (ior_context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy_ior = + ior_context.getCompressorIdLevelListPolicy(); + + + if ( (compressionIdLevelListPolicy != null) && + (compressionIdLevelListPolicy_ior != null) ){ + + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + CompressorIdLevel[] compressors_ior = + compressionIdLevelListPolicy_ior.compressor_ids(); + + // Compare both lists + for (int i = 0; i < compressors_ctx.length; i++) { + + for (int j = 0; j < compressors_ior.length; j++) { + + if ( compressors_ctx[i].compressor_id == + compressors_ior[j].compressor_id ){ + result.compressor_id = + compressors_ctx[i].compressor_id; + result.compression_level = + compressors_ctx[i].compression_level; + return result; + } + } + } + } + + } else { + + if (assume_ziop_server) { + + if (compressionIdLevelListPolicy != null) { + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + if (compressors_ctx.length > 0) { + result.compressor_id = + compressors_ctx[0].compressor_id; + result.compression_level = + compressors_ctx[0].compression_level; + } + } + } + + } + } + return result; + } + + + /** + * Retuns getLevelCompressor a CompressorLevel that could + * be used in client side, taken in accont client context and IOR (server + * context). + * + * @param compressor_id a short value + * @param context a PolicyContext value + * @return a short value + */ + public static short getLevelCompressor(short compressor_id, + PolicyContext context) + { + if (context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy = + context.getCompressorIdLevelListPolicy(); + + if (compressionIdLevelListPolicy != null) { + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + + // Compare both lists + for (int i = 0; i < compressors_ctx.length; i++) { + if (compressors_ctx[i].compressor_id == compressor_id) { + return compressors_ctx[i].compression_level; + } + } + } + } + return 0; + } + + + + /** + * getLowValue from a context. + * + * @param context a PolicyContext value + * @return an int value + */ + public static int getLowValue(PolicyContext context) + { + CompressionLowValuePolicy compressionLowValuePolicy = + context.getCompressionLowValuePolicy(); + + if (compressionLowValuePolicy != null) { + return compressionLowValuePolicy.low_value(); + } + else + return 0; + } + + /** + * getMinRatio value from a context. + * + * @param context a PolicyContext value + * @return an int value + */ + public static float getMinRatio(PolicyContext context) + { + CompressionMinRatioPolicy compressionMinRatioPolicy = + context.getCompressionMinRatioPolicy(); + + if (compressionMinRatioPolicy != null) { + return compressionMinRatioPolicy.ratio(); + } + else + return 0; + } + +} diff --git a/source/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.java b/source/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.java new file mode 100644 index 0000000..7026f0e --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/CompressionEnablingPolicyImpl.java @@ -0,0 +1,167 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionEnablingPolicyImpl implementation of + * CompressionEnabling Policy. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionEnablingPolicyImpl + extends org.omg.ZIOP.CompressionEnablingPolicyLocalBase +{ + + boolean m_value; + + /** + * Creates a new CompressionEnablingPolicyImpl instance. + * + * @param val a boolean value + */ + public CompressionEnablingPolicyImpl(boolean val) + { + m_value = val; + } + + /** + * compression_enabled returns if compression is enabled. + * + * @return a boolean value + */ + public boolean compression_enabled() + { + return m_value; + } + + /** + * Returns policy_type + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_ENABLING_POLICY_ID.value; + } + + /** + * copy . + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionEnablingPolicyImpl(m_value); + } + + /** + * destroy . + * + */ + public void destroy() + { + // do nothing! + } + + /** + * Describe createPolicy method here. + * + * @param val an Any value + * @return a CompressionEnablingPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionEnablingPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + boolean policy_value = + CompressionEnablingPolicyValueHelper.extract(val); + + return new CompressionEnablingPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * read CompressionEnablingPolicy from a encapsulation. + * + * @param input a CDRInputStream value + * @return a CompressionEnablingPolicyImpl value + */ + public static CompressionEnablingPolicyImpl read(CDRInputStream input) + { + boolean policy_value = CompressionEnablingPolicyValueHelper.read(input); + + return new CompressionEnablingPolicyImpl(policy_value); + } + + /** + * write CompressionEnablingPolicy into a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionEnablingPolicy value + */ + public static void write(CDROutputStream output, + CompressionEnablingPolicy policy) + { + CompressionEnablingPolicyValueHelper.write(output, + policy.compression_enabled()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.java b/source/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.java new file mode 100644 index 0000000..0bb7a3c --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/CompressionLowValuePolicyImpl.java @@ -0,0 +1,154 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionLowValuePolicyImpl policy implementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionLowValuePolicyImpl + extends CompressionLowValuePolicyLocalBase +{ + + int m_value; + + /** + * Creates a new CompressionLowValuePolicyImpl instance. + * + * @param val an int value + */ + public CompressionLowValuePolicyImpl(int val) + { + m_value = val; + } + + /** + * Returns low_value . + * + * @return an int value + */ + public int low_value() + { + return m_value; + } + + /** + * Retruns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_LOW_VALUE_POLICY_ID.value; + } + + /** + * copy current policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionLowValuePolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy create a new CompressionLowValuePolicyImpl. + * + * @param val an Any value + * @return a CompressionLowValuePolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionLowValuePolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + int policy_value = + CompressionLowValuePolicyValueHelper.extract(val); + + return new CompressionLowValuePolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * write policy into a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionLowValuePolicy value + */ + public static void write(CDROutputStream output, + CompressionLowValuePolicy policy) + { + + CompressionLowValuePolicyValueHelper.write(output, + policy.low_value()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.java b/source/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.java new file mode 100644 index 0000000..402af44 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/CompressionMinRatioPolicyImpl.java @@ -0,0 +1,154 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressionMinRatioPolicyImpl policy implmementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressionMinRatioPolicyImpl + extends CompressionMinRatioPolicyLocalBase +{ + + float m_value; + + /** + * Creates a new CompressionMinRatioPolicyImpl instance. + * + * @param val an int value + */ + public CompressionMinRatioPolicyImpl(float val) + { + m_value = val; + } + + /** + * Returns ratio . + * + * @return an int value + */ + public float ratio() + { + return m_value; + } + + /** + * Returns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSION_MIN_RATIO_POLICY_ID.value; + } + + /** + * copy current policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressionMinRatioPolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy . + * + * @param val an Any value + * @return a CompressionMinRatioPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressionMinRatioPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + float policy_value = + CompressionMinRatioPolicyValueHelper.extract(val); + + return new CompressionMinRatioPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * write policy in to a encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressionMinRatioPolicy value + */ + public static void write(CDROutputStream output, + CompressionMinRatioPolicy policy) + { + + CompressionMinRatioPolicyValueHelper.write(output, + policy.ratio()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.java b/source/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.java new file mode 100644 index 0000000..c8157da --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/CompressorIdLevelListPolicyImpl.java @@ -0,0 +1,165 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.core.ziop; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_POLICY_VALUE; +import org.omg.CORBA.PolicyError; +import org.omg.Compression.*; +import org.omg.ZIOP.*; + +import es.tid.TIDorbj.core.cdr.CDROutputStream; +import es.tid.TIDorbj.core.cdr.CDRInputStream; + +/** + * CompressorIdLevelListPolicyImpl policy implementation. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class CompressorIdLevelListPolicyImpl + extends CompressorIdLevelListPolicyLocalBase +{ + + CompressorIdLevel[] m_value; + + /** + * Creates a new CompressorIdLevelListPolicyImpl instance. + * + * @param val a CompressorIdLevel value + */ + public CompressorIdLevelListPolicyImpl(CompressorIdLevel[] val) + { + m_value = val; + } + + /** + * Returns compressor_ids . + * + * @return a CompressorIdLevel[] value + */ + public CompressorIdLevel[] compressor_ids() + { + return m_value; + } + + /** + * Returns policy_type . + * + * @return an int value + */ + public int policy_type() + { + return COMPRESSOR_ID_LEVEL_LIST_POLICY_ID.value; + } + + /** + * copy policy. + * + * @return an org.omg.CORBA.Policy value + */ + public org.omg.CORBA.Policy copy() + { + return new CompressorIdLevelListPolicyImpl(m_value); + } + + /** + * destroy current policy. + * + */ + public void destroy() + { + // do nothing! + } + + /** + * createPolicy . + * + * @param val an Any value + * @return a CompressorIdLevelListPolicyImpl value + * @exception org.omg.CORBA.PolicyError if an error occurs + */ + public static CompressorIdLevelListPolicyImpl createPolicy(Any val) + throws org.omg.CORBA.PolicyError + { + try { + CompressorIdLevel[] policy_value = + CompressorIdLevelListHelper.extract(val); + + return new CompressorIdLevelListPolicyImpl(policy_value); + + } + catch (BAD_PARAM bp) { + throw new PolicyError(BAD_POLICY_VALUE.value); + } + } + + /** + * read policy from an encapsulation. + * + * @param input a CDRInputStream value + * @return a CompressorIdLevelListPolicyImpl value + */ + public static CompressorIdLevelListPolicyImpl read(CDRInputStream input) + { + CompressorIdLevel[] policy_value = CompressorIdLevelListHelper.read(input); + return new CompressorIdLevelListPolicyImpl(policy_value); + } + + /** + * write policy into an encapsulation. + * + * @param output a CDROutputStream value + * @param policy a CompressorIdLevelListPolicy value + */ + public static void write(CDROutputStream output, + CompressorIdLevelListPolicy policy) + { + CompressorIdLevelListHelper.write(output, + policy.compressor_ids()); + } + + + +} diff --git a/source/es/tid/TIDorbj/core/ziop/ZIOP.java b/source/es/tid/TIDorbj/core/ziop/ZIOP.java new file mode 100644 index 0000000..22658a1 --- /dev/null +++ b/source/es/tid/TIDorbj/core/ziop/ZIOP.java @@ -0,0 +1,258 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 1 $ +* Date: $Date: 2008-12-01 08:58:21 +0100 (Mon, 01 Dec 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.core.ziop; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.policy.PolicyContext; +import es.tid.TIDorbj.util.Trace; + +import org.omg.Compression.*; +import org.omg.ZIOP.*; + + +/** + * ZIOP common facilities to dealing with ZIOP policies + * CompressionEnabling Policy. + * + * @author Alvaro Vega Garcia + * @version 1.0 + */ +public class ZIOP +{ + + + /** + * checkCompressionEnabled cheks if the context contains a + * CompressionEnablingPolicy enabled + * + * @param context a PolicyContext value + * @return a boolean value + */ + public static boolean checkCompressionEnabled(PolicyContext context) + { + if (context != null) { + + CompressionEnablingPolicy compressionEnablingPolicy = + context.getCompressionEnablingPolicy(); + + if (compressionEnablingPolicy != null) { + return compressionEnablingPolicy.compression_enabled(); + } + } + return false; + } + + /** + * checkCompressionEnabled checks if both context provided + * contains CompressionEnablingPolicy enabled. + * + * @param context a PolicyContext value + * @param ior_context a PolicyContext value + * @return a boolean value + */ + public static boolean checkCompressionEnabled(PolicyContext context, + PolicyContext ior_context) + { + if ( (context != null) && (ior_context != null) ) { + + CompressionEnablingPolicy compressionEnablingPolicy = + context.getCompressionEnablingPolicy(); + + CompressionEnablingPolicy compressionEnablingPolicy_ior = + ior_context.getCompressionEnablingPolicy(); + + if ( (compressionEnablingPolicy != null) && + (compressionEnablingPolicy_ior != null) ){ + return ( compressionEnablingPolicy.compression_enabled() && + compressionEnablingPolicy_ior.compression_enabled() ); + } + } + return false; + } + + /** + * Retuns getClientCompressor a CompressorIdLevel that could + * be used in client side, taken in accont client context and IOR (server + * context). + * + * @param context a PolicyContext value + * @param ior_context a PolicyContext value + * @return a CompressorIdLevel value + */ + public static CompressorIdLevel getClientCompressor(PolicyContext context, + PolicyContext ior_context, + boolean assume_ziop_server) + { + + CompressorIdLevel result = new CompressorIdLevel((short)0, (short)0); + + if (context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy = + context.getCompressorIdLevelListPolicy(); + + if (ior_context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy_ior = + ior_context.getCompressorIdLevelListPolicy(); + + + if ( (compressionIdLevelListPolicy != null) && + (compressionIdLevelListPolicy_ior != null) ){ + + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + CompressorIdLevel[] compressors_ior = + compressionIdLevelListPolicy_ior.compressor_ids(); + + // Compare both lists + for (int i = 0; i < compressors_ctx.length; i++) { + + for (int j = 0; j < compressors_ior.length; j++) { + + if ( compressors_ctx[i].compressor_id == + compressors_ior[j].compressor_id ){ + result.compressor_id = + compressors_ctx[i].compressor_id; + result.compression_level = + compressors_ctx[i].compression_level; + return result; + } + } + } + } + + } else { + + if (assume_ziop_server) { + + if (compressionIdLevelListPolicy != null) { + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + if (compressors_ctx.length > 0) { + result.compressor_id = + compressors_ctx[0].compressor_id; + result.compression_level = + compressors_ctx[0].compression_level; + } + } + } + + } + } + return result; + } + + + /** + * Retuns getLevelCompressor a CompressorLevel that could + * be used in client side, taken in accont client context and IOR (server + * context). + * + * @param compressor_id a short value + * @param context a PolicyContext value + * @return a short value + */ + public static short getLevelCompressor(short compressor_id, + PolicyContext context) + { + if (context != null) { + + CompressorIdLevelListPolicy compressionIdLevelListPolicy = + context.getCompressorIdLevelListPolicy(); + + if (compressionIdLevelListPolicy != null) { + CompressorIdLevel[] compressors_ctx = + compressionIdLevelListPolicy.compressor_ids(); + + // Compare both lists + for (int i = 0; i < compressors_ctx.length; i++) { + if (compressors_ctx[i].compressor_id == compressor_id) { + return compressors_ctx[i].compression_level; + } + } + } + } + return 0; + } + + + + /** + * getLowValue from a context. + * + * @param context a PolicyContext value + * @return an int value + */ + public static int getLowValue(PolicyContext context) + { + CompressionLowValuePolicy compressionLowValuePolicy = + context.getCompressionLowValuePolicy(); + + if (compressionLowValuePolicy != null) { + return compressionLowValuePolicy.low_value(); + } + else + return 0; + } + + /** + * getMinRatio value from a context. + * + * @param context a PolicyContext value + * @return an int value + */ + public static float getMinRatio(PolicyContext context) + { + CompressionMinRatioPolicy compressionMinRatioPolicy = + context.getCompressionMinRatioPolicy(); + + if (compressionMinRatioPolicy != null) { + return compressionMinRatioPolicy.ratio(); + } + else + return 0; + } + +} diff --git a/source/es/tid/TIDorbj/dynAny/.svn/all-wcprops b/source/es/tid/TIDorbj/dynAny/.svn/all-wcprops new file mode 100644 index 0000000..d5a4c5e --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/all-wcprops @@ -0,0 +1,95 @@ +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny +END +DynEnumImpl.java +K 25 +svn:wc:ra_dav:version-url +V 93 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynEnumImpl.java +END +DynSequenceImpl.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynSequenceImpl.java +END +DynAnyWithAny.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynAnyWithAny.java +END +DynValueImpl.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynValueImpl.java +END +DynArrayImpl.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynArrayImpl.java +END +DynAnyFactoryImpl.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.java +END +DynSingleton.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynSingleton.java +END +DynComposite.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynComposite.java +END +DynStructImpl.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynStructImpl.java +END +DynAnyImpl.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynAnyImpl.java +END +DynExceptImpl.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynExceptImpl.java +END +DynUnionImpl.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynUnionImpl.java +END +DynStructBase.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynStructBase.java +END +DynFixedImpl.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynFixedImpl.java +END +DynAnyBase.java +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny/DynAnyBase.java +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/entries b/source/es/tid/TIDorbj/dynAny/.svn/entries new file mode 100644 index 0000000..55dfa64 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/entries @@ -0,0 +1,538 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/source/es/tid/TIDorbj/dynAny +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +DynEnumImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +7b7ea4df58d0c9f8488965417c475857 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9545 + +DynSequenceImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +f6d71fa5e25b8040419fc3cbe3177eab +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +20361 + +DynAnyWithAny.java +file + + + + +2009-05-27T12:24:00.000000Z +956dd6d06461904a7f39bb884e00e940 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9141 + +DynValueImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +f14f7941a79f8509052c9479a240c70c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4604 + +DynArrayImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +79a9e5dd5cb9a8375e92630c7cc1388b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +16572 + +DynAnyFactoryImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +58dfe72573d8defdc5567da3db81926a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +14339 + +DynSingleton.java +file + + + + +2009-05-27T12:24:00.000000Z +c6607b5c91a1978516c6278c3b22de8a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +11729 + +DynComposite.java +file + + + + +2010-04-28T10:47:58.000000Z +bebaa4b9b1d690d71f4f02236b849fa0 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +64471 + +DynStructImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +d3e7e0c0a3dde8cff77666b3aae3e965 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4330 + +DynAnyImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +3919240f6b791247daff3fc2ba08d9eb +2006-05-26T08:56:46.000000Z +18 +scheca +has-props + + + + + + + + + + + + + + + + + + + + +38114 + +DynUnionImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +1dd1b2a5b45166fd97ebd269ac30f335 +2006-06-28T08:17:01.000000Z +19 +iredondo +has-props + + + + + + + + + + + + + + + + + + + + +48890 + +DynExceptImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +657582b30eed57d94467fcfea2d3eef1 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +4512 + +DynStructBase.java +file + + + + +2009-05-27T12:24:00.000000Z +80ff05eae034c4d54fa46ca4412b3bb5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +9956 + +DynFixedImpl.java +file + + + + +2009-05-27T12:24:00.000000Z +bbf3046a963f772493be3684c6139e47 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +8762 + +DynAnyBase.java +file + + + + +2009-05-27T12:24:00.000000Z +8e91da678b570bc9d2d6ca779389be66 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +11578 + diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyBase.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyBase.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyBase.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyFactoryImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyFactoryImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyFactoryImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyWithAny.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyWithAny.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynAnyWithAny.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynArrayImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynArrayImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynArrayImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynComposite.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynComposite.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynComposite.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynEnumImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynEnumImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynEnumImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynExceptImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynExceptImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynExceptImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynFixedImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynFixedImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynFixedImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSequenceImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSequenceImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSequenceImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSingleton.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSingleton.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynSingleton.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructBase.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructBase.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructBase.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynStructImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynUnionImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynUnionImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynUnionImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynValueImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynValueImpl.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/prop-base/DynValueImpl.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyBase.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyBase.java.svn-base new file mode 100644 index 0000000..2030fad --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyBase.java.svn-base @@ -0,0 +1,433 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * Base clase for all DynAny implementation classes. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +abstract class DynAnyBase extends es.tid.TIDorbj.core.PseudoObject + implements org.omg.DynamicAny.DynAny, org.omg.CORBA.portable.Streamable +{ + + /** + * The active ORB. + */ + + TIDORB m_orb; + + /** + * The active DynAny factory. + */ + DynAnyFactoryImpl m_factory; + + /** + * The DynAny typecode. It maybe different from the base_type + * typecode, if it is a alias typecode. + */ + + TypeCode m_dyn_type; + + /** + * The "real" DynAny typecode base type. + */ + + TypeCode m_base_type; + + /** + * If true the DynAny can be destroyed by the user. + * Otherwise, it only will be destroyed by the container DynAny that created + * it. + *

+ * Default value: true (user can destroy it). + */ + + boolean m_user_destroy; + + protected DynAnyBase(DynAnyFactoryImpl factory, TIDORB orb) + { + m_factory = factory; + m_orb = orb; + m_destroyed = false; + m_user_destroy = true; + m_dyn_type = null; + m_base_type = null; + } + + protected DynAnyBase(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + this.m_factory = factory; + this.m_orb = orb; + m_destroyed = false; + m_user_destroy = true; + m_dyn_type = type; + m_base_type = real_type; + } + + public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_user_destroy) { + destroyNow(); + } + } + + protected void destroyNow() + { + m_destroyed = true; + m_dyn_type = null; + m_base_type = null; + m_factory = null; + m_orb = null; + } + + protected void setUserDestroy(boolean value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + m_user_destroy = value; + } + + // DynAny operations + + public org.omg.CORBA.TypeCode type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + return m_dyn_type; + } + + // DynAny without components methods + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return 0; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + // no components + + return false; + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + typeMismatch(); + return null; + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + // Streamable operations + + public org.omg.CORBA.TypeCode _type() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return type(); + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynAny:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + // Implementation + + protected void typeMismatch() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + throw new org.omg.DynamicAny.DynAnyPackage.TypeMismatch(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyFactoryImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyFactoryImpl.java.svn-base new file mode 100644 index 0000000..3bbc226 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyFactoryImpl.java.svn-base @@ -0,0 +1,410 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.DynamicAny.DynAnyFactoryLocalBase; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynAnyFactory implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyFactoryImpl extends DynAnyFactoryLocalBase +{ + + private boolean m_destroyed; + + private TIDORB m_orb; + + public DynAnyFactoryImpl() + { + m_destroyed = false; + } + + public void set_orb(org.omg.CORBA.ORB orb) + { + m_orb = (TIDORB) orb; + } + + public synchronized void destroy() + { + m_orb = null; + m_destroyed = true; + } + + public synchronized org.omg.DynamicAny.DynAny + create_dyn_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (value == null) + throw new BAD_PARAM("Null any reference"); + + switch (value.type().kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, value, value.type()); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, value, value.type()); + case TCKind._tk_alias: + return createAliasDynAny(value); + + // complex typecodes + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, value, value.type()); + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, value, value.type()); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, value, value.type()); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, value, value.type()); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, value, value.type()); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, value, value.type()); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, value, value.type()); + + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, value, value.type()); + + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + protected org.omg.DynamicAny.DynAny + createAliasDynAny(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (value == null) + throw new BAD_PARAM("Null any reference"); + + TypeCode base_type = null; + + try { + base_type = value.type().content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + switch (base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, value, base_type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, value, base_type); + // complex typecodes + + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, value, base_type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, value, base_type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, value, base_type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, value, base_type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, value, base_type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, value, base_type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, value, base_type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, value, base_type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public synchronized org.omg.DynamicAny.DynAny + create_dyn_any_from_type_code(org.omg.CORBA.TypeCode type) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + switch (type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, type, type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, type, type); + case TCKind._tk_alias: + return createAliasDynAnyFromTypeCode(type); + // complex typecodes + + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, type, type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, type, type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, type, type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, type, type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, type, type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, type, type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, type, type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, type, type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public org.omg.DynamicAny.DynAny + createAliasDynAnyFromTypeCode(org.omg.CORBA.TypeCode type) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (type == null) + throw new BAD_TYPECODE("Null TypeCode reference"); + + TypeCode base_type = null; + + try { + base_type = type.content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + switch (base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, type, base_type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, type, base_type); + // complex typecodes + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, type, base_type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, type, base_type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, type, base_type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, type, base_type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, type, base_type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, type, base_type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, type, base_type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, type, base_type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public static boolean isBasic(org.omg.CORBA.TypeCode type) + { + if (type == null) + throw new BAD_PARAM("Null type reference"); + + switch (type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_any: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return true; + case TCKind._tk_alias: + return aliasWithBasicTC(type); + default: + return false; + } + } + + protected static boolean aliasWithBasicTC(org.omg.CORBA.TypeCode type) + { + if (type == null) + throw new BAD_PARAM("Null any reference"); + + TypeCode base_type = null; + + try { + base_type = type.content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + return isBasic(base_type); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyImpl.java.svn-base new file mode 100644 index 0000000..7da57c8 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyImpl.java.svn-base @@ -0,0 +1,1180 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.util.StringHolder; +import es.tid.TIDorbj.core.util.WStringHolder; + +/** + * DynAny implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyImpl extends DynAnyBase +{ + /** + * Primitive type value. + */ + + AnyImpl m_dyn_value; + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_dyn_value = null; + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value, assumes that the TypeCode is Basic. + */ + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + initValue(any); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + super(factory, orb, type, real_type); + + initValue(); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + m_dyn_value.read_value(in, m_base_type); + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + m_dyn_value.write_value(out); + } + + // DynAny operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + try { + switch (m_base_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + m_dyn_value.type(m_base_type); + return; + case TCKind._tk_objref: + m_dyn_value.insert_Object(dyn_any.get_reference()); + return; + case TCKind._tk_TypeCode: + m_dyn_value.insert_TypeCode(dyn_any.get_typecode()); + return; + case TCKind._tk_short: + m_dyn_value.insert_short(dyn_any.get_short()); + return; + case TCKind._tk_long: + m_dyn_value.insert_long(dyn_any.get_long()); + return; + case TCKind._tk_ushort: + m_dyn_value.insert_ushort(dyn_any.get_ushort()); + return; + case TCKind._tk_ulong: + m_dyn_value.insert_ulong(dyn_any.get_ulong()); + return; + case TCKind._tk_float: + m_dyn_value.insert_float(dyn_any.get_float()); + return; + case TCKind._tk_double: + m_dyn_value.insert_double(dyn_any.get_double()); + return; + case TCKind._tk_boolean: + m_dyn_value.insert_boolean(dyn_any.get_boolean()); + return; + case TCKind._tk_char: + m_dyn_value.insert_char(dyn_any.get_char()); + return; + case TCKind._tk_octet: + m_dyn_value.insert_octet(dyn_any.get_octet()); + return; + case TCKind._tk_longlong: + m_dyn_value.insert_longlong(dyn_any.get_longlong()); + return; + case TCKind._tk_ulonglong: + m_dyn_value.insert_ulonglong(dyn_any.get_ulonglong()); + return; + case TCKind._tk_wchar: + m_dyn_value.insert_wchar(dyn_any.get_wchar()); + return; + case TCKind._tk_string: + m_dyn_value.insert_string(dyn_any.get_string()); + return; + case TCKind._tk_wstring: + m_dyn_value.insert_string(dyn_any.get_string()); + return; + + } + } + catch (InvalidValue iv) { + throw new BAD_PARAM(iv.toString()); + } + + // set the any type to the "dyn_type" + m_dyn_value.setEquivalentType(m_base_type); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_dyn_type.equivalent(value.type())) + throw new TypeMismatch(); + + initValue(value); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + + AnyImpl.assign(m_dyn_value, new_value); + + new_value.setEquivalentType(m_dyn_type); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + try { + switch (m_base_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + return true; + case TCKind._tk_objref: + return m_dyn_value.extract_Object() + ._is_equivalent(dyn_any.get_reference()); + case TCKind._tk_TypeCode: + return m_dyn_value.extract_TypeCode() + .equal(dyn_any.get_typecode()); + case TCKind._tk_short: + return m_dyn_value.extract_short() == dyn_any.get_short(); + case TCKind._tk_long: + return m_dyn_value.extract_long() == dyn_any.get_long(); + case TCKind._tk_ushort: + return m_dyn_value.extract_ushort() == dyn_any.get_ushort(); + case TCKind._tk_ulong: + return m_dyn_value.extract_ulong() == dyn_any.get_ulong(); + case TCKind._tk_float: + return m_dyn_value.extract_float() == dyn_any.get_float(); + case TCKind._tk_double: + return m_dyn_value.extract_double() == dyn_any.get_double(); + case TCKind._tk_boolean: + return m_dyn_value.extract_boolean() + == dyn_any.get_boolean(); + case TCKind._tk_char: + return m_dyn_value.extract_char() == dyn_any.get_char(); + case TCKind._tk_octet: + return m_dyn_value.extract_octet() == dyn_any.get_octet(); + case TCKind._tk_longlong: + return m_dyn_value.extract_longlong() + == dyn_any.get_longlong(); + case TCKind._tk_ulonglong: + return m_dyn_value.extract_ulonglong() + == dyn_any.get_ulonglong(); + case TCKind._tk_wchar: + return m_dyn_value.extract_wchar() == dyn_any.get_wchar(); + case TCKind._tk_string: + return m_dyn_value.extract_string() == dyn_any.get_string(); + case TCKind._tk_wstring: + return m_dyn_value.extract_string() == dyn_any.get_string(); + } + } + catch (InvalidValue iv) { + throw new BAD_PARAM(iv.toString()); + } + catch (TypeMismatch tm) { + throw new INTERNAL(tm.toString()); + } + throw new INTERNAL("DynAnyImpl with no basic TypeCode"); + + } + + protected void destroyNow() + { + super.destroyNow(); + m_dyn_value = null; + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynAnyImpl new_dyn = new DynAnyImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + try { + new_dyn.assign(this); + } + catch (TypeMismatch tm) {} + + return new_dyn; + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_dyn_value.type().kind().value() != TCKind._tk_boolean) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_boolean(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_octet) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_octet(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_char) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_char(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_short) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_short(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ushort) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ushort(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_long) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_long(value); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ulong(value); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_float) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_float(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_double) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_double(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_string) + throw new TypeMismatch("Unexpected type"); + + try { + if (m_base_type.length() == 0) { // unboundled string + m_dyn_value.insert_string(value); + return; + } + if (value.length() > m_base_type.length()) + throw new BAD_PARAM("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + m_dyn_value.insert_Streamable(new StringHolder(m_base_type, value)); + + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(); + } + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_wstring) + throw new TypeMismatch("Unexpected type"); + + try { + if (m_base_type.length() == 0) { // unboundled string + m_dyn_value.insert_wstring(value); + return; + } + if (value.length() > (m_base_type.length() / CDR.WCHAR_SIZE)) + throw new BAD_PARAM("WString out of bounds.", 0, + CompletionStatus.COMPLETED_NO); + m_dyn_value.insert_Streamable( + new WStringHolder(m_base_type, value)); + + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_objref) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_Object(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_TypeCode) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_TypeCode(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_longlong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_longlong(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulonglong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ulonglong(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_wchar) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_wchar(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_value) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_Value(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_boolean) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_boolean(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_octet) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_octet(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_char) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_char(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_short) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_short(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ushort) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ushort(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_long) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_long(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ulong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_float) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_float(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_double) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_double(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_string) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_string(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_objref) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_Object(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_TypeCode) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_TypeCode(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_longlong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_longlong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulonglong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ulonglong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_wchar) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_wchar(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_wstring) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_wstring(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_value) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_Value(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + } + + /** + * Initialize the content value with the any value. + * + * @param any + * the value + */ + + protected void initValue(Any any) + { + if (m_dyn_value == null) + m_dyn_value = (AnyImpl) m_orb.create_any(); + + if (m_dyn_type.kind().value() == TCKind._tk_alias) { + + m_dyn_value.read_value(any.create_input_stream(), m_base_type); + + } else { + AnyImpl.assign(any, m_dyn_value); + m_dyn_value.setEquivalentType(m_base_type); + } + } + + /** + * Initialize the content value with the default value of the type. + */ + + protected void initValue() + { + if (m_dyn_value == null) + m_dyn_value = (AnyImpl) m_orb.create_any(); + + switch (m_base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_short: + m_dyn_value.insert_short((short) 0); + return; + case TCKind._tk_long: + m_dyn_value.insert_long(0); + return; + case TCKind._tk_ushort: + m_dyn_value.insert_ushort((short) 0); + return; + case TCKind._tk_ulong: + m_dyn_value.insert_ulong(0); + return; + case TCKind._tk_float: + m_dyn_value.insert_float(0.0F); + return; + case TCKind._tk_double: + m_dyn_value.insert_double(0.0D); + return; + case TCKind._tk_boolean: + m_dyn_value.insert_boolean(false); + return; + case TCKind._tk_char: + m_dyn_value.insert_char((char) 0); + return; + case TCKind._tk_octet: + m_dyn_value.insert_octet((byte) 0); + return; + case TCKind._tk_longlong: + m_dyn_value.insert_longlong(0L); + return; + case TCKind._tk_ulonglong: + m_dyn_value.insert_ulonglong(0L); + return; + case TCKind._tk_wchar: + m_dyn_value.insert_wchar((char) 0); + return; + case TCKind._tk_string: + m_dyn_value.insert_string(""); + return; + case TCKind._tk_wstring: + m_dyn_value.insert_wstring(""); + return; + case TCKind._tk_objref: + m_dyn_value.insert_Object(null); + return; + case TCKind._tk_TypeCode: + m_dyn_value.insert_TypeCode( + m_orb.get_primitive_tc(TCKind.tk_null)); + return; + default: + throw new INTERNAL("TypeCode not expected"); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyWithAny.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyWithAny.java.svn-base new file mode 100644 index 0000000..15641c4 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynAnyWithAny.java.svn-base @@ -0,0 +1,305 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynAny implementation that contains an any with an inner any. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyWithAny extends DynSingleton +{ + + // contained any as a DynAny + + DynAnyBase m_any_value; + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + initValue(); + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value, assumes that the TypeCode is Basic. + */ + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + initValue(any.extract_any()); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + initValue(); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + initValue(in.read_any()); + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_TypeCode(m_any_value.type()); + m_any_value._write(out); + } + + // DynAny operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + try { + initValue(dyn_any.get_any()); + } + catch (InvalidValue invalidValue) {} + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_dyn_type.equivalent(value.type())) + throw new TypeMismatch(); + + initValue(value.extract_any()); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + + new_value.insert_any(m_any_value.to_any()); + + new_value.setEquivalentType(m_dyn_type); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + try { + return m_any_value.equal(dyn_any.get_dyn_any()); + } + catch (TypeMismatch typeMismatch) {} + catch (InvalidValue invalidValue) {} + + return false; + } + + protected void destroyNow() + { + super.destroyNow(); + if (m_any_value != null) { + m_any_value.destroyNow(); + m_any_value = null; + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynAnyWithAny new_dyn = new DynAnyWithAny(m_factory, m_orb, m_dyn_type, + m_base_type); + + try { + new_dyn.assign(this); + } + catch (TypeMismatch tm) {} + + return new_dyn; + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + initValue(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + initValue(value.to_any()); + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return m_any_value.to_any(); + } + + public synchronized org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_any) + throw new TypeMismatch("Unexpected type"); + + return m_any_value; + } + + /** + * Initialize the content value with the default value of the type. + */ + + protected void initValue() + { + AnyImpl val = (AnyImpl) m_orb.create_any(); + initValue(val); + } + + protected void initValue(Any any) + { + if (m_any_value != null) { + m_any_value.destroyNow(); + } + + try { + + m_any_value = (DynAnyBase) m_factory.create_dyn_any(any); + m_any_value.setUserDestroy(false); + + } + catch (InconsistentTypeCode inconsistentTypeCode) {} + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynArrayImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynArrayImpl.java.svn-base new file mode 100644 index 0000000..9f12553 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynArrayImpl.java.svn-base @@ -0,0 +1,565 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * DynArray implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynArrayImpl extends DynComposite + implements org.omg.DynamicAny.DynArray +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an array TypeCode. + * + * @param any + * the any value. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + try { + m_component_count = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_array. + * + * @param any + * the any value. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynArrayImpl new_dyn = new DynArrayImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + protected TypeCode getComponentType(int position) + { + + try { + return m_base_type.content_type(); + } + catch (BadKind bk) { + /* unreachable */ + throw new org.omg.CORBA.INTERNAL(); + } + + } + + // CORBA 2.5 + + // DynArray Operations + + public org.omg.CORBA.Any[] get_elements() + { + return super.get_elements(); + } + + public void set_elements(org.omg.CORBA.Any[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.set_elements(value); + } + + public org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + return super.get_elements_as_dyn_any(); + } + + public void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.set_elements_as_dyn_any(value); + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + insert_boolean_members(value); + + } else { + super.insert_boolean_seq(value); + } + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + insert_octet_members(value); + + } else { + super.insert_octet_seq(value); + } + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + insert_char_members(value); + + } else { + super.insert_char_seq(value); + } + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + insert_short_members(value); + + } else { + super.insert_short_seq(value); + } + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + insert_ushort_members(value); + + } else { + super.insert_ushort_seq(value); + } + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + insert_long_members(value); + + } else { + super.insert_long_seq(value); + } + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + insert_ulong_members(value); + + } else { + super.insert_ulong_seq(value); + } + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + insert_float_members(value); + + } else { + super.insert_float_seq(value); + } + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + insert_double_members(value); + + } else { + super.insert_double_seq(value); + } + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + insert_longlong_members(value); + + } else { + super.insert_longlong_seq(value); + } + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulonglong)) { + insert_ulonglong_members(value); + + } else { + super.insert_ulonglong_seq(value); + } + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + insert_wchar_members(value); + + } else { + super.insert_wchar_seq(value); + } + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + return super.get_boolean_members(); + } else { + return super.get_boolean_seq(); + } + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + return super.get_octet_members(); + } else { + return super.get_octet_seq(); + } + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + return super.get_char_members(); + } else { + return super.get_char_seq(); + } + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + return super.get_short_members(); + } else { + return super.get_short_seq(); + } + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + return super.get_ushort_members(); + } else { + return super.get_ushort_seq(); + } + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + return super.get_long_members(); + } else { + return super.get_long_seq(); + } + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + return super.get_ulong_members(); + } else { + return super.get_ulong_seq(); + } + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + return super.get_float_members(); + } else { + return super.get_float_seq(); + } + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + return super.get_double_members(); + } else { + return super.get_double_seq(); + } + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + return super.get_longlong_members(); + } else { + return super.get_longlong_seq(); + } + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + return super.get_wchar_members(); + } else { + return super.get_wchar_seq(); + } + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynArray:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynComposite.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynComposite.java.svn-base new file mode 100644 index 0000000..2bbedb7 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynComposite.java.svn-base @@ -0,0 +1,2233 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.OutputStream; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Base class for composite Dynamic Anys. It implements the Streamable interface + * for alowing the generated anys (with to_any) write its value in an output + * stream. The generated anys are contructed with: + *

+ * + * Any to_any() + *

{ + *

Any a= new Any(); + *

a.insert_Streamable(this); + *

return a; + *

} Due to this construction unneccesary remarshalings are avoided. + *

+ * The DynComposite has two operation modes: + *

    + *
  • Inserting Mode : a TypeCode is given and the + * any is constructec from other Dynamic Anys. + *
  • Extraction Mode : a Any is given and the + * DynAny structures are obtained from the any and its input stream. + *
+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class DynComposite extends DynAnyBase +{ + /** + * The marshaled value of the Dynamic Any for extracting. + */ + + CDRInputStream m_complete_value; + + /** + * The next component marshaled value of the Dynamic Any for extracting. + */ + + CDRInputStream m_next_value; + + /** + * Current component of the array. + */ + + int m_current_index; + + /** + * Number of Components of the Dynany. This value must be initialized by the + * child classes. + */ + + int m_component_count; + + /** + * Array of components. + */ + + Vector m_components; + + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_components = new Vector(); + m_component_count = 0; + m_current_index = -1; + m_complete_value = null; + m_next_value = null; + } + + /** + * Constructor for insertions. + */ + + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + this(factory, orb); + + m_dyn_type = type; + m_base_type = real_type; + } + + /** + * Constructor for extraction. + */ + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + this(factory, orb); + + m_dyn_type = any.type(); + m_base_type = real_type; + + getStreams(any); + } + + // DynComposite methods + + /** + * Clears the value of the dynAny and try to destroy the components. It is + * done when going to insert a new value. + */ + + protected void reset() + { + if (m_component_count == 0) + m_current_index = -1; + else + m_current_index = 0; + + int size = m_components.size(); + + for (int i = 0; i < size; i++) { + ((DynAny) m_components.elementAt(i)).destroy(); + } + + m_components.removeAllElements(); + + m_complete_value = null; + m_next_value = null; + } + + /** + * @param position + * the component position + * @return the TypeCode of the component at the given + * position + */ + protected abstract TypeCode getComponentType(int position); + + /** + * Internal operation to notify that the last component has been + * dissasembled and the DynAny can be wroten writing its components. + * + */ + protected void lastComponent() + { + m_complete_value = null; + m_next_value = null; + } + + /** + * Streamable _read operation + */ + public void _read(org.omg.CORBA.portable.InputStream is) + { + reset(); + + Any any = m_orb.create_any(); + + any.read_value(is, m_base_type); + + getStreams(any); + + } + + /** + * Streamable _write operation + */ + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (os == null) + throw new BAD_PARAM("Null OutputStream reference", 0, + CompletionStatus.COMPLETED_NO); + + DynAny dyn = null; + try { + for (int i = 0; i < m_component_count; i++) { + dyn = getComponent(i); + if (dyn instanceof DynAnyBase) + ((DynAnyBase) dyn)._write(os); + else + dyn.to_any().write_value(os); + } + } + catch (TypeMismatch tm) { + throw new INTERNAL(); + } + } + + /** + * DynAny destructor. Invoked by container DynAnys. + */ + protected void destroyNow() + { + super.destroyNow(); + + reset(); + + m_components = null; + } + + /** + * Obtains the marshaled value from the any. + * + * @param any + * the new value + */ + protected void getStreams(org.omg.CORBA.Any any) + { + if (any == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + try { + m_complete_value = (CDRInputStream) + any.create_input_stream(); + } + catch (ClassCastException cce) { + OutputStream out = m_orb.create_output_stream(); + any.write_value(out); + m_complete_value = (CDRInputStream) out.create_input_stream(); + } + + m_next_value = m_complete_value.copy(); + } + + /** + * Validates and prepares the dyn_any assignment. + * + * @param dyn_any + * the new value + * @throws TypeMismatch + * if the new value TypeCode is not equivalent + */ + protected void preAssign(org.omg.DynamicAny.DynAny dyn_any) + throws TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) { + throw new TypeMismatch(); + } + + // both are the same type. + + reset(); + + // component_count = dyn_any.component_count(); + } + + /** + * Copy the content of the DynComposite instance to other. + * + * @param dyn_any + * the destination DynComposite + */ + protected void copyTo(DynComposite dyn_any) + { + + dyn_any.m_component_count = m_component_count; + + if (m_component_count == 0) { + dyn_any.m_current_index = -1; + return; + } + + if (m_complete_value != null) { + dyn_any.m_complete_value = m_complete_value.copy(); + dyn_any.m_next_value = m_complete_value.copy(); + return; + } + + try { + for (int i = 0; i < m_component_count; i++) + dyn_any.m_components.addElement(getComponent(i).copy()); + + } + catch (TypeMismatch tm) { + throw new INTERNAL("Error with current_component"); + } + } + + /** + * Creates the DynAny at the position, read its value if exists, and insert + * it in the component vector. + */ + protected DynAny getComponent(int position) + throws TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynArray destroyed."); + + if (position == -1) + return null; + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // initialize the component, + + // when the DynAny has been introduced in a any (with to_any() + // operation), + // prevents multihreaded writes (os.write_any() -> dyn_any._write() + // -> + // dyn_any.get_element(i)._write() + + synchronized (this) { + if (position == m_components.size()) { + DynAnyBase dyn_component = null; + + try { + dyn_component = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + getComponentType(position)); + + } + catch (InconsistentTypeCode itc) { + throw new + TypeMismatch("Inconsistent TypeCode of member: " + + position + + " . " + + itc.toString() + + " was thrown"); + } + + dyn_component.setUserDestroy(false); // component + // destruction + + m_components.addElement(dyn_component); + + if (m_next_value != null) { // demarshal the component + dyn_component._read(m_next_value); + } + + if (position == (m_component_count - 1)) { + m_next_value = null; + m_complete_value = null; + } + } + } + + } + + return (DynAny) m_components.elementAt(position); + } + + /** + * Set or creates a new component at position with the given + * value. + */ + protected void setComponent(int position, Any value) + throws TypeMismatch, + InvalidValue + { + try { + if (!getComponentType(position).equivalent(value.type())) + throw new TypeMismatch("Unexpected value type in component " + + position); + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // create the component + DynAny dyn_component = m_factory.create_dyn_any(value); + + m_components.addElement(dyn_component); + } else { + DynAny curr_dyn = (DynAny) + m_components.elementAt(m_current_index); + curr_dyn.from_any(value); + } + + } + catch (InconsistentTypeCode itc) { + throw new TypeMismatch("Inconsistent TypeCode of member: " + + m_current_index + " . " + itc.toString() + + " was thrown"); + } + } + + /** + * Set or creates a new component at position with the given + * value. + */ + protected void setComponent(int position, DynAny value) + throws TypeMismatch + { + + if (!getComponentType(position).equivalent(value.type())) + throw new TypeMismatch("Unexpedted value type in component " + + position); + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // create the component + m_components.addElement(value); + } else { + ((DynAny) m_components.elementAt(position)).destroy(); + m_components.insertElementAt(value, m_current_index); + } + } + + // DynAny operations + + public void from_any(org.omg.CORBA.Any value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + reset(); + + getStreams(value); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + Any new_any = m_orb.create_any(); + + new_any.type(type()); + + org.omg.CORBA.portable.OutputStream output = + new_any.create_output_stream(); + + _write(output); + + return new_any; + } + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws TypeMismatch + { + preAssign(dyn_any); + + if (m_component_count == 0) + return; + + int other_aux_current = m_component_count - 1; + + while (dyn_any.next()) + other_aux_current--; + + dyn_any.rewind(); + + try { + for (int i = 0; i < m_component_count; i++) + setComponent(i, dyn_any.current_component().copy()); + + } + catch (TypeMismatch tm) { + reset(); + dyn_any.seek(other_aux_current); + throw tm; + } + + m_current_index = 0; + + dyn_any.seek(other_aux_current); + + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference"); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (m_component_count != dyn_any.component_count()) + return false; + + if (m_component_count == 0) + return true; + + int aux_current = m_current_index; + + int other_aux_current = m_component_count - 1; + + try { + while (dyn_any.next()) + other_aux_current--; + + dyn_any.rewind(); + + for (int i = 0; i < m_component_count; i++) { + if (!getComponent(i).equal(dyn_any.current_component())) { + dyn_any.seek(other_aux_current); + return false; + } + + dyn_any.next(); + } + } + catch (TypeMismatch tm) { + throw new INTERNAL(tm.toString()); + } + finally { + dyn_any.seek(other_aux_current); + } + + return true; + } + + public org.omg.CORBA.Any[] get_elements() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + Any[] any_array = new Any[m_component_count]; + + if (m_component_count > 0) { + try { + for (int i = 0; i < m_component_count; i++) { + any_array[i] = getComponent(i).to_any(); + } + } + catch (TypeMismatch tm) { + /* unreachable */ + throw new INTERNAL(tm.toString()); + } + + } + + return any_array; + + } + + protected void set_elements(org.omg.CORBA.Any[] value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + reset(); + + if (value.length == 0) + return; + + if (m_component_count != value.length) + throw new + InvalidValue("Value length differs from component number"); + + for (int i = 0; i < m_component_count; i++) { + if (value[i] == null) + throw new BAD_PARAM("null Any array element"); + + setComponent(i, value[i]); + } + } + + protected org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + DynAny[] any_array = new DynAny[m_component_count]; + + if (m_component_count > 0) { + try { + for (int i = 0; i < m_component_count; i++) { + any_array[i] = getComponent(i); + } + } + catch (TypeMismatch tm) { + /* unreachable */ + throw new INTERNAL(tm.toString()); + } + } + + return any_array; + } + + protected void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("Null DynAny[] reference"); + + reset(); + + if (value.length == 0) + return; + + if (m_component_count != value.length) + throw new InvalidValue("Value length differs from members number"); + + for (int i = 0; i < m_component_count; i++) { + if (value[i] == null) + throw new BAD_PARAM("null Any array element"); + + setComponent(i, value[i]); + } + } + + public org.omg.DynamicAny.DynAny current_component() + throws TypeMismatch + { + return getComponent(m_current_index); + } + + public int component_count() + { + return m_component_count; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (index < 0) { + m_current_index = -1; + return false; + } + + if (m_component_count == 0) + return false; + + if (m_component_count <= index) + return false; + + m_current_index = 0; + + for (int i = 0; i < index; i++) { + next(); + } + + return true; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count > 0) + seek(0); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count <= (m_current_index + 1)) + return false; + + // if the current object has not been initialized, do it + + if (m_current_index == m_components.size()) + try { + current_component(); + } + catch (TypeMismatch tm) { + return false; + } + + // leaves the current component ready + m_current_index++; + return true; + } + + public void insert_boolean(boolean value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + current_component().insert_boolean(value); + } + + public void insert_char(char value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + current_component().insert_char(value); + } + + public void insert_wchar(char value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + current_component().insert_wchar(value); + } + + public void insert_octet(byte value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + current_component().insert_octet(value); + } + + public void insert_short(short value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + current_component().insert_short(value); + } + + public void insert_ushort(short value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + current_component().insert_ushort(value); + } + + public void insert_long(int value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + current_component().insert_long(value); + } + + public void insert_ulong(int value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + current_component().insert_ulong(value); + } + + public void insert_longlong(long value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + current_component().insert_longlong(value); + } + + public void insert_ulonglong(long value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + current_component().insert_ulonglong(value); + } + + public void insert_float(float value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + current_component().insert_float(value); + } + + public void insert_double(double value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + current_component().insert_double(value); + } + + public void insert_string(String value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + current_component().insert_string(value); + } + + public void insert_wstring(String value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + current_component().insert_wstring(value); + } + + public void insert_any(org.omg.CORBA.Any value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + current_component().insert_any(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + current_component().insert_dyn_any(value); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + current_component().insert_typecode(value); + } + + public void insert_val(java.io.Serializable value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + current_component().insert_val(value); + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_abstract(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_abstract(value); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + current_component().insert_reference(value); + } + + public boolean get_boolean() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + return current_component().get_boolean(); + } + + public char get_char() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + return current_component().get_char(); + } + + public char get_wchar() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + return current_component().get_wchar(); + } + + public byte get_octet() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + return current_component().get_octet(); + } + + public short get_short() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + return current_component().get_short(); + } + + public short get_ushort() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + return current_component().get_ushort(); + } + + public int get_long() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + return current_component().get_long(); + } + + public int get_ulong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + return current_component().get_ulong(); + } + + public long get_longlong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public long get_ulonglong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public float get_float() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + return current_component().get_float(); + } + + public double get_double() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + return current_component().get_double(); + } + + public String get_string() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + return current_component().get_string(); + } + + public String get_wstring() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + return current_component().get_wstring(); + } + + public org.omg.CORBA.Any get_any() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_any(); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_dyn_any(); + } + + public org.omg.CORBA.TypeCode get_typecode() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + return current_component().get_typecode(); + } + + public java.io.Serializable get_val() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public org.omg.CORBA.Object get_reference() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + return current_component().get_reference(); + } + + // CORBA 2.5 + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_boolean_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_boolean_seq(value); + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_octet_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_octet_seq(value); + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_char_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_char_seq(value); + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_short_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_short_seq(value); + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ushort_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ushort_seq(value); + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_long_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_long_seq(value); + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ulong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ulong_seq(value); + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_float_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_float_seq(value); + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_double_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_double_seq(value); + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_longlong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_longlong_seq(value); + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ulonglong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ulonglong_seq(value); + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_wchar_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_wchar_seq(value); + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_boolean_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_boolean_seq(); + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_octet_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_octet_seq(); + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_char_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_char_seq(); + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_short_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_short_seq(); + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ushort_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ushort_seq(); + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_long_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_long_seq(); + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ulong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ulong_seq(); + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_float_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_float_seq(); + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_double_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_double_seq(); + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_longlong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_longlong_seq(); + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ulonglong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ulonglong_seq(); + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_wchar_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_wchar_seq(); + } + + protected void insert_boolean_members(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_boolean(value[i]); + next(); + } + + rewind(); + } + + protected void insert_octet_members(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_octet(value[i]); + next(); + } + + rewind(); + } + + protected void insert_char_members(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_char(value[i]); + next(); + } + + rewind(); + } + + protected void insert_short_members(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_short(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ushort_members(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ushort(value[i]); + next(); + } + + rewind(); + } + + protected void insert_long_members(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_long(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ulong_members(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ulong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_float_members(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_float(value[i]); + next(); + } + + rewind(); + } + + protected void insert_double_members(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_double(value[i]); + next(); + } + + rewind(); + } + + protected void insert_longlong_members(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_longlong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ulonglong_members(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ulonglong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_wchar_members(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_wchar(value[i]); + next(); + } + + rewind(); + } + + protected boolean[] get_boolean_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + boolean[] value = new boolean[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_boolean(); + } + } + + return value; + } + + protected byte[] get_octet_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + byte[] value = new byte[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_octet(); + } + } + + return value; + } + + protected char[] get_char_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + char[] value = new char[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_char(); + } + } + + return value; + } + + protected short[] get_short_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + short[] value = new short[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_short(); + } + } + + return value; + } + + protected short[] get_ushort_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + short[] value = new short[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ushort(); + } + } + + return value; + } + + protected int[] get_long_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + int[] value = new int[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_long(); + } + } + + return value; + } + + protected int[] get_ulong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + int[] value = new int[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ulong(); + } + } + + return value; + } + + protected float[] get_float_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + float[] value = new float[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_float(); + } + } + + return value; + } + + protected double[] get_double_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + double[] value = new double[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_double(); + } + } + + return value; + } + + protected long[] get_longlong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + long[] value = new long[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_longlong(); + } + } + + return value; + } + + protected long[] get_ulonglong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + long[] value = new long[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ulonglong(); + } + } + + return value; + } + + protected char[] get_wchar_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + char[] value = new char[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_wchar(); + } + } + + return value; + } +} diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynEnumImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynEnumImpl.java.svn-base new file mode 100644 index 0000000..48a9c72 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynEnumImpl.java.svn-base @@ -0,0 +1,320 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * DynEnum implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynEnumImpl extends DynSingleton + implements org.omg.DynamicAny.DynEnum +{ + + int m_enum_value; + + private DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_enum_value = 0; + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value. + * @throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + */ + + protected DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb); + + m_dyn_type = any.type(); + + m_base_type = real_type; + + CDROutputStream out = new CDROutputStream(orb, CDR.ULONG_SIZE); + any.write_value(out); + CDRInputStream in = (CDRInputStream) out.create_input_stream(); + m_enum_value = in.read_ulong(); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + super(factory, orb); + m_dyn_type = type; + m_base_type = real_type; + m_enum_value = 0; + } + + public String get_as_string() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + return m_base_type.member_name(m_enum_value); + } + catch (Bounds bd) { + return null; + } + catch (BadKind bk) { + return null; + } + } + + public void set_as_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + int num_values = m_base_type.member_count(); + + for (int i = 0; i < num_values; i++) { + if (value.equals(type().member_name(i))) { + m_enum_value = i; + return; + } + } + throw new InvalidValue("No member named " + value + "."); + + } + catch (Bounds bd) { /* unreachable */ + } + catch (BadKind bk) { /* unreachable */ + } + } + + public int get_as_ulong() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return m_enum_value; + } + + public void set_as_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + int count = m_base_type.member_count(); + + if ((value < 0) || (value >= count)) + throw new InvalidValue(type().id() + " : value " + value + + " out of range."); + } + catch (BadKind bk) { /* unreachable */ + } + + m_enum_value = value; + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + try { + set_as_ulong(in.read_ulong()); + } + catch (InvalidValue iv) { + throw new MARSHAL(iv.toString()); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_ulong(m_enum_value); + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + if (dyn_any instanceof org.omg.DynamicAny.DynEnum) + m_enum_value = + ((org.omg.DynamicAny.DynEnum) dyn_any).get_as_ulong(); + else + // invalid error + throw new TypeMismatch(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + _write(output); + + // new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof org.omg.DynamicAny.DynEnum) + return (m_enum_value + == ((org.omg.DynamicAny.DynEnum) dyn_any).get_as_ulong()); + else + // invalid error + throw new BAD_PARAM("DynAny does not implements DynEnum when" + + " its type is enum"); + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynEnumImpl new_dyn = new DynEnumImpl(m_factory, m_orb); + new_dyn.m_enum_value = m_enum_value; + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + + return new_dyn; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynEnum:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynExceptImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynExceptImpl.java.svn-base new file mode 100644 index 0000000..6e5d942 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynExceptImpl.java.svn-base @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStruct implementation for exceptions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynExceptImpl extends DynStructImpl +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + protected boolean validateName() + { + try { + return m_next_value.read_string().equals(m_base_type.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + throw new org.omg.CORBA.BAD_TYPECODE(); + } + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_value (for DynValueImpl that + * extends DynStructImpl) + * + * @param type + * the TypeCode value. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.from_any(value); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + super._read(is); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + os.write_string(m_base_type.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + throw new org.omg.CORBA.BAD_TYPECODE(); + } + + super._write(os); + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynExceptImpl new_dyn = new DynExceptImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + if (new_dyn.m_next_value != null) + new_dyn.m_next_value.skipString(); + + return new_dyn; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynFixedImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynFixedImpl.java.svn-base new file mode 100644 index 0000000..301e1c6 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynFixedImpl.java.svn-base @@ -0,0 +1,298 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import java.math.BigDecimal; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.DynamicAny.DynFixed; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.util.FixedHolder; + +/** + * DynFixed implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynFixedImpl extends DynSingleton + implements org.omg.DynamicAny.DynFixed, org.omg.CORBA.portable.Streamable +{ + + BigDecimal fixed_value; + + private DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + fixed_value = new BigDecimal(0.0D); + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value. + */ + + protected DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + InputStream in = any.create_input_stream(); + FixedHolder holder = new FixedHolder(m_base_type); + holder._read(in); + + fixed_value = holder.value; + } + + protected DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + + try { + + fixed_value = BigDecimal.valueOf(0, m_base_type.fixed_scale()); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + } + + // DynFixed operations + + public String get_value() + { + + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return fixed_value.toString(); + } + + public boolean set_value(java.lang.String val) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + if (val == null) + throw new BAD_PARAM("null string value"); + + BigDecimal value = new BigDecimal(val); + try { + if (value.scale() != m_base_type.fixed_scale()) + throw new InvalidValue("Bad fixed scale"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + fixed_value = value; + + return true; + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + FixedHolder holder = new FixedHolder(m_base_type); + holder._read(in); + + fixed_value = holder.value; + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_fixed(fixed_value); + } + + public org.omg.CORBA.TypeCode type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + return m_dyn_type; + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new org.omg.DynamicAny.DynAnyPackage.TypeMismatch(); + + try { + set_value(((DynFixed) dyn_any).get_value()); + } + catch (InvalidValue iv) { + throw new BAD_PARAM("Invalid value"); + } + catch (ClassCastException cce) { + throw new BAD_PARAM("Not a DynFixed value"); + } + + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + _write(output); + //new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof DynFixed) { + return fixed_value.equals( + new BigDecimal(new String(((DynFixed) dyn_any).get_value()))); + } else { // invalid error + throw new BAD_PARAM("dyn_any value does not instantiate DynFixed!" + + " but its type is fixed;"); + } + } + + protected void destroyNow() + { + super.destroyNow(); + fixed_value = null; + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynFixedImpl new_dyn = new DynFixedImpl(m_factory, m_orb); + new_dyn.fixed_value = fixed_value; + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + + return new_dyn; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynFixed:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSequenceImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSequenceImpl.java.svn-base new file mode 100644 index 0000000..5b51255 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSequenceImpl.java.svn-base @@ -0,0 +1,682 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * DynSequence implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynSequenceImpl extends DynComposite + implements org.omg.DynamicAny.DynSequence +{ + + boolean m_bounded; + + int m_bound; + + /** + * Empty Constructor for generate copies. + */ + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets a TypeCode to create a new value. Warning: It assumes + * that the TypeCode is tk_sequence. + * + * @param any + * the any value. + */ + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_bound = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + m_bounded = (m_bound != 0); + m_component_count = 0; + } + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + try { + m_bound = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + m_bounded = (m_bound != 0); + + extract_length(); + } + + protected void extract_length() + { + m_component_count = m_next_value.read_ulong(); + + if(m_component_count > 0) { + m_current_index = 0; + } + + m_next_value.fixStarting(); + if ((m_bound != 0) && (m_component_count > m_bound)) + throw new MARSHAL("Invalid bounded sequence length"); + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynSequenceImpl new_dyn = new DynSequenceImpl(m_factory, m_orb, + m_dyn_type, m_base_type); + + copyTo(new_dyn); + + new_dyn.m_bound = m_bound; + + new_dyn.m_bounded = m_bounded; + + return new_dyn; + } + + // DynSequence Operations + + public int get_length() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return component_count(); + } + + public void set_length(int len) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (len < 0) + throw new InvalidValue("Invalid Sequence length: " + len); + + if (len == m_component_count) + return; + + if (len == 0) { + reset(); + } + + if (m_bounded && (len > m_bound)) { + throw new InvalidValue("Invalid Sequence length (" + len + + "), bound is (" + m_bound + ")"); + } + + m_component_count = len; + + int actual_components = m_components.size(); + + if (len < actual_components) { //destroy excedent + m_complete_value = null; + m_next_value = null; + for (int i = actual_components - 1; i >= len; i--) { + ((DynAny) (m_components.elementAt(i))).destroy(); + m_components.removeElementAt(i); + } + } + } + + public org.omg.CORBA.Any[] get_elements() + { + return super.get_elements(); + } + + public void set_elements(org.omg.CORBA.Any[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + set_length(value.length); + + super.set_elements(value); + } + + public void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + set_length(value.length); + + super.set_elements_as_dyn_any(value); + } + + public org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + return super.get_elements_as_dyn_any(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.from_any(value); + + extract_length(); + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + super._read(is); + + extract_length(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (os == null) + throw new BAD_PARAM("Null OutputStream reference"); + + if (m_complete_value != null) {// value marshaled + CDRInputStream value_copy = m_complete_value.copy(); + value_copy.rewind(); + TypeCodeMarshaler.remarshalValue(m_base_type, value_copy, os); + } else { // value in the dynAny structure + + os.write_long(m_component_count); + + super._write(os); + } + } + + protected TypeCode getComponentType(int position) + { + + try { + return m_base_type.content_type(); + } + catch (BadKind bk) { + /* unreachable */ + throw new org.omg.CORBA.BAD_TYPECODE(); + } + + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + set_length(value.length); + insert_boolean_members(value); + + } else { + set_length(value.length); + super.insert_boolean_seq(value); + } + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + set_length(value.length); + insert_octet_members(value); + } else { + set_length(value.length); + super.insert_octet_seq(value); + } + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + set_length(value.length); + insert_char_members(value); + } else { + set_length(value.length); + super.insert_char_seq(value); + } + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + set_length(value.length); + insert_short_members(value); + } else { + set_length(value.length); + super.insert_short_seq(value); + } + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + set_length(value.length); + insert_ushort_members(value); + } else { + set_length(value.length); + super.insert_ushort_seq(value); + } + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + set_length(value.length); + insert_long_members(value); + } else { + set_length(value.length); + super.insert_long_seq(value); + } + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + set_length(value.length); + insert_ulong_members(value); + } else { + set_length(value.length); + super.insert_ulong_seq(value); + } + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + set_length(value.length); + insert_float_members(value); + } else { + set_length(value.length); + super.insert_float_seq(value); + } + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + set_length(value.length); + insert_double_members(value); + } else { + set_length(value.length); + super.insert_double_seq(value); + } + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + set_length(value.length); + insert_longlong_members(value); + } else { + set_length(value.length); + super.insert_longlong_seq(value); + } + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulonglong)) { + set_length(value.length); + insert_ulonglong_members(value); + } else { + set_length(value.length); + super.insert_ulonglong_seq(value); + } + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + set_length(value.length); + insert_wchar_members(value); + } else { + set_length(value.length); + super.insert_wchar_seq(value); + } + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + return super.get_boolean_members(); + } else { + return super.get_boolean_seq(); + } + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + return super.get_octet_members(); + } else { + return super.get_octet_seq(); + } + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + return super.get_char_members(); + } else { + return super.get_char_seq(); + } + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + return super.get_short_members(); + } else { + return super.get_short_seq(); + } + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + return super.get_ushort_members(); + } else { + return super.get_ushort_seq(); + } + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + return super.get_long_members(); + } else { + return super.get_long_seq(); + } + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + return super.get_ulong_members(); + } else { + return super.get_ulong_seq(); + } + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + return super.get_float_members(); + } else { + return super.get_float_seq(); + } + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + return super.get_double_members(); + } else { + return super.get_double_seq(); + } + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + return super.get_longlong_members(); + } else { + return super.get_longlong_seq(); + } + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + return super.get_wchar_members(); + } else { + return super.get_wchar_seq(); + } + } + + // Object methods + + protected final static String[] __ids = + { "IDL:omg.org/DynamicAny/DynAny:1.0", }; + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier + .equals("IDL:omg.org/DynamicAny/DynSequence:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSingleton.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSingleton.java.svn-base new file mode 100644 index 0000000..3df2794 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynSingleton.java.svn-base @@ -0,0 +1,418 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * Abstract clase that only throws TypeMismatch in insert/get operations. It is + * the base clase for DynEnum or DynFixed + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +abstract class DynSingleton extends DynAnyBase +{ + + protected DynSingleton(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + protected DynSingleton(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return false; + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (byte) 0; + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (char) 0; + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (short) 0; + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (short) 0; + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0; + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0; + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0.0F; + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0.0D; + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return ""; + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0L; + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0L; + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return '0'; + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return ""; + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return -1; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return true; + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("DynAny without components"); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructBase.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructBase.java.svn-base new file mode 100644 index 0000000..6154303 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructBase.java.svn-base @@ -0,0 +1,335 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.NameDynAnyPair; +import org.omg.DynamicAny.NameValuePair; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStructBase implementation. Base for Struct, Exception and ValueType. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class DynStructBase extends DynComposite +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_value (for DynValueImpl that + * extends DynStructBase) + * + * @param type + * the TypeCode value. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public String current_member_name() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("No member (current = -1)"); + + // at this point alwais curremt_member is valid + try { + return m_base_type.member_name(m_current_index); + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + } + + public org.omg.CORBA.TCKind current_member_kind() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("No member (current = -1)"); + + try { + return m_base_type.member_type(m_current_index).kind(); + } + catch (BadKind bk) { + /* unreachable */ + throw new TypeMismatch(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new TypeMismatch(bd.toString()); + } + + } + + public org.omg.DynamicAny.NameValuePair[] get_members() + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + + Any[] any_members = super.get_elements(); + + NameValuePair[] members = new NameValuePair[m_component_count]; + + for (int i = 0; i < m_component_count; i++) { + + members[i] = new NameValuePair(m_base_type.member_name(i), + any_members[i]); + } + + return members; + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } + + public void set_members(org.omg.DynamicAny.NameValuePair[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + try { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + reset(); + + if (value.length != m_component_count) + throw new TypeMismatch("Invalid number of members: " + + m_component_count + " expected, not " + + value.length); + + Any[] members_values = new Any[m_component_count]; + + for (int i = 0; i < m_component_count; i++) { + members_values[i] = value[i].value; + if (!m_base_type.member_name(i).equals(value[i].id)) + throw new InvalidValue("Invalid member name, " + + m_base_type.member_name(i) + + "expected, not " + value[i].id); + } + + set_elements(members_values); + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } + + public org.omg.DynamicAny.NameDynAnyPair[] get_members_as_dyn_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + + DynAny[] dyns = super.get_elements_as_dyn_any(); + + NameDynAnyPair[] members = new NameDynAnyPair[m_component_count]; + + for (int i = 0; i < m_component_count; i++) + members[i] = new NameDynAnyPair(m_base_type.member_name(i), + dyns[i]); + + return members; + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + } + + public void + set_members_as_dyn_any(org.omg.DynamicAny.NameDynAnyPair[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value.length != m_component_count) + throw new TypeMismatch("Invalid number of members: " + + m_component_count + " expected, not " + + value.length); + + DynAny[] members_values = new DynAny[m_component_count]; + + try { + for (int i = 0; i < m_component_count; i++) { + members_values[i] = value[i].value; + if (!m_base_type.member_name(i).equals(value[i].id)) + throw new InvalidValue("Invalid member name, " + + m_base_type.member_name(i) + + "expected, not " + value[i].id); + } + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + set_elements_as_dyn_any(members_values); + } + + protected TypeCode getComponentType(int position) + { + try { + return m_base_type.member_type(position); + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructImpl.java.svn-base new file mode 100644 index 0000000..3f1435c --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynStructImpl.java.svn-base @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStruct implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynStructImpl extends DynStructBase + implements org.omg.DynamicAny.DynStruct +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_exception + * + * @param type + * the TypeCode value. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynStructImpl new_dyn = new DynStructImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynStruct:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynUnionImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynUnionImpl.java.svn-base new file mode 100644 index 0000000..d13da08 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynUnionImpl.java.svn-base @@ -0,0 +1,1566 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.Streamable; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynUnion; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.util.EnumHolder; + +/** + * The DynUnion interface represents a DynAny + * object that is associated with an IDL union. Union values can be traversed + * using the operations defined in DynAny. The first component + * in the union corresponds to the discriminator; the second corresponds to the + * actual value of the union. Calling the method next() twice + * allows you to access both components. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynUnionImpl extends DynAnyBase + implements org.omg.DynamicAny.DynUnion +{ + /** + * Active member. + */ + DynAnyBase m_active_member; + + /** + * Active discriminator. + */ + DynAnyBase m_dyn_discriminator; + + /** + * Member index in the union TypeCode. + */ + int m_active_member_index; + + /** + * Current Component. + */ + int m_current_index; + + /** + * Component Count. + */ + int m_component_count; + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_current_index = -1; + m_component_count = 1; + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + m_component_count = 2; + + InputStream in = any.create_input_stream(); + + _read(in); + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. + * + * @param type + * the UnionTypeCode value. + */ + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + + try { + m_active_member_index = m_base_type.default_index(); + if (m_active_member_index > -1) + m_component_count = 2; + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + DynUnionImpl new_dyn = new DynUnionImpl(m_factory, m_orb); + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + new_dyn.m_active_member_index = m_active_member_index; + new_dyn.m_component_count = m_component_count; + + if (m_component_count == 2) { + if (m_active_member != null) { + new_dyn.m_active_member = (DynAnyBase) m_active_member.copy(); + } + if (m_dyn_discriminator != null) { + new_dyn.m_dyn_discriminator = + (DynAnyBase) m_dyn_discriminator.copy(); + } + } + + return new_dyn; + } + + // DynUnion operations + public org.omg.DynamicAny.DynAny get_discriminator() + // CORBA 2.6: throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + // throw new InvalidValue("No active member."); + throw new BAD_OPERATION("No active member."); + + if (m_dyn_discriminator == null) { // default discriminator search + + Any discriminator = m_orb.create_any(); + int i = 0; + do { // search a value that will be not at the case labels + setDiscriminatorValue(discriminator, ++i); + } while (UnionTypeCode.searchMemberIndex(m_base_type, discriminator) + != m_active_member_index); + + try { + m_dyn_discriminator = (DynAnyBase) + m_factory.create_dyn_any(discriminator); + } + catch (InconsistentTypeCode itc) {/* unreachable */ + return null; + } + + } + + return m_dyn_discriminator; + } + + public void set_discriminator(org.omg.DynamicAny.DynAny d) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + int index = UnionTypeCode.searchMemberIndex(m_base_type, d.to_any()); + + if (index < 0) + throw new TypeMismatch("DynUnion: Invalid label value " + index); + + setIndex(index, d); + } + + protected void setIndex(int index, DynAny discriminator) + { + if (m_active_member_index == index) { + if ((m_dyn_discriminator == null) && (discriminator != null)) + m_dyn_discriminator = (DynAnyBase) discriminator.copy(); + return; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + + if (discriminator != null) + m_dyn_discriminator = (DynAnyBase) discriminator.copy(); + + m_current_index = 0; + m_component_count = 2; + m_active_member_index = index; + + try { + if ((m_active_member != null) + && (!m_active_member.type() + .equivalent(m_base_type.member_type(m_active_member_index)))) { + m_active_member.destroy(); + m_active_member = null; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + } + + public void set_to_default_member() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + // set member idex to defalut index + + int index = m_base_type.default_index(); + if (index < 0) + throw new TypeMismatch("Union without default case or all " + + " posible discriminator values used."); + + setIndex(index, null); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + } + + public void set_to_no_active_member() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + if (m_base_type.default_index() > -1) + throw new TypeMismatch("Union has default case"); + + // are all the discriminator values uses + + if (allCasesUsed()) + throw new + TypeMismatch("All posible discriminator cases used in union."); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + if (m_active_member != null) { + m_active_member.destroy(); + m_active_member = null; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + + m_active_member_index = -1; + m_component_count = 1; + } + + public boolean has_no_active_member() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return m_component_count < 2; + } + + public org.omg.CORBA.TCKind discriminator_kind() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + return m_base_type.discriminator_type().kind(); + } + catch (BadKind bk) {/* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + + } + + public org.omg.DynamicAny.DynAny member() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + if (m_active_member == null) { + try { + m_active_member = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + m_base_type.member_type(m_active_member_index)); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode bk) { /* unreachable */} + } + + return m_active_member; + } + + public String member_name() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + try { + return m_base_type.member_name(m_active_member_index); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + } + + public void member_name(String arg) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + try { + + int member_count = m_base_type.member_count(); + + for (int i = 0; i < member_count; i++) { + if (arg.equals(m_base_type.member_name(i))) { + DynAnyBase dyn_disc = (DynAnyBase) + m_factory.create_dyn_any(m_base_type.member_label(i)); + setIndex(i, dyn_disc); + + return; + } + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode itc) {/* unreachable */ + return; + } + + throw new InvalidValue("Union has not any member named: " + arg); + } + + public org.omg.CORBA.TCKind member_kind() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_active_member_index < 1) + throw new InvalidValue("No member selected."); + + try { + return m_base_type.member_type(m_active_member_index).kind(); + } + catch (BadKind bk) { /* unreachable */ + return null; + } + catch (Bounds bd) { /* unreachable */ + return null; + } + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + return null; + + try { + switch (m_current_index) + { + case 0: + return get_discriminator(); + case 1: + return member(); + } + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + + throw new INTERNAL("Current out of range"); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + Any discriminator_any = m_orb.create_any(); + + try { + discriminator_any.read_value(in, m_base_type.discriminator_type()); + + m_active_member_index = + UnionTypeCode.searchMemberIndex(m_base_type, discriminator_any); + + if (m_active_member_index < 0) + throw new BAD_PARAM("Invalid Union label: " + + m_active_member_index); + + m_dyn_discriminator = (DynAnyBase) + m_factory.create_dyn_any(discriminator_any); + + m_dyn_discriminator.setUserDestroy(false); + + m_active_member = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + m_base_type.member_type(m_active_member_index)); + + m_active_member.setUserDestroy(false); + + ((Streamable) m_active_member)._read(in); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode bk) { /* unreachable */ + } + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_component_count == 1) + throw new BAD_OPERATION("Uncompleted union."); + + try { + ((Streamable) get_discriminator())._write(out); + ((Streamable) member())._write(out); + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + if (dyn_any instanceof DynUnion) { + try { + DynUnion dyn_union = (DynUnion) dyn_any; + if (dyn_union.has_no_active_member()) { + set_to_no_active_member(); + } else { + set_discriminator(dyn_union.get_discriminator()); + member().assign(dyn_union.member()); + } + } + catch (InvalidValue iv) {} + } else + // invalid error + throw new TypeMismatch(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + + _write(output); + + //new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof DynUnion) { + try { + DynUnion dyn_union = (DynUnion) dyn_any; + + if (!get_discriminator().equal(dyn_union.get_discriminator())) + return false; + + return member().equal(dyn_union.member()); + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + + } else + // invalid error + throw new BAD_PARAM("dyn_any value does not instantiate DynUnion" + + " but its type is union"); + } + + protected void destroyNow() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_active_member != null) { + m_active_member.destroy(); + m_active_member = null; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + } + + protected boolean allCasesUsed() + throws TypeMismatch + { + TypeCode disc_type = null; + int member_count; + try { + disc_type = m_base_type.discriminator_type(); + + while (disc_type.kind().value() == TCKind._tk_alias) + disc_type = disc_type.content_type(); + + member_count = m_base_type.member_count(); + + switch (disc_type.kind().value()) + { + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_longlong: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_char: + return false; + case TCKind._tk_boolean: + return member_count <= 2; + case TCKind._tk_enum: + return disc_type.member_count() <= member_count; + } + } + catch (BadKind bk) { + throw new INTERNAL(bk.toString()); + } + + throw new TypeMismatch("Invalid discriminator Value"); + } + + protected void setDiscriminatorValue(org.omg.CORBA.Any discriminator, + int value) + { + switch (discriminator.type().kind().value()) + { + case TCKind._tk_short: + discriminator.insert_short((short) value); + break; + case TCKind._tk_long: + discriminator.insert_long(value); + break; + case TCKind._tk_longlong: + discriminator.insert_longlong(value); + break; + case TCKind._tk_ushort: + discriminator.insert_ushort((short) value); + break; + case TCKind._tk_ulong: + discriminator.insert_ulong(value); + break; + case TCKind._tk_ulonglong: + discriminator.insert_ulonglong(value); + break; + case TCKind._tk_boolean: + discriminator.insert_boolean((value == 0) ? false : true); + break; + case TCKind._tk_char: + discriminator.insert_char((char) value); + break; + case TCKind._tk_wchar: + discriminator.insert_wchar((char) value); + break; + case TCKind._tk_enum: + try { + discriminator.insert_Streamable( + new EnumHolder((EnumTypeCode) + m_base_type.discriminator_type(), + value)); + } + catch (BadKind bk) {} + break; + + } + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynUnion:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_boolean(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_boolean(value); + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_char(value); + + set_discriminator(new_disc); + + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_char(value); + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_char(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_wchar(value); + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + else + current_component().insert_octet(value); + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_short(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_short(value); + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_ushort(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ushort(value); + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_long(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_long(value); + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component() .type()); + + new_disc.insert_ulong(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ulong(value); + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_longlong(value); + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_longlong(value); + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type() + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_ulonglong(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ulonglong(value); + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + if (m_current_index == 0) + throw new TypeMismatch(); + else + current_component().insert_float(value); + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + else + current_component().insert_double(value); + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + if (m_current_index == 0) + throw new TypeMismatch(); + if (!current_component().type().equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + else + current_component().insert_string(value); + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + else + current_component().insert_wstring(value); + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + else + current_component().insert_any(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + else + current_component().insert_dyn_any(value); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + else + current_component().insert_typecode(value); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + current_component().insert_val(value); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + else + current_component().insert_reference(value); + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + return current_component().get_boolean(); + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + return current_component().get_char(); + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + return current_component().get_wchar(); + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + return current_component().get_octet(); + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + return current_component().get_short(); + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + return current_component().get_ushort(); + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + return current_component().get_long(); + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + return current_component().get_ulong(); + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type() + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + return current_component().get_float(); + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + return current_component().get_double(); + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + return current_component().get_string(); + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + return current_component().get_wstring(); + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_any(); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_dyn_any(); + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + return current_component().get_typecode(); + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + return current_component().get_reference(); + } + + // DynAny without components methods + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + +// return 0; + return m_component_count; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index == -1) + return false; + + if (index < component_count()) { + m_current_index = index; + return true; + } else + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index != -1) + m_current_index = 0; + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index == -1) + return false; + + if (m_current_index < component_count() - 1) { + m_current_index++; + return true; + } else + return false; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynValueImpl.java.svn-base b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynValueImpl.java.svn-base new file mode 100644 index 0000000..2407cac --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/.svn/text-base/DynValueImpl.java.svn-base @@ -0,0 +1,175 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynValue implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynValueImpl extends DynStructBase + implements org.omg.DynamicAny.DynValue +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an value TypeCode. + * + * @param any + * the any value. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_value + * + * @param type + * the TypeCode value. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynValueImpl new_dyn = new DynValueImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynValue:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + // DynValueCommon methods + + public boolean is_null() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_to_null() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_to_value() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynAnyBase.java b/source/es/tid/TIDorbj/dynAny/DynAnyBase.java new file mode 100644 index 0000000..5653999 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynAnyBase.java @@ -0,0 +1,433 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * Base clase for all DynAny implementation classes. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ +abstract class DynAnyBase extends es.tid.TIDorbj.core.PseudoObject + implements org.omg.DynamicAny.DynAny, org.omg.CORBA.portable.Streamable +{ + + /** + * The active ORB. + */ + + TIDORB m_orb; + + /** + * The active DynAny factory. + */ + DynAnyFactoryImpl m_factory; + + /** + * The DynAny typecode. It maybe different from the base_type + * typecode, if it is a alias typecode. + */ + + TypeCode m_dyn_type; + + /** + * The "real" DynAny typecode base type. + */ + + TypeCode m_base_type; + + /** + * If true the DynAny can be destroyed by the user. + * Otherwise, it only will be destroyed by the container DynAny that created + * it. + *

+ * Default value: true (user can destroy it). + */ + + boolean m_user_destroy; + + protected DynAnyBase(DynAnyFactoryImpl factory, TIDORB orb) + { + m_factory = factory; + m_orb = orb; + m_destroyed = false; + m_user_destroy = true; + m_dyn_type = null; + m_base_type = null; + } + + protected DynAnyBase(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + this.m_factory = factory; + this.m_orb = orb; + m_destroyed = false; + m_user_destroy = true; + m_dyn_type = type; + m_base_type = real_type; + } + + public void destroy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_user_destroy) { + destroyNow(); + } + } + + protected void destroyNow() + { + m_destroyed = true; + m_dyn_type = null; + m_base_type = null; + m_factory = null; + m_orb = null; + } + + protected void setUserDestroy(boolean value) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + m_user_destroy = value; + } + + // DynAny operations + + public org.omg.CORBA.TypeCode type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + return m_dyn_type; + } + + // DynAny without components methods + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return 0; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + // no components + + return false; + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + typeMismatch(); + return null; + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + // Streamable operations + + public org.omg.CORBA.TypeCode _type() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return type(); + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynAny:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + // Implementation + + protected void typeMismatch() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + throw new org.omg.DynamicAny.DynAnyPackage.TypeMismatch(); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.java b/source/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.java new file mode 100644 index 0000000..7e09ff2 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynAnyFactoryImpl.java @@ -0,0 +1,410 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.DynamicAny.DynAnyFactoryLocalBase; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynAnyFactory implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyFactoryImpl extends DynAnyFactoryLocalBase +{ + + private boolean m_destroyed; + + private TIDORB m_orb; + + public DynAnyFactoryImpl() + { + m_destroyed = false; + } + + public void set_orb(org.omg.CORBA.ORB orb) + { + m_orb = (TIDORB) orb; + } + + public synchronized void destroy() + { + m_orb = null; + m_destroyed = true; + } + + public synchronized org.omg.DynamicAny.DynAny + create_dyn_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (value == null) + throw new BAD_PARAM("Null any reference"); + + switch (value.type().kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, value, value.type()); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, value, value.type()); + case TCKind._tk_alias: + return createAliasDynAny(value); + + // complex typecodes + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, value, value.type()); + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, value, value.type()); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, value, value.type()); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, value, value.type()); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, value, value.type()); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, value, value.type()); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, value, value.type()); + + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, value, value.type()); + + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + protected org.omg.DynamicAny.DynAny + createAliasDynAny(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (value == null) + throw new BAD_PARAM("Null any reference"); + + TypeCode base_type = null; + + try { + base_type = value.type().content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + switch (base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, value, base_type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, value, base_type); + // complex typecodes + + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, value, base_type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, value, base_type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, value, base_type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, value, base_type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, value, base_type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, value, base_type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, value, base_type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, value, base_type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public synchronized org.omg.DynamicAny.DynAny + create_dyn_any_from_type_code(org.omg.CORBA.TypeCode type) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (type == null) + throw new BAD_PARAM("Null TypeCode reference"); + + switch (type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, type, type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, type, type); + case TCKind._tk_alias: + return createAliasDynAnyFromTypeCode(type); + // complex typecodes + + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, type, type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, type, type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, type, type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, type, type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, type, type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, type, type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, type, type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, type, type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public org.omg.DynamicAny.DynAny + createAliasDynAnyFromTypeCode(org.omg.CORBA.TypeCode type) + throws org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + { + if (type == null) + throw new BAD_TYPECODE("Null TypeCode reference"); + + TypeCode base_type = null; + + try { + base_type = type.content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + switch (base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return new DynAnyImpl(this, m_orb, type, base_type); + case TCKind._tk_any: + return new DynAnyWithAny(this, m_orb, type, base_type); + // complex typecodes + case TCKind._tk_struct: + return new DynStructImpl(this, m_orb, type, base_type); + case TCKind._tk_sequence: + return new DynSequenceImpl(this, m_orb, type, base_type); + case TCKind._tk_enum: + return new DynEnumImpl(this, m_orb, type, base_type); + case TCKind._tk_except: + return new DynExceptImpl(this, m_orb, type, base_type); + case TCKind._tk_array: + return new DynArrayImpl(this, m_orb, type, base_type); + case TCKind._tk_union: + return new DynUnionImpl(this, m_orb, type, base_type); + case TCKind._tk_fixed: + return new DynFixedImpl(this, m_orb, type, base_type); + case TCKind._tk_value: + return new DynValueImpl(this, m_orb, type, base_type); + case TCKind._tk_longdouble: + throw new org.omg.CORBA.NO_IMPLEMENT(); + default: + throw new InconsistentTypeCode("Bad TypeCode"); + } + } + + public static boolean isBasic(org.omg.CORBA.TypeCode type) + { + if (type == null) + throw new BAD_PARAM("Null type reference"); + + switch (type.kind().value()) + { + // basic typecodes + case TCKind._tk_null: + case TCKind._tk_any: + case TCKind._tk_objref: + case TCKind._tk_TypeCode: + case TCKind._tk_void: + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_float: + case TCKind._tk_double: + case TCKind._tk_boolean: + case TCKind._tk_char: + case TCKind._tk_octet: + case TCKind._tk_longlong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_string: + case TCKind._tk_wstring: + return true; + case TCKind._tk_alias: + return aliasWithBasicTC(type); + default: + return false; + } + } + + protected static boolean aliasWithBasicTC(org.omg.CORBA.TypeCode type) + { + if (type == null) + throw new BAD_PARAM("Null any reference"); + + TypeCode base_type = null; + + try { + base_type = type.content_type(); + + while (base_type.kind().value() == TCKind._tk_alias) { + base_type = base_type.content_type(); + } + } + catch (BadKind bk) { + throw new + BAD_TYPECODE("Alias typecode fault in content_type() method:" + + bk.toString()); + } + + return isBasic(base_type); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynAnyImpl.java b/source/es/tid/TIDorbj/dynAny/DynAnyImpl.java new file mode 100644 index 0000000..470808f --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynAnyImpl.java @@ -0,0 +1,1180 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 18 $ +* Date: $Date: 2006-05-26 10:56:46 +0200 (Fri, 26 May 2006) $ +* Last modified by: $Author: scheca $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.util.StringHolder; +import es.tid.TIDorbj.core.util.WStringHolder; + +/** + * DynAny implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyImpl extends DynAnyBase +{ + /** + * Primitive type value. + */ + + AnyImpl m_dyn_value; + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_dyn_value = null; + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value, assumes that the TypeCode is Basic. + */ + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + initValue(any); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynAnyImpl(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + super(factory, orb, type, real_type); + + initValue(); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + m_dyn_value.read_value(in, m_base_type); + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + m_dyn_value.write_value(out); + } + + // DynAny operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + try { + switch (m_base_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + m_dyn_value.type(m_base_type); + return; + case TCKind._tk_objref: + m_dyn_value.insert_Object(dyn_any.get_reference()); + return; + case TCKind._tk_TypeCode: + m_dyn_value.insert_TypeCode(dyn_any.get_typecode()); + return; + case TCKind._tk_short: + m_dyn_value.insert_short(dyn_any.get_short()); + return; + case TCKind._tk_long: + m_dyn_value.insert_long(dyn_any.get_long()); + return; + case TCKind._tk_ushort: + m_dyn_value.insert_ushort(dyn_any.get_ushort()); + return; + case TCKind._tk_ulong: + m_dyn_value.insert_ulong(dyn_any.get_ulong()); + return; + case TCKind._tk_float: + m_dyn_value.insert_float(dyn_any.get_float()); + return; + case TCKind._tk_double: + m_dyn_value.insert_double(dyn_any.get_double()); + return; + case TCKind._tk_boolean: + m_dyn_value.insert_boolean(dyn_any.get_boolean()); + return; + case TCKind._tk_char: + m_dyn_value.insert_char(dyn_any.get_char()); + return; + case TCKind._tk_octet: + m_dyn_value.insert_octet(dyn_any.get_octet()); + return; + case TCKind._tk_longlong: + m_dyn_value.insert_longlong(dyn_any.get_longlong()); + return; + case TCKind._tk_ulonglong: + m_dyn_value.insert_ulonglong(dyn_any.get_ulonglong()); + return; + case TCKind._tk_wchar: + m_dyn_value.insert_wchar(dyn_any.get_wchar()); + return; + case TCKind._tk_string: + m_dyn_value.insert_string(dyn_any.get_string()); + return; + case TCKind._tk_wstring: + m_dyn_value.insert_string(dyn_any.get_string()); + return; + + } + } + catch (InvalidValue iv) { + throw new BAD_PARAM(iv.toString()); + } + + // set the any type to the "dyn_type" + m_dyn_value.setEquivalentType(m_base_type); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_dyn_type.equivalent(value.type())) + throw new TypeMismatch(); + + initValue(value); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + + AnyImpl.assign(m_dyn_value, new_value); + + new_value.setEquivalentType(m_dyn_type); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + try { + switch (m_base_type.kind().value()) + { + case TCKind._tk_null: + case TCKind._tk_void: + return true; + case TCKind._tk_objref: + return m_dyn_value.extract_Object() + ._is_equivalent(dyn_any.get_reference()); + case TCKind._tk_TypeCode: + return m_dyn_value.extract_TypeCode() + .equal(dyn_any.get_typecode()); + case TCKind._tk_short: + return m_dyn_value.extract_short() == dyn_any.get_short(); + case TCKind._tk_long: + return m_dyn_value.extract_long() == dyn_any.get_long(); + case TCKind._tk_ushort: + return m_dyn_value.extract_ushort() == dyn_any.get_ushort(); + case TCKind._tk_ulong: + return m_dyn_value.extract_ulong() == dyn_any.get_ulong(); + case TCKind._tk_float: + return m_dyn_value.extract_float() == dyn_any.get_float(); + case TCKind._tk_double: + return m_dyn_value.extract_double() == dyn_any.get_double(); + case TCKind._tk_boolean: + return m_dyn_value.extract_boolean() + == dyn_any.get_boolean(); + case TCKind._tk_char: + return m_dyn_value.extract_char() == dyn_any.get_char(); + case TCKind._tk_octet: + return m_dyn_value.extract_octet() == dyn_any.get_octet(); + case TCKind._tk_longlong: + return m_dyn_value.extract_longlong() + == dyn_any.get_longlong(); + case TCKind._tk_ulonglong: + return m_dyn_value.extract_ulonglong() + == dyn_any.get_ulonglong(); + case TCKind._tk_wchar: + return m_dyn_value.extract_wchar() == dyn_any.get_wchar(); + case TCKind._tk_string: + return m_dyn_value.extract_string() == dyn_any.get_string(); + case TCKind._tk_wstring: + return m_dyn_value.extract_string() == dyn_any.get_string(); + } + } + catch (InvalidValue iv) { + throw new BAD_PARAM(iv.toString()); + } + catch (TypeMismatch tm) { + throw new INTERNAL(tm.toString()); + } + throw new INTERNAL("DynAnyImpl with no basic TypeCode"); + + } + + protected void destroyNow() + { + super.destroyNow(); + m_dyn_value = null; + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynAnyImpl new_dyn = new DynAnyImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + try { + new_dyn.assign(this); + } + catch (TypeMismatch tm) {} + + return new_dyn; + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_dyn_value.type().kind().value() != TCKind._tk_boolean) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_boolean(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_octet) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_octet(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_char) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_char(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_short) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_short(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ushort) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ushort(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_long) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_long(value); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ulong(value); + } + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_float) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_float(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_double) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_double(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_string) + throw new TypeMismatch("Unexpected type"); + + try { + if (m_base_type.length() == 0) { // unboundled string + m_dyn_value.insert_string(value); + return; + } + if (value.length() > m_base_type.length()) + throw new BAD_PARAM("String out of bounds.", + 0, + CompletionStatus.COMPLETED_NO); + m_dyn_value.insert_Streamable(new StringHolder(m_base_type, value)); + + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + catch (org.omg.CORBA.BAD_OPERATION bo) { + throw new InvalidValue(); + } + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null string reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_wstring) + throw new TypeMismatch("Unexpected type"); + + try { + if (m_base_type.length() == 0) { // unboundled string + m_dyn_value.insert_wstring(value); + return; + } + if (value.length() > (m_base_type.length() / CDR.WCHAR_SIZE)) + throw new BAD_PARAM("WString out of bounds.", 0, + CompletionStatus.COMPLETED_NO); + m_dyn_value.insert_Streamable( + new WStringHolder(m_base_type, value)); + + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) {} + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_objref) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_Object(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null TypeCode reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_TypeCode) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_TypeCode(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_longlong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_longlong(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulonglong) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_ulonglong(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_wchar) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_wchar(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_value) + throw new TypeMismatch("Unexpected type"); + + try { + m_dyn_value.insert_Value(value); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_boolean) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_boolean(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_octet) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_octet(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_char) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_char(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_short) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_short(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ushort) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ushort(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_long) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_long(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ulong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_float) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_float(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_double) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_double(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_string) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_string(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_objref) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_Object(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_TypeCode) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_TypeCode(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_longlong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_longlong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_ulonglong) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_ulonglong(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_wchar) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_wchar(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_base_type.kind().value() != TCKind._tk_wstring) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_wstring(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(); + } + + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("Unexpected type"); + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_value) + throw new TypeMismatch("Unexpected type"); + + try { + return m_dyn_value.extract_Value(); + } + catch (BAD_OPERATION bo) { + throw new InvalidValue(bo.toString()); + } + } + + /** + * Initialize the content value with the any value. + * + * @param any + * the value + */ + + protected void initValue(Any any) + { + if (m_dyn_value == null) + m_dyn_value = (AnyImpl) m_orb.create_any(); + + if (m_dyn_type.kind().value() == TCKind._tk_alias) { + + m_dyn_value.read_value(any.create_input_stream(), m_base_type); + + } else { + AnyImpl.assign(any, m_dyn_value); + m_dyn_value.setEquivalentType(m_base_type); + } + } + + /** + * Initialize the content value with the default value of the type. + */ + + protected void initValue() + { + if (m_dyn_value == null) + m_dyn_value = (AnyImpl) m_orb.create_any(); + + switch (m_base_type.kind().value()) + { + // basic typecodes + case TCKind._tk_short: + m_dyn_value.insert_short((short) 0); + return; + case TCKind._tk_long: + m_dyn_value.insert_long(0); + return; + case TCKind._tk_ushort: + m_dyn_value.insert_ushort((short) 0); + return; + case TCKind._tk_ulong: + m_dyn_value.insert_ulong(0); + return; + case TCKind._tk_float: + m_dyn_value.insert_float(0.0F); + return; + case TCKind._tk_double: + m_dyn_value.insert_double(0.0D); + return; + case TCKind._tk_boolean: + m_dyn_value.insert_boolean(false); + return; + case TCKind._tk_char: + m_dyn_value.insert_char((char) 0); + return; + case TCKind._tk_octet: + m_dyn_value.insert_octet((byte) 0); + return; + case TCKind._tk_longlong: + m_dyn_value.insert_longlong(0L); + return; + case TCKind._tk_ulonglong: + m_dyn_value.insert_ulonglong(0L); + return; + case TCKind._tk_wchar: + m_dyn_value.insert_wchar((char) 0); + return; + case TCKind._tk_string: + m_dyn_value.insert_string(""); + return; + case TCKind._tk_wstring: + m_dyn_value.insert_wstring(""); + return; + case TCKind._tk_objref: + m_dyn_value.insert_Object(null); + return; + case TCKind._tk_TypeCode: + m_dyn_value.insert_TypeCode( + m_orb.get_primitive_tc(TCKind.tk_null)); + return; + default: + throw new INTERNAL("TypeCode not expected"); + } + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynAnyWithAny.java b/source/es/tid/TIDorbj/dynAny/DynAnyWithAny.java new file mode 100644 index 0000000..f3ee423 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynAnyWithAny.java @@ -0,0 +1,305 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynAny implementation that contains an any with an inner any. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynAnyWithAny extends DynSingleton +{ + + // contained any as a DynAny + + DynAnyBase m_any_value; + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + initValue(); + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value, assumes that the TypeCode is Basic. + */ + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + initValue(any.extract_any()); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynAnyWithAny(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + initValue(); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + initValue(in.read_any()); + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_TypeCode(m_any_value.type()); + m_any_value._write(out); + } + + // DynAny operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + try { + initValue(dyn_any.get_any()); + } + catch (InvalidValue invalidValue) {} + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_dyn_type.equivalent(value.type())) + throw new TypeMismatch(); + + initValue(value.extract_any()); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + + new_value.insert_any(m_any_value.to_any()); + + new_value.setEquivalentType(m_dyn_type); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + try { + return m_any_value.equal(dyn_any.get_dyn_any()); + } + catch (TypeMismatch typeMismatch) {} + catch (InvalidValue invalidValue) {} + + return false; + } + + protected void destroyNow() + { + super.destroyNow(); + if (m_any_value != null) { + m_any_value.destroyNow(); + m_any_value = null; + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynAnyWithAny new_dyn = new DynAnyWithAny(m_factory, m_orb, m_dyn_type, + m_base_type); + + try { + new_dyn.assign(this); + } + catch (TypeMismatch tm) {} + + return new_dyn; + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + initValue(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + initValue(value.to_any()); + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return m_any_value.to_any(); + } + + public synchronized org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_base_type.kind().value() != TCKind._tk_any) + throw new TypeMismatch("Unexpected type"); + + return m_any_value; + } + + /** + * Initialize the content value with the default value of the type. + */ + + protected void initValue() + { + AnyImpl val = (AnyImpl) m_orb.create_any(); + initValue(val); + } + + protected void initValue(Any any) + { + if (m_any_value != null) { + m_any_value.destroyNow(); + } + + try { + + m_any_value = (DynAnyBase) m_factory.create_dyn_any(any); + m_any_value.setUserDestroy(false); + + } + catch (InconsistentTypeCode inconsistentTypeCode) {} + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynArrayImpl.java b/source/es/tid/TIDorbj/dynAny/DynArrayImpl.java new file mode 100644 index 0000000..951f67c --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynArrayImpl.java @@ -0,0 +1,565 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * DynArray implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynArrayImpl extends DynComposite + implements org.omg.DynamicAny.DynArray +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an array TypeCode. + * + * @param any + * the any value. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + try { + m_component_count = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_array. + * + * @param any + * the any value. + */ + + protected DynArrayImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynArrayImpl new_dyn = new DynArrayImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + protected TypeCode getComponentType(int position) + { + + try { + return m_base_type.content_type(); + } + catch (BadKind bk) { + /* unreachable */ + throw new org.omg.CORBA.INTERNAL(); + } + + } + + // CORBA 2.5 + + // DynArray Operations + + public org.omg.CORBA.Any[] get_elements() + { + return super.get_elements(); + } + + public void set_elements(org.omg.CORBA.Any[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.set_elements(value); + } + + public org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + return super.get_elements_as_dyn_any(); + } + + public void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.set_elements_as_dyn_any(value); + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + insert_boolean_members(value); + + } else { + super.insert_boolean_seq(value); + } + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + insert_octet_members(value); + + } else { + super.insert_octet_seq(value); + } + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + insert_char_members(value); + + } else { + super.insert_char_seq(value); + } + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + insert_short_members(value); + + } else { + super.insert_short_seq(value); + } + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + insert_ushort_members(value); + + } else { + super.insert_ushort_seq(value); + } + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + insert_long_members(value); + + } else { + super.insert_long_seq(value); + } + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + insert_ulong_members(value); + + } else { + super.insert_ulong_seq(value); + } + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + insert_float_members(value); + + } else { + super.insert_float_seq(value); + } + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + insert_double_members(value); + + } else { + super.insert_double_seq(value); + } + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + insert_longlong_members(value); + + } else { + super.insert_longlong_seq(value); + } + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulonglong)) { + insert_ulonglong_members(value); + + } else { + super.insert_ulonglong_seq(value); + } + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + insert_wchar_members(value); + + } else { + super.insert_wchar_seq(value); + } + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + return super.get_boolean_members(); + } else { + return super.get_boolean_seq(); + } + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + return super.get_octet_members(); + } else { + return super.get_octet_seq(); + } + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + return super.get_char_members(); + } else { + return super.get_char_seq(); + } + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + return super.get_short_members(); + } else { + return super.get_short_seq(); + } + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + return super.get_ushort_members(); + } else { + return super.get_ushort_seq(); + } + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + return super.get_long_members(); + } else { + return super.get_long_seq(); + } + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + return super.get_ulong_members(); + } else { + return super.get_ulong_seq(); + } + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + return super.get_float_members(); + } else { + return super.get_float_seq(); + } + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + return super.get_double_members(); + } else { + return super.get_double_seq(); + } + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + return super.get_longlong_members(); + } else { + return super.get_longlong_seq(); + } + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + return super.get_wchar_members(); + } else { + return super.get_wchar_seq(); + } + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynArray:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynComposite.java b/source/es/tid/TIDorbj/dynAny/DynComposite.java new file mode 100644 index 0000000..3cd9af3 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynComposite.java @@ -0,0 +1,2233 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import java.util.Vector; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.portable.OutputStream; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; + +/** + * Base class for composite Dynamic Anys. It implements the Streamable interface + * for alowing the generated anys (with to_any) write its value in an output + * stream. The generated anys are contructed with: + *

+ * + * Any to_any() + *

{ + *

Any a= new Any(); + *

a.insert_Streamable(this); + *

return a; + *

} Due to this construction unneccesary remarshalings are avoided. + *

+ * The DynComposite has two operation modes: + *

    + *
  • Inserting Mode : a TypeCode is given and the + * any is constructec from other Dynamic Anys. + *
  • Extraction Mode : a Any is given and the + * DynAny structures are obtained from the any and its input stream. + *
+ * + * @autor Juan A. Cáceres + * @version 1.0 + */ +public abstract class DynComposite extends DynAnyBase +{ + /** + * The marshaled value of the Dynamic Any for extracting. + */ + + CDRInputStream m_complete_value; + + /** + * The next component marshaled value of the Dynamic Any for extracting. + */ + + CDRInputStream m_next_value; + + /** + * Current component of the array. + */ + + int m_current_index; + + /** + * Number of Components of the Dynany. This value must be initialized by the + * child classes. + */ + + int m_component_count; + + /** + * Array of components. + */ + + Vector m_components; + + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_components = new Vector(); + m_component_count = 0; + m_current_index = -1; + m_complete_value = null; + m_next_value = null; + } + + /** + * Constructor for insertions. + */ + + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + this(factory, orb); + + m_dyn_type = type; + m_base_type = real_type; + } + + /** + * Constructor for extraction. + */ + protected DynComposite(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + this(factory, orb); + + m_dyn_type = any.type(); + m_base_type = real_type; + + getStreams(any); + } + + // DynComposite methods + + /** + * Clears the value of the dynAny and try to destroy the components. It is + * done when going to insert a new value. + */ + + protected void reset() + { + if (m_component_count == 0) + m_current_index = -1; + else + m_current_index = 0; + + int size = m_components.size(); + + for (int i = 0; i < size; i++) { + ((DynAny) m_components.elementAt(i)).destroy(); + } + + m_components.removeAllElements(); + + m_complete_value = null; + m_next_value = null; + } + + /** + * @param position + * the component position + * @return the TypeCode of the component at the given + * position + */ + protected abstract TypeCode getComponentType(int position); + + /** + * Internal operation to notify that the last component has been + * dissasembled and the DynAny can be wroten writing its components. + * + */ + protected void lastComponent() + { + m_complete_value = null; + m_next_value = null; + } + + /** + * Streamable _read operation + */ + public void _read(org.omg.CORBA.portable.InputStream is) + { + reset(); + + Any any = m_orb.create_any(); + + any.read_value(is, m_base_type); + + getStreams(any); + + } + + /** + * Streamable _write operation + */ + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (os == null) + throw new BAD_PARAM("Null OutputStream reference", 0, + CompletionStatus.COMPLETED_NO); + + DynAny dyn = null; + try { + for (int i = 0; i < m_component_count; i++) { + dyn = getComponent(i); + if (dyn instanceof DynAnyBase) + ((DynAnyBase) dyn)._write(os); + else + dyn.to_any().write_value(os); + } + } + catch (TypeMismatch tm) { + throw new INTERNAL(); + } + } + + /** + * DynAny destructor. Invoked by container DynAnys. + */ + protected void destroyNow() + { + super.destroyNow(); + + reset(); + + m_components = null; + } + + /** + * Obtains the marshaled value from the any. + * + * @param any + * the new value + */ + protected void getStreams(org.omg.CORBA.Any any) + { + if (any == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + try { + m_complete_value = (CDRInputStream) + any.create_input_stream(); + } + catch (ClassCastException cce) { + OutputStream out = m_orb.create_output_stream(); + any.write_value(out); + m_complete_value = (CDRInputStream) out.create_input_stream(); + } + + m_next_value = m_complete_value.copy(); + } + + /** + * Validates and prepares the dyn_any assignment. + * + * @param dyn_any + * the new value + * @throws TypeMismatch + * if the new value TypeCode is not equivalent + */ + protected void preAssign(org.omg.DynamicAny.DynAny dyn_any) + throws TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) { + throw new TypeMismatch(); + } + + // both are the same type. + + reset(); + + // component_count = dyn_any.component_count(); + } + + /** + * Copy the content of the DynComposite instance to other. + * + * @param dyn_any + * the destination DynComposite + */ + protected void copyTo(DynComposite dyn_any) + { + + dyn_any.m_component_count = m_component_count; + + if (m_component_count == 0) { + dyn_any.m_current_index = -1; + return; + } + + if (m_complete_value != null) { + dyn_any.m_complete_value = m_complete_value.copy(); + dyn_any.m_next_value = m_complete_value.copy(); + return; + } + + try { + for (int i = 0; i < m_component_count; i++) + dyn_any.m_components.addElement(getComponent(i).copy()); + + } + catch (TypeMismatch tm) { + throw new INTERNAL("Error with current_component"); + } + } + + /** + * Creates the DynAny at the position, read its value if exists, and insert + * it in the component vector. + */ + protected DynAny getComponent(int position) + throws TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynArray destroyed."); + + if (position == -1) + return null; + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // initialize the component, + + // when the DynAny has been introduced in a any (with to_any() + // operation), + // prevents multihreaded writes (os.write_any() -> dyn_any._write() + // -> + // dyn_any.get_element(i)._write() + + synchronized (this) { + if (position == m_components.size()) { + DynAnyBase dyn_component = null; + + try { + dyn_component = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + getComponentType(position)); + + } + catch (InconsistentTypeCode itc) { + throw new + TypeMismatch("Inconsistent TypeCode of member: " + + position + + " . " + + itc.toString() + + " was thrown"); + } + + dyn_component.setUserDestroy(false); // component + // destruction + + m_components.addElement(dyn_component); + + if (m_next_value != null) { // demarshal the component + dyn_component._read(m_next_value); + } + + if (position == (m_component_count - 1)) { + m_next_value = null; + m_complete_value = null; + } + } + } + + } + + return (DynAny) m_components.elementAt(position); + } + + /** + * Set or creates a new component at position with the given + * value. + */ + protected void setComponent(int position, Any value) + throws TypeMismatch, + InvalidValue + { + try { + if (!getComponentType(position).equivalent(value.type())) + throw new TypeMismatch("Unexpected value type in component " + + position); + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // create the component + DynAny dyn_component = m_factory.create_dyn_any(value); + + m_components.addElement(dyn_component); + } else { + DynAny curr_dyn = (DynAny) + m_components.elementAt(m_current_index); + curr_dyn.from_any(value); + } + + } + catch (InconsistentTypeCode itc) { + throw new TypeMismatch("Inconsistent TypeCode of member: " + + m_current_index + " . " + itc.toString() + + " was thrown"); + } + } + + /** + * Set or creates a new component at position with the given + * value. + */ + protected void setComponent(int position, DynAny value) + throws TypeMismatch + { + + if (!getComponentType(position).equivalent(value.type())) + throw new TypeMismatch("Unexpedted value type in component " + + position); + + int next_component_index = m_components.size(); + + if (position > next_component_index) + throw new INTERNAL("Component position out of sequence"); + + if (position == next_component_index) { // create the component + m_components.addElement(value); + } else { + ((DynAny) m_components.elementAt(position)).destroy(); + m_components.insertElementAt(value, m_current_index); + } + } + + // DynAny operations + + public void from_any(org.omg.CORBA.Any value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + reset(); + + getStreams(value); + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(0, CompletionStatus.COMPLETED_NO); + + Any new_any = m_orb.create_any(); + + new_any.type(type()); + + org.omg.CORBA.portable.OutputStream output = + new_any.create_output_stream(); + + _write(output); + + return new_any; + } + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws TypeMismatch + { + preAssign(dyn_any); + + if (m_component_count == 0) + return; + + int other_aux_current = m_component_count - 1; + + while (dyn_any.next()) + other_aux_current--; + + dyn_any.rewind(); + + try { + for (int i = 0; i < m_component_count; i++) + setComponent(i, dyn_any.current_component().copy()); + + } + catch (TypeMismatch tm) { + reset(); + dyn_any.seek(other_aux_current); + throw tm; + } + + m_current_index = 0; + + dyn_any.seek(other_aux_current); + + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference"); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (m_component_count != dyn_any.component_count()) + return false; + + if (m_component_count == 0) + return true; + + int aux_current = m_current_index; + + int other_aux_current = m_component_count - 1; + + try { + while (dyn_any.next()) + other_aux_current--; + + dyn_any.rewind(); + + for (int i = 0; i < m_component_count; i++) { + if (!getComponent(i).equal(dyn_any.current_component())) { + dyn_any.seek(other_aux_current); + return false; + } + + dyn_any.next(); + } + } + catch (TypeMismatch tm) { + throw new INTERNAL(tm.toString()); + } + finally { + dyn_any.seek(other_aux_current); + } + + return true; + } + + public org.omg.CORBA.Any[] get_elements() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + Any[] any_array = new Any[m_component_count]; + + if (m_component_count > 0) { + try { + for (int i = 0; i < m_component_count; i++) { + any_array[i] = getComponent(i).to_any(); + } + } + catch (TypeMismatch tm) { + /* unreachable */ + throw new INTERNAL(tm.toString()); + } + + } + + return any_array; + + } + + protected void set_elements(org.omg.CORBA.Any[] value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + reset(); + + if (value.length == 0) + return; + + if (m_component_count != value.length) + throw new + InvalidValue("Value length differs from component number"); + + for (int i = 0; i < m_component_count; i++) { + if (value[i] == null) + throw new BAD_PARAM("null Any array element"); + + setComponent(i, value[i]); + } + } + + protected org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + DynAny[] any_array = new DynAny[m_component_count]; + + if (m_component_count > 0) { + try { + for (int i = 0; i < m_component_count; i++) { + any_array[i] = getComponent(i); + } + } + catch (TypeMismatch tm) { + /* unreachable */ + throw new INTERNAL(tm.toString()); + } + } + + return any_array; + } + + protected void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("Null DynAny[] reference"); + + reset(); + + if (value.length == 0) + return; + + if (m_component_count != value.length) + throw new InvalidValue("Value length differs from members number"); + + for (int i = 0; i < m_component_count; i++) { + if (value[i] == null) + throw new BAD_PARAM("null Any array element"); + + setComponent(i, value[i]); + } + } + + public org.omg.DynamicAny.DynAny current_component() + throws TypeMismatch + { + return getComponent(m_current_index); + } + + public int component_count() + { + return m_component_count; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (index < 0) { + m_current_index = -1; + return false; + } + + if (m_component_count == 0) + return false; + + if (m_component_count <= index) + return false; + + m_current_index = 0; + + for (int i = 0; i < index; i++) { + next(); + } + + return true; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count > 0) + seek(0); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count <= (m_current_index + 1)) + return false; + + // if the current object has not been initialized, do it + + if (m_current_index == m_components.size()) + try { + current_component(); + } + catch (TypeMismatch tm) { + return false; + } + + // leaves the current component ready + m_current_index++; + return true; + } + + public void insert_boolean(boolean value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + current_component().insert_boolean(value); + } + + public void insert_char(char value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + current_component().insert_char(value); + } + + public void insert_wchar(char value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + current_component().insert_wchar(value); + } + + public void insert_octet(byte value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + current_component().insert_octet(value); + } + + public void insert_short(short value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + current_component().insert_short(value); + } + + public void insert_ushort(short value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + current_component().insert_ushort(value); + } + + public void insert_long(int value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + current_component().insert_long(value); + } + + public void insert_ulong(int value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + current_component().insert_ulong(value); + } + + public void insert_longlong(long value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + current_component().insert_longlong(value); + } + + public void insert_ulonglong(long value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + current_component().insert_ulonglong(value); + } + + public void insert_float(float value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + current_component().insert_float(value); + } + + public void insert_double(double value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + current_component().insert_double(value); + } + + public void insert_string(String value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + current_component().insert_string(value); + } + + public void insert_wstring(String value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + current_component().insert_wstring(value); + } + + public void insert_any(org.omg.CORBA.Any value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + current_component().insert_any(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + current_component().insert_dyn_any(value); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + current_component().insert_typecode(value); + } + + public void insert_val(java.io.Serializable value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + current_component().insert_val(value); + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_abstract(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_abstract(value); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + current_component().insert_reference(value); + } + + public boolean get_boolean() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + return current_component().get_boolean(); + } + + public char get_char() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + return current_component().get_char(); + } + + public char get_wchar() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + return current_component().get_wchar(); + } + + public byte get_octet() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + return current_component().get_octet(); + } + + public short get_short() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + return current_component().get_short(); + } + + public short get_ushort() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + return current_component().get_ushort(); + } + + public int get_long() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + return current_component().get_long(); + } + + public int get_ulong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + return current_component().get_ulong(); + } + + public long get_longlong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public long get_ulonglong() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public float get_float() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + return current_component().get_float(); + } + + public double get_double() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + return current_component().get_double(); + } + + public String get_string() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + return current_component().get_string(); + } + + public String get_wstring() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + return current_component().get_wstring(); + } + + public org.omg.CORBA.Any get_any() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_any(); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_dyn_any(); + } + + public org.omg.CORBA.TypeCode get_typecode() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + return current_component().get_typecode(); + } + + public java.io.Serializable get_val() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public org.omg.CORBA.Object get_reference() + throws TypeMismatch, + InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!getComponentType(m_current_index) + .equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + return current_component().get_reference(); + } + + // CORBA 2.5 + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_boolean_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_boolean_seq(value); + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_octet_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_octet_seq(value); + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_char_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_char_seq(value); + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_short_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_short_seq(value); + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ushort_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ushort_seq(value); + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_long_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_long_seq(value); + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ulong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ulong_seq(value); + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_float_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_float_seq(value); + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_double_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_double_seq(value); + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_longlong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_longlong_seq(value); + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_ulonglong_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_ulonglong_seq(value); + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // current_component().insert_wchar_seq(value); + ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .insert_wchar_seq(value); + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_boolean_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_boolean_seq(); + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_octet_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_octet_seq(); + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_char_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_char_seq(); + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_short_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_short_seq(); + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ushort_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ushort_seq(); + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_long_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_long_seq(); + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ulong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ulong_seq(); + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_float_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_float_seq(); + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_double_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_double_seq(); + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_longlong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_longlong_seq(); + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_ulonglong_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_ulonglong_seq(); + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + // DynAny de J2SDK 1.4.1 no cumple CORBA 2.6 + // return current_component().get_wchar_seq(); + return ((es.tid.TIDorbj.dynAny.DynAnyBase) current_component()) + .get_wchar_seq(); + } + + protected void insert_boolean_members(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_boolean(value[i]); + next(); + } + + rewind(); + } + + protected void insert_octet_members(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_octet(value[i]); + next(); + } + + rewind(); + } + + protected void insert_char_members(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_char(value[i]); + next(); + } + + rewind(); + } + + protected void insert_short_members(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_short(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ushort_members(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ushort(value[i]); + next(); + } + + rewind(); + } + + protected void insert_long_members(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_long(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ulong_members(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ulong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_float_members(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_float(value[i]); + next(); + } + + rewind(); + } + + protected void insert_double_members(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_double(value[i]); + next(); + } + + rewind(); + } + + protected void insert_longlong_members(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_longlong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_ulonglong_members(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_ulonglong(value[i]); + next(); + } + + rewind(); + } + + protected void insert_wchar_members(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value.length != m_component_count) { + throw new InvalidValue("Invalid length"); + } + + reset(); + + for (int i = 0; i < value.length; i++) { + current_component().insert_wchar(value[i]); + next(); + } + + rewind(); + } + + protected boolean[] get_boolean_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + boolean[] value = new boolean[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_boolean(); + } + } + + return value; + } + + protected byte[] get_octet_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + byte[] value = new byte[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_octet(); + } + } + + return value; + } + + protected char[] get_char_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + char[] value = new char[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_char(); + } + } + + return value; + } + + protected short[] get_short_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + short[] value = new short[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_short(); + } + } + + return value; + } + + protected short[] get_ushort_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + short[] value = new short[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ushort(); + } + } + + return value; + } + + protected int[] get_long_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + int[] value = new int[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_long(); + } + } + + return value; + } + + protected int[] get_ulong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + int[] value = new int[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ulong(); + } + } + + return value; + } + + protected float[] get_float_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + float[] value = new float[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_float(); + } + } + + return value; + } + + protected double[] get_double_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + double[] value = new double[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_double(); + } + } + + return value; + } + + protected long[] get_longlong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + long[] value = new long[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_longlong(); + } + } + + return value; + } + + protected long[] get_ulonglong_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + long[] value = new long[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_ulonglong(); + } + } + + return value; + } + + protected char[] get_wchar_members() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + char[] value = new char[m_component_count]; + + if (m_component_count > 0) { + for (int i = 0; i < m_component_count; i++) { + value[i] = getComponent(i).get_wchar(); + } + } + + return value; + } +} diff --git a/source/es/tid/TIDorbj/dynAny/DynEnumImpl.java b/source/es/tid/TIDorbj/dynAny/DynEnumImpl.java new file mode 100644 index 0000000..5a5cb28 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynEnumImpl.java @@ -0,0 +1,320 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDR; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.cdr.CDROutputStream; + +/** + * DynEnum implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynEnumImpl extends DynSingleton + implements org.omg.DynamicAny.DynEnum +{ + + int m_enum_value; + + private DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_enum_value = 0; + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value. + * @throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + */ + + protected DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb); + + m_dyn_type = any.type(); + + m_base_type = real_type; + + CDROutputStream out = new CDROutputStream(orb, CDR.ULONG_SIZE); + any.write_value(out); + CDRInputStream in = (CDRInputStream) out.create_input_stream(); + m_enum_value = in.read_ulong(); + } + + /** + * Constructor. Gets a simple TypeCode to create a new value; It assumes + * that the TypeCode contains is simple (octect, short ...). + * + * @param type + * the new TypeCode value. + * @exception org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode + * if the TypeCode is not basic. + */ + + protected DynEnumImpl(DynAnyFactoryImpl factory, TIDORB orb, TypeCode type, + TypeCode real_type) + { + super(factory, orb); + m_dyn_type = type; + m_base_type = real_type; + m_enum_value = 0; + } + + public String get_as_string() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + return m_base_type.member_name(m_enum_value); + } + catch (Bounds bd) { + return null; + } + catch (BadKind bk) { + return null; + } + } + + public void set_as_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + int num_values = m_base_type.member_count(); + + for (int i = 0; i < num_values; i++) { + if (value.equals(type().member_name(i))) { + m_enum_value = i; + return; + } + } + throw new InvalidValue("No member named " + value + "."); + + } + catch (Bounds bd) { /* unreachable */ + } + catch (BadKind bk) { /* unreachable */ + } + } + + public int get_as_ulong() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return m_enum_value; + } + + public void set_as_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + int count = m_base_type.member_count(); + + if ((value < 0) || (value >= count)) + throw new InvalidValue(type().id() + " : value " + value + + " out of range."); + } + catch (BadKind bk) { /* unreachable */ + } + + m_enum_value = value; + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + try { + set_as_ulong(in.read_ulong()); + } + catch (InvalidValue iv) { + throw new MARSHAL(iv.toString()); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_ulong(m_enum_value); + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + if (dyn_any instanceof org.omg.DynamicAny.DynEnum) + m_enum_value = + ((org.omg.DynamicAny.DynEnum) dyn_any).get_as_ulong(); + else + // invalid error + throw new TypeMismatch(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + _write(output); + + // new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof org.omg.DynamicAny.DynEnum) + return (m_enum_value + == ((org.omg.DynamicAny.DynEnum) dyn_any).get_as_ulong()); + else + // invalid error + throw new BAD_PARAM("DynAny does not implements DynEnum when" + + " its type is enum"); + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynEnumImpl new_dyn = new DynEnumImpl(m_factory, m_orb); + new_dyn.m_enum_value = m_enum_value; + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + + return new_dyn; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynEnum:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynExceptImpl.java b/source/es/tid/TIDorbj/dynAny/DynExceptImpl.java new file mode 100644 index 0000000..e0d0fb4 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynExceptImpl.java @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.TypeCode; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStruct implementation for exceptions. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynExceptImpl extends DynStructImpl +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + protected boolean validateName() + { + try { + return m_next_value.read_string().equals(m_base_type.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + throw new org.omg.CORBA.BAD_TYPECODE(); + } + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_value (for DynValueImpl that + * extends DynStructImpl) + * + * @param type + * the TypeCode value. + */ + + protected DynExceptImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.from_any(value); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + super._read(is); + if (!validateName()) { + throw new org.omg.CORBA.MARSHAL("Unexpected exception id in any"); + } + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + try { + os.write_string(m_base_type.id()); + } + catch (org.omg.CORBA.TypeCodePackage.BadKind bk) { + throw new org.omg.CORBA.BAD_TYPECODE(); + } + + super._write(os); + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynExceptImpl new_dyn = new DynExceptImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + if (new_dyn.m_next_value != null) + new_dyn.m_next_value.skipString(); + + return new_dyn; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynFixedImpl.java b/source/es/tid/TIDorbj/dynAny/DynFixedImpl.java new file mode 100644 index 0000000..707f86b --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynFixedImpl.java @@ -0,0 +1,298 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import java.math.BigDecimal; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.portable.InputStream; +import org.omg.DynamicAny.DynFixed; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.util.FixedHolder; + +/** + * DynFixed implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynFixedImpl extends DynSingleton + implements org.omg.DynamicAny.DynFixed, org.omg.CORBA.portable.Streamable +{ + + BigDecimal fixed_value; + + private DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + fixed_value = new BigDecimal(0.0D); + } + + /** + * Constructor. Gets an any object for reading its value. + * + * @param any + * the any value. + */ + + protected DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + InputStream in = any.create_input_stream(); + FixedHolder holder = new FixedHolder(m_base_type); + holder._read(in); + + fixed_value = holder.value; + } + + protected DynFixedImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + + try { + + fixed_value = BigDecimal.valueOf(0, m_base_type.fixed_scale()); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + } + + // DynFixed operations + + public String get_value() + { + + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return fixed_value.toString(); + } + + public boolean set_value(java.lang.String val) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + if (val == null) + throw new BAD_PARAM("null string value"); + + BigDecimal value = new BigDecimal(val); + try { + if (value.scale() != m_base_type.fixed_scale()) + throw new InvalidValue("Bad fixed scale"); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + fixed_value = value; + + return true; + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + FixedHolder holder = new FixedHolder(m_base_type); + holder._read(in); + + fixed_value = holder.value; + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + out.write_fixed(fixed_value); + } + + public org.omg.CORBA.TypeCode type() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + return m_dyn_type; + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new org.omg.DynamicAny.DynAnyPackage.TypeMismatch(); + + try { + set_value(((DynFixed) dyn_any).get_value()); + } + catch (InvalidValue iv) { + throw new BAD_PARAM("Invalid value"); + } + catch (ClassCastException cce) { + throw new BAD_PARAM("Not a DynFixed value"); + } + + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + _write(output); + //new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof DynFixed) { + return fixed_value.equals( + new BigDecimal(new String(((DynFixed) dyn_any).get_value()))); + } else { // invalid error + throw new BAD_PARAM("dyn_any value does not instantiate DynFixed!" + + " but its type is fixed;"); + } + } + + protected void destroyNow() + { + super.destroyNow(); + fixed_value = null; + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + DynFixedImpl new_dyn = new DynFixedImpl(m_factory, m_orb); + new_dyn.fixed_value = fixed_value; + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + + return new_dyn; + } + + // OBJECT methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynFixed:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynSequenceImpl.java b/source/es/tid/TIDorbj/dynAny/DynSequenceImpl.java new file mode 100644 index 0000000..d767c20 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynSequenceImpl.java @@ -0,0 +1,682 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; + +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.cdr.CDRInputStream; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.TypeCodeMarshaler; + +/** + * DynSequence implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynSequenceImpl extends DynComposite + implements org.omg.DynamicAny.DynSequence +{ + + boolean m_bounded; + + int m_bound; + + /** + * Empty Constructor for generate copies. + */ + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets a TypeCode to create a new value. Warning: It assumes + * that the TypeCode is tk_sequence. + * + * @param any + * the any value. + */ + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_bound = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + m_bounded = (m_bound != 0); + m_component_count = 0; + } + + protected DynSequenceImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + try { + m_bound = real_type.length(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + m_bounded = (m_bound != 0); + + extract_length(); + } + + protected void extract_length() + { + m_component_count = m_next_value.read_ulong(); + + if(m_component_count > 0) { + m_current_index = 0; + } + + m_next_value.fixStarting(); + if ((m_bound != 0) && (m_component_count > m_bound)) + throw new MARSHAL("Invalid bounded sequence length"); + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynSequenceImpl new_dyn = new DynSequenceImpl(m_factory, m_orb, + m_dyn_type, m_base_type); + + copyTo(new_dyn); + + new_dyn.m_bound = m_bound; + + new_dyn.m_bounded = m_bounded; + + return new_dyn; + } + + // DynSequence Operations + + public int get_length() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return component_count(); + } + + public void set_length(int len) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (len < 0) + throw new InvalidValue("Invalid Sequence length: " + len); + + if (len == m_component_count) + return; + + if (len == 0) { + reset(); + } + + if (m_bounded && (len > m_bound)) { + throw new InvalidValue("Invalid Sequence length (" + len + + "), bound is (" + m_bound + ")"); + } + + m_component_count = len; + + int actual_components = m_components.size(); + + if (len < actual_components) { //destroy excedent + m_complete_value = null; + m_next_value = null; + for (int i = actual_components - 1; i >= len; i--) { + ((DynAny) (m_components.elementAt(i))).destroy(); + m_components.removeElementAt(i); + } + } + } + + public org.omg.CORBA.Any[] get_elements() + { + return super.get_elements(); + } + + public void set_elements(org.omg.CORBA.Any[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + set_length(value.length); + + super.set_elements(value); + } + + public void set_elements_as_dyn_any(org.omg.DynamicAny.DynAny[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + set_length(value.length); + + super.set_elements_as_dyn_any(value); + } + + public org.omg.DynamicAny.DynAny[] get_elements_as_dyn_any() + { + return super.get_elements_as_dyn_any(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + super.from_any(value); + + extract_length(); + } + + public void _read(org.omg.CORBA.portable.InputStream is) + { + super._read(is); + + extract_length(); + } + + public void _write(org.omg.CORBA.portable.OutputStream os) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST(); + + if (os == null) + throw new BAD_PARAM("Null OutputStream reference"); + + if (m_complete_value != null) {// value marshaled + CDRInputStream value_copy = m_complete_value.copy(); + value_copy.rewind(); + TypeCodeMarshaler.remarshalValue(m_base_type, value_copy, os); + } else { // value in the dynAny structure + + os.write_long(m_component_count); + + super._write(os); + } + } + + protected TypeCode getComponentType(int position) + { + + try { + return m_base_type.content_type(); + } + catch (BadKind bk) { + /* unreachable */ + throw new org.omg.CORBA.BAD_TYPECODE(); + } + + } + + public void insert_boolean_seq(boolean[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + set_length(value.length); + insert_boolean_members(value); + + } else { + set_length(value.length); + super.insert_boolean_seq(value); + } + } + + public void insert_octet_seq(byte[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + set_length(value.length); + insert_octet_members(value); + } else { + set_length(value.length); + super.insert_octet_seq(value); + } + } + + public void insert_char_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + set_length(value.length); + insert_char_members(value); + } else { + set_length(value.length); + super.insert_char_seq(value); + } + } + + public void insert_short_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + set_length(value.length); + insert_short_members(value); + } else { + set_length(value.length); + super.insert_short_seq(value); + } + } + + public void insert_ushort_seq(short[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + set_length(value.length); + insert_ushort_members(value); + } else { + set_length(value.length); + super.insert_ushort_seq(value); + } + } + + public void insert_long_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + set_length(value.length); + insert_long_members(value); + } else { + set_length(value.length); + super.insert_long_seq(value); + } + } + + public void insert_ulong_seq(int[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + set_length(value.length); + insert_ulong_members(value); + } else { + set_length(value.length); + super.insert_ulong_seq(value); + } + } + + public void insert_float_seq(float[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + set_length(value.length); + insert_float_members(value); + } else { + set_length(value.length); + super.insert_float_seq(value); + } + } + + public void insert_double_seq(double[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + set_length(value.length); + insert_double_members(value); + } else { + set_length(value.length); + super.insert_double_seq(value); + } + } + + public void insert_longlong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + set_length(value.length); + insert_longlong_members(value); + } else { + set_length(value.length); + super.insert_longlong_seq(value); + } + } + + public void insert_ulonglong_seq(long[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulonglong)) { + set_length(value.length); + insert_ulonglong_members(value); + } else { + set_length(value.length); + super.insert_ulonglong_seq(value); + } + } + + public void insert_wchar_seq(char[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value == null) + throw new BAD_PARAM("null array reference"); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + set_length(value.length); + insert_wchar_members(value); + } else { + set_length(value.length); + super.insert_wchar_seq(value); + } + } + + public boolean[] get_boolean_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_boolean)) { + return super.get_boolean_members(); + } else { + return super.get_boolean_seq(); + } + } + + public byte[] get_octet_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_octet)) { + return super.get_octet_members(); + } else { + return super.get_octet_seq(); + } + } + + public char[] get_char_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_char)) { + return super.get_char_members(); + } else { + return super.get_char_seq(); + } + } + + public short[] get_short_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_short)) { + return super.get_short_members(); + } else { + return super.get_short_seq(); + } + } + + public short[] get_ushort_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ushort)) { + return super.get_ushort_members(); + } else { + return super.get_ushort_seq(); + } + } + + public int[] get_long_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_long)) { + return super.get_long_members(); + } else { + return super.get_long_seq(); + } + } + + public int[] get_ulong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_ulong)) { + return super.get_ulong_members(); + } else { + return super.get_ulong_seq(); + } + } + + public float[] get_float_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_float)) { + return super.get_float_members(); + } else { + return super.get_float_seq(); + } + } + + public double[] get_double_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_double)) { + return super.get_double_members(); + } else { + return super.get_double_seq(); + } + } + + public long[] get_longlong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_longlong)) { + return super.get_longlong_members(); + } else { + return super.get_longlong_seq(); + } + } + + public long[] get_ulonglong_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public char[] get_wchar_seq() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (getComponentType(0).equivalent(TypeCodeFactory.tc_wchar)) { + return super.get_wchar_members(); + } else { + return super.get_wchar_seq(); + } + } + + // Object methods + + protected final static String[] __ids = + { "IDL:omg.org/DynamicAny/DynAny:1.0", }; + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier + .equals("IDL:omg.org/DynamicAny/DynSequence:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynSingleton.java b/source/es/tid/TIDorbj/dynAny/DynSingleton.java new file mode 100644 index 0000000..755d88a --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynSingleton.java @@ -0,0 +1,418 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * Abstract clase that only throws TypeMismatch in insert/get operations. It is + * the base clase for DynEnum or DynFixed + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +abstract class DynSingleton extends DynAnyBase +{ + + protected DynSingleton(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + protected DynSingleton(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public void insert_abstract(java.lang.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return false; + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (byte) 0; + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (char) 0; + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (short) 0; + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return (short) 0; + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0; + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0; + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0.0F; + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0.0D; + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return ""; + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0L; + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return 0L; + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return '0'; + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return ""; + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public java.lang.Object get_abstract() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + typeMismatch(); + return null; + } + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return -1; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + return true; + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + throw new TypeMismatch("DynAny without components"); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynStructBase.java b/source/es/tid/TIDorbj/dynAny/DynStructBase.java new file mode 100644 index 0000000..fdd569e --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynStructBase.java @@ -0,0 +1,335 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.NameDynAnyPair; +import org.omg.DynamicAny.NameValuePair; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStructBase implementation. Base for Struct, Exception and ValueType. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public abstract class DynStructBase extends DynComposite +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_value (for DynValueImpl that + * extends DynStructBase) + * + * @param type + * the TypeCode value. + */ + + protected DynStructBase(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public String current_member_name() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("No member (current = -1)"); + + // at this point alwais curremt_member is valid + try { + return m_base_type.member_name(m_current_index); + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + } + + public org.omg.CORBA.TCKind current_member_kind() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("No member (current = -1)"); + + try { + return m_base_type.member_type(m_current_index).kind(); + } + catch (BadKind bk) { + /* unreachable */ + throw new TypeMismatch(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new TypeMismatch(bd.toString()); + } + + } + + public org.omg.DynamicAny.NameValuePair[] get_members() + { + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + + Any[] any_members = super.get_elements(); + + NameValuePair[] members = new NameValuePair[m_component_count]; + + for (int i = 0; i < m_component_count; i++) { + + members[i] = new NameValuePair(m_base_type.member_name(i), + any_members[i]); + } + + return members; + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } + + public void set_members(org.omg.DynamicAny.NameValuePair[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + try { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + reset(); + + if (value.length != m_component_count) + throw new TypeMismatch("Invalid number of members: " + + m_component_count + " expected, not " + + value.length); + + Any[] members_values = new Any[m_component_count]; + + for (int i = 0; i < m_component_count; i++) { + members_values[i] = value[i].value; + if (!m_base_type.member_name(i).equals(value[i].id)) + throw new InvalidValue("Invalid member name, " + + m_base_type.member_name(i) + + "expected, not " + value[i].id); + } + + set_elements(members_values); + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } + + public org.omg.DynamicAny.NameDynAnyPair[] get_members_as_dyn_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + + DynAny[] dyns = super.get_elements_as_dyn_any(); + + NameDynAnyPair[] members = new NameDynAnyPair[m_component_count]; + + for (int i = 0; i < m_component_count; i++) + members[i] = new NameDynAnyPair(m_base_type.member_name(i), + dyns[i]); + + return members; + + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + } + + public void + set_members_as_dyn_any(org.omg.DynamicAny.NameDynAnyPair[] value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (value.length != m_component_count) + throw new TypeMismatch("Invalid number of members: " + + m_component_count + " expected, not " + + value.length); + + DynAny[] members_values = new DynAny[m_component_count]; + + try { + for (int i = 0; i < m_component_count; i++) { + members_values[i] = value[i].value; + if (!m_base_type.member_name(i).equals(value[i].id)) + throw new InvalidValue("Invalid member name, " + + m_base_type.member_name(i) + + "expected, not " + value[i].id); + } + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + set_elements_as_dyn_any(members_values); + } + + protected TypeCode getComponentType(int position) + { + try { + return m_base_type.member_type(position); + } + catch (BadKind bk) { + /* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + /* unreachable */ + throw new INTERNAL(bd.toString()); + } + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynStructImpl.java b/source/es/tid/TIDorbj/dynAny/DynStructImpl.java new file mode 100644 index 0000000..0c32aa5 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynStructImpl.java @@ -0,0 +1,157 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynStruct implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynStructImpl extends DynStructBase + implements org.omg.DynamicAny.DynStruct +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_struct or tk_exception + * + * @param type + * the TypeCode value. + */ + + protected DynStructImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynStructImpl new_dyn = new DynStructImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynStruct:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynUnionImpl.java b/source/es/tid/TIDorbj/dynAny/DynUnionImpl.java new file mode 100644 index 0000000..9c5b176 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynUnionImpl.java @@ -0,0 +1,1566 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 19 $ +* Date: $Date: 2006-06-28 10:17:01 +0200 (Wed, 28 Jun 2006) $ +* Last modified by: $Author: iredondo $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_OPERATION; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.CompletionStatus; +import org.omg.CORBA.INTERNAL; +import org.omg.CORBA.MARSHAL; +import org.omg.CORBA.OBJECT_NOT_EXIST; +import org.omg.CORBA.TCKind; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; +import org.omg.CORBA.TypeCodePackage.Bounds; +import org.omg.CORBA.portable.InputStream; +import org.omg.CORBA.portable.Streamable; +import org.omg.DynamicAny.DynAny; +import org.omg.DynamicAny.DynUnion; +import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode; +import org.omg.DynamicAny.DynAnyPackage.InvalidValue; +import org.omg.DynamicAny.DynAnyPackage.TypeMismatch; + +import es.tid.TIDorbj.core.AnyImpl; +import es.tid.TIDorbj.core.TIDORB; +import es.tid.TIDorbj.core.typecode.EnumTypeCode; +import es.tid.TIDorbj.core.typecode.TypeCodeFactory; +import es.tid.TIDorbj.core.typecode.UnionTypeCode; +import es.tid.TIDorbj.core.util.EnumHolder; + +/** + * The DynUnion interface represents a DynAny + * object that is associated with an IDL union. Union values can be traversed + * using the operations defined in DynAny. The first component + * in the union corresponds to the discriminator; the second corresponds to the + * actual value of the union. Calling the method next() twice + * allows you to access both components. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynUnionImpl extends DynAnyBase + implements org.omg.DynamicAny.DynUnion +{ + /** + * Active member. + */ + DynAnyBase m_active_member; + + /** + * Active discriminator. + */ + DynAnyBase m_dyn_discriminator; + + /** + * Member index in the union TypeCode. + */ + int m_active_member_index; + + /** + * Current Component. + */ + int m_current_index; + + /** + * Component Count. + */ + int m_component_count; + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + m_current_index = -1; + m_component_count = 1; + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an struct TypeCode. + * + * @param any + * the any value. + */ + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any.type(), real_type); + + m_component_count = 2; + + InputStream in = any.create_input_stream(); + + _read(in); + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. + * + * @param type + * the UnionTypeCode value. + */ + + protected DynUnionImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + + try { + m_active_member_index = m_base_type.default_index(); + if (m_active_member_index > -1) + m_component_count = 2; + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + DynUnionImpl new_dyn = new DynUnionImpl(m_factory, m_orb); + new_dyn.m_dyn_type = m_dyn_type; + new_dyn.m_base_type = m_base_type; + new_dyn.m_active_member_index = m_active_member_index; + new_dyn.m_component_count = m_component_count; + + if (m_component_count == 2) { + if (m_active_member != null) { + new_dyn.m_active_member = (DynAnyBase) m_active_member.copy(); + } + if (m_dyn_discriminator != null) { + new_dyn.m_dyn_discriminator = + (DynAnyBase) m_dyn_discriminator.copy(); + } + } + + return new_dyn; + } + + // DynUnion operations + public org.omg.DynamicAny.DynAny get_discriminator() + // CORBA 2.6: throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + // throw new InvalidValue("No active member."); + throw new BAD_OPERATION("No active member."); + + if (m_dyn_discriminator == null) { // default discriminator search + + Any discriminator = m_orb.create_any(); + int i = 0; + do { // search a value that will be not at the case labels + setDiscriminatorValue(discriminator, ++i); + } while (UnionTypeCode.searchMemberIndex(m_base_type, discriminator) + != m_active_member_index); + + try { + m_dyn_discriminator = (DynAnyBase) + m_factory.create_dyn_any(discriminator); + } + catch (InconsistentTypeCode itc) {/* unreachable */ + return null; + } + + } + + return m_dyn_discriminator; + } + + public void set_discriminator(org.omg.DynamicAny.DynAny d) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + int index = UnionTypeCode.searchMemberIndex(m_base_type, d.to_any()); + + if (index < 0) + throw new TypeMismatch("DynUnion: Invalid label value " + index); + + setIndex(index, d); + } + + protected void setIndex(int index, DynAny discriminator) + { + if (m_active_member_index == index) { + if ((m_dyn_discriminator == null) && (discriminator != null)) + m_dyn_discriminator = (DynAnyBase) discriminator.copy(); + return; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + + if (discriminator != null) + m_dyn_discriminator = (DynAnyBase) discriminator.copy(); + + m_current_index = 0; + m_component_count = 2; + m_active_member_index = index; + + try { + if ((m_active_member != null) + && (!m_active_member.type() + .equivalent(m_base_type.member_type(m_active_member_index)))) { + m_active_member.destroy(); + m_active_member = null; + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + } + + public void set_to_default_member() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + // set member idex to defalut index + + int index = m_base_type.default_index(); + if (index < 0) + throw new TypeMismatch("Union without default case or all " + + " posible discriminator values used."); + + setIndex(index, null); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + } + + public void set_to_no_active_member() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + if (m_base_type.default_index() > -1) + throw new TypeMismatch("Union has default case"); + + // are all the discriminator values uses + + if (allCasesUsed()) + throw new + TypeMismatch("All posible discriminator cases used in union."); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + + if (m_active_member != null) { + m_active_member.destroy(); + m_active_member = null; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + + m_active_member_index = -1; + m_component_count = 1; + } + + public boolean has_no_active_member() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + return m_component_count < 2; + } + + public org.omg.CORBA.TCKind discriminator_kind() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + try { + return m_base_type.discriminator_type().kind(); + } + catch (BadKind bk) {/* unreachable */ + throw new BAD_TYPECODE(bk.toString()); + } + + } + + public org.omg.DynamicAny.DynAny member() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + if (m_active_member == null) { + try { + m_active_member = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + m_base_type.member_type(m_active_member_index)); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode bk) { /* unreachable */} + } + + return m_active_member; + } + + public String member_name() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + try { + return m_base_type.member_name(m_active_member_index); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + } + + public void member_name(String arg) + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_component_count == 1) + throw new InvalidValue("No active member"); + + try { + + int member_count = m_base_type.member_count(); + + for (int i = 0; i < member_count; i++) { + if (arg.equals(m_base_type.member_name(i))) { + DynAnyBase dyn_disc = (DynAnyBase) + m_factory.create_dyn_any(m_base_type.member_label(i)); + setIndex(i, dyn_disc); + + return; + } + } + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode itc) {/* unreachable */ + return; + } + + throw new InvalidValue("Union has not any member named: " + arg); + } + + public org.omg.CORBA.TCKind member_kind() + throws org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_active_member_index < 1) + throw new InvalidValue("No member selected."); + + try { + return m_base_type.member_type(m_active_member_index).kind(); + } + catch (BadKind bk) { /* unreachable */ + return null; + } + catch (Bounds bd) { /* unreachable */ + return null; + } + } + + public org.omg.DynamicAny.DynAny current_component() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + return null; + + try { + switch (m_current_index) + { + case 0: + return get_discriminator(); + case 1: + return member(); + } + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + + throw new INTERNAL("Current out of range"); + } + + // Streamable operations + + public void _read(org.omg.CORBA.portable.InputStream in) + { + Any discriminator_any = m_orb.create_any(); + + try { + discriminator_any.read_value(in, m_base_type.discriminator_type()); + + m_active_member_index = + UnionTypeCode.searchMemberIndex(m_base_type, discriminator_any); + + if (m_active_member_index < 0) + throw new BAD_PARAM("Invalid Union label: " + + m_active_member_index); + + m_dyn_discriminator = (DynAnyBase) + m_factory.create_dyn_any(discriminator_any); + + m_dyn_discriminator.setUserDestroy(false); + + m_active_member = (DynAnyBase) + m_factory.create_dyn_any_from_type_code( + m_base_type.member_type(m_active_member_index)); + + m_active_member.setUserDestroy(false); + + ((Streamable) m_active_member)._read(in); + + } + catch (BadKind bk) { + throw new BAD_TYPECODE(bk.toString()); + } + catch (Bounds bd) { + throw new INTERNAL(bd.toString()); + } + catch (InconsistentTypeCode bk) { /* unreachable */ + } + } + + public void _write(org.omg.CORBA.portable.OutputStream out) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_component_count == 1) + throw new BAD_OPERATION("Uncompleted union."); + + try { + ((Streamable) get_discriminator())._write(out); + ((Streamable) member())._write(out); + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + } + + // DynAny Operations + + public void assign(org.omg.DynamicAny.DynAny dyn_any) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + throw new TypeMismatch(); + + if (dyn_any instanceof DynUnion) { + try { + DynUnion dyn_union = (DynUnion) dyn_any; + if (dyn_union.has_no_active_member()) { + set_to_no_active_member(); + } else { + set_discriminator(dyn_union.get_discriminator()); + member().assign(dyn_union.member()); + } + } + catch (InvalidValue iv) {} + } else + // invalid error + throw new TypeMismatch(); + } + + public void from_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (value == null) + throw new BAD_PARAM("Null Any reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(value.type())) + throw new TypeMismatch(); + + try { + _read(value.create_input_stream()); + } + catch (MARSHAL m) { + throw new InvalidValue(); + } + } + + public org.omg.CORBA.Any to_any() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + AnyImpl new_value = (AnyImpl) m_orb.create_any(); + new_value.type(type()); + org.omg.CORBA.portable.OutputStream output; + output = new_value.create_output_stream(); + + _write(output); + + //new_value.insert_Streamable(this); + + return new_value; + } + + public boolean equal(org.omg.DynamicAny.DynAny dyn_any) + { + if (dyn_any == null) + throw new BAD_PARAM("Null DynAny reference", 0, + CompletionStatus.COMPLETED_NO); + + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (!m_base_type.equivalent(dyn_any.type())) + return false; + + if (dyn_any instanceof DynUnion) { + try { + DynUnion dyn_union = (DynUnion) dyn_any; + + if (!get_discriminator().equal(dyn_union.get_discriminator())) + return false; + + return member().equal(dyn_union.member()); + } + catch (InvalidValue iv) { + throw new INTERNAL(iv.toString()); + } + + } else + // invalid error + throw new BAD_PARAM("dyn_any value does not instantiate DynUnion" + + " but its type is union"); + } + + protected void destroyNow() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed", 0, + CompletionStatus.COMPLETED_NO); + + if (m_active_member != null) { + m_active_member.destroy(); + m_active_member = null; + } + + if (m_dyn_discriminator != null) { + m_dyn_discriminator.destroy(); + m_dyn_discriminator = null; + } + } + + protected boolean allCasesUsed() + throws TypeMismatch + { + TypeCode disc_type = null; + int member_count; + try { + disc_type = m_base_type.discriminator_type(); + + while (disc_type.kind().value() == TCKind._tk_alias) + disc_type = disc_type.content_type(); + + member_count = m_base_type.member_count(); + + switch (disc_type.kind().value()) + { + case TCKind._tk_short: + case TCKind._tk_long: + case TCKind._tk_longlong: + case TCKind._tk_ushort: + case TCKind._tk_ulong: + case TCKind._tk_ulonglong: + case TCKind._tk_wchar: + case TCKind._tk_char: + return false; + case TCKind._tk_boolean: + return member_count <= 2; + case TCKind._tk_enum: + return disc_type.member_count() <= member_count; + } + } + catch (BadKind bk) { + throw new INTERNAL(bk.toString()); + } + + throw new TypeMismatch("Invalid discriminator Value"); + } + + protected void setDiscriminatorValue(org.omg.CORBA.Any discriminator, + int value) + { + switch (discriminator.type().kind().value()) + { + case TCKind._tk_short: + discriminator.insert_short((short) value); + break; + case TCKind._tk_long: + discriminator.insert_long(value); + break; + case TCKind._tk_longlong: + discriminator.insert_longlong(value); + break; + case TCKind._tk_ushort: + discriminator.insert_ushort((short) value); + break; + case TCKind._tk_ulong: + discriminator.insert_ulong(value); + break; + case TCKind._tk_ulonglong: + discriminator.insert_ulonglong(value); + break; + case TCKind._tk_boolean: + discriminator.insert_boolean((value == 0) ? false : true); + break; + case TCKind._tk_char: + discriminator.insert_char((char) value); + break; + case TCKind._tk_wchar: + discriminator.insert_wchar((char) value); + break; + case TCKind._tk_enum: + try { + discriminator.insert_Streamable( + new EnumHolder((EnumTypeCode) + m_base_type.discriminator_type(), + value)); + } + catch (BadKind bk) {} + break; + + } + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynUnion:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + public void insert_boolean(boolean value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_boolean(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_boolean(value); + } + + public void insert_char(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_char(value); + + set_discriminator(new_disc); + + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_char(value); + } + + public void insert_wchar(char value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_char(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_wchar(value); + } + + public void insert_octet(byte value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + else + current_component().insert_octet(value); + } + + public void insert_short(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_short(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_short(value); + } + + public void insert_ushort(short value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_ushort(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ushort(value); + } + + public void insert_long(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_long(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_long(value); + } + + public void insert_ulong(int value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component() .type()); + + new_disc.insert_ulong(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ulong(value); + } + + public void insert_longlong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_longlong(value); + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_longlong(value); + } + + public void insert_ulonglong(long value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type() + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + if (m_current_index == 0) { + try { + DynAny new_disc = + m_factory.create_dyn_any_from_type_code( + current_component().type()); + + new_disc.insert_ulonglong(value); + + set_discriminator(new_disc); + } + catch (InconsistentTypeCode itc) { + throw new INTERNAL(itc.toString()); + } + } else + current_component().insert_ulonglong(value); + } + + public void insert_float(float value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + if (m_current_index == 0) + throw new TypeMismatch(); + else + current_component().insert_float(value); + } + + public void insert_double(double value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + else + current_component().insert_double(value); + } + + public void insert_string(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + if (m_current_index == 0) + throw new TypeMismatch(); + if (!current_component().type().equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + else + current_component().insert_string(value); + } + + public void insert_wstring(String value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + else + current_component().insert_wstring(value); + } + + public void insert_any(org.omg.CORBA.Any value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + else + current_component().insert_any(value); + } + + public void insert_dyn_any(org.omg.DynamicAny.DynAny value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + else + current_component().insert_dyn_any(value); + } + + public void insert_typecode(org.omg.CORBA.TypeCode value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + else + current_component().insert_typecode(value); + } + + public void insert_val(java.io.Serializable value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + current_component().insert_val(value); + } + + public void insert_reference(org.omg.CORBA.Object value) + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (m_current_index == 0) + throw new TypeMismatch(); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + else + current_component().insert_reference(value); + } + + public boolean get_boolean() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_boolean)) + throw new TypeMismatch(); + + return current_component().get_boolean(); + } + + public char get_char() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_char)) + throw new TypeMismatch(); + + return current_component().get_char(); + } + + public char get_wchar() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wchar)) + throw new TypeMismatch(); + + return current_component().get_wchar(); + } + + public byte get_octet() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_octet)) + throw new TypeMismatch(); + + return current_component().get_octet(); + } + + public short get_short() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_short)) + throw new TypeMismatch(); + + return current_component().get_short(); + } + + public short get_ushort() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ushort)) + throw new TypeMismatch(); + + return current_component().get_ushort(); + } + + public int get_long() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_long)) + throw new TypeMismatch(); + + return current_component().get_long(); + } + + public int get_ulong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_ulong)) + throw new TypeMismatch(); + + return current_component().get_ulong(); + } + + public long get_longlong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_longlong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public long get_ulonglong() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type() + .equivalent(TypeCodeFactory.tc_ulonglong)) + throw new TypeMismatch(); + + return current_component().get_ulonglong(); + } + + public float get_float() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_float)) + throw new TypeMismatch(); + + return current_component().get_float(); + } + + public double get_double() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_double)) + throw new TypeMismatch(); + + return current_component().get_double(); + } + + public String get_string() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_string)) + throw new TypeMismatch(); + + return current_component().get_string(); + } + + public String get_wstring() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_wstring)) + throw new TypeMismatch(); + + return current_component().get_wstring(); + } + + public org.omg.CORBA.Any get_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_any(); + } + + public org.omg.DynamicAny.DynAny get_dyn_any() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_any)) + throw new TypeMismatch(); + + return current_component().get_dyn_any(); + } + + public org.omg.CORBA.TypeCode get_typecode() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_TypeCode)) + throw new TypeMismatch(); + + return current_component().get_typecode(); + } + + public java.io.Serializable get_val() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + return current_component().get_val(); + } + + public org.omg.CORBA.Object get_reference() + throws org.omg.DynamicAny.DynAnyPackage.TypeMismatch, + org.omg.DynamicAny.DynAnyPackage.InvalidValue + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed."); + + if (m_current_index == -1) + throw new InvalidValue("Current position is -1"); + + if (!current_component().type().equivalent(TypeCodeFactory.tc_objref)) + throw new TypeMismatch(); + + return current_component().get_reference(); + } + + // DynAny without components methods + + public int component_count() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + +// return 0; + return m_component_count; + } + + public boolean seek(int index) + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index == -1) + return false; + + if (index < component_count()) { + m_current_index = index; + return true; + } else + return false; + } + + public void rewind() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index != -1) + m_current_index = 0; + } + + public boolean next() + { + if (m_destroyed) + throw new OBJECT_NOT_EXIST("DynAny destroyed.", 0, + CompletionStatus.COMPLETED_NO); + + if (m_current_index == -1) + return false; + + if (m_current_index < component_count() - 1) { + m_current_index++; + return true; + } else + return false; + } + +} \ No newline at end of file diff --git a/source/es/tid/TIDorbj/dynAny/DynValueImpl.java b/source/es/tid/TIDorbj/dynAny/DynValueImpl.java new file mode 100644 index 0000000..897f240 --- /dev/null +++ b/source/es/tid/TIDorbj/dynAny/DynValueImpl.java @@ -0,0 +1,175 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.dynAny; + +import org.omg.CORBA.Any; +import org.omg.CORBA.BAD_PARAM; +import org.omg.CORBA.BAD_TYPECODE; +import org.omg.CORBA.TypeCode; +import org.omg.CORBA.TypeCodePackage.BadKind; + +import es.tid.TIDorbj.core.TIDORB; + +/** + * DynValue implementation. + * + * @autor Juan A. Cáceres + * @version 1.0 + */ + +public class DynValueImpl extends DynStructBase + implements org.omg.DynamicAny.DynValue +{ + + /** + * Empty Constructor for generate copies. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb) + { + super(factory, orb); + } + + /** + * Constructor. Gets an any object for reading its value. It assumes that + * the any contains an value TypeCode. + * + * @param any + * the any value. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb, Any any, + TypeCode real_type) + { + super(factory, orb, any, real_type); + + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + /** + * Constructor. Gets a simple TypeCode to create a new value. Warning: It + * assumes that the TypeCode is tk_value + * + * @param type + * the TypeCode value. + */ + + protected DynValueImpl(DynAnyFactoryImpl factory, TIDORB orb, + TypeCode type, TypeCode real_type) + { + super(factory, orb, type, real_type); + try { + m_component_count = real_type.member_count(); + } + catch (BadKind bk) { + throw new BAD_TYPECODE(); + } + + if (m_component_count == 0) { + m_current_index = -1; + } else { + m_current_index = 0; + } + + } + + public org.omg.DynamicAny.DynAny copy() + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + DynValueImpl new_dyn = new DynValueImpl(m_factory, m_orb, m_dyn_type, + m_base_type); + + copyTo(new_dyn); + + return new_dyn; + } + + // Object methods + + public boolean _is_a(java.lang.String repositoryIdentifier) + { + if (m_destroyed) + throw new org.omg.CORBA.OBJECT_NOT_EXIST("DynAny destroyed."); + + if (repositoryIdentifier == null) + throw new BAD_PARAM("Null string reference"); + + if (repositoryIdentifier.equals("IDL:omg.org/DynamicAny/DynValue:1.0")) + return true; + + return super._is_a(repositoryIdentifier); + + } + + // DynValueCommon methods + + public boolean is_null() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_to_null() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + + public void set_to_value() + { + throw new org.omg.CORBA.NO_IMPLEMENT(); + } + +} \ No newline at end of file diff --git a/source/properties.xml b/source/properties.xml new file mode 100644 index 0000000..4b90010 --- /dev/null +++ b/source/properties.xml @@ -0,0 +1,51 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tools/.class/es/tid/TIDorbj/tools/PrintIOR.class b/tools/.class/es/tid/TIDorbj/tools/PrintIOR.class new file mode 100644 index 0000000000000000000000000000000000000000..b5435ea2f0bd4b479419ddf74b1cd5301d694869 GIT binary patch literal 3329 zcmcImTUQfT6#fn*Ofn84(O^-jfqF?G7_~|(c&Xr}Q34bYrPk6RnS{Y4lTHSd*4}Nc z_I|Oo_M){HdU+{buHY(bx%$+u)u(o?{)zqrA6%vT%uK>9*cW{{=gi(adw=^od+(D! z{{7`9fUWpZ#5Nofa9BhM-`hnv5E0RVP7z&rjDL0u=y9VLM_lL=aTML$_83?9^W||j zj^hadCqz`@Nf85FSBa8OnC5Y1P=x zQ0fo#F*w?^n8Hw*P>cax$!J;C(DbnZHO8>P-##pl%Aus3PK0_4T}>xi0t-b9ZMQbOTyXIGc5#nq%D;Uj!3 z;F5$-a9O~o5I@|m=gYoC2*zNSsvH*MCVTNqXy$;t_(dB)_p zs_ADq{u2zIJjDm-yIYY70%w@WtjcRzN8)isS7I~TZzYU#?!M!9SChBn9y&DRfHsnj z?LQq=G6vO7{!-{}!<_}GgzwQLVIOwz<-CL+Oi%NOH#9Ao4ViaOnNeZRaMo#-+#Hcr z?hLEvc`>igyg2S-d69Y~sogh((yFo+-e`4;dD^GM<&mUef)eApmdeMD_}h#9hAyeI zyS1fACloce!L~5Csl9r~GD?_wdxgJfCky7yCy8ipvF4{VX3^F&mNk?V4H9jHdemzH zqNGiZDG5bRQPjC@XNjqX4K1JMl9ZAfRP;8wX>vnTDNJQaQ0>BGsP~5hi>B5qClX4` zwxw|Ei&4fom}5wB3^_r4V8`mSW)njr@lwo#*|B_#g$`23+U68)@%El?Y>l^el{iax zY35kFV=!|(%rd`Yu=&O`=2P~3^(-tDQ)`V}2XRZcDiPmS7aZnuw{{U03MK@mrWj2H z0}3H$GD@0Ct+7}oEdXUtEONYtU-wLNT4ge$p4DB}3^BXQMb#E-SJU*AIipD}OM8V` z%jVP6tIJWYi6=+0L#U;PaT`7MfD4R28MHn`UzM~o+MV^2U=v&qHy*|gTRn(Udba65 z!W2sSCsEoy1xJ6wB%Be}!Rl|ItRvW%gOG!398$;65IswBkQ#C*|A{` zcJDnxyW%>$cOPx*y+d1-!^&~oRc_nv5!(B5sJ{E$((7yY$=_7BWmLD9{-eB66G6{vIs~V%hI*^UbAJwNt!`SIgKxH`mNZ^R4t1Uf=wvAiEl?G-dLV~&^c%C% z|0!PS=WwA=>2A-F5VYg77ul4;nU}yLj%>h0MMtPI3rzWre4et7zjw_J3 zWCKYi7>$RG{q?0=C*hAwAkG2U2 SJ8z?cz8%x3n60D1gZ}`qQz_&C literal 0 HcmV?d00001 diff --git a/tools/.cvsignore b/tools/.cvsignore new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/tools/.cvsignore @@ -0,0 +1 @@ +.class diff --git a/tools/.svn/all-wcprops b/tools/.svn/all-wcprops new file mode 100644 index 0000000..95fa1b3 --- /dev/null +++ b/tools/.svn/all-wcprops @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools +END +properties.xml +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/tools/properties.xml +END +.cvsignore +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/tools/.cvsignore +END +build.xml +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/tools/build.xml +END diff --git a/tools/.svn/dir-prop-base b/tools/.svn/dir-prop-base new file mode 100644 index 0000000..b15a857 --- /dev/null +++ b/tools/.svn/dir-prop-base @@ -0,0 +1,5 @@ +K 10 +svn:ignore +V 6 +.class +END diff --git a/tools/.svn/entries b/tools/.svn/entries new file mode 100644 index 0000000..62dac9a --- /dev/null +++ b/tools/.svn/entries @@ -0,0 +1,133 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/tools +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +es +dir + +properties.xml +file + + + + +2009-02-16T09:48:50.000000Z +0191474c64122736504cffa1f78466f1 +2007-11-08T13:09:57.221704Z +100 +avega +has-props + + + + + + + + + + + + + + + + + + + + +1679 + +.cvsignore +file + + + + +2009-02-16T09:48:50.000000Z +9139eabf1b8942aaa41f16fe329f2507 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7 + +build.xml +file + + + + +2009-02-16T09:48:50.000000Z +58d3513f585f1154765cb6ba85c9c1e3 +2008-02-25T10:57:48.454081Z +212 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2306 + diff --git a/tools/.svn/prop-base/.cvsignore.svn-base b/tools/.svn/prop-base/.cvsignore.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/tools/.svn/prop-base/.cvsignore.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/tools/.svn/prop-base/build.xml.svn-base b/tools/.svn/prop-base/build.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/tools/.svn/prop-base/build.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/tools/.svn/prop-base/properties.xml.svn-base b/tools/.svn/prop-base/properties.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/tools/.svn/prop-base/properties.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/tools/.svn/text-base/.cvsignore.svn-base b/tools/.svn/text-base/.cvsignore.svn-base new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/tools/.svn/text-base/.cvsignore.svn-base @@ -0,0 +1 @@ +.class diff --git a/tools/.svn/text-base/build.xml.svn-base b/tools/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..070982d --- /dev/null +++ b/tools/.svn/text-base/build.xml.svn-base @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/.svn/text-base/properties.xml.svn-base b/tools/.svn/text-base/properties.xml.svn-base new file mode 100644 index 0000000..0896dc9 --- /dev/null +++ b/tools/.svn/text-base/properties.xml.svn-base @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/tools/build.xml b/tools/build.xml new file mode 100644 index 0000000..f667d53 --- /dev/null +++ b/tools/build.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/es/.svn/all-wcprops b/tools/es/.svn/all-wcprops new file mode 100644 index 0000000..a6335c5 --- /dev/null +++ b/tools/es/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 56 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools/es +END diff --git a/tools/es/.svn/entries b/tools/es/.svn/entries new file mode 100644 index 0000000..d620600 --- /dev/null +++ b/tools/es/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/tools/es +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +tid +dir + diff --git a/tools/es/tid/.svn/all-wcprops b/tools/es/tid/.svn/all-wcprops new file mode 100644 index 0000000..80676c0 --- /dev/null +++ b/tools/es/tid/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools/es/tid +END diff --git a/tools/es/tid/.svn/entries b/tools/es/tid/.svn/entries new file mode 100644 index 0000000..3dd9905 --- /dev/null +++ b/tools/es/tid/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/tools/es/tid +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TIDorbj +dir + diff --git a/tools/es/tid/TIDorbj/.svn/all-wcprops b/tools/es/tid/TIDorbj/.svn/all-wcprops new file mode 100644 index 0000000..eeee056 --- /dev/null +++ b/tools/es/tid/TIDorbj/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools/es/tid/TIDorbj +END diff --git a/tools/es/tid/TIDorbj/.svn/entries b/tools/es/tid/TIDorbj/.svn/entries new file mode 100644 index 0000000..79f8161 --- /dev/null +++ b/tools/es/tid/TIDorbj/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/tools/es/tid/TIDorbj +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +tools +dir + diff --git a/tools/es/tid/TIDorbj/tools/.svn/all-wcprops b/tools/es/tid/TIDorbj/tools/.svn/all-wcprops new file mode 100644 index 0000000..d293448 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/all-wcprops @@ -0,0 +1,11 @@ +K 25 +svn:wc:ra_dav:version-url +V 74 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools/es/tid/TIDorbj/tools +END +PrintIOR.java +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/tools/es/tid/TIDorbj/tools/PrintIOR.java +END diff --git a/tools/es/tid/TIDorbj/tools/.svn/entries b/tools/es/tid/TIDorbj/tools/.svn/entries new file mode 100644 index 0000000..f2db3e2 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/entries @@ -0,0 +1,62 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/tools/es/tid/TIDorbj/tools +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +PrintIOR.java +file + + + + +2010-04-28T10:47:59.000000Z +2e7e2abdbf9154cc257c4a351e1853dd +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +7982 + diff --git a/tools/es/tid/TIDorbj/tools/.svn/prop-base/PrintIOR.java.svn-base b/tools/es/tid/TIDorbj/tools/.svn/prop-base/PrintIOR.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/prop-base/PrintIOR.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/tools/es/tid/TIDorbj/tools/.svn/prop-base/startClient.sh.svn-base b/tools/es/tid/TIDorbj/tools/.svn/prop-base/startClient.sh.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/prop-base/startClient.sh.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/tools/es/tid/TIDorbj/tools/.svn/prop-base/startServer.sh.svn-base b/tools/es/tid/TIDorbj/tools/.svn/prop-base/startServer.sh.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/prop-base/startServer.sh.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/Echo.idl.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/Echo.idl.svn-base new file mode 100644 index 0000000..c36c25c --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/Echo.idl.svn-base @@ -0,0 +1,7 @@ +module Echo{ + + interface Test{ + string echo (in string s); + oneway void shutdown(); + }; +}; diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoClient.java.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoClient.java.svn-base new file mode 100644 index 0000000..3c31387 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoClient.java.svn-base @@ -0,0 +1,41 @@ +import java.util.Properties; +import java.io.*; + +import Echo.TestHelper; +import Echo.Test; + + + +public class EchoClient { + public static void main(String args[]) + { + try { + // Create and initialize orb + org.omg.CORBA.ORB orb = + org.omg.CORBA.ORB.init(args, System.getProperties()); + + // Get object reference + org.omg.CORBA.Object obj = + // orb.string_to_object("corbaloc:iiop:1.2@dacha.hi.inet:1968/Test"); + // orb.string_to_object("corbaloc:iiop:1.2@fe80::221:70ff:fea2:63b4:1968/Test"); + orb.string_to_object("corbaloc:iiop:1.2@[::1]:1968/Test"); + //orb.string_to_object("corbaloc:iiop:1.2@127.0.0.1:1968/Test"); + //orb.string_to_object("corbaloc:iiop:1.2@10.95.28.47:1968/Test"); + Test refTest = TestHelper.narrow(obj); + + + String message = "Hola mundo"; + for (int i=0; i < 10; i++) { + String response = refTest.echo(message); + System.out.println("[client] response = " + response); + } + + System.exit(0); + } + catch (Exception e) { + System.err.println("Main: Unexpected exception " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoServer.java.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoServer.java.svn-base new file mode 100644 index 0000000..52e6a96 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/EchoServer.java.svn-base @@ -0,0 +1,107 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJTest + * Programming Language: Java + * + * File: $Source: EchoServer.java $ + * Version: $Revision: 1.0 $ + * Date: $Date: 10-ago-2006 $ + * Last modified by: $Author: irenka.redondo $ + * + * (C) Copyright 2004 Telefónica Investigación y Desarrollo + * S.A.Unipersonal (Telefónica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.Properties; + +import org.omg.CORBA.ORB; +import org.omg.PortableServer.POA; +import org.omg.PortableServer.POAHelper; + +public class EchoServer { + public static void main(String[] args) { + try { + // Create and initialize orb + org.omg.CORBA_2_5.ORB orb = + (org.omg.CORBA_2_5.ORB) ORB.init(args, System.getProperties()); + + // Get rootPOA reference and activate POAManager + POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); + rootPOA.the_POAManager().activate(); + + // Create servant + MyEchoTestImpl servant = new MyEchoTestImpl(orb); + + // Activate servant + byte[] servantId = rootPOA.activate_object(servant); + + // Get servant reference and write it to file + org.omg.CORBA.Object obj = rootPOA.id_to_reference(servantId); + String reference = orb.object_to_string(obj); + + String dbior = "Test.ior"; + File ior_fl = new File(dbior); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(ior_fl)); + bw.write(reference, 0, reference.length()); + bw.flush(); + bw.close(); + } catch (java.io.IOException e) { + System.err.println("Error writing file " + dbior); + System.exit(0); + } + + + orb.register_initial_reference("Test", obj); + + // Start serving requests + System.out.println("[Server] Running..."); + + orb.run(); + //Thread.sleep(35000); // sleep 30 seconds + + //Destroy orb + System.out.println("[Server] Destroying ORB..."); + orb.destroy(); + + System.exit(0); + + } catch (Exception e) { + System.err.println("Main: Unexpected exception " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/MyEchoTestImpl.java.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/MyEchoTestImpl.java.svn-base new file mode 100644 index 0000000..f135b02 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/MyEchoTestImpl.java.svn-base @@ -0,0 +1,64 @@ +/* + * MORFEO Project + * http://www.morfeo-project.org + * + * Component: TIDorbJTest + * Programming Language: Java + * + * File: $Source: MyEchoTestImpl.java $ + * Version: $Revision: 1.0 $ + * Date: $Date: 10-ago-2006 $ + * Last modified by: $Author: irenka.redondo $ + * + * (C) Copyright 2004 Telefónica Investigación y Desarrollo + * S.A.Unipersonal (Telefónica I+D) + * + * Info about members and contributors of the MORFEO project + * is available at: + * + * http://www.morfeo-project.org/TIDorbJ/CREDITS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * If you want to use this software an plan to distribute a + * proprietary application in any way, and you are not licensing and + * distributing your source code under GPL, you probably need to + * purchase a commercial license of the product. More info about + * licensing options is available at: + * + * http://www.morfeo-project.org/TIDorbJ/Licensing + */ + +import Echo.*; + +public class MyEchoTestImpl extends TestPOA { + + private org.omg.CORBA.ORB m_orb; + + public MyEchoTestImpl(org.omg.CORBA.ORB orb) { + this.m_orb = orb; + } + + public String echo(String s) { + return s; + } + + public void shutdown() { + System.err.println("[MyEchoTestImpl shutdown] called"); + m_orb.shutdown(true); + } + + +} diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/PrintIOR.java.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/PrintIOR.java.svn-base new file mode 100644 index 0000000..6235bcc --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/PrintIOR.java.svn-base @@ -0,0 +1,272 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.tools; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +import org.omg.IOP.TAG_INTERNET_IOP; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; + +public class PrintIOR +{ + + public static String get_repository_id(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + print_buffer.println(ior.getTypeId()); + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String get_giop_version(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getVersion().toString()); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String get_host(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getListenPoint().m_host); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + + public static String get_port(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getListenPoint().m_port); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + + public static String get_object_key(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getObjectKey().toString()); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String print(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + + if (size == 0) { + print_buffer.println("IOR: nil"); + } else { + print_buffer.println("IOR:"); + + print_buffer.println("Repository Id: " + ior.getTypeId()); + + print_buffer.println("(" + size + " Profiles)"); + + for (int i = 0; i < size; i++) + print_buffer.println(ior.getProfile(i).toString()); + } + + //System.out.flush(); + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static void main(String[] argv) + { + System.out.println("TIDorbJ printIOR version " + + es.tid.TIDorbj.core.TIDORB.st_version); + + if ((argv == null) || (argv.length != 1)) { + + System.out.println("Usage: printIOR [ior|file]"); + return; + } + + String ior_str = null; + + try { // try to read in a file + FileReader file = new FileReader(argv[0]); + BufferedReader reader = new BufferedReader(file); + + ior_str = reader.readLine(); + file.close(); + } + catch (java.io.FileNotFoundException ioe) { + // Argument is the IOR, not a file + } + catch (IOException ioe) { + ioe.printStackTrace(); + return; + } + + try { + String ior_text = null; + if (ior_str == null) + ior_text = es.tid.TIDorbj.tools.PrintIOR.print(argv[0]); + else + ior_text = es.tid.TIDorbj.tools.PrintIOR.print(ior_str); + + System.out.print(ior_text); + System.out.flush(); + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + } +} diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/build.xml.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..d9795a1 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/build.xml.svn-base @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/startClient.sh.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/startClient.sh.svn-base new file mode 100644 index 0000000..e2fb19a --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/startClient.sh.svn-base @@ -0,0 +1,63 @@ +#!/bin/sh +# +# MORFEO Project +# http://www.morfeo-project.org +# +# Component: TIDorbJ +# Programming Language: Java +# +# File: $Source: /cvsroot/tidorbj/TIDorbJTest/basic/echo/startClient.sh,v $ +# Version: $Revision: 1.0 $ +# Date: $Date: 2006/10/13 10:16:41 $ +# Last modified by: $Author: iredondo $ +# +# (C) Copyright 2004 Telefónica Investigación y Desarrollo +# S.A.Unipersonal (Telefónica I+D) +# +# Info about members and contributors of the MORFEO project +# is available at: +# +# http://www.morfeo-project.org/TIDIdlc/CREDITS +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# If you want to use this software an plan to distribute a +# proprietary application in any way, and you are not licensing and +# distributing your source code under GPL, you probably need to +# purchase a commercial license of the product. More info about +# licensing options is available at: +# +# http://www.morfeo-project.org/TIDIdlc/Licensing +# + +set +u + +if [ -z "$JAVA_HOME" ]; then + echo "Environment variable JAVA_HOME must be set" + exit 1 +fi + +if [ -z "$TIDORBJ_HOME" ]; then + echo "Environment variable TIDORBJ_HOME must be set" + exit 1 +fi + +$TIDORBJ_HOME/bin/tidorbj.sh \ + -Dorg.omg.CORBA.ORBClass=es.tid.TIDorbj.core.TIDORB \ + -Dorg.omg.CORBA.ORBSingletonClass=es.tid.TIDorbj.core.SingletonORB \ + EchoClient \ + es.tid.TIDorbj.trace.file client.log \ + es.tid.TIDorbj.trace.level 5 \ + es.tid.TIDorbj.iiop.ipv6 false diff --git a/tools/es/tid/TIDorbj/tools/.svn/text-base/startServer.sh.svn-base b/tools/es/tid/TIDorbj/tools/.svn/text-base/startServer.sh.svn-base new file mode 100644 index 0000000..c22c241 --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/.svn/text-base/startServer.sh.svn-base @@ -0,0 +1,70 @@ +#!/bin/sh +# +# MORFEO Project +# http://www.morfeo-project.org +# +# Component: TIDorbJ +# Programming Language: Java +# +# File: $Source: /cvsroot/tidorbj/TIDorbJTest/basic/echo/startServer.sh,v $ +# Version: $Revision: 1.0 $ +# Date: $Date: 2006/10/13 10:12:48 $ +# Last modified by: $Author: iredondo $ +# +# (C) Copyright 2004 Telefónica Investigación y Desarrollo +# S.A.Unipersonal (Telefónica I+D) +# +# Info about members and contributors of the MORFEO project +# is available at: +# +# http://www.morfeo-project.org/TIDIdlc/CREDITS +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# If you want to use this software an plan to distribute a +# proprietary application in any way, and you are not licensing and +# distributing your source code under GPL, you probably need to +# purchase a commercial license of the product. More info about +# licensing options is available at: +# +# http://www.morfeo-project.org/TIDIdlc/Licensing +# + +set +u + +if [ -z "$JAVA_HOME" ]; then + echo "Environment variable JAVA_HOME must be set" + exit 1 +fi + +if [ -z "$TIDORBJ_HOME" ]; then + echo "Environment variable TIDORBJ_HOME must be set" + exit 1 +fi + +#export JVM=$JAVA_HOME/bin/java +#$JVM -classpath .;$TIDORBJ_HOME/lib/tidorbj.jar EchoServer + +#export JVM= + +$TIDORBJ_HOME/bin/tidorbj.sh \ + -Dorg.omg.CORBA.ORBClass=es.tid.TIDorbj.core.TIDORB \ + -Dorg.omg.CORBA.ORBSingletonClass=es.tid.TIDorbj.core.SingletonORB \ + EchoServer \ + es.tid.TIDorbj.trace.file server.log \ + es.tid.TIDorbj.trace.level 5 \ + es.tid.TIDorbj.iiop.orb_port 1968 \ + es.tid.TIDorbj.iiop.ipv6 true +# es.tid.TIDorbj.iiop.address fe80::221:70ff:fea2:63b4 diff --git a/tools/es/tid/TIDorbj/tools/PrintIOR.java b/tools/es/tid/TIDorbj/tools/PrintIOR.java new file mode 100644 index 0000000..9708b1c --- /dev/null +++ b/tools/es/tid/TIDorbj/tools/PrintIOR.java @@ -0,0 +1,272 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telef�nica Investigaci�n y Desarrollo +* S.A.Unipersonal (Telef�nica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.tools; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import java.io.StringWriter; +import java.io.PrintWriter; + +import es.tid.TIDorbj.core.iop.DefaultIOR; +import es.tid.TIDorbj.core.iop.IOR; + +import org.omg.IOP.TAG_INTERNET_IOP; +import es.tid.TIDorbj.core.iop.TaggedProfile; +import es.tid.TIDorbj.core.comm.iiop.IIOPProfile; + +public class PrintIOR +{ + + public static String get_repository_id(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + print_buffer.println(ior.getTypeId()); + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String get_giop_version(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getVersion().toString()); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String get_host(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getListenPoint().m_host); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + + public static String get_port(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getListenPoint().m_port); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + + public static String get_object_key(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + for (int i = 0; i < size; i++) { + TaggedProfile profile = ior.getProfile(i); + if (profile.tag == TAG_INTERNET_IOP.value) { + IIOPProfile iiop_profile = (IIOPProfile) profile; + print_buffer.println(iiop_profile.getObjectKey().toString()); + break; + } + } + + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static String print(String ior_str) + { + StringWriter buffer = new StringWriter(); + PrintWriter print_buffer = new PrintWriter(buffer); + + try { + IOR ior = null; + + ior = DefaultIOR.fromString(null, ior_str); + + int size = ior.memberCount(); + + if (size == 0) { + print_buffer.println("IOR: nil"); + } else { + print_buffer.println("IOR:"); + + print_buffer.println("Repository Id: " + ior.getTypeId()); + + print_buffer.println("(" + size + " Profiles)"); + + for (int i = 0; i < size; i++) + print_buffer.println(ior.getProfile(i).toString()); + } + + //System.out.flush(); + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + + return buffer.toString(); + } + + public static void main(String[] argv) + { + System.out.println("TIDorbJ printIOR version " + + es.tid.TIDorbj.core.TIDORB.st_version); + + if ((argv == null) || (argv.length != 1)) { + + System.out.println("Usage: printIOR [ior|file]"); + return; + } + + String ior_str = null; + + try { // try to read in a file + FileReader file = new FileReader(argv[0]); + BufferedReader reader = new BufferedReader(file); + + ior_str = reader.readLine(); + file.close(); + } + catch (java.io.FileNotFoundException ioe) { + // Argument is the IOR, not a file + } + catch (IOException ioe) { + ioe.printStackTrace(); + return; + } + + try { + String ior_text = null; + if (ior_str == null) + ior_text = es.tid.TIDorbj.tools.PrintIOR.print(argv[0]); + else + ior_text = es.tid.TIDorbj.tools.PrintIOR.print(ior_str); + + System.out.print(ior_text); + System.out.flush(); + } + catch (Throwable th) { + System.out.println("Invalid IOR"); + } + } +} diff --git a/tools/properties.xml b/tools/properties.xml new file mode 100644 index 0000000..7bee96f --- /dev/null +++ b/tools/properties.xml @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/util/.class/es/tid/TIDorbj/util/AlreadyActivatedException.class b/util/.class/es/tid/TIDorbj/util/AlreadyActivatedException.class new file mode 100644 index 0000000000000000000000000000000000000000..f17732a0a4b82d1dcbb54ac6cadfa3a01fecaa13 GIT binary patch literal 163 zcmX^0Z`VEs1_mPrE-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2Hn(R{gTWS{SZ%={Gy~R{nC=m9DT=}qSVBcO2_1q%(BFi)D+i>GD)Rwvgn6YP=m<6Qhz}IN)?6PH+J|?@#6T-nYs6#bMO7@?Vm>g7Vv2t z0ypAF;A4)Q0Xq%_`8dXLQ<5_>nw4;CgrLANC+T?u3kDWBiX2M}M%XL6yWV_>Ay%(2 z=&OF$4?km2a`q;JTIsbsVq0D_3NGco+;$(kg~08$3+rLu@3vR$dYNH#J#?Gj+;?|2 z+(tkd@z0+$y`9kSb$1!2FUYEwtM(>o;wW)UPz$g7u0_3U|G$f@LOIn7Um0yLyyv(5 zkQC>tHu;durW-sWDQd1_SBY6|29Y-tlbAAb8+RBcPu-jdX0WQ=$8O-avIB?N!0Wcd zj?7y&aS16CpJ2trb$n>z3bH1W(t$XwHOP|*s|=UlRqJ?9TpFbR&<(OwUuv_~dfBsd zOPaXFaMjx_gnp~AQN7peH?|9pLO&=B79}^*JlE~3#oK_qeIPbkAi1_K7`EBblBr?IhtR<3O_@sawTvvR1zROmDQTIKZt0f#95-%Sx)8ILwx_Y;0gTRRxb?%v zp3Z(g{)eqexr2_E5j!TmoFmPVVI1!>My~#aeNMy`T%`nQdx}I!+eTi=A01#sikHsm z0)}6FPcjYS*0oIMP+L4RK55-xX_T9>w_6 zVr`F;;=f-Z;mq#CJe}0E)I9}5iXN(tWG|7FYxrO|vDu;6=@d0M`f0d7*cSC|AhYBZ6GP z&?P}ivY55twF;Tqq9r&z7CJX?-ZEo(voIT*v`e|d>Xwfg6iuJ1}G6nYVKbc`H!7 z7Kl3;k9%o=2EBBE4hq`4l^`=`mduQ8l>)iKW;Q|lta8lGWn)w0r;4SS`PibJ%g5@| zb;g)^sppBAc`IW(Qy+7Hw^W1ENoVF-y{(!Aa2vtbj1FOqb}@-AMoT60jx(vybdox8 zE1Ddssf~6}God1^2J*q)xy|;&#t^ZmA_g-B_rUVuDI9P3F^O-nAaYYHf@|C2CP`dC z5+mU?EidPW@L2eYw2DynuBzuU3LN(Oz+SkHwDB1%mc6C%-;yY>x8)~1Ao~@|M z@zi#owj!6Xr(DJEpDS|t^Ov^a=H?aEiBO%0UshOqB?Nvxxe`xR=}SXV?$glr>~E^L zS%in{z2I4;w4tc?Y4UB3|9`_T3RIN!it4I9|Kka{(p`^9`36(PRRTLndqzI70o61~ z?LtzA5Saf{S{ivuslQ3b@ZX_*P!Q^fU!j%<&(Fd?kSa0xrYEGOcgn}4{|uM=Tx4xH z(ynCVJba(rm4=P##$S=O_UuTz%xiNAr32G(SCob-HFn@lwTdDPWmO+k<*H{;b0wsq zBy?B8ZMY-Quf@=z-F41Unl8k*1S$FLdXq#Qyxiyx{MH1Qs<_gcb`(a&(U)~WLF@+hK~xrl)AEX z8(%DRr%&2=^a1T?<0}tI$2$9{jm-z-YvbjI)QEMK+pfabUGojpeBD`&JH7}Mt@rU3Jo&cNq0?7Ok z=;MpvPM!q)JO%FJ6lm}zu!S#!yZK{q52wLaz5-$z;9i~q+c^Vva29-rEpQ)S0|Pt@ zcJds!pL5^=o(B)|b?^}9!NYt5Ji-Mq$VD*33t*UUf)Or(U0eo_vJFOg5sdLIu$ym# zJ-h_=@*S{`m%%u9gU7fBOmHvQ&wb!=j)Mby3>@SHc!K-EAwCWc^8h%)5%46(Qr}ZU I{U1#K0HgwC};Alu?(?_#a$5;PF{ebG)^Rt2 zcH9s#BjODaZ;Dr1#H@(7bj-;)FClNsZ9&AMjwK!MCsb^Mghf!^{D7%=rO`Q?USGGUk7d5HSx}I_DvYTb0$vtWpZ1)v~u2^#NDBQj|1#P^TWAWCs zYi94K%#B%d#j(6z-{mM3A`{zLYs0mRg|b2*>lDlM_QxbNuYy!eH!}#T_x#JLArKV#&UL`5bbKHL{X4v7?Sm z(0N=zE;X3598300fQw{Iwq%*EHEnIxdeph-8B<7m`j`ZZLW`iaO>&b*hGUl9R553- z+E$J)y_bK04xg-^H=hv1JIN96Bu%`NOz}>V#XHFtobqQz)CIODXHMomMQfO*#^56%h30@+_>+dWnmBP3srQ`6se$7JSsR{L01)L z(mR-FxDHj&J>O9NE3VtKuBF@b^J}jxU;BwnBT1)MMOS zIW$h6{4CX)R(II6uRT(O!WrZsd1dbh)}0C_&<(|dH-oxf4ztE_z6EZ$8{b0J|A*G-UA8A Ye?QpAcul9;umlcxoaK0z54{@v2~(!6kN^Mx literal 0 HcmV?d00001 diff --git a/util/.class/es/tid/TIDorbj/util/InvalidTraceLevelException.class b/util/.class/es/tid/TIDorbj/util/InvalidTraceLevelException.class new file mode 100644 index 0000000000000000000000000000000000000000..433a1706e4801014f35120c4e019d0b9ecd4ff32 GIT binary patch literal 164 zcmX^0Z`VEs1_mPrE-nUU26lD^4t54kMg}&U%)HDJJ4Oa(4b3n{1{UZ1lvExD76w*E z2EEi`{gTWS{SZ%={Gy~R{nC=m9DUEcvc#Osl#rstcisaOSlFa-(Mh4-m u#Ii*FoW#6zeYhxtA_Ei9J`i98LZHDwk`2fc1oIgfShcn@Fm41ZU;qGtYa~O{WulmP@aVxG zW!x1ckPr@?*|(i}vv0qDK0W~)pcFy?8$qbZaka^iXDBcfRcxu)76=S(UFjJ5Kp=C` z(;s!sw6w-Z+9TQg>mLgEkIbPdj|Fm-<&ym?0p--{8Unt%{>Z%-@K(4PZA!iKaH-oZ zz1^q3q4VdCVN25*x+-=^-RWB{yPh0V5-XKD+kBOq6K0jTPMrwCh(!=YD1tSv(pYE6 zFk}VFhO0@ltF`K9mecNOBWd;*9&zpHwrw~9>19t8Nd33#joE}K(e47YO92l@Q{|^R zj0j}9 zUuxz}(jDyeSHQ>!dx4}x6+)Qn#(k|LdnTV Ra+Il7D30M@uqWoS@e9tEYD)kB literal 0 HcmV?d00001 diff --git a/util/.class/es/tid/TIDorbj/util/SystemProperties.class b/util/.class/es/tid/TIDorbj/util/SystemProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..5483dcdcab870067b3e252f73e299b78980c1b3e GIT binary patch literal 1078 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 ZukH3L?seUM)!os(AM?e2_}KgD?+uIC5O4qh literal 0 HcmV?d00001 diff --git a/util/.class/es/tid/TIDorbj/util/TranslateURLEscapes.class b/util/.class/es/tid/TIDorbj/util/TranslateURLEscapes.class new file mode 100644 index 0000000000000000000000000000000000000000..0e7691a8cede6f11593e369dc3843d30b3212994 GIT binary patch literal 2075 zcmZ`)OLN;)6#lL)OR}pZj#4MkBtU4B$ghYxZGh&{hf}Dj)6gb?1_F(2tBz8S?Xi_k z*}#Thz>)h9AHJ7#92!77SC&x$;9cw#S;Qd(XY!Ip6utx$-anKKmI! z0*?YX4?Td_@rI0x0kSMgxD=B4b&`ii}kmYcj6NxW>)b z`EY{|$pF@IQ^q?1yo*~Lmy+?GjN3BOGB#w~k+I36zRwTbm2gkO7K6BA6)k&>!K;No zU=Wg}oXHRAm|qU}niz(*Y$N+rJBikzI+bx}T?xovO1>FQUGlyo@CWTy6qZAC1Rm_=B zHi=NEU!_tE{_0VtAu_|bmP+-lo@kWIW--SQ@8_kb-c7BSdDQ+6WxLd(cvkBha=cHZ zRG0{h1+$p951g*#%j|(sxlY*&6e`(xk$KG3B1s2~tZh~pMyzVuv}w9oS-0|*gGz>} z6-M3TsiJM>`QbBm>6ZDVMRQ6^_VRQSmCHt@Y7!PRbdS!{Z3aYY8fsA*=V&!bZ|WoX zA}3%!@_qO*53RZVCj@xOR*Rg%vk_ChH3%z{o^O$O4&Uwx#F%%o2B`*F_0tfW42t_T z1ZY~r8GfF2m6hZAZ!vYK1-;k<9d@8n7jmeH{5__Q3`Pd~AV=EBABZ_an8sm%+tLlb#NeBs%8pfXDZX_hsaCR*=T|>z89kl6FjDL-p zW&%+Pu1?TE=9lP2DW{Jy-my!#m$~&zfgRVskGgy!5b8w2M}!&=FG3xw9Tr9w^>1S4 zN36~Dk7hl7ijcUZc%vA-ik@?H@pUQcZ|kCx;DeBKh|1WF9Cnc;_#os|A7rqNbaQuV z;perWN;tKMxAJ2Xlpn9fUpzljuMumpr(+t;CUoUD?Xc$E_G?TfGJ~+MI6S+tQ=M4i zJP7-0AM9i&mV_UqPlI#!{W#aw=M=BG5(Oc@fFsc*k^gwZ(&xC@uwOJqx*xd{=lv(} zj-@-9iiZSYKP2!FQaTz8o?>RTDP7#lTbW0}2H?uKtGOTuyeB<}JE!BYqQ PGgGYq8mJ}z!EN9_A!Ni* literal 0 HcmV?d00001 diff --git a/util/.class/es/tid/TIDorbj/util/UTC.class b/util/.class/es/tid/TIDorbj/util/UTC.class new file mode 100644 index 0000000000000000000000000000000000000000..6eb7402c5ad78fe6f187fc95b3b998c58991e658 GIT binary patch literal 425 zcmZvY!AiqG5QhIv+NMp@n$~EoqTtEaOTe=T5=&`812xT6(l*G3WCO`o@L7BY51tec zK7bD;PMeAd&S7Wf|G(Xx-OsQ04*+L4&{2h@V+Xrspnh0+@<7EZPD~9Q4SNi&;bbs$ zC!@=oJ7?;-{$Rqu#taQ76}b$A^n-XAGE~mF;PQe&?e%?zl9Mh-wdTt#3x%A@xyO_6 zn#VEE*9;w@$#f-pMEAyh5}JiD5(Q_#Ktn^O@Q_o>A zqu?R1<3QZo?ko!D@{e@;n9DGsmuzPF9R$bF=nDXbE^5#z*QryWqC_>_PHU5t7G*}c weEJIZLInulg1NCR!dFp!gJMAqp4VNCwzW4zn+S!}%8`XK|M9o~_mjfMHy}+)umAu6 literal 0 HcmV?d00001 diff --git a/util/.cvsignore b/util/.cvsignore new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/util/.cvsignore @@ -0,0 +1 @@ +.class diff --git a/util/.svn/all-wcprops b/util/.svn/all-wcprops new file mode 100644 index 0000000..ce75b5d --- /dev/null +++ b/util/.svn/all-wcprops @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 52 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util +END +properties.xml +K 25 +svn:wc:ra_dav:version-url +V 67 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/properties.xml +END +.cvsignore +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/.cvsignore +END +build.xml +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/build.xml +END diff --git a/util/.svn/dir-prop-base b/util/.svn/dir-prop-base new file mode 100644 index 0000000..b15a857 --- /dev/null +++ b/util/.svn/dir-prop-base @@ -0,0 +1,5 @@ +K 10 +svn:ignore +V 6 +.class +END diff --git a/util/.svn/entries b/util/.svn/entries new file mode 100644 index 0000000..6068932 --- /dev/null +++ b/util/.svn/entries @@ -0,0 +1,133 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/util +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +es +dir + +properties.xml +file + + + + +2009-02-16T09:48:56.000000Z +6f9fbc038554da4852f44644208e6b4b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1675 + +.cvsignore +file + + + + +2009-02-16T09:48:56.000000Z +9139eabf1b8942aaa41f16fe329f2507 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7 + +build.xml +file + + + + +2009-02-16T09:48:56.000000Z +206fe905e1664a5dafc5ac2ec7c73326 +2008-02-25T10:57:48.454081Z +212 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2216 + diff --git a/util/.svn/prop-base/.cvsignore.svn-base b/util/.svn/prop-base/.cvsignore.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/.svn/prop-base/.cvsignore.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/.svn/prop-base/build.xml.svn-base b/util/.svn/prop-base/build.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/.svn/prop-base/build.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/.svn/prop-base/properties.xml.svn-base b/util/.svn/prop-base/properties.xml.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/.svn/prop-base/properties.xml.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/.svn/text-base/.cvsignore.svn-base b/util/.svn/text-base/.cvsignore.svn-base new file mode 100644 index 0000000..9af7884 --- /dev/null +++ b/util/.svn/text-base/.cvsignore.svn-base @@ -0,0 +1 @@ +.class diff --git a/util/.svn/text-base/build.xml.svn-base b/util/.svn/text-base/build.xml.svn-base new file mode 100644 index 0000000..5d192f9 --- /dev/null +++ b/util/.svn/text-base/build.xml.svn-base @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/util/.svn/text-base/properties.xml.svn-base b/util/.svn/text-base/properties.xml.svn-base new file mode 100644 index 0000000..a6647aa --- /dev/null +++ b/util/.svn/text-base/properties.xml.svn-base @@ -0,0 +1,50 @@ + + + + + + + + + \ No newline at end of file diff --git a/util/build.xml b/util/build.xml new file mode 100644 index 0000000..52a1663 --- /dev/null +++ b/util/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/util/es/.svn/all-wcprops b/util/es/.svn/all-wcprops new file mode 100644 index 0000000..385d846 --- /dev/null +++ b/util/es/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util/es +END diff --git a/util/es/.svn/entries b/util/es/.svn/entries new file mode 100644 index 0000000..07b01ad --- /dev/null +++ b/util/es/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/util/es +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +tid +dir + diff --git a/util/es/tid/.svn/all-wcprops b/util/es/tid/.svn/all-wcprops new file mode 100644 index 0000000..327653c --- /dev/null +++ b/util/es/tid/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 59 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util/es/tid +END diff --git a/util/es/tid/.svn/entries b/util/es/tid/.svn/entries new file mode 100644 index 0000000..4437c86 --- /dev/null +++ b/util/es/tid/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/util/es/tid +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +TIDorbj +dir + diff --git a/util/es/tid/TIDorbj/.svn/all-wcprops b/util/es/tid/TIDorbj/.svn/all-wcprops new file mode 100644 index 0000000..a38a09d --- /dev/null +++ b/util/es/tid/TIDorbj/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 67 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj +END diff --git a/util/es/tid/TIDorbj/.svn/entries b/util/es/tid/TIDorbj/.svn/entries new file mode 100644 index 0000000..7780c1c --- /dev/null +++ b/util/es/tid/TIDorbj/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +util +dir + diff --git a/util/es/tid/TIDorbj/util/.svn/all-wcprops b/util/es/tid/TIDorbj/util/.svn/all-wcprops new file mode 100644 index 0000000..9fea694 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/all-wcprops @@ -0,0 +1,89 @@ +K 25 +svn:wc:ra_dav:version-url +V 72 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util +END +Base16Codec.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/Base16Codec.java +END +SystemProperties.java +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/SystemProperties.java +END +Base64Codec.java +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/Base64Codec.java +END +CannotProceedException.java +K 25 +svn:wc:ra_dav:version-url +V 100 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/CannotProceedException.java +END +CircularTraceFile.java +K 25 +svn:wc:ra_dav:version-url +V 95 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/CircularTraceFile.java +END +NotActivatedException.java +K 25 +svn:wc:ra_dav:version-url +V 99 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/NotActivatedException.java +END +TranslateURLEscapes.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/TranslateURLEscapes.java +END +AlreadyActivatedException.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/AlreadyActivatedException.java +END +UTC.java +K 25 +svn:wc:ra_dav:version-url +V 81 +/svn/tidorbj/!svn/ver/453/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/UTC.java +END +InvalidTraceLevelException.java +K 25 +svn:wc:ra_dav:version-url +V 104 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/InvalidTraceLevelException.java +END +NoFileEspecifiedException.java +K 25 +svn:wc:ra_dav:version-url +V 103 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/NoFileEspecifiedException.java +END +OutputStreamWrapper.java +K 25 +svn:wc:ra_dav:version-url +V 97 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/OutputStreamWrapper.java +END +AlreadyDeactivatedException.java +K 25 +svn:wc:ra_dav:version-url +V 105 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/AlreadyDeactivatedException.java +END +Trace.java +K 25 +svn:wc:ra_dav:version-url +V 83 +/svn/tidorbj/!svn/ver/358/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util/Trace.java +END diff --git a/util/es/tid/TIDorbj/util/.svn/entries b/util/es/tid/TIDorbj/util/.svn/entries new file mode 100644 index 0000000..e49cc6c --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/entries @@ -0,0 +1,504 @@ +10 + +dir +454 +https://svn.forge.morfeo-project.org/svn/tidorbj/branches/IPV6/TIDorbJ/util/es/tid/TIDorbj/util +https://svn.forge.morfeo-project.org/svn/tidorbj + + + +2010-04-27T14:52:41.930615Z +453 +avega + + + + + + + + + + + + + + +55a92839-c318-0410-96fd-f7e6f5eacc0e + +Base16Codec.java +file + + + + +2009-02-16T09:48:56.000000Z +2309d544151c21b70b5d440b24963cbe +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +3688 + +SystemProperties.java +file + + + + +2009-02-16T09:48:56.000000Z +abd4addd47afd01f0aa66a5e46f561ff +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2695 + +Base64Codec.java +file + + + + +2009-02-16T09:48:56.000000Z +61bd1663d4ba7fb9f8a2dffc631771e5 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +7646 + +CannotProceedException.java +file + + + + +2009-02-16T09:48:56.000000Z +821ecfd6fe3bb68178df6f6ec82d178a +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1718 + +CircularTraceFile.java +file + + + + +2009-02-16T09:48:56.000000Z +a2287c06d9645a2633b714e3f527311c +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6197 + +NotActivatedException.java +file + + + + +2009-02-16T09:48:56.000000Z +1c4560b2509289aaa34824cc09812f2f +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1626 + +TranslateURLEscapes.java +file + + + + +2009-02-16T09:48:56.000000Z +3285f0a6ee2a532a95a716f990bf8a57 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +6125 + +AlreadyActivatedException.java +file + + + + +2009-02-16T09:48:56.000000Z +c5e5cf599e4438584486765f4eb19e34 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1630 + +UTC.java +file + + + + +2010-04-28T10:48:01.000000Z +b23e2ad8a6eac20580c29b39894a6c48 +2010-04-27T14:52:41.930615Z +453 +avega +has-props + + + + + + + + + + + + + + + + + + + + +2831 + +InvalidTraceLevelException.java +file + + + + +2009-02-16T09:48:56.000000Z +2527325dc8c894df478237e45256eb41 +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1631 + +NoFileEspecifiedException.java +file + + + + +2009-02-16T09:48:56.000000Z +778ef8cef8fbb038dcfcdf0ef64416aa +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1630 + +OutputStreamWrapper.java +file + + + + +2009-02-16T09:48:56.000000Z +258c74aacb9b49eee27c9ad06aa8a98b +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +2775 + +AlreadyDeactivatedException.java +file + + + + +2009-02-16T09:48:56.000000Z +fd59a1e5a0076e4fcec5377eb34d44de +2005-12-19T07:58:21.000000Z +2 +caceres +has-props + + + + + + + + + + + + + + + + + + + + +1632 + +Trace.java +file + + + + +2009-02-16T09:48:56.000000Z +112d419b7788b5b4aad002512d0314fc +2008-02-22T06:46:45.933246Z +211 +avega +has-props + + + + + + + + + + + + + + + + + + + + +20289 + diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyActivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyActivatedException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyActivatedException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyDeactivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyDeactivatedException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/AlreadyDeactivatedException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/Base16Codec.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/Base16Codec.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/Base16Codec.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/Base64Codec.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/Base64Codec.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/Base64Codec.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/CannotProceedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/CannotProceedException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/CannotProceedException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/CircularTraceFile.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/CircularTraceFile.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/CircularTraceFile.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/InvalidTraceLevelException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/InvalidTraceLevelException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/InvalidTraceLevelException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/NoFileEspecifiedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/NoFileEspecifiedException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/NoFileEspecifiedException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/NotActivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/NotActivatedException.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/NotActivatedException.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/OutputStreamWrapper.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/OutputStreamWrapper.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/OutputStreamWrapper.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/SystemProperties.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/SystemProperties.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/SystemProperties.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/Trace.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/Trace.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/Trace.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/TranslateURLEscapes.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/TranslateURLEscapes.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/TranslateURLEscapes.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/prop-base/UTC.java.svn-base b/util/es/tid/TIDorbj/util/.svn/prop-base/UTC.java.svn-base new file mode 100644 index 0000000..7b57b30 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/prop-base/UTC.java.svn-base @@ -0,0 +1,9 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +END diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyActivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyActivatedException.java.svn-base new file mode 100644 index 0000000..b21c5f6 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyActivatedException.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class AlreadyActivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyDeactivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyDeactivatedException.java.svn-base new file mode 100644 index 0000000..37acbcd --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/AlreadyDeactivatedException.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class AlreadyDeactivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/Base16Codec.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/Base16Codec.java.svn-base new file mode 100644 index 0000000..4b12dfa --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/Base16Codec.java.svn-base @@ -0,0 +1,128 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public abstract class Base16Codec +{ + + public static byte[] decode(String str) + throws Exception + { + int str_length = str.length(); + + if ((str_length % 2) != 0) + throw new Exception("Invalid String length"); + + byte[] data = new byte[str_length / 2]; + + decode(str, data, 0); + + return data; + } + + public static void decode(String str, byte[] data, int data_offset) + throws Exception + { + char[] str_chars = str.toCharArray(); + + int final_position = data_offset + (str.length() / 2); + + int j = 0; + + for (int i = data_offset; i < final_position; i++) + data[i] = (byte) (16 * (getValue(str_chars[j++])) + + getValue(str_chars[j++])); + + str_chars = null; + } + + public static String encode(byte[] data) + { + return encode(data, 0, data.length); + } + + public static String encode(byte[] data, int offset, int length) + { + + char[] digits = new char[2 * length]; + int octet = 0; + int j = 0; + + int final_position = offset + length; + + for (int i = offset; i < final_position; i++) { + octet = 0xff & data[i]; + digits[j++] = toBase16[octet >> 4]; + digits[j++] = toBase16[octet & 0xf]; + } + + return new String(digits); + } + + public static final char[] toBase16 = + { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'a', 'b', 'c', 'd', + 'e', 'f' }; + + public static char getDigit(int hex_value) + throws Exception + { + if (hex_value > toBase16.length) + throw new Exception("Invalid hexadecimal value"); + + return toBase16[hex_value]; + } + + public static int getValue(char digit) + throws Exception + { + if ((digit >= '0') && (digit <= '9')) + return digit - '0'; + if ((digit >= 'A') && (digit <= 'F')) + return digit - 'A' + 0xA; + if ((digit >= 'a') && (digit <= 'f')) + return digit - 'a' + 0xA; + //error + throw new Exception("No hexadecimal digit."); + } +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/Base64Codec.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/Base64Codec.java.svn-base new file mode 100644 index 0000000..ab5256c --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/Base64Codec.java.svn-base @@ -0,0 +1,223 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +/** + * BASE64 encoding encodes 3 bytes into 4 characters. + * |11111122|22223333|33444444| Each set of 6 bits is encoded according to the + * toBase64 map. If the number of input bytes is not a multiple of 3, then the + * last group of 4 characters is padded with one or two = signs. Each output + * line is at most 76 characters. + */ + +public class Base64Codec +{ + + private final static int BYTE_GROUP = 3; + + private final static int CHAR_GROUP = 4; + + public static String encode(byte[] data) + { + int char_buff_length = (data.length / BYTE_GROUP) * CHAR_GROUP; + + if ((data.length % BYTE_GROUP) != 0) + char_buff_length += CHAR_GROUP; + + char[] char_buff = new char[char_buff_length]; + + int i = 0; + int remain = data.length; + for (int j = 0; j < data.length; j += BYTE_GROUP) { + + if (remain >= 3) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[((data[j] & 0x03) << 4) + | ((data[j + 1] & 0xF0) >> 4)]; + char_buff[i++] = toBase64[((data[j + 1] & 0x0F) << 2) + | ((data[j + 2] & 0xC0) >> 6)]; + char_buff[i++] = toBase64[data[j + 2] & 0x3F]; + } else if (remain == 1) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[(data[j] & 0x03) << 4]; + char_buff[i++] = '='; + char_buff[i++] = '='; + } else if (remain == 2) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[((data[j] & 0x03) << 4) + | ((data[j + 1] & 0xF0) >> 4)]; + char_buff[i++] = toBase64[(data[j + 1] & 0x0F) << 2]; + char_buff[i++] = '='; + } + remain -= BYTE_GROUP; + } + + return new String(char_buff); + } + + public final static byte[] decode(String str) + throws Exception + { + if ((str.length() % CHAR_GROUP) != 0) + throw new + Exception("Invalid string length, it must be multiple of 4"); + + char[] char_buff = str.toCharArray(); + + int data_chars = char_buff.length; + + while (char_buff[data_chars - 1] == '=') + data_chars--; + + int whites = char_buff.length - data_chars; + + int data_bytes = (data_chars / CHAR_GROUP) * BYTE_GROUP; + + if (whites == 1) + data_bytes += 2; + else if (whites == 2) + data_bytes += 1; + + byte[] data = new byte[data_bytes]; + + int[] group_value = new int[CHAR_GROUP]; + + int i = 0; + + int remain = data_bytes; + + for (int j = 0; j < char_buff.length; j += CHAR_GROUP) { + if (remain >= 3) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + group_value[2] = position(char_buff[j + 2]); + group_value[3] = position(char_buff[j + 3]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + data[i++] = (byte) ((group_value[1] << 4) + | (group_value[2] >> 2)); + data[i++] = (byte) ((group_value[2] << 6) + | group_value[3]); + } else if (remain == 2) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + group_value[2] = position(char_buff[j + 2]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + data[i++] = (byte) ((group_value[1] << 4) + | (group_value[2] >> 2)); + } else if (remain == 1) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + } + + remain -= BYTE_GROUP; + } + + return data; + } + + private final static int position(char value) + throws Exception + { + if ((value >= 'A') && (value <= 'Z')) { + return value - 'A'; + } else if ((value >= 'a') && (value <= 'z')) { + return value - 'a' + 26; + } else if ((value >= '0') && (value <= '9')) { + return value - '0' + 52; + } else if (value == '+') { + return 62; + } else if (value == '/') { + return 63; + } else if (value == '=') { + return -1; + } else + throw new Exception("Invalid character in string"); + } + + private final static char[] toBase64 = + { 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', + 'c', 'd', 'e', 'f', 'g', 'h', 'i', + 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', '+', + '/' }; + + /* + * public static void main(String[] args) { for(int i = 0; i < + * toBase64.length; i++) { System.out.println("Value ("+i +") of " + + * toBase64[i] + " is " + ((int)toBase64[i])); } + * + * try { String str = "Hola cara-cola in the morning"; + * + * System.out.println("Initial " + str); + * + * byte[] data = str.getBytes(); + * + * String encoded = encode(data); + * + * System.out.println("Encoded " + encoded); + * + * byte[] decoded = decode(encoded); + * + * java.io.ByteArrayOutputStream buffer = new + * java.io.ByteArrayOutputStream(); + * + * buffer.write(decoded,0, decoded.length); + * + * String str_2 = buffer.toString(); + * + * System.out.println("Processed " + str_2); } catch (Throwable e) { + * e.printStackTrace(); } } + */ +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/CannotProceedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/CannotProceedException.java.svn-base new file mode 100644 index 0000000..2cc5e4a --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/CannotProceedException.java.svn-base @@ -0,0 +1,54 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class CannotProceedException extends Exception +{ + + public CannotProceedException(String message) + { + super(message); + } + +} + diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/CircularTraceFile.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/CircularTraceFile.java.svn-base new file mode 100644 index 0000000..bf19c2c --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/CircularTraceFile.java.svn-base @@ -0,0 +1,205 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.File; +import java.io.FileWriter; +import java.io.Writer; + +public class CircularTraceFile extends Writer +{ + + /** + * Base name for trace files + */ + private String m_name; + + /** + * Current trace file index + */ + private int m_current = 0; + + /** + * Current file descriptor + */ + private File m_current_file = null; + + /** + * Maximun size, in bytes, for a circular trace file, by default 100 K + */ + private long m_size = 102400; + + /** + * Circular file list size, by default 5 + */ + private int m_list_length = 5; + + /** + * File descriptors for trace + */ + private File[] m_files_list = null; + + /** + * Output writer for trace + */ + private FileWriter m_fw = null; + + public CircularTraceFile(int length, long size, String name) + throws java.io.IOException + { + if (length != 0) //si vale cero -> valor por defecto + m_list_length = length; + if (size != 0) //si vale cero -> valor por defecto + m_size = size; + m_name = name; + m_files_list = new File[m_list_length]; + try { + getInitFile(); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //constructor + + /* implementación de los metodos abstractos del writer */ + public void close() + { + for (int i = 0; i < m_list_length; i++) + m_files_list[i] = null; + } //close + + public void flush() + throws java.io.IOException + { + try { + m_fw.flush(); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //flush + + public void write(char[] cbuf, int off, int len) + { + try { + m_fw.write(cbuf, off, len); + m_fw.flush(); + if (m_current_file.length() >= m_size) + nextFile(); + } + catch (java.io.IOException ioex) {} + } //write + + /* fin implementacion de los metodos abstractos del writer */ + + // devuelve el siguiente fichero de la lista, es decir, sobre el + // que se deben seguir escribiendo las trazas + private void nextFile() + throws java.io.IOException + { + try { + m_fw.close(); + m_current = (m_current + 1) % m_list_length; + + if (m_files_list[m_current] == null) + //primera vez que se usa un fichero de la lista + m_files_list[m_current] = new File(m_name + m_current); + else + //el fichero se reutiliza --> debo vaciarlo (lo borro y lo creo de + // nuevo) + { + ((File) m_files_list[m_current]).delete(); + m_files_list[m_current] = new File(m_name + m_current); + (m_files_list[m_current]).createNewFile(); + } + m_current_file = (File) m_files_list[m_current]; + m_fw = new FileWriter(m_current_file.getPath(), true); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //nextFile + + //elige como fichero a utilizar inicialmente el más antiguo + private void getInitFile() + throws java.io.IOException + { + int i = 0; + File aux; + File selected = new File(m_name + 0); + int use = 0; //indice del vector de ficheros + + try { + while (i < m_list_length) { + aux = new File(m_name + i); + if (aux.exists()) { + m_files_list[i] = aux; + if (aux.lastModified() < selected.lastModified()) { + //selected es mas actual + selected = aux; + use = i; + } + } + i++; + } + m_current = use; + // En _files_list tenemos los nombres de los ficheros que existen + // Si el que vamos a usar no esta en la lista, es porque no existe + if (m_files_list[use] == null) // Lo apuntamos + m_files_list[use] = selected; + else + // El fichero a usar ya existe, lo limpiamos. + { + ((File) m_files_list[m_current]).delete(); + m_files_list[m_current] = new File(m_name + m_current); + (m_files_list[m_current]).createNewFile(); + } + m_current_file = (File) m_files_list[use]; + m_fw = new FileWriter(m_current_file.getPath(), true); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //getInitFile + +} //class CircularTraceFile diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/InvalidTraceLevelException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/InvalidTraceLevelException.java.svn-base new file mode 100644 index 0000000..ff3f487 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/InvalidTraceLevelException.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class InvalidTraceLevelException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/NoFileEspecifiedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/NoFileEspecifiedException.java.svn-base new file mode 100644 index 0000000..81b0bd1 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/NoFileEspecifiedException.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class NoFileEspecifiedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/NotActivatedException.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/NotActivatedException.java.svn-base new file mode 100644 index 0000000..5b35929 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/NotActivatedException.java.svn-base @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class NotActivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/OutputStreamWrapper.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/OutputStreamWrapper.java.svn-base new file mode 100644 index 0000000..12e35e5 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/OutputStreamWrapper.java.svn-base @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +/** + * A OutputStreamWrapper wraps a OutputStream like Sistem.out, + * and does not close the wrapped stream when close() is invoked. This is useful + * when trace streams does not have to close it. + * + * @version 1.0 + * @author Juan A. Caceres + * @since TIDorbJ 1.0.11 + */ + +public class OutputStreamWrapper extends java.io.OutputStream +{ + + private java.io.OutputStream m_stream; + + public OutputStreamWrapper(java.io.OutputStream stream) + { + m_stream = stream; + } + + public void flush() + throws java.io.IOException + { + if (m_stream != null) + m_stream.flush(); + } + + public void close() + throws java.io.IOException + { + // do_nothing + m_stream = null; + } + + public void write(int b) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(b); + } + + public void write(byte buf[]) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(buf); + } + + public void write(byte buf[], int off, int len) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(buf, off, len); + } + +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/SystemProperties.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/SystemProperties.java.svn-base new file mode 100644 index 0000000..f21c134 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/SystemProperties.java.svn-base @@ -0,0 +1,84 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.File; +import java.io.FileInputStream; +import java.util.Properties; + +public class SystemProperties +{ + + public static String findProperty(String prop_key) + { + try { + String str_class = System.getProperty(prop_key); + + if (str_class != null) + return str_class; + + // search in system file properties + + String java_home = System.getProperty("java.home"); + + if (java_home != null) { + + String str_file = java_home + File.separator + "lib" + + File.separator + "orb.properties"; + + FileInputStream file_in = new FileInputStream(str_file); + Properties file_prop = new Properties(); + file_prop.load(file_in); + file_in.close(); + return file_prop.getProperty(prop_key); + } + } + catch (java.io.IOException ioe) {} + catch (SecurityException se) {} + catch (Throwable th) { + throw new org.omg.CORBA.INTERNAL("Unexpected Excepition"); + } + + return null; + } +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/Trace.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/Trace.java.svn-base new file mode 100644 index 0000000..9dabc48 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/Trace.java.svn-base @@ -0,0 +1,699 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.Date; + +public class Trace +{ + + public final static int NONE = 0; + + public final static int ERROR = 1; + + public final static int USER = 2; + + public final static int DEBUG = 3; + + public final static int DEEP_DEBUG = 4; + + public final static int DUMP = 5; + + private final static String[] st_levels = { "NONE ", "ERROR ", "USER ", + "DEBUG ", "DEEP_DEBUG ", "DUMP " }; + + /** + * Trace Log Stream. + */ + private PrintWriter m_log; + + /** + * Aplication Name printed in log messages. + */ + protected String m_application_name; + + /** + * Current trace level. + */ + protected int m_level = NONE; + + /** + * Include the date in log messages. + */ + protected boolean m_include_date = true; + + /** + * Invokes the stream flush each x times. It improves the file output + * performance. + */ + protected int m_do_flush_at = 1; + + /** + * Printed messages counter + */ + protected int m_message_count = 0; + + /** + * Global static Trace instance. + */ + public static Trace global = null; + + /** ****************************************************** */ + private boolean m_activated_trace = true; + + private String m_circular_trace_file_name = ""; + + private CircularTraceFile m_circular_trace_file = null; + + /** ****************************************************** */ + + /** + * Private Constructor. + */ + private Trace(PrintWriter log, String applicationName, int level) + { + m_log = log; + m_level = level; + m_application_name = applicationName; + m_activated_trace = true; + } + + /** + * Creates the trace using the standard error output. + * + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(String applicationName, int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new OutputStreamWriter( + new OutputStreamWrapper(System.err)))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given output stream. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(OutputStream log, String applicationName, + int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new OutputStreamWriter(log))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given writer stream. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(Writer log, String applicationName, + int level) + throws IOException + { + PrintWriter writer = new PrintWriter(new BufferedWriter(log)); + + return new Trace(writer, applicationName, level); + } + + /** + * Creates the trace that will write messages in the given file. + * + * @param fileName + * messages file name. + * @param applicationName + * application name. It may be null. + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(String fileName, String applicationName, + int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new FileWriter(fileName))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given circular trace file. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(CircularTraceFile log, + String applicationName, int level) + throws IOException + { + PrintWriter writer = new PrintWriter(new BufferedWriter(log)); + + return new Trace(writer, applicationName, level); + + } + + /** + * Sets the trace level. If level is 0 traces will be deactivated. + * + * @param level + * new trace level + */ + public void setLevel(int level) + { + m_level = level; + } + public int getLevel() + { + return m_level; + } + + /** + * Activates/deactivates the date inclussion in trace messages. + * + * @param value + * if true include it, otherwise do not. + */ + public void setIncludeDate(boolean value) + { + m_include_date = value; + } + + /** + * Sets each times the stream flush operation is invoked. It improves the + * file output performance. + * + * @param value + * buffer flush round. + */ + public void setDoFlushAt(int value) + { + if (value > 0) + m_do_flush_at = value; + } + + /** + * @return the buffer flush round value. + */ + public int getDoFlushAt() + { + return m_do_flush_at; + } + + /** + * @return the log stream used by the trace instance. + */ + public PrintWriter getLog() + { + return m_log; + } + + /** + * Forces the buffered stream flushing. + */ + public void flush() + { + if (m_log != null) { + m_log.flush(); + } + } + + /** + * Closes the trace log stream. + */ + public synchronized void close() + { + if (m_log != null) { + m_log.println("LOG CLOSED"); + m_log.close(); + m_log = null; + } + } + + /** + * Prints the message if the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + */ + public void print(int level, String message) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + m_log.print(st_levels[level]); + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + m_log.println(message); + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + } + catch (Throwable th) {} + } + } + } + + /** + * Compounds and Prints the message chunks if the trace level is less or + * equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + public void print(int level, String[] message) + { + + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + + for (int i = 0; i < message.length; i++) + m_log.print(message[i]); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + + } + catch (Throwable th) {} + } + } + } + + /** + * Prints the Exception "e" and its backtrace to the _log print writer if + * the trace level is less or equal than current. + * + * @param level + * message trace level + * @param e + * the Exception object with the backtrace to be written. + */ + public void printStackTrace(int level, String msg, Throwable e) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) + if (m_application_name.length() > 0) { + m_log.print(m_application_name); + m_log.print(" "); + } + + m_log.print(msg); + m_log.println(); + + e.printStackTrace(m_log); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + } + catch (Throwable th) {} + } + } + } + + /** + * Compounds and Prints the message chunks if the trace level is less or + * equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + public void printStackTrace(int level, String[] message, Throwable ex) + { + if (m_log == null) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + + for (int i = 0; i < message.length; i++) + m_log.print(message[i]); + + m_log.println(); + + ex.printStackTrace(m_log); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + + } + catch (Throwable th) {} + } + } + } + + public static void printStackTrace_st(int level, String[] msg, Throwable e) + { + if (global != null) + global.printStackTrace(level, msg, e); + } + + public static void printStackTrace_st(int level, String msg, Throwable e) + { + if (global != null) + global.printStackTrace(level, msg, e); + } + + /** + * Prints the messages in the global trace instance if the trace level is + * less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + */ + + public static void print_st(int level, String message) + { + if (global != null) + global.print(level, message); + } + + /** + * Compounds and Prints the message chunks in the global trace instance if + * the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + + public static void print_st(int level, String[] message) + { + if (global != null) + global.print(level, message); + } + + /** ********************************************************************* */ + /** **************** METODOS PARA GESTION REMOTA *********************** */ + /** ********************************************************************* */ + + public void setTraceFile(String name) + throws CannotProceedException + { + if (!m_circular_trace_file_name.equals("")) + throw new CannotProceedException( + "The Circular Trace File nas already been stablished"); + else { + m_circular_trace_file_name = name; + try { + m_circular_trace_file = new CircularTraceFile(0, 0, name); + //init circular trace files with default values (0,0) + } + catch (java.io.IOException ioex) { + throw new + CannotProceedException("Cannot crate circular trace file"); + } + PrintWriter writer = + new PrintWriter( + new BufferedWriter(m_circular_trace_file)); + m_log = writer; + } + } //set_trace_file + + public String getTraceFile() + throws NoFileEspecifiedException + { + if (m_circular_trace_file_name.equals("")) + throw new NoFileEspecifiedException(); + else + return m_circular_trace_file_name; + } + + public void activateTrace() + throws AlreadyActivatedException + { + if (m_activated_trace) + throw new AlreadyActivatedException(); + else + m_activated_trace = true; + } //activate_trace + + public void deactivateTrace() + throws AlreadyDeactivatedException + { + if (!m_activated_trace) + throw new AlreadyDeactivatedException(); + else + m_activated_trace = false; + return; + }//deactivate_trace + + public void setTraceLevel(int tr_l) + throws NotActivatedException, + InvalidTraceLevelException + { + if ((tr_l < NONE) || (tr_l > DEEP_DEBUG)) + throw new InvalidTraceLevelException(); + + if (!m_activated_trace) + throw new NotActivatedException(); + + m_level = tr_l; + return; + } //set_trace_level + + /** ********************************************************************* */ + /** ************** FIN METODOS GESTION REMOTA *************************** */ + /** ********************************************************************* */ + + /** + * Prints dump of a GIOP message if the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + * @param length + * the trace length message to be written. + */ + public void dump(int level, byte[] message, int length) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + + char line[] = new char[17]; + int position = 0; + + for(int i = 0; i < length; i++) { + + if ( ((i % 8) == 0) && (i > 0) ) + m_log.print(" "); + + if ( ((i % 16) == 0) && (i > 0) ){ + line[16] = '\0'; + m_log.print(" "); + for (int j = 0; j < 16; j++) + m_log.print(line[j]); + m_log.print('\n'); + position = 0; + } + + // Fix bug [#399] Compilation error with JDK 1.4 + //m_log.print(String.format("%02X", message[i]) + " "); + String hex = Integer.toHexString(message[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + m_log.print("0" + hex); + break; + case 2: + m_log.print(hex); + break; + default: + m_log.print(hex.substring(hlength-2, hlength)); + } + m_log.print(" "); + + if ( (message[i] >= 32) && (message[i] <= 126) ) // Is in ascii char set? + line[position] = (char)message[i]; + else + line[position] = '.'; + + position++; + } + + line[position] = '\0'; + + int blank_fill_length = 49 - (position*3) + (position > 8 ? 2 : 3); + for (int k = 1; k < blank_fill_length; k++) + m_log.print(" "); + for (int j = 0; j < position; j++) + m_log.print(line[j]); + + m_log.print('\n'); + + } + catch (Throwable th) {} + } + } + } + + + +} //Trace diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/TranslateURLEscapes.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/TranslateURLEscapes.java.svn-base new file mode 100644 index 0000000..130ae64 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/TranslateURLEscapes.java.svn-base @@ -0,0 +1,164 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class TranslateURLEscapes +{ + public static String putEscapes(String name) + { + int position; + String cnescapes = translateEscapes(name); + position = cnescapes.indexOf("%5c%5c"); + while (position != -1) // Change \ + { + cnescapes = cnescapes.substring(0, position) + "\\\\" + + cnescapes.substring(position + 6); + position = cnescapes.indexOf("%5c%5c", position); + } + position = cnescapes.indexOf("%5c/"); + while (position != -1) // Change / + { + cnescapes = cnescapes.substring(0, position) + "\\<" + + cnescapes.substring(position + 4); + position = cnescapes.indexOf("%5c/", position); + } + position = cnescapes.indexOf("%5c."); + while (position != -1) // Change . + { + cnescapes = cnescapes.substring(0, position) + "\\>" + + cnescapes.substring(position + 4); + position = cnescapes.indexOf("%5c.", position); + } + return cnescapes; + } + + public static String translateEscapes(String str) + { + String strescapes = ""; + String no_escapes = ";/:?@&=+$,-_.!~*'()"; + char c; + for (int i = 0; i < str.length(); i++) { + c = str.charAt(i); + if (no_escapes.indexOf(c) == -1 && !Character.isLetterOrDigit(c)) + strescapes = strescapes + "%" + Integer.toHexString((int) c); + else + strescapes = strescapes + c; + } + return strescapes; + } + + public static String resolveEscapes(String str) + { + int position; + String strescapes = str; + position = strescapes.indexOf("\\\\"); // Resolve \ + while (position != -1) { + strescapes = strescapes.substring(0, position) + "%5c" + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\\\", position); + } + position = strescapes.indexOf("\\<"); // Resolve / + while (position != -1) { + strescapes = strescapes.substring(0, position) + "/" + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\<", position); + } + position = strescapes.indexOf("\\>"); // Resolve . + while (position != -1) { + strescapes = strescapes.substring(0, position) + "." + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\>", position); + } + return strescapes; + } + + public static String stringfy(String str) + { + int position; + String stringfied = str; + String hex; + int nunicode; + position = stringfied.indexOf("\\"); // Reading \ + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\\\" + + stringfied.substring(position + 1); + position = stringfied.indexOf("\\", position + 2); + } + position = stringfied.indexOf("."); // Reading . + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\." + + stringfied.substring(position + 1); + position = stringfied.indexOf(".", position + 2); + } + position = stringfied.indexOf("/"); // Reading / + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\/" + + stringfied.substring(position + 1); + position = stringfied.indexOf("/", position + 2); + } + position = stringfied.indexOf("%5c"); // Reading \ hex + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\\\" + + stringfied.substring(position + 3); + position = stringfied.indexOf("%5c", position); + } + return translateUnicode(stringfied); + } + + public static String translateUnicode(String str) + { + String hex; + int nunicode; + String unicode = str; + int position = unicode.indexOf("%"); // Reading %hexhex + while (position != -1) { + hex = unicode.substring(position + 1, position + 3); + nunicode = Integer.parseInt(hex, 16); + unicode = unicode.substring(0, position) + (char) nunicode + + unicode.substring(position + 3); + position = unicode.indexOf("%", position); + } + return unicode; + } + +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/.svn/text-base/UTC.java.svn-base b/util/es/tid/TIDorbj/util/.svn/text-base/UTC.java.svn-base new file mode 100644 index 0000000..bc8d6b7 --- /dev/null +++ b/util/es/tid/TIDorbj/util/.svn/text-base/UTC.java.svn-base @@ -0,0 +1,96 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision$ +* Date: $Date$ +* Last modified by: $Author$ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.util; + +import java.util.TimeZone; + +/** + * Utility class to convert time to UTC using Gregorian Calendar. + * Gregorian calendar base time is 15th October 1582 00:00. + * Java System time takes as base time 1th January 1970. + * This class also has operations to convert types of the TimeBase module . + * + * @author caceres + * + */ + +public class UTC +{ + /** + * 1/1/1970 00:00 time in Gregorian Calendar + */ + public final static long GREGORIAN_CUTOVER = 12219292800000L; + + + /** + * Gets the current time in millisecons from 15th October 1582 00:00 + * @return the value in millisecons + */ + public static long currentUtcTimeMillis() + { + return System.currentTimeMillis() + + GREGORIAN_CUTOVER; // current time is form 1th Jan 1973 0:0 + } + + /** + * Converts milliseconds to TimeBase::TimeT units (1 = 100 ns.) + * @param timeInMillis + * @return + */ + public static long toTimeT(long timeInMilliseconds) + { + return timeInMilliseconds * 10000; + } + + /** + * Converts TimeBase::TimeT units (1 = 100 ns.) to milliseconds + * @param timeInMillis + * @return + */ + public static long toTimeInMillis(long timeT) + { + return timeT / 10000; + } + +} diff --git a/util/es/tid/TIDorbj/util/AlreadyActivatedException.java b/util/es/tid/TIDorbj/util/AlreadyActivatedException.java new file mode 100644 index 0000000..f7d65d5 --- /dev/null +++ b/util/es/tid/TIDorbj/util/AlreadyActivatedException.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class AlreadyActivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/AlreadyDeactivatedException.java b/util/es/tid/TIDorbj/util/AlreadyDeactivatedException.java new file mode 100644 index 0000000..acd10b4 --- /dev/null +++ b/util/es/tid/TIDorbj/util/AlreadyDeactivatedException.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class AlreadyDeactivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/Base16Codec.java b/util/es/tid/TIDorbj/util/Base16Codec.java new file mode 100644 index 0000000..10afa1b --- /dev/null +++ b/util/es/tid/TIDorbj/util/Base16Codec.java @@ -0,0 +1,128 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public abstract class Base16Codec +{ + + public static byte[] decode(String str) + throws Exception + { + int str_length = str.length(); + + if ((str_length % 2) != 0) + throw new Exception("Invalid String length"); + + byte[] data = new byte[str_length / 2]; + + decode(str, data, 0); + + return data; + } + + public static void decode(String str, byte[] data, int data_offset) + throws Exception + { + char[] str_chars = str.toCharArray(); + + int final_position = data_offset + (str.length() / 2); + + int j = 0; + + for (int i = data_offset; i < final_position; i++) + data[i] = (byte) (16 * (getValue(str_chars[j++])) + + getValue(str_chars[j++])); + + str_chars = null; + } + + public static String encode(byte[] data) + { + return encode(data, 0, data.length); + } + + public static String encode(byte[] data, int offset, int length) + { + + char[] digits = new char[2 * length]; + int octet = 0; + int j = 0; + + int final_position = offset + length; + + for (int i = offset; i < final_position; i++) { + octet = 0xff & data[i]; + digits[j++] = toBase16[octet >> 4]; + digits[j++] = toBase16[octet & 0xf]; + } + + return new String(digits); + } + + public static final char[] toBase16 = + { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'a', 'b', 'c', 'd', + 'e', 'f' }; + + public static char getDigit(int hex_value) + throws Exception + { + if (hex_value > toBase16.length) + throw new Exception("Invalid hexadecimal value"); + + return toBase16[hex_value]; + } + + public static int getValue(char digit) + throws Exception + { + if ((digit >= '0') && (digit <= '9')) + return digit - '0'; + if ((digit >= 'A') && (digit <= 'F')) + return digit - 'A' + 0xA; + if ((digit >= 'a') && (digit <= 'f')) + return digit - 'a' + 0xA; + //error + throw new Exception("No hexadecimal digit."); + } +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/Base64Codec.java b/util/es/tid/TIDorbj/util/Base64Codec.java new file mode 100644 index 0000000..4059c9f --- /dev/null +++ b/util/es/tid/TIDorbj/util/Base64Codec.java @@ -0,0 +1,223 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +/** + * BASE64 encoding encodes 3 bytes into 4 characters. + * |11111122|22223333|33444444| Each set of 6 bits is encoded according to the + * toBase64 map. If the number of input bytes is not a multiple of 3, then the + * last group of 4 characters is padded with one or two = signs. Each output + * line is at most 76 characters. + */ + +public class Base64Codec +{ + + private final static int BYTE_GROUP = 3; + + private final static int CHAR_GROUP = 4; + + public static String encode(byte[] data) + { + int char_buff_length = (data.length / BYTE_GROUP) * CHAR_GROUP; + + if ((data.length % BYTE_GROUP) != 0) + char_buff_length += CHAR_GROUP; + + char[] char_buff = new char[char_buff_length]; + + int i = 0; + int remain = data.length; + for (int j = 0; j < data.length; j += BYTE_GROUP) { + + if (remain >= 3) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[((data[j] & 0x03) << 4) + | ((data[j + 1] & 0xF0) >> 4)]; + char_buff[i++] = toBase64[((data[j + 1] & 0x0F) << 2) + | ((data[j + 2] & 0xC0) >> 6)]; + char_buff[i++] = toBase64[data[j + 2] & 0x3F]; + } else if (remain == 1) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[(data[j] & 0x03) << 4]; + char_buff[i++] = '='; + char_buff[i++] = '='; + } else if (remain == 2) { + char_buff[i++] = toBase64[(data[j] & 0xFC) >> 2]; + char_buff[i++] = toBase64[((data[j] & 0x03) << 4) + | ((data[j + 1] & 0xF0) >> 4)]; + char_buff[i++] = toBase64[(data[j + 1] & 0x0F) << 2]; + char_buff[i++] = '='; + } + remain -= BYTE_GROUP; + } + + return new String(char_buff); + } + + public final static byte[] decode(String str) + throws Exception + { + if ((str.length() % CHAR_GROUP) != 0) + throw new + Exception("Invalid string length, it must be multiple of 4"); + + char[] char_buff = str.toCharArray(); + + int data_chars = char_buff.length; + + while (char_buff[data_chars - 1] == '=') + data_chars--; + + int whites = char_buff.length - data_chars; + + int data_bytes = (data_chars / CHAR_GROUP) * BYTE_GROUP; + + if (whites == 1) + data_bytes += 2; + else if (whites == 2) + data_bytes += 1; + + byte[] data = new byte[data_bytes]; + + int[] group_value = new int[CHAR_GROUP]; + + int i = 0; + + int remain = data_bytes; + + for (int j = 0; j < char_buff.length; j += CHAR_GROUP) { + if (remain >= 3) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + group_value[2] = position(char_buff[j + 2]); + group_value[3] = position(char_buff[j + 3]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + data[i++] = (byte) ((group_value[1] << 4) + | (group_value[2] >> 2)); + data[i++] = (byte) ((group_value[2] << 6) + | group_value[3]); + } else if (remain == 2) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + group_value[2] = position(char_buff[j + 2]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + data[i++] = (byte) ((group_value[1] << 4) + | (group_value[2] >> 2)); + } else if (remain == 1) { + group_value[0] = position(char_buff[j]); + group_value[1] = position(char_buff[j + 1]); + + data[i++] = (byte) ((group_value[0] << 2) + | (group_value[1] >> 4)); + } + + remain -= BYTE_GROUP; + } + + return data; + } + + private final static int position(char value) + throws Exception + { + if ((value >= 'A') && (value <= 'Z')) { + return value - 'A'; + } else if ((value >= 'a') && (value <= 'z')) { + return value - 'a' + 26; + } else if ((value >= '0') && (value <= '9')) { + return value - '0' + 52; + } else if (value == '+') { + return 62; + } else if (value == '/') { + return 63; + } else if (value == '=') { + return -1; + } else + throw new Exception("Invalid character in string"); + } + + private final static char[] toBase64 = + { 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', + 'c', 'd', 'e', 'f', 'g', 'h', 'i', + 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', '+', + '/' }; + + /* + * public static void main(String[] args) { for(int i = 0; i < + * toBase64.length; i++) { System.out.println("Value ("+i +") of " + + * toBase64[i] + " is " + ((int)toBase64[i])); } + * + * try { String str = "Hola cara-cola in the morning"; + * + * System.out.println("Initial " + str); + * + * byte[] data = str.getBytes(); + * + * String encoded = encode(data); + * + * System.out.println("Encoded " + encoded); + * + * byte[] decoded = decode(encoded); + * + * java.io.ByteArrayOutputStream buffer = new + * java.io.ByteArrayOutputStream(); + * + * buffer.write(decoded,0, decoded.length); + * + * String str_2 = buffer.toString(); + * + * System.out.println("Processed " + str_2); } catch (Throwable e) { + * e.printStackTrace(); } } + */ +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/CannotProceedException.java b/util/es/tid/TIDorbj/util/CannotProceedException.java new file mode 100644 index 0000000..10b5118 --- /dev/null +++ b/util/es/tid/TIDorbj/util/CannotProceedException.java @@ -0,0 +1,54 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class CannotProceedException extends Exception +{ + + public CannotProceedException(String message) + { + super(message); + } + +} + diff --git a/util/es/tid/TIDorbj/util/CircularTraceFile.java b/util/es/tid/TIDorbj/util/CircularTraceFile.java new file mode 100644 index 0000000..305316e --- /dev/null +++ b/util/es/tid/TIDorbj/util/CircularTraceFile.java @@ -0,0 +1,205 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.File; +import java.io.FileWriter; +import java.io.Writer; + +public class CircularTraceFile extends Writer +{ + + /** + * Base name for trace files + */ + private String m_name; + + /** + * Current trace file index + */ + private int m_current = 0; + + /** + * Current file descriptor + */ + private File m_current_file = null; + + /** + * Maximun size, in bytes, for a circular trace file, by default 100 K + */ + private long m_size = 102400; + + /** + * Circular file list size, by default 5 + */ + private int m_list_length = 5; + + /** + * File descriptors for trace + */ + private File[] m_files_list = null; + + /** + * Output writer for trace + */ + private FileWriter m_fw = null; + + public CircularTraceFile(int length, long size, String name) + throws java.io.IOException + { + if (length != 0) //si vale cero -> valor por defecto + m_list_length = length; + if (size != 0) //si vale cero -> valor por defecto + m_size = size; + m_name = name; + m_files_list = new File[m_list_length]; + try { + getInitFile(); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //constructor + + /* implementación de los metodos abstractos del writer */ + public void close() + { + for (int i = 0; i < m_list_length; i++) + m_files_list[i] = null; + } //close + + public void flush() + throws java.io.IOException + { + try { + m_fw.flush(); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //flush + + public void write(char[] cbuf, int off, int len) + { + try { + m_fw.write(cbuf, off, len); + m_fw.flush(); + if (m_current_file.length() >= m_size) + nextFile(); + } + catch (java.io.IOException ioex) {} + } //write + + /* fin implementacion de los metodos abstractos del writer */ + + // devuelve el siguiente fichero de la lista, es decir, sobre el + // que se deben seguir escribiendo las trazas + private void nextFile() + throws java.io.IOException + { + try { + m_fw.close(); + m_current = (m_current + 1) % m_list_length; + + if (m_files_list[m_current] == null) + //primera vez que se usa un fichero de la lista + m_files_list[m_current] = new File(m_name + m_current); + else + //el fichero se reutiliza --> debo vaciarlo (lo borro y lo creo de + // nuevo) + { + ((File) m_files_list[m_current]).delete(); + m_files_list[m_current] = new File(m_name + m_current); + (m_files_list[m_current]).createNewFile(); + } + m_current_file = (File) m_files_list[m_current]; + m_fw = new FileWriter(m_current_file.getPath(), true); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //nextFile + + //elige como fichero a utilizar inicialmente el más antiguo + private void getInitFile() + throws java.io.IOException + { + int i = 0; + File aux; + File selected = new File(m_name + 0); + int use = 0; //indice del vector de ficheros + + try { + while (i < m_list_length) { + aux = new File(m_name + i); + if (aux.exists()) { + m_files_list[i] = aux; + if (aux.lastModified() < selected.lastModified()) { + //selected es mas actual + selected = aux; + use = i; + } + } + i++; + } + m_current = use; + // En _files_list tenemos los nombres de los ficheros que existen + // Si el que vamos a usar no esta en la lista, es porque no existe + if (m_files_list[use] == null) // Lo apuntamos + m_files_list[use] = selected; + else + // El fichero a usar ya existe, lo limpiamos. + { + ((File) m_files_list[m_current]).delete(); + m_files_list[m_current] = new File(m_name + m_current); + (m_files_list[m_current]).createNewFile(); + } + m_current_file = (File) m_files_list[use]; + m_fw = new FileWriter(m_current_file.getPath(), true); + } + catch (java.io.IOException ioex) { + throw ioex; + } + } //getInitFile + +} //class CircularTraceFile diff --git a/util/es/tid/TIDorbj/util/InvalidTraceLevelException.java b/util/es/tid/TIDorbj/util/InvalidTraceLevelException.java new file mode 100644 index 0000000..ffd986a --- /dev/null +++ b/util/es/tid/TIDorbj/util/InvalidTraceLevelException.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class InvalidTraceLevelException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/NoFileEspecifiedException.java b/util/es/tid/TIDorbj/util/NoFileEspecifiedException.java new file mode 100644 index 0000000..5067406 --- /dev/null +++ b/util/es/tid/TIDorbj/util/NoFileEspecifiedException.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class NoFileEspecifiedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/NotActivatedException.java b/util/es/tid/TIDorbj/util/NotActivatedException.java new file mode 100644 index 0000000..f6df514 --- /dev/null +++ b/util/es/tid/TIDorbj/util/NotActivatedException.java @@ -0,0 +1,46 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class NotActivatedException extends Exception +{} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/OutputStreamWrapper.java b/util/es/tid/TIDorbj/util/OutputStreamWrapper.java new file mode 100644 index 0000000..8c23346 --- /dev/null +++ b/util/es/tid/TIDorbj/util/OutputStreamWrapper.java @@ -0,0 +1,100 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +/** + * A OutputStreamWrapper wraps a OutputStream like Sistem.out, + * and does not close the wrapped stream when close() is invoked. This is useful + * when trace streams does not have to close it. + * + * @version 1.0 + * @author Juan A. Caceres + * @since TIDorbJ 1.0.11 + */ + +public class OutputStreamWrapper extends java.io.OutputStream +{ + + private java.io.OutputStream m_stream; + + public OutputStreamWrapper(java.io.OutputStream stream) + { + m_stream = stream; + } + + public void flush() + throws java.io.IOException + { + if (m_stream != null) + m_stream.flush(); + } + + public void close() + throws java.io.IOException + { + // do_nothing + m_stream = null; + } + + public void write(int b) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(b); + } + + public void write(byte buf[]) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(buf); + } + + public void write(byte buf[], int off, int len) + throws java.io.IOException + { + if (m_stream != null) + m_stream.write(buf, off, len); + } + +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/SystemProperties.java b/util/es/tid/TIDorbj/util/SystemProperties.java new file mode 100644 index 0000000..a4038f7 --- /dev/null +++ b/util/es/tid/TIDorbj/util/SystemProperties.java @@ -0,0 +1,84 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.File; +import java.io.FileInputStream; +import java.util.Properties; + +public class SystemProperties +{ + + public static String findProperty(String prop_key) + { + try { + String str_class = System.getProperty(prop_key); + + if (str_class != null) + return str_class; + + // search in system file properties + + String java_home = System.getProperty("java.home"); + + if (java_home != null) { + + String str_file = java_home + File.separator + "lib" + + File.separator + "orb.properties"; + + FileInputStream file_in = new FileInputStream(str_file); + Properties file_prop = new Properties(); + file_prop.load(file_in); + file_in.close(); + return file_prop.getProperty(prop_key); + } + } + catch (java.io.IOException ioe) {} + catch (SecurityException se) {} + catch (Throwable th) { + throw new org.omg.CORBA.INTERNAL("Unexpected Excepition"); + } + + return null; + } +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/Trace.java b/util/es/tid/TIDorbj/util/Trace.java new file mode 100644 index 0000000..8a6b37a --- /dev/null +++ b/util/es/tid/TIDorbj/util/Trace.java @@ -0,0 +1,699 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 211 $ +* Date: $Date: 2008-02-22 07:46:45 +0100 (Fri, 22 Feb 2008) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.Date; + +public class Trace +{ + + public final static int NONE = 0; + + public final static int ERROR = 1; + + public final static int USER = 2; + + public final static int DEBUG = 3; + + public final static int DEEP_DEBUG = 4; + + public final static int DUMP = 5; + + private final static String[] st_levels = { "NONE ", "ERROR ", "USER ", + "DEBUG ", "DEEP_DEBUG ", "DUMP " }; + + /** + * Trace Log Stream. + */ + private PrintWriter m_log; + + /** + * Aplication Name printed in log messages. + */ + protected String m_application_name; + + /** + * Current trace level. + */ + protected int m_level = NONE; + + /** + * Include the date in log messages. + */ + protected boolean m_include_date = true; + + /** + * Invokes the stream flush each x times. It improves the file output + * performance. + */ + protected int m_do_flush_at = 1; + + /** + * Printed messages counter + */ + protected int m_message_count = 0; + + /** + * Global static Trace instance. + */ + public static Trace global = null; + + /** ****************************************************** */ + private boolean m_activated_trace = true; + + private String m_circular_trace_file_name = ""; + + private CircularTraceFile m_circular_trace_file = null; + + /** ****************************************************** */ + + /** + * Private Constructor. + */ + private Trace(PrintWriter log, String applicationName, int level) + { + m_log = log; + m_level = level; + m_application_name = applicationName; + m_activated_trace = true; + } + + /** + * Creates the trace using the standard error output. + * + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(String applicationName, int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new OutputStreamWriter( + new OutputStreamWrapper(System.err)))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given output stream. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(OutputStream log, String applicationName, + int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new OutputStreamWriter(log))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given writer stream. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(Writer log, String applicationName, + int level) + throws IOException + { + PrintWriter writer = new PrintWriter(new BufferedWriter(log)); + + return new Trace(writer, applicationName, level); + } + + /** + * Creates the trace that will write messages in the given file. + * + * @param fileName + * messages file name. + * @param applicationName + * application name. It may be null. + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(String fileName, String applicationName, + int level) + throws IOException + { + PrintWriter writer = + new PrintWriter( + new BufferedWriter( + new FileWriter(fileName))); + + return new Trace(writer, applicationName, level); + + } + + /** + * Creates the trace using the given circular trace file. + * + * @param log + * the output stream where the messages will be written. + * @param applicationName + * may be null + * @param level + * trace level addopted + * @return a new Trace instance + */ + public static Trace createTrace(CircularTraceFile log, + String applicationName, int level) + throws IOException + { + PrintWriter writer = new PrintWriter(new BufferedWriter(log)); + + return new Trace(writer, applicationName, level); + + } + + /** + * Sets the trace level. If level is 0 traces will be deactivated. + * + * @param level + * new trace level + */ + public void setLevel(int level) + { + m_level = level; + } + public int getLevel() + { + return m_level; + } + + /** + * Activates/deactivates the date inclussion in trace messages. + * + * @param value + * if true include it, otherwise do not. + */ + public void setIncludeDate(boolean value) + { + m_include_date = value; + } + + /** + * Sets each times the stream flush operation is invoked. It improves the + * file output performance. + * + * @param value + * buffer flush round. + */ + public void setDoFlushAt(int value) + { + if (value > 0) + m_do_flush_at = value; + } + + /** + * @return the buffer flush round value. + */ + public int getDoFlushAt() + { + return m_do_flush_at; + } + + /** + * @return the log stream used by the trace instance. + */ + public PrintWriter getLog() + { + return m_log; + } + + /** + * Forces the buffered stream flushing. + */ + public void flush() + { + if (m_log != null) { + m_log.flush(); + } + } + + /** + * Closes the trace log stream. + */ + public synchronized void close() + { + if (m_log != null) { + m_log.println("LOG CLOSED"); + m_log.close(); + m_log = null; + } + } + + /** + * Prints the message if the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + */ + public void print(int level, String message) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + m_log.print(st_levels[level]); + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + m_log.println(message); + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + } + catch (Throwable th) {} + } + } + } + + /** + * Compounds and Prints the message chunks if the trace level is less or + * equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + public void print(int level, String[] message) + { + + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + + for (int i = 0; i < message.length; i++) + m_log.print(message[i]); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + + } + catch (Throwable th) {} + } + } + } + + /** + * Prints the Exception "e" and its backtrace to the _log print writer if + * the trace level is less or equal than current. + * + * @param level + * message trace level + * @param e + * the Exception object with the backtrace to be written. + */ + public void printStackTrace(int level, String msg, Throwable e) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) + if (m_application_name.length() > 0) { + m_log.print(m_application_name); + m_log.print(" "); + } + + m_log.print(msg); + m_log.println(); + + e.printStackTrace(m_log); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + } + catch (Throwable th) {} + } + } + } + + /** + * Compounds and Prints the message chunks if the trace level is less or + * equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + public void printStackTrace(int level, String[] message, Throwable ex) + { + if (m_log == null) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + + m_log.print('['); + m_log.print(m_message_count++); + m_log.print("] "); + + m_log.print(st_levels[level]); + + if (m_include_date) { + m_log.print((new Date()).toString()); + m_log.print(" "); + } + + if (m_application_name != null) { + m_log.print(m_application_name); + m_log.print(" "); + } + + for (int i = 0; i < message.length; i++) + m_log.print(message[i]); + + m_log.println(); + + ex.printStackTrace(m_log); + + m_log.println(); + + if ((m_message_count % m_do_flush_at) == 0) + m_log.flush(); + + } + catch (Throwable th) {} + } + } + } + + public static void printStackTrace_st(int level, String[] msg, Throwable e) + { + if (global != null) + global.printStackTrace(level, msg, e); + } + + public static void printStackTrace_st(int level, String msg, Throwable e) + { + if (global != null) + global.printStackTrace(level, msg, e); + } + + /** + * Prints the messages in the global trace instance if the trace level is + * less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + */ + + public static void print_st(int level, String message) + { + if (global != null) + global.print(level, message); + } + + /** + * Compounds and Prints the message chunks in the global trace instance if + * the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message chunks to be written. + */ + + public static void print_st(int level, String[] message) + { + if (global != null) + global.print(level, message); + } + + /** ********************************************************************* */ + /** **************** METODOS PARA GESTION REMOTA *********************** */ + /** ********************************************************************* */ + + public void setTraceFile(String name) + throws CannotProceedException + { + if (!m_circular_trace_file_name.equals("")) + throw new CannotProceedException( + "The Circular Trace File nas already been stablished"); + else { + m_circular_trace_file_name = name; + try { + m_circular_trace_file = new CircularTraceFile(0, 0, name); + //init circular trace files with default values (0,0) + } + catch (java.io.IOException ioex) { + throw new + CannotProceedException("Cannot crate circular trace file"); + } + PrintWriter writer = + new PrintWriter( + new BufferedWriter(m_circular_trace_file)); + m_log = writer; + } + } //set_trace_file + + public String getTraceFile() + throws NoFileEspecifiedException + { + if (m_circular_trace_file_name.equals("")) + throw new NoFileEspecifiedException(); + else + return m_circular_trace_file_name; + } + + public void activateTrace() + throws AlreadyActivatedException + { + if (m_activated_trace) + throw new AlreadyActivatedException(); + else + m_activated_trace = true; + } //activate_trace + + public void deactivateTrace() + throws AlreadyDeactivatedException + { + if (!m_activated_trace) + throw new AlreadyDeactivatedException(); + else + m_activated_trace = false; + return; + }//deactivate_trace + + public void setTraceLevel(int tr_l) + throws NotActivatedException, + InvalidTraceLevelException + { + if ((tr_l < NONE) || (tr_l > DEEP_DEBUG)) + throw new InvalidTraceLevelException(); + + if (!m_activated_trace) + throw new NotActivatedException(); + + m_level = tr_l; + return; + } //set_trace_level + + /** ********************************************************************* */ + /** ************** FIN METODOS GESTION REMOTA *************************** */ + /** ********************************************************************* */ + + /** + * Prints dump of a GIOP message if the trace level is less or equal than current. + * + * @param level + * message trace level + * @param message + * the trace message to be written. + * @param length + * the trace length message to be written. + */ + public void dump(int level, byte[] message, int length) + { + if ((m_log == null) || (!m_activated_trace)) + return; + + if (level <= m_level) { + synchronized (m_log) { + try { + + char line[] = new char[17]; + int position = 0; + + for(int i = 0; i < length; i++) { + + if ( ((i % 8) == 0) && (i > 0) ) + m_log.print(" "); + + if ( ((i % 16) == 0) && (i > 0) ){ + line[16] = '\0'; + m_log.print(" "); + for (int j = 0; j < 16; j++) + m_log.print(line[j]); + m_log.print('\n'); + position = 0; + } + + // Fix bug [#399] Compilation error with JDK 1.4 + //m_log.print(String.format("%02X", message[i]) + " "); + String hex = Integer.toHexString(message[i]); + int hlength = hex.length(); + switch (hlength) { + case 0: + break; + case 1: + m_log.print("0" + hex); + break; + case 2: + m_log.print(hex); + break; + default: + m_log.print(hex.substring(hlength-2, hlength)); + } + m_log.print(" "); + + if ( (message[i] >= 32) && (message[i] <= 126) ) // Is in ascii char set? + line[position] = (char)message[i]; + else + line[position] = '.'; + + position++; + } + + line[position] = '\0'; + + int blank_fill_length = 49 - (position*3) + (position > 8 ? 2 : 3); + for (int k = 1; k < blank_fill_length; k++) + m_log.print(" "); + for (int j = 0; j < position; j++) + m_log.print(line[j]); + + m_log.print('\n'); + + } + catch (Throwable th) {} + } + } + } + + + +} //Trace diff --git a/util/es/tid/TIDorbj/util/TranslateURLEscapes.java b/util/es/tid/TIDorbj/util/TranslateURLEscapes.java new file mode 100644 index 0000000..7d8f021 --- /dev/null +++ b/util/es/tid/TIDorbj/util/TranslateURLEscapes.java @@ -0,0 +1,164 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 2 $ +* Date: $Date: 2005-12-19 08:58:21 +0100 (Mon, 19 Dec 2005) $ +* Last modified by: $Author: caceres $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ +package es.tid.TIDorbj.util; + +public class TranslateURLEscapes +{ + public static String putEscapes(String name) + { + int position; + String cnescapes = translateEscapes(name); + position = cnescapes.indexOf("%5c%5c"); + while (position != -1) // Change \ + { + cnescapes = cnescapes.substring(0, position) + "\\\\" + + cnescapes.substring(position + 6); + position = cnescapes.indexOf("%5c%5c", position); + } + position = cnescapes.indexOf("%5c/"); + while (position != -1) // Change / + { + cnescapes = cnescapes.substring(0, position) + "\\<" + + cnescapes.substring(position + 4); + position = cnescapes.indexOf("%5c/", position); + } + position = cnescapes.indexOf("%5c."); + while (position != -1) // Change . + { + cnescapes = cnescapes.substring(0, position) + "\\>" + + cnescapes.substring(position + 4); + position = cnescapes.indexOf("%5c.", position); + } + return cnescapes; + } + + public static String translateEscapes(String str) + { + String strescapes = ""; + String no_escapes = ";/:?@&=+$,-_.!~*'()"; + char c; + for (int i = 0; i < str.length(); i++) { + c = str.charAt(i); + if (no_escapes.indexOf(c) == -1 && !Character.isLetterOrDigit(c)) + strescapes = strescapes + "%" + Integer.toHexString((int) c); + else + strescapes = strescapes + c; + } + return strescapes; + } + + public static String resolveEscapes(String str) + { + int position; + String strescapes = str; + position = strescapes.indexOf("\\\\"); // Resolve \ + while (position != -1) { + strescapes = strescapes.substring(0, position) + "%5c" + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\\\", position); + } + position = strescapes.indexOf("\\<"); // Resolve / + while (position != -1) { + strescapes = strescapes.substring(0, position) + "/" + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\<", position); + } + position = strescapes.indexOf("\\>"); // Resolve . + while (position != -1) { + strescapes = strescapes.substring(0, position) + "." + + strescapes.substring(position + 2); + position = strescapes.indexOf("\\>", position); + } + return strescapes; + } + + public static String stringfy(String str) + { + int position; + String stringfied = str; + String hex; + int nunicode; + position = stringfied.indexOf("\\"); // Reading \ + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\\\" + + stringfied.substring(position + 1); + position = stringfied.indexOf("\\", position + 2); + } + position = stringfied.indexOf("."); // Reading . + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\." + + stringfied.substring(position + 1); + position = stringfied.indexOf(".", position + 2); + } + position = stringfied.indexOf("/"); // Reading / + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\/" + + stringfied.substring(position + 1); + position = stringfied.indexOf("/", position + 2); + } + position = stringfied.indexOf("%5c"); // Reading \ hex + while (position != -1) { + stringfied = stringfied.substring(0, position) + "\\\\" + + stringfied.substring(position + 3); + position = stringfied.indexOf("%5c", position); + } + return translateUnicode(stringfied); + } + + public static String translateUnicode(String str) + { + String hex; + int nunicode; + String unicode = str; + int position = unicode.indexOf("%"); // Reading %hexhex + while (position != -1) { + hex = unicode.substring(position + 1, position + 3); + nunicode = Integer.parseInt(hex, 16); + unicode = unicode.substring(0, position) + (char) nunicode + + unicode.substring(position + 3); + position = unicode.indexOf("%", position); + } + return unicode; + } + +} \ No newline at end of file diff --git a/util/es/tid/TIDorbj/util/UTC.java b/util/es/tid/TIDorbj/util/UTC.java new file mode 100644 index 0000000..fa4e5a5 --- /dev/null +++ b/util/es/tid/TIDorbj/util/UTC.java @@ -0,0 +1,96 @@ +/* +* MORFEO Project +* http://www.morfeo-project.org +* +* Component: TIDorbJ +* Programming Language: Java +* +* File: $Source$ +* Version: $Revision: 453 $ +* Date: $Date: 2010-04-27 16:52:41 +0200 (Tue, 27 Apr 2010) $ +* Last modified by: $Author: avega $ +* +* (C) Copyright 2004 Telefónica Investigación y Desarrollo +* S.A.Unipersonal (Telefónica I+D) +* +* Info about members and contributors of the MORFEO project +* is available at: +* +* http://www.morfeo-project.org/TIDorbJ/CREDITS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* If you want to use this software an plan to distribute a +* proprietary application in any way, and you are not licensing and +* distributing your source code under GPL, you probably need to +* purchase a commercial license of the product. More info about +* licensing options is available at: +* +* http://www.morfeo-project.org/TIDorbJ/Licensing +*/ + +package es.tid.TIDorbj.util; + +import java.util.TimeZone; + +/** + * Utility class to convert time to UTC using Gregorian Calendar. + * Gregorian calendar base time is 15th October 1582 00:00. + * Java System time takes as base time 1th January 1970. + * This class also has operations to convert types of the TimeBase module . + * + * @author caceres + * + */ + +public class UTC +{ + /** + * 1/1/1970 00:00 time in Gregorian Calendar + */ + public final static long GREGORIAN_CUTOVER = 12219292800000L; + + + /** + * Gets the current time in millisecons from 15th October 1582 00:00 + * @return the value in millisecons + */ + public static long currentUtcTimeMillis() + { + return System.currentTimeMillis() + + GREGORIAN_CUTOVER; // current time is form 1th Jan 1973 0:0 + } + + /** + * Converts milliseconds to TimeBase::TimeT units (1 = 100 ns.) + * @param timeInMillis + * @return + */ + public static long toTimeT(long timeInMilliseconds) + { + return timeInMilliseconds * 10000; + } + + /** + * Converts TimeBase::TimeT units (1 = 100 ns.) to milliseconds + * @param timeInMillis + * @return + */ + public static long toTimeInMillis(long timeT) + { + return timeT / 10000; + } + +} diff --git a/util/properties.xml b/util/properties.xml new file mode 100644 index 0000000..2d5dbcb --- /dev/null +++ b/util/properties.xml @@ -0,0 +1,50 @@ + + + + + + + + + \ No newline at end of file